From e9889bf372ec4321ca8802b4aca54a99fdfedfd2 Mon Sep 17 00:00:00 2001 From: Toni Barzic Date: Tue, 29 Sep 2015 14:50:33 -0700 Subject: [PATCH] Forward SeekBarPreference key events to seekBar view This is to ensure that seek bar progress gets properly updated, and that progress changes reported by the seek bar are marked as coming from user. BUG=24416333 BUG=20049245 Change-Id: I0a48c8eae1528937024ca54720cac91c7d21b0b9 --- .../android/preference/SeekBarPreference.java | 19 ++++++++----------- core/java/android/widget/AbsSeekBar.java | 3 +++ 2 files changed, 11 insertions(+), 11 deletions(-) diff --git a/core/java/android/preference/SeekBarPreference.java b/core/java/android/preference/SeekBarPreference.java index 67f64090db160..5414f00079702 100644 --- a/core/java/android/preference/SeekBarPreference.java +++ b/core/java/android/preference/SeekBarPreference.java @@ -96,18 +96,15 @@ public class SeekBarPreference extends Preference @Override public boolean onKey(View v, int keyCode, KeyEvent event) { - if (event.getAction() != KeyEvent.ACTION_UP) { - if (keyCode == KeyEvent.KEYCODE_PLUS - || keyCode == KeyEvent.KEYCODE_EQUALS) { - setProgress(getProgress() + 1); - return true; - } - if (keyCode == KeyEvent.KEYCODE_MINUS) { - setProgress(getProgress() - 1); - return true; - } + if (event.getAction() != KeyEvent.ACTION_DOWN) { + return false; } - return false; + + SeekBar seekBar = (SeekBar) v.findViewById(com.android.internal.R.id.seekbar); + if (seekBar == null) { + return false; + } + return seekBar.onKeyDown(keyCode, event); } public void setMax(int max) { diff --git a/core/java/android/widget/AbsSeekBar.java b/core/java/android/widget/AbsSeekBar.java index 0fd15429b8047..10aefe4eb714f 100644 --- a/core/java/android/widget/AbsSeekBar.java +++ b/core/java/android/widget/AbsSeekBar.java @@ -706,9 +706,12 @@ public abstract class AbsSeekBar extends ProgressBar { int increment = mKeyProgressIncrement; switch (keyCode) { case KeyEvent.KEYCODE_DPAD_LEFT: + case KeyEvent.KEYCODE_MINUS: increment = -increment; // fallthrough case KeyEvent.KEYCODE_DPAD_RIGHT: + case KeyEvent.KEYCODE_PLUS: + case KeyEvent.KEYCODE_EQUALS: increment = isLayoutRtl() ? -increment : increment; if (setProgressInternal(getProgress() + increment, true, true)) {