Deprecate and cleanup usage of KeyEventCompat.
Clean up KeyEventCompat after minSdk 14 bump.
Bug: 32794064
Test: ./gradlew assemble
Change-Id: I2579a79d1feea94b24a6cbf9dd8b2911cefe27a7
diff --git a/api/current.txt b/api/current.txt
index 38b3206..f9cbc2f 100644
--- a/api/current.txt
+++ b/api/current.txt
@@ -7319,16 +7319,16 @@
field public static final int SOURCE_UNKNOWN = 0; // 0x0
}
- public final class KeyEventCompat {
+ public final deprecated class KeyEventCompat {
method public static deprecated boolean dispatch(android.view.KeyEvent, android.view.KeyEvent.Callback, java.lang.Object, java.lang.Object);
method public static deprecated java.lang.Object getKeyDispatcherState(android.view.View);
- method public static boolean hasModifiers(android.view.KeyEvent, int);
- method public static boolean hasNoModifiers(android.view.KeyEvent);
- method public static boolean isCtrlPressed(android.view.KeyEvent);
+ method public static deprecated boolean hasModifiers(android.view.KeyEvent, int);
+ method public static deprecated boolean hasNoModifiers(android.view.KeyEvent);
+ method public static deprecated boolean isCtrlPressed(android.view.KeyEvent);
method public static deprecated boolean isTracking(android.view.KeyEvent);
- method public static boolean metaStateHasModifiers(int, int);
- method public static boolean metaStateHasNoModifiers(int);
- method public static int normalizeMetaState(int);
+ method public static deprecated boolean metaStateHasModifiers(int, int);
+ method public static deprecated boolean metaStateHasNoModifiers(int);
+ method public static deprecated int normalizeMetaState(int);
method public static deprecated void startTracking(android.view.KeyEvent);
}
diff --git a/compat/honeycomb/android/support/v4/view/KeyEventCompatHoneycomb.java b/compat/honeycomb/android/support/v4/view/KeyEventCompatHoneycomb.java
deleted file mode 100644
index caf0657..0000000
--- a/compat/honeycomb/android/support/v4/view/KeyEventCompatHoneycomb.java
+++ /dev/null
@@ -1,43 +0,0 @@
-/*
- * Copyright (C) 2011 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package android.support.v4.view;
-
-import android.support.annotation.RequiresApi;
-import android.view.KeyEvent;
-
-/**
- * Implementation of key event compatibility that can call Honeycomb APIs.
- */
-
-@RequiresApi(11)
-class KeyEventCompatHoneycomb {
- public static int normalizeMetaState(int metaState) {
- return KeyEvent.normalizeMetaState(metaState);
- }
-
- public static boolean metaStateHasModifiers(int metaState, int modifiers) {
- return KeyEvent.metaStateHasModifiers(metaState, modifiers);
- }
-
- public static boolean metaStateHasNoModifiers(int metaState) {
- return KeyEvent.metaStateHasNoModifiers(metaState);
- }
-
- public static boolean isCtrlPressed(KeyEvent event) {
- return event.isCtrlPressed();
- }
-}
diff --git a/compat/java/android/support/v4/view/KeyEventCompat.java b/compat/java/android/support/v4/view/KeyEventCompat.java
index 471cbc9..03c668d 100644
--- a/compat/java/android/support/v4/view/KeyEventCompat.java
+++ b/compat/java/android/support/v4/view/KeyEventCompat.java
@@ -22,137 +22,54 @@
/**
* Helper for accessing features in {@link KeyEvent} introduced after
* API level 4 in a backwards compatible fashion.
+ *
+ * @deprecated Use {@link KeyEvent} directly.
*/
+@Deprecated
public final class KeyEventCompat {
/**
- * Interface for the full API.
+ * @deprecated Call {@link KeyEvent#normalizeMetaState(int)} directly. This method will
+ * be removed in a future release.
*/
- interface KeyEventVersionImpl {
- int normalizeMetaState(int metaState);
- boolean metaStateHasModifiers(int metaState, int modifiers);
- boolean metaStateHasNoModifiers(int metaState);
- boolean isCtrlPressed(KeyEvent event);
- }
-
- /**
- * Interface implementation that doesn't use anything about v4 APIs.
- */
- static class BaseKeyEventVersionImpl implements KeyEventVersionImpl {
- private static final int META_MODIFIER_MASK =
- KeyEvent.META_SHIFT_ON | KeyEvent.META_SHIFT_LEFT_ON | KeyEvent.META_SHIFT_RIGHT_ON
- | KeyEvent.META_ALT_ON | KeyEvent.META_ALT_LEFT_ON | KeyEvent.META_ALT_RIGHT_ON
- | KeyEvent.META_SYM_ON;
-
- // Mask of all lock key meta states.
- private static final int META_ALL_MASK = META_MODIFIER_MASK;
-
- private static int metaStateFilterDirectionalModifiers(int metaState,
- int modifiers, int basic, int left, int right) {
- final boolean wantBasic = (modifiers & basic) != 0;
- final int directional = left | right;
- final boolean wantLeftOrRight = (modifiers & directional) != 0;
-
- if (wantBasic) {
- if (wantLeftOrRight) {
- throw new IllegalArgumentException("bad arguments");
- }
- return metaState & ~directional;
- } else if (wantLeftOrRight) {
- return metaState & ~basic;
- } else {
- return metaState;
- }
- }
-
- @Override
- public int normalizeMetaState(int metaState) {
- if ((metaState & (KeyEvent.META_SHIFT_LEFT_ON | KeyEvent.META_SHIFT_RIGHT_ON)) != 0) {
- metaState |= KeyEvent.META_SHIFT_ON;
- }
- if ((metaState & (KeyEvent.META_ALT_LEFT_ON | KeyEvent.META_ALT_RIGHT_ON)) != 0) {
- metaState |= KeyEvent.META_ALT_ON;
- }
- return metaState & META_ALL_MASK;
- }
-
- @Override
- public boolean metaStateHasModifiers(int metaState, int modifiers) {
- metaState = normalizeMetaState(metaState) & META_MODIFIER_MASK;
- metaState = metaStateFilterDirectionalModifiers(metaState, modifiers,
- KeyEvent.META_SHIFT_ON, KeyEvent.META_SHIFT_LEFT_ON, KeyEvent.META_SHIFT_RIGHT_ON);
- metaState = metaStateFilterDirectionalModifiers(metaState, modifiers,
- KeyEvent.META_ALT_ON, KeyEvent.META_ALT_LEFT_ON, KeyEvent.META_ALT_RIGHT_ON);
- return metaState == modifiers;
- }
-
- @Override
- public boolean metaStateHasNoModifiers(int metaState) {
- return (normalizeMetaState(metaState) & META_MODIFIER_MASK) == 0;
- }
-
- @Override
- public boolean isCtrlPressed(KeyEvent event) {
- return false;
- }
- }
-
- /**
- * Interface implementation for devices with at least v11 APIs.
- */
- static class HoneycombKeyEventVersionImpl extends BaseKeyEventVersionImpl {
- @Override
- public int normalizeMetaState(int metaState) {
- return KeyEventCompatHoneycomb.normalizeMetaState(metaState);
- }
-
- @Override
- public boolean metaStateHasModifiers(int metaState, int modifiers) {
- return KeyEventCompatHoneycomb.metaStateHasModifiers(metaState, modifiers);
- }
-
- @Override
- public boolean metaStateHasNoModifiers(int metaState) {
- return KeyEventCompatHoneycomb.metaStateHasNoModifiers(metaState);
- }
-
- @Override
- public boolean isCtrlPressed(KeyEvent event) {
- return KeyEventCompatHoneycomb.isCtrlPressed(event);
- }
- }
-
- /**
- * Select the correct implementation to use for the current platform.
- */
- static final KeyEventVersionImpl IMPL;
- static {
- if (android.os.Build.VERSION.SDK_INT >= 11) {
- IMPL = new HoneycombKeyEventVersionImpl();
- } else {
- IMPL = new BaseKeyEventVersionImpl();
- }
- }
-
- // -------------------------------------------------------------------
-
+ @Deprecated
public static int normalizeMetaState(int metaState) {
- return IMPL.normalizeMetaState(metaState);
+ return KeyEvent.normalizeMetaState(metaState);
}
+ /**
+ * @deprecated Call {@link KeyEvent#metaStateHasModifiers(int, int)} directly. This method will
+ * be removed in a future release.
+ */
+ @Deprecated
public static boolean metaStateHasModifiers(int metaState, int modifiers) {
- return IMPL.metaStateHasModifiers(metaState, modifiers);
+ return KeyEvent.metaStateHasModifiers(metaState, modifiers);
}
+ /**
+ * @deprecated Call {@link KeyEvent#metaStateHasNoModifiers(int)} directly. This method will be
+ * removed in a future release.
+ */
+ @Deprecated
public static boolean metaStateHasNoModifiers(int metaState) {
- return IMPL.metaStateHasNoModifiers(metaState);
+ return KeyEvent.metaStateHasNoModifiers(metaState);
}
+ /**
+ * @deprecated Call {@link KeyEvent#hasModifiers(int)} directly. This method will be removed in
+ * a future release.
+ */
+ @Deprecated
public static boolean hasModifiers(KeyEvent event, int modifiers) {
- return IMPL.metaStateHasModifiers(event.getMetaState(), modifiers);
+ return event.hasModifiers(modifiers);
}
+ /**
+ * @deprecated Call {@link KeyEvent#hasNoModifiers()} directly. This method will be removed in a
+ * future release.
+ */
+ @Deprecated
public static boolean hasNoModifiers(KeyEvent event) {
- return IMPL.metaStateHasNoModifiers(event.getMetaState());
+ return event.hasNoModifiers();
}
/**
@@ -190,11 +107,16 @@
@Deprecated
public static boolean dispatch(KeyEvent event, KeyEvent.Callback receiver, Object state,
Object target) {
- return event.dispatch(receiver, (KeyEvent.DispatcherState)state, target);
+ return event.dispatch(receiver, (KeyEvent.DispatcherState) state, target);
}
+ /**
+ * @deprecated Call {@link KeyEvent#isCtrlPressed()} directly. This method will be removed
+ * in a future release.
+ */
+ @Deprecated
public static boolean isCtrlPressed(KeyEvent event) {
- return IMPL.isCtrlPressed(event);
+ return event.isCtrlPressed();
}
private KeyEventCompat() {}
diff --git a/core-ui/java/android/support/v4/view/ViewPager.java b/core-ui/java/android/support/v4/view/ViewPager.java
index f88b53e..b70ef43 100644
--- a/core-ui/java/android/support/v4/view/ViewPager.java
+++ b/core-ui/java/android/support/v4/view/ViewPager.java
@@ -23,7 +23,6 @@
import android.graphics.Canvas;
import android.graphics.Rect;
import android.graphics.drawable.Drawable;
-import android.os.Build;
import android.os.Bundle;
import android.os.Parcel;
import android.os.Parcelable;
@@ -2750,14 +2749,10 @@
handled = arrowScroll(FOCUS_RIGHT);
break;
case KeyEvent.KEYCODE_TAB:
- if (Build.VERSION.SDK_INT >= 11) {
- // The focus finder had a bug handling FOCUS_FORWARD and FOCUS_BACKWARD
- // before Android 3.0. Ignore the tab key on those devices.
- if (KeyEventCompat.hasNoModifiers(event)) {
- handled = arrowScroll(FOCUS_FORWARD);
- } else if (KeyEventCompat.hasModifiers(event, KeyEvent.META_SHIFT_ON)) {
- handled = arrowScroll(FOCUS_BACKWARD);
- }
+ if (event.hasNoModifiers()) {
+ handled = arrowScroll(FOCUS_FORWARD);
+ } else if (event.hasModifiers(KeyEvent.META_SHIFT_ON)) {
+ handled = arrowScroll(FOCUS_BACKWARD);
}
break;
}
diff --git a/core-ui/java/android/support/v4/widget/ExploreByTouchHelper.java b/core-ui/java/android/support/v4/widget/ExploreByTouchHelper.java
index a9bc39b..1640100 100644
--- a/core-ui/java/android/support/v4/widget/ExploreByTouchHelper.java
+++ b/core-ui/java/android/support/v4/widget/ExploreByTouchHelper.java
@@ -23,7 +23,6 @@
import android.support.annotation.Nullable;
import android.support.v4.util.SparseArrayCompat;
import android.support.v4.view.AccessibilityDelegateCompat;
-import android.support.v4.view.KeyEventCompat;
import android.support.v4.view.ViewCompat;
import android.support.v4.view.ViewCompat.FocusDirection;
import android.support.v4.view.ViewCompat.FocusRealDirection;
@@ -223,7 +222,7 @@
case KeyEvent.KEYCODE_DPAD_UP:
case KeyEvent.KEYCODE_DPAD_RIGHT:
case KeyEvent.KEYCODE_DPAD_DOWN:
- if (KeyEventCompat.hasNoModifiers(event)) {
+ if (event.hasNoModifiers()) {
final int direction = keyToDirection(keyCode);
final int count = 1 + event.getRepeatCount();
for (int i = 0; i < count; i++) {
@@ -237,7 +236,7 @@
break;
case KeyEvent.KEYCODE_DPAD_CENTER:
case KeyEvent.KEYCODE_ENTER:
- if (KeyEventCompat.hasNoModifiers(event)) {
+ if (event.hasNoModifiers()) {
if (event.getRepeatCount() == 0) {
clickKeyboardFocusedVirtualView();
handled = true;
@@ -245,9 +244,9 @@
}
break;
case KeyEvent.KEYCODE_TAB:
- if (KeyEventCompat.hasNoModifiers(event)) {
+ if (event.hasNoModifiers()) {
handled = moveFocus(View.FOCUS_FORWARD, null);
- } else if (KeyEventCompat.hasModifiers(event, KeyEvent.META_SHIFT_ON)) {
+ } else if (event.hasModifiers(KeyEvent.META_SHIFT_ON)) {
handled = moveFocus(View.FOCUS_BACKWARD, null);
}
break;
diff --git a/v7/appcompat/src/android/support/v7/app/AppCompatActivity.java b/v7/appcompat/src/android/support/v7/app/AppCompatActivity.java
index 65abe2e..8f15a39 100644
--- a/v7/appcompat/src/android/support/v7/app/AppCompatActivity.java
+++ b/v7/appcompat/src/android/support/v7/app/AppCompatActivity.java
@@ -31,7 +31,6 @@
import android.support.v4.app.FragmentActivity;
import android.support.v4.app.NavUtils;
import android.support.v4.app.TaskStackBuilder;
-import android.support.v4.view.KeyEventCompat;
import android.support.v7.view.ActionMode;
import android.support.v7.widget.Toolbar;
import android.support.v7.widget.VectorEnabledTintResources;
@@ -523,8 +522,8 @@
@Override
public boolean dispatchKeyEvent(KeyEvent event) {
- if (KeyEventCompat.isCtrlPressed(event) &&
- event.getUnicodeChar(event.getMetaState() & ~KeyEvent.META_CTRL_MASK) == '<') {
+ if (event.isCtrlPressed()
+ && event.getUnicodeChar(event.getMetaState() & ~KeyEvent.META_CTRL_MASK) == '<') {
// Capture the Control-< and send focus to the ActionBar
final int action = event.getAction();
if (action == KeyEvent.ACTION_DOWN) {
diff --git a/v7/appcompat/src/android/support/v7/widget/SearchView.java b/v7/appcompat/src/android/support/v7/widget/SearchView.java
index 755b35e..0fca1f7 100644
--- a/v7/appcompat/src/android/support/v7/widget/SearchView.java
+++ b/v7/appcompat/src/android/support/v7/widget/SearchView.java
@@ -45,7 +45,6 @@
import android.support.v4.os.ParcelableCompat;
import android.support.v4.os.ParcelableCompatCreatorCallbacks;
import android.support.v4.view.AbsSavedState;
-import android.support.v4.view.KeyEventCompat;
import android.support.v4.view.ViewCompat;
import android.support.v4.widget.CursorAdapter;
import android.support.v7.appcompat.R;
@@ -1068,7 +1067,7 @@
// If there is text in the query box, handle enter, and action keys
// The search key is handled by the dialog's onKeyDown().
- if (!mSearchSrcTextView.isEmpty() && KeyEventCompat.hasNoModifiers(event)) {
+ if (!mSearchSrcTextView.isEmpty() && event.hasNoModifiers()) {
if (event.getAction() == KeyEvent.ACTION_UP) {
if (keyCode == KeyEvent.KEYCODE_ENTER) {
v.cancelLongPress();
@@ -1097,7 +1096,7 @@
if (mSuggestionsAdapter == null) {
return false;
}
- if (event.getAction() == KeyEvent.ACTION_DOWN && KeyEventCompat.hasNoModifiers(event)) {
+ if (event.getAction() == KeyEvent.ACTION_DOWN && event.hasNoModifiers()) {
// First, check for enter or search (both of which we'll treat as a
// "click")
if (keyCode == KeyEvent.KEYCODE_ENTER || keyCode == KeyEvent.KEYCODE_SEARCH