From d4de3b507ffce3a1c0c967f05c400df9f6c5b95b Mon Sep 17 00:00:00 2001 From: Phillip Hsu Date: Sat, 16 Jul 2016 13:59:54 -0700 Subject: [PATCH] Focus grabber given focus correctly now --- .../clock2/editalarm/GridLayoutNumpad.java | 11 ++++++++++- .../clock2/editalarm/NumpadTimePicker.java | 19 +++++++++++++++++++ .../editalarm/NumpadTimePickerDialog.java | 11 +++++++++-- 3 files changed, 38 insertions(+), 3 deletions(-) diff --git a/app/src/main/java/com/philliphsu/clock2/editalarm/GridLayoutNumpad.java b/app/src/main/java/com/philliphsu/clock2/editalarm/GridLayoutNumpad.java index 7c738f7..9c7540b 100644 --- a/app/src/main/java/com/philliphsu/clock2/editalarm/GridLayoutNumpad.java +++ b/app/src/main/java/com/philliphsu/clock2/editalarm/GridLayoutNumpad.java @@ -78,7 +78,16 @@ public abstract class GridLayoutNumpad extends GridLayout implements View.OnClic mOnInputChangeListener = onInputChangeListener; } - protected final void enable(int lowerLimitInclusive, int upperLimitExclusive) { + /** + * Provided only for subclasses so they can retrieve the registered listener + * and fire any custom OnInputChange events they may have defined. + */ + protected final OnInputChangeListener getOnInputChangeListener() { + return mOnInputChangeListener; + } + + @CallSuper + protected void enable(int lowerLimitInclusive, int upperLimitExclusive) { if (lowerLimitInclusive < 0 || upperLimitExclusive > mButtons.length) throw new IndexOutOfBoundsException("Upper limit out of range"); diff --git a/app/src/main/java/com/philliphsu/clock2/editalarm/NumpadTimePicker.java b/app/src/main/java/com/philliphsu/clock2/editalarm/NumpadTimePicker.java index 070620b..c4a303e 100644 --- a/app/src/main/java/com/philliphsu/clock2/editalarm/NumpadTimePicker.java +++ b/app/src/main/java/com/philliphsu/clock2/editalarm/NumpadTimePicker.java @@ -54,6 +54,17 @@ public class NumpadTimePicker extends GridLayoutNumpad implements TimePicker { @Bind(R.id.fab) FloatingActionButton mFab; @Bind(R.id.backspace) ImageButton mBackspace; + /** + * Provides additional APIs to configure clients' display output. + */ + public interface OnInputChangeListener extends GridLayoutNumpad.OnInputChangeListener { + /** + * Called when this numpad's buttons are all disabled, indicating no further + * digits can be inserted. + */ + void onInputDisabled(); + } + public NumpadTimePicker(Context context) { super(context); init(); @@ -74,6 +85,14 @@ public class NumpadTimePicker extends GridLayoutNumpad implements TimePicker { return R.layout.content_numpad_time_picker; } + @Override + protected void enable(int lowerLimitInclusive, int upperLimitExclusive) { + super.enable(lowerLimitInclusive, upperLimitExclusive); + if (lowerLimitInclusive == 0 && upperLimitExclusive == 0) { + ((OnInputChangeListener) getOnInputChangeListener()).onInputDisabled(); + } + } + @Override protected void onDigitInserted(String newDigit) { // Append the new digit(s) to the formatter diff --git a/app/src/main/java/com/philliphsu/clock2/editalarm/NumpadTimePickerDialog.java b/app/src/main/java/com/philliphsu/clock2/editalarm/NumpadTimePickerDialog.java index 9e74fc7..bcc267f 100644 --- a/app/src/main/java/com/philliphsu/clock2/editalarm/NumpadTimePickerDialog.java +++ b/app/src/main/java/com/philliphsu/clock2/editalarm/NumpadTimePickerDialog.java @@ -142,6 +142,12 @@ public class NumpadTimePickerDialog extends DialogFragment implements NumpadTime updateInputText(""); } + @Override + public void onInputDisabled() { + // Steals the focus from the EditText + mFocusGrabber.requestFocus(); + } + @OnTouch(R.id.input_time) boolean captureTouchOnEditText() { // Capture touch events on the EditText field, because we want it to do nothing. @@ -157,8 +163,9 @@ public class NumpadTimePickerDialog extends DialogFragment implements NumpadTime mInputField.setText(inputText); // Move the cursor mInputField.setSelection(mInputField.length()); - if (mNumpad.count() == mNumpad.capacity()) { - mFocusGrabber.requestFocus(); + if (mFocusGrabber.isFocused()) { + // Return focus to the EditText + mInputField.requestFocus(); } } }