summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorYorke Lee <yorkelee@google.com>2013-10-03 14:09:23 -0700
committerYorke Lee <yorkelee@google.com>2013-10-03 14:30:22 -0700
commit2d471771184f504c10b8d2ccef3bb2480c45f5a7 (patch)
treee1e4212bd084f8a231db731766ac1bfa285db4e1 /src
parent0ac27a82f807d1b557fbe3ba796062ae3a48e737 (diff)
Fix infinite dialpad tones due to rapid presses
Use a set of views, instead of a simple counter to track whether or not tones should still be played. Bug: 10906908 Change-Id: I6bdb08c253f17d9b0aa867b5cbdf4770bc52510b
Diffstat (limited to 'src')
-rw-r--r--src/com/android/dialer/dialpad/DialpadFragment.java38
1 files changed, 12 insertions, 26 deletions
diff --git a/src/com/android/dialer/dialpad/DialpadFragment.java b/src/com/android/dialer/dialpad/DialpadFragment.java
index 46364b23c..bcf058b02 100644
--- a/src/com/android/dialer/dialpad/DialpadFragment.java
+++ b/src/com/android/dialer/dialpad/DialpadFragment.java
@@ -93,6 +93,8 @@ import com.android.phone.common.CallLogAsync;
import com.android.phone.common.HapticFeedback;
import com.google.common.annotations.VisibleForTesting;
+import java.util.HashSet;
+
/**
* Fragment that displays a twelve-key phone dialpad.
*/
@@ -205,12 +207,9 @@ public class DialpadFragment extends Fragment
private final Object mToneGeneratorLock = new Object();
private View mDialpad;
/**
- * Remembers the number of dialpad buttons which are pressed at this moment.
- * If it becomes 0, meaning no buttons are pressed, we'll call
- * {@link ToneGenerator#stopTone()}; the method shouldn't be called unless the last key is
- * released.
+ * Set of dialpad keys that are currently being pressed
*/
- private int mDialpadPressCount;
+ private final HashSet<View> mPressedDialpadKeys = new HashSet<View>(12);
private View mDialButtonContainer;
private View mDialButton;
@@ -701,8 +700,8 @@ public class DialpadFragment extends Fragment
}
}
stopWatch.lap("tg");
- // Prevent unnecessary confusion. Reset the press count anyway.
- mDialpadPressCount = 0;
+
+ mPressedDialpadKeys.clear();
configureScreenFromIntent(getActivity());
@@ -758,8 +757,7 @@ public class DialpadFragment extends Fragment
// Make sure we don't leave this activity with a tone still playing.
stopTone();
- // Just in case reset the counter too.
- mDialpadPressCount = 0;
+ mPressedDialpadKeys.clear();
synchronized (mToneGeneratorLock) {
if (mToneGenerator != null) {
@@ -939,20 +937,11 @@ public class DialpadFragment extends Fragment
break;
}
}
- mDialpadPressCount++;
+ mPressedDialpadKeys.add(view);
} else {
view.jumpDrawablesToCurrentState();
- mDialpadPressCount--;
- if (mDialpadPressCount < 0) {
- // e.g.
- // - when the user action is detected as horizontal swipe, at which only
- // "up" event is thrown.
- // - when the user long-press '0' button, at which dialpad will decrease this count
- // while it still gets press-up event here.
- if (DEBUG) Log.d(TAG, "mKeyPressCount become negative.");
- stopTone();
- mDialpadPressCount = 0;
- } else if (mDialpadPressCount == 0) {
+ mPressedDialpadKeys.remove(view);
+ if (mPressedDialpadKeys.isEmpty()) {
stopTone();
}
}
@@ -1040,12 +1029,9 @@ public class DialpadFragment extends Fragment
removePreviousDigitIfPossible();
keyPressed(KeyEvent.KEYCODE_PLUS);
- // Stop tone immediately and decrease the press count, so that possible subsequent
- // dial button presses won't honor the 0 click any more.
- // Note: this *will* make mDialpadPressCount negative when the 0 key is released,
- // which should be handled appropriately.
+ // Stop tone immediately
stopTone();
- if (mDialpadPressCount > 0) mDialpadPressCount--;
+ mPressedDialpadKeys.remove(view);
return true;
}