From 57368703576269f2c4afe41394a1b66ad61ba325 Mon Sep 17 00:00:00 2001 From: Eric House Date: Wed, 24 Feb 2021 20:08:43 -0800 Subject: [PATCH] when filtering, enter key hides keyboard and applies filter --- .../android/xw4/DictBrowseDelegate.java | 25 +++++++++++- .../org/eehouse/android/xw4/PatTableRow.java | 40 +++++++++++++------ .../app/src/main/res/values/styles.xml | 1 + 3 files changed, 52 insertions(+), 14 deletions(-) diff --git a/xwords4/android/app/src/main/java/org/eehouse/android/xw4/DictBrowseDelegate.java b/xwords4/android/app/src/main/java/org/eehouse/android/xw4/DictBrowseDelegate.java index 9f02d8e13..dc8219dec 100644 --- a/xwords4/android/app/src/main/java/org/eehouse/android/xw4/DictBrowseDelegate.java +++ b/xwords4/android/app/src/main/java/org/eehouse/android/xw4/DictBrowseDelegate.java @@ -30,6 +30,7 @@ import android.view.Menu; import android.view.MenuItem; import android.view.View; import android.view.ViewGroup; +import android.view.inputmethod.InputMethodManager; import android.widget.AdapterView; import android.widget.ArrayAdapter; import android.widget.BaseAdapter; @@ -58,7 +59,8 @@ import java.util.Arrays; import java.io.Serializable; public class DictBrowseDelegate extends DelegateBase - implements View.OnClickListener, View.OnLongClickListener { + implements View.OnClickListener, View.OnLongClickListener, + PatTableRow.EnterPressed { private static final String TAG = DictBrowseDelegate.class.getSimpleName(); private static final String DELIM = "."; private static final boolean SHOW_NUM = false; @@ -285,6 +287,7 @@ public class DictBrowseDelegate extends DelegateBase } } // init + @Override protected void onPause() { scrapeBrowseState(); @@ -458,6 +461,17 @@ public class DictBrowseDelegate extends DelegateBase return handled; } + ////////////////////////////////////////////////// + // PatTableRow.EnterPressed + ////////////////////////////////////////////////// + @Override + public boolean enterPressed() + { + hideSoftKeyboard(); + useButtonClicked(); + return true; + } + private void scrapeBrowseState() { Assert.assertTrueNR( null != m_browseState ); @@ -536,6 +550,7 @@ public class DictBrowseDelegate extends DelegateBase PatTableRow row = (PatTableRow)child; m_rows[nFound++] = row; row.setOnFocusGained( mFocusGainedProc ); + row.setOnEnterPressed(this); } } Assert.assertTrueNR( nFound == m_rows.length ); @@ -804,6 +819,14 @@ public class DictBrowseDelegate extends DelegateBase tv.setText( summary ); } + private void hideSoftKeyboard() + { + InputMethodManager imm = (InputMethodManager) + m_activity.getSystemService(Activity.INPUT_METHOD_SERVICE); + imm.hideSoftInputFromWindow( m_activity.getCurrentFocus() + .getWindowToken(), 0); + } + private static void launch( Delegator delegator, Bundle bundle ) { delegator.addFragment( DictBrowseFrag.newInstance( delegator ), diff --git a/xwords4/android/app/src/main/java/org/eehouse/android/xw4/PatTableRow.java b/xwords4/android/app/src/main/java/org/eehouse/android/xw4/PatTableRow.java index 4010159cb..d7d3294ae 100644 --- a/xwords4/android/app/src/main/java/org/eehouse/android/xw4/PatTableRow.java +++ b/xwords4/android/app/src/main/java/org/eehouse/android/xw4/PatTableRow.java @@ -21,28 +21,52 @@ package org.eehouse.android.xw4; import android.content.Context; import android.util.AttributeSet; +import android.view.KeyEvent; import android.view.View; +import android.view.inputmethod.EditorInfo; import android.widget.CheckBox; import android.widget.EditText; import android.widget.TableRow; +import android.widget.TextView.OnEditorActionListener; import android.widget.TextView; import org.eehouse.android.xw4.jni.XwJNI.PatDesc; -public class PatTableRow extends TableRow { +public class PatTableRow extends TableRow implements OnEditorActionListener { private static final String TAG = PatTableRow.class.getSimpleName(); private EditText mEdit; private CheckBox mCheck; + private EnterPressed mEnterProc; + + public interface EnterPressed { + public boolean enterPressed(); + } public PatTableRow( Context context, AttributeSet as ) { super( context, as ); } + void setOnEnterPressed( EnterPressed proc ) { mEnterProc = proc; } + + @Override + protected void onFinishInflate() + { + mCheck = (CheckBox)Utils.getChildInstanceOf( this, CheckBox.class ); + mEdit = (EditText)Utils.getChildInstanceOf( this, EditText.class ); + mEdit.setOnEditorActionListener(this); + } + + @Override + public boolean onEditorAction( TextView tv, int actionId, KeyEvent event ) + { + return EditorInfo.IME_ACTION_SEND == actionId + && null != mEnterProc + && mEnterProc.enterPressed(); + } + public void getToDesc( PatDesc out ) { - getFields(); - String strPat = mEdit.getText().toString(); out.strPat = strPat; out.anyOrderOk = mCheck.isChecked(); @@ -50,16 +74,12 @@ public class PatTableRow extends TableRow { public void setFromDesc( PatDesc desc ) { - getFields(); - mEdit.setText(desc.strPat); mCheck.setChecked(desc.anyOrderOk); } public boolean addBlankToFocussed( String blank ) { - getFields(); - boolean handled = mEdit.hasFocus(); if ( handled ) { mEdit.getText().insert(mEdit.getSelectionStart(), blank ); @@ -81,7 +101,6 @@ public class PatTableRow extends TableRow { void setOnFocusGained( final Runnable proc ) { - getFields(); mEdit.setOnFocusChangeListener( new View.OnFocusChangeListener() { @Override public void onFocusChange( View view, boolean hasFocus ) @@ -93,9 +112,4 @@ public class PatTableRow extends TableRow { } ); } - private void getFields() - { - mEdit = (EditText)Utils.getChildInstanceOf( this, EditText.class ); - mCheck = (CheckBox)Utils.getChildInstanceOf( this, CheckBox.class ); - } } diff --git a/xwords4/android/app/src/main/res/values/styles.xml b/xwords4/android/app/src/main/res/values/styles.xml index e1f2f7f0b..0842f6a2b 100644 --- a/xwords4/android/app/src/main/res/values/styles.xml +++ b/xwords4/android/app/src/main/res/values/styles.xml @@ -143,6 +143,7 @@ 15 textCapCharacters|textNoSuggestions 1 + actionSend