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