diff --git a/Source/Android/res/values-ja/strings.xml b/Source/Android/res/values-ja/strings.xml index bf19db23f0..4ecd85fd62 100644 --- a/Source/Android/res/values-ja/strings.xml +++ b/Source/Android/res/values-ja/strings.xml @@ -41,6 +41,7 @@ 入力 + ゲームキューブの入力バインディング 入力バインディング %1$sにバインドするための入力を移動または押してください。 Aボタン diff --git a/Source/Android/res/values/strings.xml b/Source/Android/res/values/strings.xml index 983f9e6ace..b4943e8632 100644 --- a/Source/Android/res/values/strings.xml +++ b/Source/Android/res/values/strings.xml @@ -41,6 +41,7 @@ Input + Gamecube Input Bindings Input Binding Press or move an input to bind it to %1$s. Button A diff --git a/Source/Android/res/xml/input_prefs.xml b/Source/Android/res/xml/input_prefs.xml index daddf93e3d..899e559480 100644 --- a/Source/Android/res/xml/input_prefs.xml +++ b/Source/Android/res/xml/input_prefs.xml @@ -1,83 +1,87 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/Source/Android/src/org/dolphinemu/dolphinemu/settings/InputConfigFragment.java b/Source/Android/src/org/dolphinemu/dolphinemu/settings/InputConfigFragment.java index 26e89f412d..1a3bc1fb56 100644 --- a/Source/Android/src/org/dolphinemu/dolphinemu/settings/InputConfigFragment.java +++ b/Source/Android/src/org/dolphinemu/dolphinemu/settings/InputConfigFragment.java @@ -6,7 +6,6 @@ package org.dolphinemu.dolphinemu.settings; -import android.app.Activity; import android.app.AlertDialog; import android.app.Fragment; import android.content.Context; @@ -31,10 +30,6 @@ import org.dolphinemu.dolphinemu.R; */ public final class InputConfigFragment extends PreferenceFragment { - private Activity m_activity; - private boolean firstEvent = true; - private static final ArrayList m_values = new ArrayList(); - /** * Gets the descriptor for the given {@link InputDevice}. * @@ -92,161 +87,131 @@ public final class InputConfigFragment extends PreferenceFragment } @Override - public boolean onPreferenceTreeClick(final PreferenceScreen screen, final Preference pref) + public boolean onPreferenceTreeClick(PreferenceScreen screen, Preference pref) { - // Begin the creation of the input alert. - final MotionAlertDialog dialog = new MotionAlertDialog(m_activity); - - // Set the key listener - dialog.setOnKeyListener(new AlertDialog.OnKeyListener() + // If the user is on the preference screen to set Gamecube input bindings. + if (screen.getTitle().equals(getString(R.string.gamecube_bindings))) { - public boolean onKey(DialogInterface dlg, int keyCode, KeyEvent event) + // Begin the creation of the input alert. + final MotionAlertDialog dialog = new MotionAlertDialog(getActivity(), pref); + + // Set the cancel button. + dialog.setButton(AlertDialog.BUTTON_NEGATIVE, getString(R.string.cancel), new AlertDialog.OnClickListener() { - Log.d("InputConfigFragment", "Received key event: " + event.getAction()); - switch (event.getAction()) + @Override + public void onClick(DialogInterface dialog, int which) { - case KeyEvent.ACTION_DOWN: - case KeyEvent.ACTION_UP: - InputDevice input = event.getDevice(); - String bindStr = "Device '" + getInputDesc(input) + "'-Button " + event.getKeyCode(); - NativeLibrary.SetConfig("Dolphin.ini", "Android", pref.getKey(), bindStr); - pref.setSummary(bindStr); - dialog.dismiss(); - return true; - - default: - break; + // Do nothing. Just makes the cancel button show up. } + }); - return false; - } - }); + // Set the title and description message. + dialog.setTitle(R.string.input_binding); + dialog.setMessage(String.format(getString(R.string.input_binding_descrip), pref.getTitle())); - // Set the motion event listener. - dialog.setOnMotionEventListener(new MotionAlertDialog.OnMotionEventListener() - { - public boolean onMotion(MotionEvent event) - { - if (event == null || (event.getSource() & InputDevice.SOURCE_CLASS_JOYSTICK) == 0) - return false; + // Don't allow the dialog to close when a user taps + // outside of it. They must press cancel or provide an input. + dialog.setCanceledOnTouchOutside(false); - Log.d("InputConfigFragment", "Received motion event: " + event.getAction()); + // Everything is set, show the dialog. + dialog.show(); + } - InputDevice input = event.getDevice(); - List motions = input.getMotionRanges(); - if (firstEvent) - { - m_values.clear(); - - for (InputDevice.MotionRange range : motions) - { - m_values.add(event.getAxisValue(range.getAxis())); - } - - firstEvent = false; - } - else - { - for (int a = 0; a < motions.size(); ++a) - { - InputDevice.MotionRange range = motions.get(a); - - if (m_values.get(a) > (event.getAxisValue(range.getAxis()) + 0.5f)) - { - String bindStr = "Device '" + InputConfigFragment.getInputDesc(input) + "'-Axis " + range.getAxis() + "-"; - NativeLibrary.SetConfig("Dolphin.ini", "Android", pref.getKey(), bindStr); - pref.setSummary(bindStr); - dialog.dismiss(); - } - else if (m_values.get(a) < (event.getAxisValue(range.getAxis()) - 0.5f)) - { - String bindStr = "Device '" + InputConfigFragment.getInputDesc(input) + "'-Axis " + range.getAxis() + "+"; - NativeLibrary.SetConfig("Dolphin.ini", "Android", pref.getKey(), bindStr); - pref.setSummary(bindStr); - dialog.dismiss(); - } - } - } - - return true; - } - }); - - // Set the cancel button. - dialog.setButton(AlertDialog.BUTTON_NEGATIVE, getString(R.string.cancel), new AlertDialog.OnClickListener() - { - public void onClick(DialogInterface dialog, int which) - { - // Do nothing. This just makes the cancel button appear. - } - }); - - // Set the title and description message. - dialog.setTitle(R.string.input_binding); - dialog.setMessage(String.format(getString(R.string.input_binding_descrip), pref.getTitle())); - - // Don't allow the dialog to close when a user taps - // outside of it. They must press cancel or provide an input. - dialog.setCanceledOnTouchOutside(false); - - // Everything is set, show the dialog. - dialog.show(); return true; } - @Override - public void onAttach(Activity activity) - { - super.onAttach(activity); - - // Cache the activity instance. - m_activity = activity; - } - /** - * {@link AlertDialog} class derivative that allows the motion listener - * to be set anonymously, so the creation of an explicit class for - * providing functionality is not necessary. + * {@link AlertDialog} derivative that listens for + * motion events from controllers and joysticks. */ private static final class MotionAlertDialog extends AlertDialog { - private OnMotionEventListener motionListener; + // The selected input preference + private final Preference inputPref; + + private boolean firstEvent = true; + private final ArrayList m_values = new ArrayList(); /** * Constructor * * @param ctx context to use this dialog in. */ - public MotionAlertDialog(Context ctx) + public MotionAlertDialog(Context ctx, Preference inputPref) { super(ctx); + + this.inputPref = inputPref; } - /** - * Interface which defines a callback method for general - * motion events. This allows motion event code to be set - * in the event anonymous classes of this dialog are used. - */ - public interface OnMotionEventListener + @Override + public boolean onKeyDown(int keyCode, KeyEvent event) { - /** - * Denotes the behavior that should happen when a motion event occurs. - * - * @param event Reference to the {@link MotionEvent} that occurred. - * - * @return true if the {@link MotionEvent} is consumed in this call; false otherwise. - */ - boolean onMotion(MotionEvent event); - } + Log.d("InputConfigFragment", "Received key event: " + event.getAction()); + switch (event.getAction()) + { + case KeyEvent.ACTION_DOWN: + case KeyEvent.ACTION_UP: + InputDevice input = event.getDevice(); + String bindStr = "Device '" + getInputDesc(input) + "'-Button " + event.getKeyCode(); + NativeLibrary.SetConfig("Dolphin.ini", "Android", inputPref.getKey(), bindStr); + inputPref.setSummary(bindStr); + dismiss(); + return true; - /** - * Sets the motion listener. - * - * @param listener The motion listener to set. - */ - public void setOnMotionEventListener(OnMotionEventListener listener) + default: + break; + } + + return false; + } + + + // Method that will be within dispatchGeneticMotionEvent that listens for joystick/controller movements. + private boolean onMotionEvent(MotionEvent event) { - this.motionListener = listener; + if ((event.getSource() & InputDevice.SOURCE_CLASS_JOYSTICK) == 0) + return false; + + Log.d("InputConfigFragment", "Received motion event: " + event.getAction()); + + InputDevice input = event.getDevice(); + List motions = input.getMotionRanges(); + if (firstEvent) + { + m_values.clear(); + + for (InputDevice.MotionRange range : motions) + { + m_values.add(event.getAxisValue(range.getAxis())); + } + + firstEvent = false; + } + else + { + for (int a = 0; a < motions.size(); ++a) + { + InputDevice.MotionRange range = motions.get(a); + + if (m_values.get(a) > (event.getAxisValue(range.getAxis()) + 0.5f)) + { + String bindStr = "Device '" + InputConfigFragment.getInputDesc(input) + "'-Axis " + range.getAxis() + "-"; + NativeLibrary.SetConfig("Dolphin.ini", "Android", inputPref.getKey(), bindStr); + inputPref.setSummary(bindStr); + dismiss(); + } + else if (m_values.get(a) < (event.getAxisValue(range.getAxis()) - 0.5f)) + { + String bindStr = "Device '" + InputConfigFragment.getInputDesc(input) + "'-Axis " + range.getAxis() + "+"; + NativeLibrary.SetConfig("Dolphin.ini", "Android", inputPref.getKey(), bindStr); + inputPref.setSummary(bindStr); + dismiss(); + } + } + } + + return true; } @Override @@ -261,7 +226,7 @@ public final class InputConfigFragment extends PreferenceFragment @Override public boolean dispatchGenericMotionEvent(MotionEvent event) { - if (motionListener.onMotion(event)) + if (onMotionEvent(event)) return true; return super.dispatchGenericMotionEvent(event);