diff options
author | Svetoslav <svetoslavganov@google.com> | 2014-03-03 15:37:14 -0800 |
---|---|---|
committer | Filip Gruszczynski <gruszczy@google.com> | 2014-03-05 22:37:34 +0000 |
commit | 1caa092f94aaa4b9b7b382263dfd13581d92d2de (patch) | |
tree | 83169aaaed2da6cb960ce7b63473dabd0dab810c /core/java/android/widget | |
parent | bf9eec4c3bbbacd0954d819c18709962a81338bf (diff) | |
download | frameworks_base-1caa092f94aaa4b9b7b382263dfd13581d92d2de.zip frameworks_base-1caa092f94aaa4b9b7b382263dfd13581d92d2de.tar.gz frameworks_base-1caa092f94aaa4b9b7b382263dfd13581d92d2de.tar.bz2 |
Allow click listener registration in NumberPicker.
NumberPicker is composed of three areas, increment, decrement, and value,
which take the entire space. Hence, adding a click listener was a no-op.
Clicking on the value brings up the IME but for devices with very small
screens a developer may want to override this default behavior to say
confirm the selection.
This change allows adding a click listener to NumberPicker to override the
behavior of clicking on the current value. This is applicable only to the
new look and feel of the NumberPicker, i.e. the holo themes. This change
is safe as previously setting a click listener had no effect.
bug:13287234
Change-Id: I34e12a2e2bd64344a4797153fa6c820001a4722e
(cherry picked from commit 46a27efe9528ac3c5b37726707844e7c868815ac)
Diffstat (limited to 'core/java/android/widget')
-rw-r--r-- | core/java/android/widget/NumberPicker.java | 53 |
1 files changed, 40 insertions, 13 deletions
diff --git a/core/java/android/widget/NumberPicker.java b/core/java/android/widget/NumberPicker.java index c0fde2e..9c6a2e3 100644 --- a/core/java/android/widget/NumberPicker.java +++ b/core/java/android/widget/NumberPicker.java @@ -427,12 +427,12 @@ public class NumberPicker extends LinearLayout { * Flag whether to ignore move events - we ignore such when we show in IME * to prevent the content from scrolling. */ - private boolean mIngonreMoveEvents; + private boolean mIgnoreMoveEvents; /** - * Flag whether to show soft input on tap. + * Flag whether to perform a click on tap. */ - private boolean mShowSoftInputOnTap; + private boolean mPerformClickOnTap; /** * The top of the top selection divider. @@ -808,8 +808,8 @@ public class NumberPicker extends LinearLayout { mInputText.setVisibility(View.INVISIBLE); mLastDownOrMoveEventY = mLastDownEventY = event.getY(); mLastDownEventTime = event.getEventTime(); - mIngonreMoveEvents = false; - mShowSoftInputOnTap = false; + mIgnoreMoveEvents = false; + mPerformClickOnTap = false; // Handle pressed state before any state change. if (mLastDownEventY < mTopSelectionDividerTop) { if (mScrollState == OnScrollListener.SCROLL_STATE_IDLE) { @@ -840,7 +840,7 @@ public class NumberPicker extends LinearLayout { postChangeCurrentByOneFromLongPress( true, ViewConfiguration.getLongPressTimeout()); } else { - mShowSoftInputOnTap = true; + mPerformClickOnTap = true; postBeginSoftInputOnLongPressCommand(); } return true; @@ -861,7 +861,7 @@ public class NumberPicker extends LinearLayout { int action = event.getActionMasked(); switch (action) { case MotionEvent.ACTION_MOVE: { - if (mIngonreMoveEvents) { + if (mIgnoreMoveEvents) { break; } float currentMoveY = event.getY(); @@ -893,9 +893,9 @@ public class NumberPicker extends LinearLayout { int deltaMoveY = (int) Math.abs(eventY - mLastDownEventY); long deltaTime = event.getEventTime() - mLastDownEventTime; if (deltaMoveY <= mTouchSlop && deltaTime < ViewConfiguration.getTapTimeout()) { - if (mShowSoftInputOnTap) { - mShowSoftInputOnTap = false; - showSoftInput(); + if (mPerformClickOnTap) { + mPerformClickOnTap = false; + performClick(); } else { int selectorIndexOffset = (eventY / mSelectorElementHeight) - SELECTOR_MIDDLE_ITEM_INDEX; @@ -1188,6 +1188,27 @@ public class NumberPicker extends LinearLayout { setValueInternal(value, false); } + @Override + public boolean performClick() { + if (!mHasSelectorWheel) { + return super.performClick(); + } else if (!super.performClick()) { + showSoftInput(); + } + return true; + } + + @Override + public boolean performLongClick() { + if (!mHasSelectorWheel) { + return super.performLongClick(); + } else if (!super.performLongClick()) { + showSoftInput(); + mIgnoreMoveEvents = true; + } + return true; + } + /** * Shows the soft input for its input text. */ @@ -2166,8 +2187,7 @@ public class NumberPicker extends LinearLayout { @Override public void run() { - showSoftInput(); - mIngonreMoveEvents = true; + performLongClick(); } } @@ -2295,7 +2315,14 @@ public class NumberPicker extends LinearLayout { } case AccessibilityNodeInfo.ACTION_CLICK: { if (NumberPicker.this.isEnabled()) { - showSoftInput(); + performClick(); + return true; + } + return false; + } + case AccessibilityNodeInfo.ACTION_LONG_CLICK: { + if (NumberPicker.this.isEnabled()) { + performLongClick(); return true; } return false; |