mirror of
https://gitlab.futo.org/keyboard/latinime.git
synced 2024-09-28 14:54:30 +01:00
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
This commit is contained in:
parent
3c6ac75c48
commit
15480481be
@ -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" />
|
||||
|
28
java/res/values-v21/themes-lxx.xml
Normal file
28
java/res/values-v21/themes-lxx.xml
Normal file
@ -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>
|
@ -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 -->
|
||||
|
@ -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>
|
||||
|
@ -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"
|
||||
|
@ -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>
|
||||
|
@ -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>
|
||||
|
@ -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>
|
||||
|
@ -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>
|
||||
|
@ -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"
|
||||
|
@ -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;
|
||||
|
@ -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);
|
||||
}
|
||||
}
|
@ -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());
|
||||
}
|
||||
}
|
||||
}
|
@ -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) {
|
||||
|
Loading…
Reference in New Issue
Block a user