From d87f28f1457f5490df3796fa2a8d815b2bcde152 Mon Sep 17 00:00:00 2001 From: "Tadashi G. Takaoka" <takaoka@google.com> Date: Tue, 28 Jun 2011 03:01:35 +0900 Subject: [PATCH] Use left/right-edge popup preview background Bug: 4902361 Change-Id: Iafbadd0e44c0db2fb6a0875c964304bec6ac8cb0 --- .../keyboard_key_feedback_left_ics.xml | 21 ++++++++++++++ .../keyboard_key_feedback_right_ics.xml | 21 ++++++++++++++ java/res/values/attrs.xml | 4 +++ java/res/values/styles.xml | 4 +++ .../inputmethod/keyboard/KeyboardView.java | 29 +++++++++++++------ 5 files changed, 70 insertions(+), 9 deletions(-) create mode 100644 java/res/drawable/keyboard_key_feedback_left_ics.xml create mode 100644 java/res/drawable/keyboard_key_feedback_right_ics.xml diff --git a/java/res/drawable/keyboard_key_feedback_left_ics.xml b/java/res/drawable/keyboard_key_feedback_left_ics.xml new file mode 100644 index 0000000000..b68b37f6bf --- /dev/null +++ b/java/res/drawable/keyboard_key_feedback_left_ics.xml @@ -0,0 +1,21 @@ +<?xml version="1.0" encoding="utf-8"?> +<!-- 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. +--> + +<selector xmlns:android="http://schemas.android.com/apk/res/android"> + <item android:state_long_pressable="true" + android:drawable="@drawable/keyboard_key_feedback_left_more_background_holo" /> + <item android:drawable="@drawable/keyboard_key_feedback_left_background_holo" /> +</selector> diff --git a/java/res/drawable/keyboard_key_feedback_right_ics.xml b/java/res/drawable/keyboard_key_feedback_right_ics.xml new file mode 100644 index 0000000000..830678a5a4 --- /dev/null +++ b/java/res/drawable/keyboard_key_feedback_right_ics.xml @@ -0,0 +1,21 @@ +<?xml version="1.0" encoding="utf-8"?> +<!-- 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. +--> + +<selector xmlns:android="http://schemas.android.com/apk/res/android"> + <item android:state_long_pressable="true" + android:drawable="@drawable/keyboard_key_feedback_right_more_background_holo" /> + <item android:drawable="@drawable/keyboard_key_feedback_right_background_holo" /> +</selector> diff --git a/java/res/values/attrs.xml b/java/res/values/attrs.xml index 6b063efff1..d89f55a50f 100644 --- a/java/res/values/attrs.xml +++ b/java/res/values/attrs.xml @@ -68,6 +68,10 @@ <attr name="keyPreviewLayout" format="reference" /> <!-- The background for key press feedback. --> <attr name="keyPreviewBackground" format="reference" /> + <!-- The background for the left edge key press feedback. --> + <attr name="keyPreviewLeftBackground" format="reference" /> + <!-- The background for the right edge key press feedback. --> + <attr name="keyPreviewRightBackground" format="reference" /> <!-- The background for spacebar press feedback. --> <attr name="keyPreviewSpacebarBackground" format="reference" /> <!-- The text color for key press feedback. --> diff --git a/java/res/values/styles.xml b/java/res/values/styles.xml index 1f1488e262..08301be5c8 100644 --- a/java/res/values/styles.xml +++ b/java/res/values/styles.xml @@ -51,6 +51,8 @@ <item name="keyUppercaseLetterActivatedColor">#CCE0E4E5</item> <item name="keyPreviewLayout">@layout/key_preview</item> <item name="keyPreviewBackground">@drawable/keyboard_key_feedback</item> + <item name="keyPreviewLeftBackground">@null</item> + <item name="keyPreviewRightBackground">@null</item> <item name="keyPreviewSpacebarBackground">@drawable/keyboard_key_feedback</item> <item name="keyPreviewTextColor">#FFFFFFFF</item> <item name="keyPreviewOffset">@dimen/key_preview_offset</item> @@ -152,6 +154,8 @@ <item name="keyUppercaseLetterInactivatedColor">#66E0E4E5</item> <item name="keyUppercaseLetterActivatedColor">#FFFFFFFF</item> <item name="keyPreviewBackground">@drawable/keyboard_key_feedback_ics</item> + <item name="keyPreviewLeftBackground">@drawable/keyboard_key_feedback_left_ics</item> + <item name="keyPreviewRightBackground">@drawable/keyboard_key_feedback_right_ics</item> <item name="keyPreviewSpacebarBackground">@drawable/transparent</item> <item name="keyPreviewTextColor">#FFFFFFFF</item> <item name="keyPreviewHeight">@dimen/key_preview_height_ics</item> diff --git a/java/src/com/android/inputmethod/keyboard/KeyboardView.java b/java/src/com/android/inputmethod/keyboard/KeyboardView.java index 52e2a6a6d0..da738b24cb 100644 --- a/java/src/com/android/inputmethod/keyboard/KeyboardView.java +++ b/java/src/com/android/inputmethod/keyboard/KeyboardView.java @@ -118,6 +118,8 @@ public class KeyboardView extends View implements PointerTracker.UIProxy { private final float mKeyHysteresisDistance; private final float mVerticalCorrection; private final Drawable mPreviewBackground; + private final Drawable mPreviewLeftBackground; + private final Drawable mPreviewRightBackground; private final Drawable mPreviewSpacebarBackground; private final int mPreviewTextColor; private final float mPreviewTextRatio; @@ -203,6 +205,9 @@ public class KeyboardView extends View implements PointerTracker.UIProxy { private static final String KEY_LABEL_REFERENCE_CHAR = "M"; private final int mKeyLabelHorizontalPadding; + private static final int MEASURESPEC_UNSPECIFIED = MeasureSpec.makeMeasureSpec( + 0, MeasureSpec.UNSPECIFIED); + private final UIHandler mHandler = new UIHandler(this); public static class UIHandler extends StaticInnerHandlerWrapper<KeyboardView> { @@ -354,6 +359,8 @@ public class KeyboardView extends View implements PointerTracker.UIProxy { mShowKeyPreviewPopup = false; } mPreviewBackground = a.getDrawable(R.styleable.KeyboardView_keyPreviewBackground); + mPreviewLeftBackground = a.getDrawable(R.styleable.KeyboardView_keyPreviewLeftBackground); + mPreviewRightBackground = a.getDrawable(R.styleable.KeyboardView_keyPreviewRightBackground); mPreviewSpacebarBackground = a.getDrawable( R.styleable.KeyboardView_keyPreviewSpacebarBackground); mPreviewOffset = a.getDimensionPixelOffset(R.styleable.KeyboardView_keyPreviewOffset, 0); @@ -1016,21 +1023,25 @@ public class KeyboardView extends View implements PointerTracker.UIProxy { } else { previewText.setBackgroundDrawable(mPreviewBackground); } - // Set the preview background state - previewText.getBackground().setState( - key.mPopupCharacters != null ? LONG_PRESSABLE_STATE_SET : EMPTY_STATE_SET); - previewText.measure(MeasureSpec.makeMeasureSpec(0, MeasureSpec.UNSPECIFIED), - MeasureSpec.makeMeasureSpec(0, MeasureSpec.UNSPECIFIED)); + previewText.measure(MEASURESPEC_UNSPECIFIED, MEASURESPEC_UNSPECIFIED); final int previewWidth = Math.max(previewText.getMeasuredWidth(), keyDrawWidth + previewText.getPaddingLeft() + previewText.getPaddingRight()); final int previewHeight = mPreviewHeight; getLocationInWindow(mCoordinates); - final int previewX = keyDrawX - (previewWidth - keyDrawWidth) / 2 + mCoordinates[0]; + int previewX = keyDrawX - (previewWidth - keyDrawWidth) / 2 + mCoordinates[0]; final int previewY = key.mY - previewHeight + mCoordinates[1] + mPreviewOffset; + if (previewX < 0 && mPreviewLeftBackground != null) { + previewText.setBackgroundDrawable(mPreviewLeftBackground); + previewX = 0; + } else if (previewX + previewWidth > getWidth() && mPreviewRightBackground != null) { + previewText.setBackgroundDrawable(mPreviewRightBackground); + previewX = getWidth() - previewWidth; + } - // Place the key preview. - // TODO: Adjust position of key previews which touch screen edges + // Set the preview background state + previewText.getBackground().setState( + key.mPopupCharacters != null ? LONG_PRESSABLE_STATE_SET : EMPTY_STATE_SET); FrameLayoutCompatUtils.placeViewAt( previewText, previewX, previewY, previewWidth, previewHeight); previewText.setVisibility(VISIBLE); @@ -1147,7 +1158,7 @@ public class KeyboardView extends View implements PointerTracker.UIProxy { miniKeyboardView.setKeyboard(keyboard); container.measure(MeasureSpec.makeMeasureSpec(getWidth(), MeasureSpec.AT_MOST), - MeasureSpec.makeMeasureSpec(0, MeasureSpec.UNSPECIFIED)); + MEASURESPEC_UNSPECIFIED); return miniKeyboardView; } -- GitLab