diff --git a/shell/android/res/layout/input_mod_fragment.xml b/shell/android/res/layout/input_mod_fragment.xml index 780a600da..d4f417dcf 100644 --- a/shell/android/res/layout/input_mod_fragment.xml +++ b/shell/android/res/layout/input_mod_fragment.xml @@ -54,6 +54,32 @@ android:layout_height="wrap_content" /> + + + + + + + + + + Press any button on the controller %1$s to assign to port This controller is already in use! Enable Custom Key Layout + Enable Compatibility Mode Custom Button Layout Modify Controller diff --git a/shell/android/src/com/reicast/emulator/GL2JNIActivity.java b/shell/android/src/com/reicast/emulator/GL2JNIActivity.java index 03f37c478..c2e1866eb 100644 --- a/shell/android/src/com/reicast/emulator/GL2JNIActivity.java +++ b/shell/android/src/com/reicast/emulator/GL2JNIActivity.java @@ -214,10 +214,14 @@ public class GL2JNIActivity extends Activity { for (int i = 0; i < joys.length; i++) { Integer playerNum = deviceDescriptor_PlayerNum .get(deviceId_deviceDescriptor.get(joys[i])); + + String[] players = getResources().getStringArray(R.array.controllers); + String id = players[i].substring( + players[i].lastIndexOf(" "), players[i].length()); + boolean compat = prefs.getBoolean("controller_compat" + id, false); - if (playerNum != null) { - - if (prefs.getBoolean("modified_key_layout", false)) { + if (playerNum != null && !compat) { + if (prefs.getBoolean("modified_key_layout" + id, false)) { map[playerNum] = setModifiedKeys(playerNum); custom[playerNum] = true; @@ -299,24 +303,19 @@ public class GL2JNIActivity extends Activity { OuyaController.BUTTON_R1, key_CONT_START }; } + } else { + runCompatibilityCheck(i, id); } } } else { - if (prefs.getBoolean("modified_key_layout", false)) { - for (int i = 0; i < 4; i++) { - String[] players = getResources().getStringArray(R.array.controllers); - String id = players[i].substring( - players[i].lastIndexOf(" "), players[i].length()); - name[i] = prefs.getInt("controller" + id, -1); - if (name[i] != -1) { - map[i] = setModifiedKeys(i); - custom[i] = true; - } - - globalLS_X[i] = previousLS_X[i] = 0.0f; - globalLS_Y[i] = previousLS_Y[i] = 0.0f; + for (int i = 0; i < 4; i++) { + String[] players = getResources().getStringArray(R.array.controllers); + String id = players[i].substring( + players[i].lastIndexOf(" "), players[i].length()); + if (prefs.getBoolean("controller_compat" + id, false)) { + runCompatibilityCheck(i, id); } } } @@ -333,7 +332,18 @@ public class GL2JNIActivity extends Activity { Toast.makeText(getApplicationContext(), "Press the back button for a menu", Toast.LENGTH_SHORT).show(); } - + + private void runCompatibilityCheck(int playerNum, String id) { + name[playerNum] = prefs.getInt("controller" + id, -1); + if (name[playerNum] != -1) { + map[playerNum] = setModifiedKeys(playerNum); + custom[playerNum] = true; + } + + globalLS_X[playerNum] = previousLS_X[playerNum] = 0.0f; + globalLS_Y[playerNum] = previousLS_Y[playerNum] = 0.0f; + } + private int[] setModifiedKeys(int player) { String[] players = getResources().getStringArray(R.array.controllers); String id = players[player].substring( diff --git a/shell/android/src/com/reicast/emulator/InputModFragment.java b/shell/android/src/com/reicast/emulator/InputModFragment.java index 384ac65ab..3777de3ab 100644 --- a/shell/android/src/com/reicast/emulator/InputModFragment.java +++ b/shell/android/src/com/reicast/emulator/InputModFragment.java @@ -37,6 +37,7 @@ public class InputModFragment extends Fragment { private Activity parentActivity; private SharedPreferences mPrefs; private Switch switchModifiedLayoutEnabled; + private Switch switchCompatibilityEnabled; private String player; private int sS = 2; @@ -88,16 +89,15 @@ public class InputModFragment extends Fragment { OnCheckedChangeListener modified_layout = new OnCheckedChangeListener() { public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { - if (Build.VERSION.SDK_INT < Build.VERSION_CODES.GINGERBREAD) { - selectController(); - } - mPrefs.edit().putBoolean("modified_key_layout", isChecked) + mPrefs.edit() + .putBoolean("modified_key_layout" + player, isChecked) .commit(); } }; switchModifiedLayoutEnabled = (Switch) getView().findViewById( R.id.switchModifiedLayoutEnabled); - boolean layout = mPrefs.getBoolean("modified_key_layout", false); + boolean layout = mPrefs.getBoolean("modified_key_layout" + player, + false); if (layout) { switchModifiedLayoutEnabled.setChecked(true); } else { @@ -105,251 +105,246 @@ public class InputModFragment extends Fragment { } switchModifiedLayoutEnabled.setOnCheckedChangeListener(modified_layout); - if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.GINGERBREAD) { - - ImageView a_button_icon = (ImageView) getView().findViewById( - R.id.a_button_icon); - a_button_icon.setImageDrawable(getButtonImage(448 / sS, 0)); - final TextView a_button_text = (TextView) getView().findViewById( - R.id.a_button_key); - Button a_button = (Button) getView().findViewById( - R.id.a_button_edit); - a_button.setOnClickListener(new View.OnClickListener() { - public void onClick(View v) { - mapKeyCode("a_button", a_button_text); - } - }); - Button a_remove = (Button) getView().findViewById( - R.id.remove_a_button); - a_remove.setOnClickListener(new View.OnClickListener() { - public void onClick(View v) { - remKeyCode("a_button", a_button_text); - } - }); - - ImageView b_button_icon = (ImageView) getView().findViewById( - R.id.b_button_icon); - b_button_icon.setImageDrawable(getButtonImage(384 / sS, 0)); - final TextView b_button_text = (TextView) getView().findViewById( - R.id.b_button_key); - getKeyCode("b_button", b_button_text); - Button b_button = (Button) getView().findViewById( - R.id.b_button_edit); - b_button.setOnClickListener(new View.OnClickListener() { - public void onClick(View v) { - mapKeyCode("b_button", b_button_text); - } - }); - Button b_remove = (Button) getView().findViewById( - R.id.remove_b_button); - b_remove.setOnClickListener(new View.OnClickListener() { - public void onClick(View v) { - remKeyCode("b_button", b_button_text); - } - }); - - ImageView x_button_icon = (ImageView) getView().findViewById( - R.id.x_button_icon); - x_button_icon.setImageDrawable(getButtonImage(256 / sS, 0)); - final TextView x_button_text = (TextView) getView().findViewById( - R.id.x_button_key); - getKeyCode("x_button", x_button_text); - Button x_button = (Button) getView().findViewById( - R.id.x_button_edit); - x_button.setOnClickListener(new View.OnClickListener() { - public void onClick(View v) { - mapKeyCode("x_button", x_button_text); - } - }); - Button x_remove = (Button) getView().findViewById( - R.id.remove_x_button); - x_remove.setOnClickListener(new View.OnClickListener() { - public void onClick(View v) { - remKeyCode("x_button", x_button_text); - } - }); - - ImageView y_button_icon = (ImageView) getView().findViewById( - R.id.y_button_icon); - y_button_icon.setImageDrawable(getButtonImage(320 / sS, 0)); - final TextView y_button_text = (TextView) getView().findViewById( - R.id.y_button_key); - getKeyCode("y_button", y_button_text); - Button y_button = (Button) getView().findViewById( - R.id.y_button_edit); - y_button.setOnClickListener(new View.OnClickListener() { - public void onClick(View v) { - mapKeyCode("y_button", y_button_text); - } - }); - Button y_remove = (Button) getView().findViewById( - R.id.remove_y_button); - y_remove.setOnClickListener(new View.OnClickListener() { - public void onClick(View v) { - remKeyCode("y_button", y_button_text); - } - }); - - ImageView l_button_icon = (ImageView) getView().findViewById( - R.id.l_button_icon); - l_button_icon.setImageDrawable(getButtonImage(78 / sS, 64 / sS)); - final TextView l_button_text = (TextView) getView().findViewById( - R.id.l_button_key); - getKeyCode("l_button", l_button_text); - Button l_button = (Button) getView().findViewById( - R.id.l_button_edit); - l_button.setOnClickListener(new View.OnClickListener() { - public void onClick(View v) { - mapKeyCode("l_button", l_button_text); - } - }); - Button l_remove = (Button) getView().findViewById( - R.id.remove_l_button); - l_remove.setOnClickListener(new View.OnClickListener() { - public void onClick(View v) { - remKeyCode("l_button", l_button_text); - } - }); - - ImageView r_button_icon = (ImageView) getView().findViewById( - R.id.r_button_icon); - r_button_icon.setImageDrawable(getButtonImage(162 / sS, 64 / sS)); - final TextView r_button_text = (TextView) getView().findViewById( - R.id.r_button_key); - getKeyCode("r_button", r_button_text); - Button r_button = (Button) getView().findViewById( - R.id.r_button_edit); - r_button.setOnClickListener(new View.OnClickListener() { - public void onClick(View v) { - mapKeyCode("r_button", r_button_text); - } - }); - Button r_remove = (Button) getView().findViewById( - R.id.remove_r_button); - r_remove.setOnClickListener(new View.OnClickListener() { - public void onClick(View v) { - remKeyCode("r_button", r_button_text); - } - }); - - 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) { - mapKeyCode("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 - - 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); - dpad_up.setOnClickListener(new View.OnClickListener() { - public void onClick(View v) { - mapKeyCode("dpad_up", dpad_up_text); - } - }); - Button up_remove = (Button) getView().findViewById( - R.id.remove_dpad_up); - up_remove.setOnClickListener(new View.OnClickListener() { - public void onClick(View v) { - remKeyCode("dpad_up", dpad_up_text); - } - }); - - final TextView dpad_down_text = (TextView) getView().findViewById( - R.id.dpad_down_key); - getKeyCode("dpad_down", dpad_down_text); - Button dpad_down = (Button) getView().findViewById( - R.id.dpad_down_edit); - dpad_down.setOnClickListener(new View.OnClickListener() { - public void onClick(View v) { - mapKeyCode("dpad_down", dpad_down_text); - } - }); - Button down_remove = (Button) getView().findViewById( - R.id.remove_dpad_down); - down_remove.setOnClickListener(new View.OnClickListener() { - public void onClick(View v) { - remKeyCode("dpad_down", dpad_down_text); - } - }); - - final TextView dpad_left_text = (TextView) getView().findViewById( - R.id.dpad_left_key); - getKeyCode("dpad_left", dpad_left_text); - Button dpad_left = (Button) getView().findViewById( - R.id.dpad_left_edit); - dpad_left.setOnClickListener(new View.OnClickListener() { - public void onClick(View v) { - mapKeyCode("dpad_left", dpad_left_text); - } - }); - Button left_remove = (Button) getView().findViewById( - R.id.remove_dpad_left); - left_remove.setOnClickListener(new View.OnClickListener() { - public void onClick(View v) { - remKeyCode("dpad_left", dpad_left_text); - } - }); - - final TextView dpad_right_text = (TextView) getView().findViewById( - R.id.dpad_right_key); - getKeyCode("dpad_right", dpad_right_text); - Button dpad_right = (Button) getView().findViewById( - R.id.dpad_right_edit); - dpad_right.setOnClickListener(new View.OnClickListener() { - public void onClick(View v) { - mapKeyCode("dpad_right", dpad_right_text); - } - }); - Button right_remove = (Button) getView().findViewById( - R.id.remove_dpad_right); - right_remove.setOnClickListener(new View.OnClickListener() { - public void onClick(View v) { - remKeyCode("dpad_right", dpad_right_text); - } - }); - - ImageView start_button_icon = (ImageView) getView().findViewById( - R.id.start_button_icon); - start_button_icon.setImageDrawable(getButtonImage(0, 64 / sS)); - final TextView start_button_text = (TextView) getView() - .findViewById(R.id.start_button_key); - getKeyCode("start_button", start_button_text); - Button start_button = (Button) getView().findViewById( - R.id.start_button_edit); - start_button.setOnClickListener(new View.OnClickListener() { - public void onClick(View v) { - mapKeyCode("start_button", start_button_text); - } - }); - Button start_remove = (Button) getView().findViewById( - R.id.remove_start); - start_remove.setOnClickListener(new View.OnClickListener() { - public void onClick(View v) { - remKeyCode("start_button", start_button_text); - } - }); - + OnCheckedChangeListener compat_mode = new OnCheckedChangeListener() { + public void onCheckedChanged(CompoundButton buttonView, + boolean isChecked) { + selectController(); + mPrefs.edit() + .putBoolean("controller_compat" + player, isChecked) + .commit(); + } + }; + switchCompatibilityEnabled = (Switch) getView().findViewById( + R.id.switchCompatibilityEnabled); + boolean compat = mPrefs.getBoolean("controller_compat" + player, false); + if (compat) { + switchCompatibilityEnabled.setChecked(true); } else { - - switchModifiedLayoutEnabled.setEnabled(false); - + switchCompatibilityEnabled.setChecked(false); } + switchCompatibilityEnabled.setOnCheckedChangeListener(compat_mode); + + ImageView a_button_icon = (ImageView) getView().findViewById( + R.id.a_button_icon); + a_button_icon.setImageDrawable(getButtonImage(448 / sS, 0)); + final TextView a_button_text = (TextView) getView().findViewById( + R.id.a_button_key); + Button a_button = (Button) getView().findViewById(R.id.a_button_edit); + a_button.setOnClickListener(new View.OnClickListener() { + public void onClick(View v) { + mapKeyCode("a_button", a_button_text); + } + }); + Button a_remove = (Button) getView().findViewById(R.id.remove_a_button); + a_remove.setOnClickListener(new View.OnClickListener() { + public void onClick(View v) { + remKeyCode("a_button", a_button_text); + } + }); + + ImageView b_button_icon = (ImageView) getView().findViewById( + R.id.b_button_icon); + b_button_icon.setImageDrawable(getButtonImage(384 / sS, 0)); + final TextView b_button_text = (TextView) getView().findViewById( + R.id.b_button_key); + getKeyCode("b_button", b_button_text); + Button b_button = (Button) getView().findViewById(R.id.b_button_edit); + b_button.setOnClickListener(new View.OnClickListener() { + public void onClick(View v) { + mapKeyCode("b_button", b_button_text); + } + }); + Button b_remove = (Button) getView().findViewById(R.id.remove_b_button); + b_remove.setOnClickListener(new View.OnClickListener() { + public void onClick(View v) { + remKeyCode("b_button", b_button_text); + } + }); + + ImageView x_button_icon = (ImageView) getView().findViewById( + R.id.x_button_icon); + x_button_icon.setImageDrawable(getButtonImage(256 / sS, 0)); + final TextView x_button_text = (TextView) getView().findViewById( + R.id.x_button_key); + getKeyCode("x_button", x_button_text); + Button x_button = (Button) getView().findViewById(R.id.x_button_edit); + x_button.setOnClickListener(new View.OnClickListener() { + public void onClick(View v) { + mapKeyCode("x_button", x_button_text); + } + }); + Button x_remove = (Button) getView().findViewById(R.id.remove_x_button); + x_remove.setOnClickListener(new View.OnClickListener() { + public void onClick(View v) { + remKeyCode("x_button", x_button_text); + } + }); + + ImageView y_button_icon = (ImageView) getView().findViewById( + R.id.y_button_icon); + y_button_icon.setImageDrawable(getButtonImage(320 / sS, 0)); + final TextView y_button_text = (TextView) getView().findViewById( + R.id.y_button_key); + getKeyCode("y_button", y_button_text); + Button y_button = (Button) getView().findViewById(R.id.y_button_edit); + y_button.setOnClickListener(new View.OnClickListener() { + public void onClick(View v) { + mapKeyCode("y_button", y_button_text); + } + }); + Button y_remove = (Button) getView().findViewById(R.id.remove_y_button); + y_remove.setOnClickListener(new View.OnClickListener() { + public void onClick(View v) { + remKeyCode("y_button", y_button_text); + } + }); + + ImageView l_button_icon = (ImageView) getView().findViewById( + R.id.l_button_icon); + l_button_icon.setImageDrawable(getButtonImage(78 / sS, 64 / sS)); + final TextView l_button_text = (TextView) getView().findViewById( + R.id.l_button_key); + getKeyCode("l_button", l_button_text); + Button l_button = (Button) getView().findViewById(R.id.l_button_edit); + l_button.setOnClickListener(new View.OnClickListener() { + public void onClick(View v) { + mapKeyCode("l_button", l_button_text); + } + }); + Button l_remove = (Button) getView().findViewById(R.id.remove_l_button); + l_remove.setOnClickListener(new View.OnClickListener() { + public void onClick(View v) { + remKeyCode("l_button", l_button_text); + } + }); + + ImageView r_button_icon = (ImageView) getView().findViewById( + R.id.r_button_icon); + r_button_icon.setImageDrawable(getButtonImage(162 / sS, 64 / sS)); + final TextView r_button_text = (TextView) getView().findViewById( + R.id.r_button_key); + getKeyCode("r_button", r_button_text); + Button r_button = (Button) getView().findViewById(R.id.r_button_edit); + r_button.setOnClickListener(new View.OnClickListener() { + public void onClick(View v) { + mapKeyCode("r_button", r_button_text); + } + }); + Button r_remove = (Button) getView().findViewById(R.id.remove_r_button); + r_remove.setOnClickListener(new View.OnClickListener() { + public void onClick(View v) { + remKeyCode("r_button", r_button_text); + } + }); + + 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) { + mapKeyCode("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 + + 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); + dpad_up.setOnClickListener(new View.OnClickListener() { + public void onClick(View v) { + mapKeyCode("dpad_up", dpad_up_text); + } + }); + Button up_remove = (Button) getView().findViewById(R.id.remove_dpad_up); + up_remove.setOnClickListener(new View.OnClickListener() { + public void onClick(View v) { + remKeyCode("dpad_up", dpad_up_text); + } + }); + + final TextView dpad_down_text = (TextView) getView().findViewById( + R.id.dpad_down_key); + getKeyCode("dpad_down", dpad_down_text); + Button dpad_down = (Button) getView().findViewById(R.id.dpad_down_edit); + dpad_down.setOnClickListener(new View.OnClickListener() { + public void onClick(View v) { + mapKeyCode("dpad_down", dpad_down_text); + } + }); + Button down_remove = (Button) getView().findViewById( + R.id.remove_dpad_down); + down_remove.setOnClickListener(new View.OnClickListener() { + public void onClick(View v) { + remKeyCode("dpad_down", dpad_down_text); + } + }); + + final TextView dpad_left_text = (TextView) getView().findViewById( + R.id.dpad_left_key); + getKeyCode("dpad_left", dpad_left_text); + Button dpad_left = (Button) getView().findViewById(R.id.dpad_left_edit); + dpad_left.setOnClickListener(new View.OnClickListener() { + public void onClick(View v) { + mapKeyCode("dpad_left", dpad_left_text); + } + }); + Button left_remove = (Button) getView().findViewById( + R.id.remove_dpad_left); + left_remove.setOnClickListener(new View.OnClickListener() { + public void onClick(View v) { + remKeyCode("dpad_left", dpad_left_text); + } + }); + + final TextView dpad_right_text = (TextView) getView().findViewById( + R.id.dpad_right_key); + getKeyCode("dpad_right", dpad_right_text); + Button dpad_right = (Button) getView().findViewById( + R.id.dpad_right_edit); + dpad_right.setOnClickListener(new View.OnClickListener() { + public void onClick(View v) { + mapKeyCode("dpad_right", dpad_right_text); + } + }); + Button right_remove = (Button) getView().findViewById( + R.id.remove_dpad_right); + right_remove.setOnClickListener(new View.OnClickListener() { + public void onClick(View v) { + remKeyCode("dpad_right", dpad_right_text); + } + }); + + ImageView start_button_icon = (ImageView) getView().findViewById( + R.id.start_button_icon); + start_button_icon.setImageDrawable(getButtonImage(0, 64 / sS)); + final TextView start_button_text = (TextView) getView().findViewById( + R.id.start_button_key); + getKeyCode("start_button", start_button_text); + Button start_button = (Button) getView().findViewById( + R.id.start_button_edit); + start_button.setOnClickListener(new View.OnClickListener() { + public void onClick(View v) { + mapKeyCode("start_button", start_button_text); + } + }); + Button start_remove = (Button) getView() + .findViewById(R.id.remove_start); + start_remove.setOnClickListener(new View.OnClickListener() { + public void onClick(View v) { + remKeyCode("start_button", start_button_text); + } + }); } private Drawable getButtonImage(int x, int y) { @@ -388,7 +383,8 @@ public class InputModFragment extends Fragment { private void selectController() { AlertDialog.Builder builder = new AlertDialog.Builder(parentActivity); builder.setTitle(getString(R.string.select_controller_title)); - builder.setMessage(getString(R.string.select_controller_message, String.valueOf(player))); + builder.setMessage(getString(R.string.select_controller_message, + String.valueOf(player))); builder.setNegativeButton("Cancel", new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int which) {