Merge "Remove longpress support from the software Home key."
diff --git a/packages/SystemUI/res/layout/navigation_bar.xml b/packages/SystemUI/res/layout/navigation_bar.xml
index 6732fee..d1919ca 100644
--- a/packages/SystemUI/res/layout/navigation_bar.xml
+++ b/packages/SystemUI/res/layout/navigation_bar.xml
@@ -66,6 +66,7 @@
android:layout_height="match_parent"
android:src="@drawable/ic_sysbar_home"
systemui:keyCode="3"
+ systemui:keyRepeat="false"
android:layout_weight="0"
systemui:glowBackground="@drawable/ic_sysbar_highlight"
android:contentDescription="@string/accessibility_home"
@@ -148,6 +149,7 @@
android:layout_width="match_parent"
android:src="@drawable/ic_sysbar_home_land"
systemui:keyCode="3"
+ systemui:keyRepeat="false"
android:layout_weight="0"
android:contentDescription="@string/accessibility_home"
systemui:glowBackground="@drawable/ic_sysbar_highlight_land"
diff --git a/packages/SystemUI/res/values/attrs.xml b/packages/SystemUI/res/values/attrs.xml
index b2b6d50..56d1295 100644
--- a/packages/SystemUI/res/values/attrs.xml
+++ b/packages/SystemUI/res/values/attrs.xml
@@ -16,7 +16,11 @@
<resources>
<declare-styleable name="KeyButtonView">
+ <!-- key code to send when pressed; if absent or 0, no key is sent -->
<attr name="keyCode" format="integer" />
+ <!-- does this button generate longpress / repeat events? -->
+ <attr name="keyRepeat" format="boolean" />
+ <!-- drawable to use for a swelling, glowing background on press -->
<attr name="glowBackground" format="reference" />
</declare-styleable>
<declare-styleable name="ToggleSlider">
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/policy/KeyButtonView.java b/packages/SystemUI/src/com/android/systemui/statusbar/policy/KeyButtonView.java
index 38a1029..fc18eef 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/policy/KeyButtonView.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/policy/KeyButtonView.java
@@ -57,11 +57,12 @@
int mTouchSlop;
Drawable mGlowBG;
float mGlowAlpha = 0f, mGlowScale = 1f, mDrawingAlpha = 1f;
+ boolean mSupportsLongpress = true;
Runnable mCheckLongPress = new Runnable() {
public void run() {
if (isPressed()) {
-
+ // Slog.d("KeyButtonView", "longpressed: " + this);
if (mCode != 0) {
mRepeat++;
sendEvent(KeyEvent.ACTION_DOWN,
@@ -89,6 +90,8 @@
defStyle, 0);
mCode = a.getInteger(R.styleable.KeyButtonView_keyCode, 0);
+
+ mSupportsLongpress = a.getBoolean(R.styleable.KeyButtonView_keyRepeat, true);
mGlowBG = a.getDrawable(R.styleable.KeyButtonView_glowBackground);
if (mGlowBG != null) {
@@ -207,11 +210,19 @@
mDownTime = SystemClock.uptimeMillis();
mRepeat = 0;
mSending = true;
+ setPressed(true);
sendEvent(KeyEvent.ACTION_DOWN,
KeyEvent.FLAG_FROM_SYSTEM | KeyEvent.FLAG_VIRTUAL_HARD_KEY, mDownTime);
- setPressed(true);
- removeCallbacks(mCheckLongPress);
- postDelayed(mCheckLongPress, ViewConfiguration.getLongPressTimeout());
+ if (mSupportsLongpress) {
+ removeCallbacks(mCheckLongPress);
+ postDelayed(mCheckLongPress, ViewConfiguration.getLongPressTimeout());
+ } else {
+ mSending = false;
+ sendEvent(KeyEvent.ACTION_UP,
+ KeyEvent.FLAG_FROM_SYSTEM | KeyEvent.FLAG_VIRTUAL_HARD_KEY, mDownTime);
+ sendAccessibilityEvent(AccessibilityEvent.TYPE_VIEW_CLICKED);
+ playSoundEffect(SoundEffectConstants.CLICK);
+ }
break;
case MotionEvent.ACTION_MOVE:
if (mSending) {
@@ -230,7 +241,9 @@
sendEvent(KeyEvent.ACTION_UP,
KeyEvent.FLAG_FROM_SYSTEM | KeyEvent.FLAG_VIRTUAL_HARD_KEY
| KeyEvent.FLAG_CANCELED);
- removeCallbacks(mCheckLongPress);
+ if (mSupportsLongpress) {
+ removeCallbacks(mCheckLongPress);
+ }
}
break;
case MotionEvent.ACTION_UP:
@@ -239,15 +252,15 @@
if (mSending) {
mSending = false;
final int flags = KeyEvent.FLAG_FROM_SYSTEM | KeyEvent.FLAG_VIRTUAL_HARD_KEY;
- removeCallbacks(mCheckLongPress);
+ if (mSupportsLongpress) {
+ removeCallbacks(mCheckLongPress);
+ }
if (mCode != 0) {
if (doIt) {
sendEvent(KeyEvent.ACTION_UP, flags);
sendAccessibilityEvent(AccessibilityEvent.TYPE_VIEW_CLICKED);
playSoundEffect(SoundEffectConstants.CLICK);
- } else {
- sendEvent(KeyEvent.ACTION_UP, flags | KeyEvent.FLAG_CANCELED);
}
} else {
// no key code, just a regular ImageView