diff options
| author | Lioncash <mathew1800@gmail.com> | 2013-10-24 14:55:10 -0400 |
|---|---|---|
| committer | Lioncash <mathew1800@gmail.com> | 2013-10-24 14:55:10 -0400 |
| commit | 079147ca07cc59cc4c3e70441abddcabd5ad3681 (patch) | |
| tree | f4c235832ace209606b15724bd1cec066d69e079 /Source/Android | |
| parent | 69a10869bbba7b716723bc68cd27800de5122c70 (diff) | |
[Android] Refactor InputConfigFragment a little bit in preparation for the implementation of the new input overlay.
This moves all of the dialog handling into the actual MotionAlertDialog class itself. This is something I should have done a long time ago.
Also moved the Gamecube input binding preferences into their own PreferenceScreen.
Diffstat (limited to 'Source/Android')
| -rw-r--r-- | Source/Android/res/values-ja/strings.xml | 1 | ||||
| -rw-r--r-- | Source/Android/res/values/strings.xml | 1 | ||||
| -rw-r--r-- | Source/Android/res/xml/input_prefs.xml | 164 | ||||
| -rw-r--r-- | Source/Android/src/org/dolphinemu/dolphinemu/settings/InputConfigFragment.java | 225 |
4 files changed, 181 insertions, 210 deletions
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 @@ <!-- Input Config Fragment --> <string name="input_settings">入力</string> + <string name="gamecube_bindings">ゲームキューブの入力バインディング</string> <string name="input_binding">入力バインディング</string> <string name="input_binding_descrip">%1$sにバインドするための入力を移動または押してください。</string> <string name="button_a">Aボタン</string> 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 Config Fragment --> <string name="input_settings">Input</string> + <string name="gamecube_bindings">Gamecube Input Bindings</string> <string name="input_binding">Input Binding</string> <string name="input_binding_descrip">Press or move an input to bind it to %1$s.</string> <string name="button_a">Button A</string> 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 @@ <?xml version="1.0" encoding="utf-8"?> -<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android"> - <Preference - android:key="InputA" - android:title="@string/button_a" /> - - <Preference - android:key="InputB" - android:title="@string/button_b" /> - - <Preference - android:key="InputX" - android:title="@string/button_x" /> - - <Preference - android:key="InputY" - android:title="@string/button_y" /> - - <Preference - android:key="InputZ" - android:title="@string/button_z" /> - - <Preference - android:key="InputStart" - android:title="@string/button_start" /> - - <Preference - android:key="DPadUp" - android:title="@string/dpad_up" /> - - <Preference - android:key="DPadDown" - android:title="@string/dpad_down" /> - - <Preference - android:key="DPadLeft" - android:title="@string/dpad_left" /> - - <Preference - android:key="DPadRight" - android:title="@string/dpad_right" /> - - <Preference - android:key="MainUp" - android:title="@string/main_stick_up" /> - - <Preference - android:key="MainDown" - android:title="@string/main_stick_down" /> - - <Preference - android:key="MainLeft" - android:title="@string/main_stick_left" /> - - <Preference - android:key="MainRight" - android:title="@string/main_stick_right" /> - - <Preference - android:key="CStickUp" - android:title="@string/c_stick_up" /> - - <Preference - android:key="CStickDown" - android:title="@string/c_stick_down" /> - - <Preference - android:key="CStickLeft" - android:title="@string/c_stick_left" /> - - <Preference - android:key="CStickRight" - android:title="@string/c_stick_right" /> - - <Preference - android:key="InputL" - android:title="@string/trigger_left" /> - - <Preference - android:key="InputR" - android:title="@string/trigger_right" /> +<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android" + android:title="@string/input_settings"> + + <PreferenceScreen android:title="@string/gamecube_bindings"> + <Preference + android:key="InputA" + android:title="@string/button_a" /> + + <Preference + android:key="InputB" + android:title="@string/button_b" /> + + <Preference + android:key="InputX" + android:title="@string/button_x" /> + + <Preference + android:key="InputY" + android:title="@string/button_y" /> + + <Preference + android:key="InputZ" + android:title="@string/button_z" /> + + <Preference + android:key="InputStart" + android:title="@string/button_start" /> + + <Preference + android:key="DPadUp" + android:title="@string/dpad_up" /> + + <Preference + android:key="DPadDown" + android:title="@string/dpad_down" /> + + <Preference + android:key="DPadLeft" + android:title="@string/dpad_left" /> + + <Preference + android:key="DPadRight" + android:title="@string/dpad_right" /> + + <Preference + android:key="MainUp" + android:title="@string/main_stick_up" /> + + <Preference + android:key="MainDown" + android:title="@string/main_stick_down" /> + + <Preference + android:key="MainLeft" + android:title="@string/main_stick_left" /> + + <Preference + android:key="MainRight" + android:title="@string/main_stick_right" /> + + <Preference + android:key="CStickUp" + android:title="@string/c_stick_up" /> + + <Preference + android:key="CStickDown" + android:title="@string/c_stick_down" /> + + <Preference + android:key="CStickLeft" + android:title="@string/c_stick_left" /> + + <Preference + android:key="CStickRight" + android:title="@string/c_stick_right" /> + + <Preference + android:key="InputL" + android:title="@string/trigger_left" /> + + <Preference + android:key="InputR" + android:title="@string/trigger_right" /> + </PreferenceScreen> </PreferenceScreen>
\ 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<Float> m_values = new ArrayList<Float>(); - /** * 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) - { - 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", pref.getKey(), bindStr); - pref.setSummary(bindStr); - dialog.dismiss(); - return true; - - default: - break; - } - - return false; - } - }); + // Begin the creation of the input alert. + final MotionAlertDialog dialog = new MotionAlertDialog(getActivity(), pref); - // Set the motion event listener. - dialog.setOnMotionEventListener(new MotionAlertDialog.OnMotionEventListener() - { - public boolean onMotion(MotionEvent event) + // Set the cancel button. + dialog.setButton(AlertDialog.BUTTON_NEGATIVE, getString(R.string.cancel), new AlertDialog.OnClickListener() { - if (event == null || (event.getSource() & InputDevice.SOURCE_CLASS_JOYSTICK) == 0) - return false; - - Log.d("InputConfigFragment", "Received motion event: " + event.getAction()); - - InputDevice input = event.getDevice(); - List<InputDevice.MotionRange> motions = input.getMotionRanges(); - if (firstEvent) - { - m_values.clear(); - - for (InputDevice.MotionRange range : motions) - { - m_values.add(event.getAxisValue(range.getAxis())); - } - - firstEvent = false; - } - else + @Override + public void onClick(DialogInterface dialog, int which) { - 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(); - } - } + // Do nothing. Just makes the cancel button show up. } + }); - 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())); - // 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); - // 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(); + } - // 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<Float> m_values = new ArrayList<Float>(); /** * 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; + + default: + break; + } + + return false; } + - /** - * Sets the motion listener. - * - * @param listener The motion listener to set. - */ - public void setOnMotionEventListener(OnMotionEventListener listener) + // 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<InputDevice.MotionRange> 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); |
