From cffc556fd020d2d5a182c93f114b5d867a68d44f Mon Sep 17 00:00:00 2001 From: ToadKing Date: Mon, 28 Jan 2013 18:20:25 -0500 Subject: [PATCH] (Android) work on IME key detection works with wiimote IME, but not with standard keyboard IME. hopefully most gamepad IMEs work --- .../phoenix/res/layout/key_bind_dialog.xml | 10 ++-- .../retroarch/browser/KeyBindPreference.java | 51 ++++++++++++++++--- 2 files changed, 52 insertions(+), 9 deletions(-) diff --git a/android/phoenix/res/layout/key_bind_dialog.xml b/android/phoenix/res/layout/key_bind_dialog.xml index 2d90848487..b0c601e0ea 100644 --- a/android/phoenix/res/layout/key_bind_dialog.xml +++ b/android/phoenix/res/layout/key_bind_dialog.xml @@ -1,5 +1,6 @@ @@ -14,13 +15,17 @@ android:text="@string/key_bind_title" android:textAppearance="?android:attr/textAppearanceLarge" /> - + android:ems="10" + android:inputType="text" > + + + diff --git a/android/phoenix/src/org/retroarch/browser/KeyBindPreference.java b/android/phoenix/src/org/retroarch/browser/KeyBindPreference.java index 3780713f1c..7fe894c4c5 100644 --- a/android/phoenix/src/org/retroarch/browser/KeyBindPreference.java +++ b/android/phoenix/src/org/retroarch/browser/KeyBindPreference.java @@ -9,14 +9,42 @@ import android.view.LayoutInflater; import android.view.View; import android.widget.AdapterView; import android.widget.Button; +import android.widget.EditText; import android.widget.ListView; -import android.widget.TextView; - import org.retroarch.R; -class KeyBindPreference extends DialogPreference implements View.OnKeyListener, AdapterView.OnItemClickListener, View.OnClickListener { +class KeyBindEditText extends EditText +{ + KeyBindPreference pref; + public KeyBindEditText(Context context, AttributeSet attrs) { + super(context, attrs); + } + + public void setBoundPreference(KeyBindPreference pref) + { + this.pref = pref; + } + + @Override + public boolean onKeyPreIme(int keyCode, KeyEvent event) + { + Log.i("RetroArch", "key! " + String.valueOf(event.getKeyCode())); + pref.onKey(null, event.getKeyCode(), event); + return false; + } + + @Override + public boolean onKeyDown(int keyCode, KeyEvent event) + { + Log.i("RetroArch", "key! " + String.valueOf(event.getKeyCode())); + pref.onKey(null, event.getKeyCode(), event); + return false; + } +} + +class KeyBindPreference extends DialogPreference implements View.OnKeyListener, AdapterView.OnItemClickListener, View.OnClickListener, LayoutInflater.Factory { private int key_bind_code; - TextView keyText; + KeyBindEditText keyText; private String[] key_labels; private final int DEFAULT_KEYCODE = 0; @@ -39,9 +67,11 @@ class KeyBindPreference extends DialogPreference implements View.OnKeyListener, @Override protected View onCreateDialogView() { - LayoutInflater inflater = (LayoutInflater) getContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE); + LayoutInflater inflater = ((LayoutInflater) getContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE)).cloneInContext(getContext()); + inflater.setFactory(this); View view = inflater.inflate(R.layout.key_bind_dialog, null); - keyText = (TextView) view.findViewById(R.id.key_bind_value); + keyText = (KeyBindEditText) view.findViewById(R.id.key_bind_value); + keyText.setBoundPreference(this); view.setOnKeyListener(this); ((ListView) view.findViewById(R.id.key_bind_list)).setOnItemClickListener(this); ((Button) view.findViewById(R.id.key_bind_clear)).setOnClickListener(this); @@ -87,4 +117,13 @@ class KeyBindPreference extends DialogPreference implements View.OnKeyListener, else return key_labels[code]; } + + @Override + public View onCreateView(String name, Context context, AttributeSet attrs) { + Log.i("RetroArch", "view name: " + name); + if (name.equals("EditText")) + return new KeyBindEditText(context, attrs); + else + return null; + } } \ No newline at end of file