diff options
author | 2014-10-07 15:11:43 +0900 | |
---|---|---|
committer | 2014-10-09 12:39:15 +0900 | |
commit | 15480481be790c913b0117d0841565efd399cd01 (patch) | |
tree | bf7e8d74f619ec855b268b8ce6e6da32eacc860a | |
parent | 3c6ac75c48e0f57d389305c9c22a3be960682ed2 (diff) | |
download | latinime-15480481be790c913b0117d0841565efd399cd01.tar.gz latinime-15480481be790c913b0117d0841565efd399cd01.tar.xz latinime-15480481be790c913b0117d0841565efd399cd01.zip |
Add keyboard shadow
This CL sets 8dp elevation ot input view in order to cast a shadow
onto underlying application.
Bug: 16210054
Change-Id: I7779c63612fc88e24dde65de3e4e7a45b9d1762f
-rw-r--r-- | java/res/layout/input_view.xml | 3 | ||||
-rw-r--r-- | java/res/values-v21/themes-lxx.xml | 28 | ||||
-rw-r--r-- | java/res/values/attrs.xml | 2 | ||||
-rw-r--r-- | java/res/values/themes-common.xml | 1 | ||||
-rw-r--r-- | java/res/values/themes-holo.xml | 4 | ||||
-rw-r--r-- | java/res/values/themes-ics.xml | 1 | ||||
-rw-r--r-- | java/res/values/themes-klp.xml | 1 | ||||
-rw-r--r-- | java/res/values/themes-lxx-dark.xml | 1 | ||||
-rw-r--r-- | java/res/values/themes-lxx-light.xml | 1 | ||||
-rw-r--r-- | java/res/values/themes-lxx.xml | 4 | ||||
-rw-r--r-- | java/src/com/android/inputmethod/compat/ViewCompatUtils.java | 7 | ||||
-rw-r--r-- | java/src/com/android/inputmethod/compat/ViewOutlineProviderCompatUtils.java | 42 | ||||
-rw-r--r-- | java/src/com/android/inputmethod/compat/ViewOutlineProviderCompatUtilsLXX.java | 72 | ||||
-rw-r--r-- | java/src/com/android/inputmethod/latin/LatinIME.java | 6 |
14 files changed, 165 insertions, 8 deletions
diff --git a/java/res/layout/input_view.xml b/java/res/layout/input_view.xml index 46551f63f..ae3c19db5 100644 --- a/java/res/layout/input_view.xml +++ b/java/res/layout/input_view.xml @@ -21,7 +21,8 @@ <com.android.inputmethod.latin.InputView xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" - android:layout_height="wrap_content"> + android:layout_height="wrap_content" + style="?attr/inputViewStyle"> <include android:id="@+id/main_keyboard_frame" layout="@layout/main_keyboard_frame" /> diff --git a/java/res/values-v21/themes-lxx.xml b/java/res/values-v21/themes-lxx.xml new file mode 100644 index 000000000..5a6017cce --- /dev/null +++ b/java/res/values-v21/themes-lxx.xml @@ -0,0 +1,28 @@ +<?xml version="1.0" encoding="utf-8"?> +<!-- +/* +** +** Copyright 2014, 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. +*/ +--> + +<resources xmlns:android="http://schemas.android.com/apk/res/android"> + <style + name="InputView.LXX" + parent="InputView" + > + <item name="android:elevation">8dp</item> + </style> +</resources> diff --git a/java/res/values/attrs.xml b/java/res/values/attrs.xml index f2072fd37..be35d131d 100644 --- a/java/res/values/attrs.xml +++ b/java/res/values/attrs.xml @@ -20,6 +20,8 @@ <resources> <declare-styleable name="KeyboardTheme"> + <!-- InputView style --> + <attr name="inputViewStyle" format="reference" /> <!-- Keyboard style --> <attr name="keyboardStyle" format="reference" /> <!-- KeyboardView style --> diff --git a/java/res/values/themes-common.xml b/java/res/values/themes-common.xml index 110f6b792..f7cb10f93 100644 --- a/java/res/values/themes-common.xml +++ b/java/res/values/themes-common.xml @@ -20,6 +20,7 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android"> <style name="KeyboardIcons" /> + <style name="InputView" /> <!-- Default theme values --> <style name="Keyboard"> <item name="rowHeight">25%p</item> diff --git a/java/res/values/themes-holo.xml b/java/res/values/themes-holo.xml index 9f1bd2f78..efac65627 100644 --- a/java/res/values/themes-holo.xml +++ b/java/res/values/themes-holo.xml @@ -19,6 +19,10 @@ --> <resources xmlns:android="http://schemas.android.com/apk/res/android"> + <style + name="InputView.Holo" + parent="InputView" + /> <!-- Holo KeyboardView theme (ICS and KLP) --> <style name="KeyboardView.Holo" diff --git a/java/res/values/themes-ics.xml b/java/res/values/themes-ics.xml index bfbac0a94..ecf40e4e6 100644 --- a/java/res/values/themes-ics.xml +++ b/java/res/values/themes-ics.xml @@ -20,6 +20,7 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android"> <style name="KeyboardTheme.ICS" parent="KeyboardIcons.Holo"> + <item name="inputViewStyle">@style/InputView.Holo</item> <item name="keyboardStyle">@style/Keyboard.ICS</item> <item name="keyboardViewStyle">@style/KeyboardView.ICS</item> <item name="mainKeyboardViewStyle">@style/MainKeyboardView.ICS</item> diff --git a/java/res/values/themes-klp.xml b/java/res/values/themes-klp.xml index 36b1fc117..de1cd9bf1 100644 --- a/java/res/values/themes-klp.xml +++ b/java/res/values/themes-klp.xml @@ -20,6 +20,7 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android"> <style name="KeyboardTheme.KLP" parent="KeyboardIcons.Holo"> + <item name="inputViewStyle">@style/InputView.Holo</item> <item name="keyboardStyle">@style/Keyboard.KLP</item> <item name="keyboardViewStyle">@style/KeyboardView.KLP</item> <item name="mainKeyboardViewStyle">@style/MainKeyboardView.KLP</item> diff --git a/java/res/values/themes-lxx-dark.xml b/java/res/values/themes-lxx-dark.xml index 67f94f329..b081772e9 100644 --- a/java/res/values/themes-lxx-dark.xml +++ b/java/res/values/themes-lxx-dark.xml @@ -20,6 +20,7 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android"> <style name="KeyboardTheme.LXX_Dark" parent="KeyboardIcons.LXX_Dark"> + <item name="inputViewStyle">@style/InputView.LXX</item> <item name="keyboardStyle">@style/Keyboard.LXX_Dark</item> <item name="keyboardViewStyle">@style/KeyboardView.LXX_Dark</item> <item name="mainKeyboardViewStyle">@style/MainKeyboardView.LXX_Dark</item> diff --git a/java/res/values/themes-lxx-light.xml b/java/res/values/themes-lxx-light.xml index be817f46a..3d294e450 100644 --- a/java/res/values/themes-lxx-light.xml +++ b/java/res/values/themes-lxx-light.xml @@ -20,6 +20,7 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android"> <style name="KeyboardTheme.LXX_Light" parent="KeyboardIcons.LXX_Light"> + <item name="inputViewStyle">@style/InputView.LXX</item> <item name="keyboardStyle">@style/Keyboard.LXX_Light</item> <item name="keyboardViewStyle">@style/KeyboardView.LXX_Light</item> <item name="mainKeyboardViewStyle">@style/MainKeyboardView.LXX_Light</item> diff --git a/java/res/values/themes-lxx.xml b/java/res/values/themes-lxx.xml index c72188871..463306b43 100644 --- a/java/res/values/themes-lxx.xml +++ b/java/res/values/themes-lxx.xml @@ -19,6 +19,10 @@ --> <resources xmlns:android="http://schemas.android.com/apk/res/android"> + <style + name="InputView.LXX" + parent="InputView" + /> <!-- LXX KeyboardView theme (LXX_Light and LXX_Dark) --> <style name="KeyboardView.LXX" diff --git a/java/src/com/android/inputmethod/compat/ViewCompatUtils.java b/java/src/com/android/inputmethod/compat/ViewCompatUtils.java index 0f00be133..16260ab6a 100644 --- a/java/src/com/android/inputmethod/compat/ViewCompatUtils.java +++ b/java/src/com/android/inputmethod/compat/ViewCompatUtils.java @@ -31,9 +31,6 @@ public final class ViewCompatUtils { private static final Method METHOD_setPaddingRelative = CompatUtils.getMethod( View.class, "setPaddingRelative", int.class, int.class, int.class, int.class); - // Note that View.setElevation(float) has been introduced in API level 21. - private static final Method METHOD_setElevation = CompatUtils.getMethod( - View.class, "setElevation", float.class); // Note that View.setTextAlignment(int) has been introduced in API level 17. private static final Method METHOD_setTextAlignment = CompatUtils.getMethod( View.class, "setTextAlignment", int.class); @@ -58,10 +55,6 @@ public final class ViewCompatUtils { CompatUtils.invoke(view, null, METHOD_setPaddingRelative, start, top, end, bottom); } - public static void setElevation(final View view, final float elevation) { - CompatUtils.invoke(view, null, METHOD_setElevation, elevation); - } - // These TEXT_ALIGNMENT_* constants have been introduced in API 17. public static final int TEXT_ALIGNMENT_INHERIT = 0; public static final int TEXT_ALIGNMENT_GRAVITY = 1; diff --git a/java/src/com/android/inputmethod/compat/ViewOutlineProviderCompatUtils.java b/java/src/com/android/inputmethod/compat/ViewOutlineProviderCompatUtils.java new file mode 100644 index 000000000..52b8b74e8 --- /dev/null +++ b/java/src/com/android/inputmethod/compat/ViewOutlineProviderCompatUtils.java @@ -0,0 +1,42 @@ +/* + * Copyright (C) 2014 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 com.android.inputmethod.compat; + +import android.inputmethodservice.InputMethodService; +import android.view.View; + +public class ViewOutlineProviderCompatUtils { + private ViewOutlineProviderCompatUtils() { + // This utility class is not publicly instantiable. + } + + public interface InsetsUpdater { + public void setInsets(final InputMethodService.Insets insets); + } + + private static final InsetsUpdater EMPTY_INSETS_UPDATER = new InsetsUpdater() { + @Override + public void setInsets(final InputMethodService.Insets insets) {} + }; + + public static InsetsUpdater setInsetsOutlineProvider(final View view) { + if (BuildCompatUtils.EFFECTIVE_SDK_INT < BuildCompatUtils.VERSION_CODES_LXX) { + return EMPTY_INSETS_UPDATER; + } + return ViewOutlineProviderCompatUtilsLXX.setInsetsOutlineProvider(view); + } +} diff --git a/java/src/com/android/inputmethod/compat/ViewOutlineProviderCompatUtilsLXX.java b/java/src/com/android/inputmethod/compat/ViewOutlineProviderCompatUtilsLXX.java new file mode 100644 index 000000000..f9917ac11 --- /dev/null +++ b/java/src/com/android/inputmethod/compat/ViewOutlineProviderCompatUtilsLXX.java @@ -0,0 +1,72 @@ +/* + * Copyright (C) 2014 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 com.android.inputmethod.compat; + +import android.annotation.TargetApi; +import android.graphics.Outline; +import android.inputmethodservice.InputMethodService; +import android.os.Build; +import android.view.View; +import android.view.ViewOutlineProvider; + +import com.android.inputmethod.compat.ViewOutlineProviderCompatUtils.InsetsUpdater; + +@TargetApi(Build.VERSION_CODES.L) +class ViewOutlineProviderCompatUtilsLXX { + private ViewOutlineProviderCompatUtilsLXX() { + // This utility class is not publicly instantiable. + } + + static InsetsUpdater setInsetsOutlineProvider(final View view) { + final InsetsOutlineProvider provider = new InsetsOutlineProvider(view); + view.setOutlineProvider(provider); + return provider; + } + + private static class InsetsOutlineProvider extends ViewOutlineProvider + implements InsetsUpdater { + private final View mView; + private static final int NO_DATA = -1; + private int mLastVisibleTopInsets = NO_DATA; + + public InsetsOutlineProvider(final View view) { + mView = view; + view.setOutlineProvider(this); + } + + @Override + public void setInsets(final InputMethodService.Insets insets) { + final int visibleTopInsets = insets.visibleTopInsets; + if (mLastVisibleTopInsets != visibleTopInsets) { + mLastVisibleTopInsets = visibleTopInsets; + mView.invalidateOutline(); + } + } + + @Override + public void getOutline(final View view, final Outline outline) { + if (mLastVisibleTopInsets == NO_DATA) { + // Call default implementation. + ViewOutlineProvider.BACKGROUND.getOutline(view, outline); + return; + } + // TODO: Revisit this when floating/resize keyboard is supported. + outline.setRect( + view.getLeft(), mLastVisibleTopInsets, view.getRight(), view.getBottom()); + } + } +} diff --git a/java/src/com/android/inputmethod/latin/LatinIME.java b/java/src/com/android/inputmethod/latin/LatinIME.java index ec45462c4..415958523 100644 --- a/java/src/com/android/inputmethod/latin/LatinIME.java +++ b/java/src/com/android/inputmethod/latin/LatinIME.java @@ -60,6 +60,8 @@ import com.android.inputmethod.accessibility.AccessibilityUtils; import com.android.inputmethod.annotations.UsedForTesting; import com.android.inputmethod.compat.CursorAnchorInfoCompatWrapper; import com.android.inputmethod.compat.InputMethodServiceCompatUtils; +import com.android.inputmethod.compat.ViewOutlineProviderCompatUtils; +import com.android.inputmethod.compat.ViewOutlineProviderCompatUtils.InsetsUpdater; import com.android.inputmethod.dictionarypack.DictionaryPackConstants; import com.android.inputmethod.event.Event; import com.android.inputmethod.event.HardwareEventDecoder; @@ -154,6 +156,7 @@ public class LatinIME extends InputMethodService implements KeyboardActionListen // TODO: Move these {@link View}s to {@link KeyboardSwitcher}. private View mInputView; + private InsetsUpdater mInsetsUpdater; private SuggestionStripView mSuggestionStripView; private TextView mExtractEditText; @@ -754,6 +757,7 @@ public class LatinIME extends InputMethodService implements KeyboardActionListen public void setInputView(final View view) { super.setInputView(view); mInputView = view; + mInsetsUpdater = ViewOutlineProviderCompatUtils.setInsetsOutlineProvider(view); updateSoftInputWindowLayoutParameters(); mSuggestionStripView = (SuggestionStripView)view.findViewById(R.id.suggestion_strip_view); if (hasSuggestionStripView()) { @@ -1191,6 +1195,7 @@ public class LatinIME extends InputMethodService implements KeyboardActionListen // no visual element will be shown on the screen. outInsets.touchableInsets = inputHeight; outInsets.visibleTopInsets = inputHeight; + mInsetsUpdater.setInsets(outInsets); return; } final int suggestionsHeight = (!mKeyboardSwitcher.isShowingEmojiPalettes() @@ -1211,6 +1216,7 @@ public class LatinIME extends InputMethodService implements KeyboardActionListen } outInsets.contentTopInsets = visibleTopY; outInsets.visibleTopInsets = visibleTopY; + mInsetsUpdater.setInsets(outInsets); } public void startShowingInputView(final boolean needsToLoadKeyboard) { |