Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit afb8e070 authored by Ken Wakasa's avatar Ken Wakasa Committed by Android Git Automerger
Browse files

am 2f95baaa: Merge "Revert "Remove key preview backing view""

* commit '2f95baaa':
  Revert "Remove key preview backing view"
parents eca8832b 2f95baaa
Loading
Loading
Loading
Loading
+10 −2
Original line number Diff line number Diff line
@@ -23,8 +23,13 @@
    android:orientation="vertical"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:gravity="bottom|center_horizontal"
>
    <!-- The height of key_preview_backing view will automatically be determined by code. -->
    <View
        android:id="@+id/key_preview_backing"
        android:layout_width="match_parent"
        android:layout_height="0dp" />

    <!-- To ensure that key preview popup is correctly placed when the current system locale is
         one of RTL locales, layoutDirection="ltr" is needed in the SDK version 17+. -->
    <com.android.inputmethod.latin.suggestions.SuggestionStripView
@@ -32,14 +37,17 @@
        android:layoutDirection="ltr"
        android:layout_width="match_parent"
        android:layout_height="@dimen/suggestions_strip_height"
        android:gravity="center_vertical"
        android:paddingRight="@dimen/suggestions_strip_padding"
        android:paddingLeft="@dimen/suggestions_strip_padding"
        style="?attr/suggestionStripViewStyle" />

    <!-- To ensure that key preview popup is correctly placed when the current system locale is
         one of RTL locales, layoutDirection="ltr" is needed in the SDK version 17+. -->
    <com.android.inputmethod.keyboard.MainKeyboardView
        android:id="@+id/keyboard_view"
        android:layoutDirection="ltr"
        android:layout_width="wrap_content"
        android:layout_alignParentBottom="true"
        android:layout_width="match_parent"
        android:layout_height="wrap_content" />
</com.android.inputmethod.latin.InputView>
+63 −47
Original line number Diff line number Diff line
@@ -31,6 +31,7 @@ import android.content.SharedPreferences;
import android.content.pm.PackageInfo;
import android.content.res.Configuration;
import android.content.res.Resources;
import android.graphics.Rect;
import android.inputmethodservice.InputMethodService;
import android.media.AudioManager;
import android.net.ConnectivityManager;
@@ -50,6 +51,7 @@ import android.util.Printer;
import android.view.KeyCharacterMap;
import android.view.KeyEvent;
import android.view.View;
import android.view.ViewGroup.LayoutParams;
import android.view.Window;
import android.view.WindowManager;
import android.view.inputmethod.CompletionInfo;
@@ -153,8 +155,8 @@ public class LatinIME extends InputMethodService implements KeyboardActionListen

    private final Settings mSettings;

    private View mInputView;
    private int mInputViewMinHeight;
    private View mExtractArea;
    private View mKeyPreviewBackingView;
    private SuggestionStripView mSuggestionStripView;
    // Never null
    private SuggestedWords mSuggestedWords = SuggestedWords.EMPTY;
@@ -673,25 +675,17 @@ public class LatinIME extends InputMethodService implements KeyboardActionListen
        return mKeyboardSwitcher.onCreateInputView(mIsHardwareAcceleratedDrawingEnabled);
    }

    private void setInputViewMinHeight(final int minHeight) {
        if (mInputView != null && mInputViewMinHeight != minHeight) {
            mInputView.setMinimumHeight(minHeight);
            mInputViewMinHeight = minHeight;
        }
    }

    @Override
    public void setInputView(final View inputView) {
        super.setInputView(inputView);
        mInputView = inputView;
        setInputViewMinHeight(0);
        mSuggestionStripView = (SuggestionStripView)inputView.findViewById(
                R.id.suggestion_strip_view);
        if (mSuggestionStripView != null) {
            mSuggestionStripView.setListener(this, inputView);
        }
    public void setInputView(final View view) {
        super.setInputView(view);
        mExtractArea = getWindow().getWindow().getDecorView()
                .findViewById(android.R.id.extractArea);
        mKeyPreviewBackingView = view.findViewById(R.id.key_preview_backing);
        mSuggestionStripView = (SuggestionStripView)view.findViewById(R.id.suggestion_strip_view);
        if (mSuggestionStripView != null)
            mSuggestionStripView.setListener(this, view);
        if (LatinImeLogger.sVISUALDEBUG) {
            inputView.setBackgroundColor(0x10FF0000);
            mKeyPreviewBackingView.setBackgroundColor(0x10FF0000);
        }
    }

@@ -1169,11 +1163,6 @@ public class LatinIME extends InputMethodService implements KeyboardActionListen
                mSuggestionStripView.setVisibility(
                        shouldShowSuggestions ? View.VISIBLE : View.INVISIBLE);
            }
            if (shouldShowSuggestions && mainKeyboardView != null) {
                final int remainingHeight = getWindow().getWindow().getDecorView().getHeight()
                        - mainKeyboardView.getHeight() - mSuggestionStripView.getHeight();
                mSuggestionStripView.setMoreSuggestionsHeight(remainingHeight);
            }
        }
    }

@@ -1181,6 +1170,31 @@ public class LatinIME extends InputMethodService implements KeyboardActionListen
        setSuggestionStripShownInternal(shown, /* needsInputViewShown */true);
    }

    private int getAdjustedBackingViewHeight() {
        final int currentHeight = mKeyPreviewBackingView.getHeight();
        if (currentHeight > 0) {
            return currentHeight;
        }

        final MainKeyboardView mainKeyboardView = mKeyboardSwitcher.getMainKeyboardView();
        if (mainKeyboardView == null) {
            return 0;
        }
        final int keyboardHeight = mainKeyboardView.getHeight();
        final int suggestionsHeight = mSuggestionStripView.getHeight();
        final int displayHeight = getResources().getDisplayMetrics().heightPixels;
        final Rect rect = new Rect();
        mKeyPreviewBackingView.getWindowVisibleDisplayFrame(rect);
        final int notificationBarHeight = rect.top;
        final int remainingHeight = displayHeight - notificationBarHeight - suggestionsHeight
                - keyboardHeight;

        final LayoutParams params = mKeyPreviewBackingView.getLayoutParams();
        params.height = mSuggestionStripView.setMoreSuggestionsHeight(remainingHeight);
        mKeyPreviewBackingView.setLayoutParams(params);
        return params.height;
    }

    @Override
    public void onComputeInsets(final InputMethodService.Insets outInsets) {
        super.onComputeInsets(outInsets);
@@ -1188,30 +1202,32 @@ public class LatinIME extends InputMethodService implements KeyboardActionListen
        if (mainKeyboardView == null || mSuggestionStripView == null) {
            return;
        }
        // This method is never called when in fullscreen mode.
        // The contentTop is the top coordinate of the keyboard. The application behind will be
        // resized/panned above this coordibnate to be able to show an input field.
        final int contentTop = mInputView.getHeight() - mainKeyboardView.getHeight();
        final int suggestionsHeight = (mSuggestionStripView.getVisibility() == View.VISIBLE)
                ? mSuggestionStripView.getHeight() : 0;
        // The visibleTop is the top coordinates of the visible part of this IME. The application
        // behind will never be resized, but may be panned or scrolled.
        final int visibleTop = mainKeyboardView.isShowingMoreKeysPanel() ? 0
                : contentTop - suggestionsHeight;
        outInsets.contentTopInsets = contentTop;
        outInsets.visibleTopInsets = visibleTop;
        final int adjustedBackingHeight = getAdjustedBackingViewHeight();
        final boolean backingGone = (mKeyPreviewBackingView.getVisibility() == View.GONE);
        final int backingHeight = backingGone ? 0 : adjustedBackingHeight;
        // In fullscreen mode, the height of the extract area managed by InputMethodService should
        // be considered.
        // See {@link android.inputmethodservice.InputMethodService#onComputeInsets}.
        final int extractHeight = isFullscreenMode() ? mExtractArea.getHeight() : 0;
        final int suggestionsHeight = (mSuggestionStripView.getVisibility() == View.GONE) ? 0
                : mSuggestionStripView.getHeight();
        final int extraHeight = extractHeight + backingHeight + suggestionsHeight;
        int visibleTopY = extraHeight;
        // Need to set touchable region only if input view is being shown
        if (mainKeyboardView.isShown()) {
            final int touchLeft = 0;
            final int touchTop = visibleTop;
            final int touchRight = touchLeft + mainKeyboardView.getWidth();
            final int touchBottom = contentTop + mainKeyboardView.getHeight()
            if (mSuggestionStripView.getVisibility() == View.VISIBLE) {
                visibleTopY -= suggestionsHeight;
            }
            final int touchY = mainKeyboardView.isShowingMoreKeysPanel() ? 0 : visibleTopY;
            final int touchWidth = mainKeyboardView.getWidth();
            final int touchHeight = mainKeyboardView.getHeight() + extraHeight
                    // Extend touchable region below the keyboard.
                    + EXTENDED_TOUCHABLE_REGION_HEIGHT;
            // The touch event on touchableRegion will be delivered to this IME.
            outInsets.touchableRegion.set(touchLeft, touchTop, touchRight, touchBottom);
            outInsets.touchableInsets = InputMethodService.Insets.TOUCHABLE_INSETS_REGION;
            outInsets.touchableRegion.set(0, touchY, touchWidth, touchHeight);
        }
        outInsets.contentTopInsets = visibleTopY;
        outInsets.visibleTopInsets = visibleTopY;
    }

    @Override
@@ -1234,11 +1250,11 @@ public class LatinIME extends InputMethodService implements KeyboardActionListen
    @Override
    public void updateFullscreenMode() {
        super.updateFullscreenMode();
        if (!isFullscreenMode()) {
            // Expand the input view to cover entire display to be able to show key previews and
            // more suggestions view that may be displayed above the keyboard.
            setInputViewMinHeight(getResources().getDisplayMetrics().heightPixels);
        }

        if (mKeyPreviewBackingView == null) return;
        // In fullscreen mode, no need to have extra space to show the key preview.
        // If not, we should have extra space above the keyboard to show the key preview.
        mKeyPreviewBackingView.setVisibility(isFullscreenMode() ? View.GONE : View.VISIBLE);
    }

    // This will reset the whole input state to the starting state. It will clear
+12 −1
Original line number Diff line number Diff line
@@ -165,9 +165,20 @@ final class SuggestionStripLayoutHelper {
        return mMaxMoreSuggestionsRow;
    }

    public void setMoreSuggestionsHeight(final int remainingHeight) {
    private int getMoreSuggestionsHeight() {
        return mMaxMoreSuggestionsRow * mMoreSuggestionsRowHeight + mMoreSuggestionsBottomGap;
    }

    public int setMoreSuggestionsHeight(final int remainingHeight) {
        final int currentHeight = getMoreSuggestionsHeight();
        if (currentHeight <= remainingHeight) {
            return currentHeight;
        }

        mMaxMoreSuggestionsRow = (remainingHeight - mMoreSuggestionsBottomGap)
                / mMoreSuggestionsRowHeight;
        final int newHeight = getMoreSuggestionsHeight();
        return newHeight;
    }

    private static Drawable getMoreSuggestionsHint(final Resources res, final float textSize,
+2 −2
Original line number Diff line number Diff line
@@ -135,8 +135,8 @@ public final class SuggestionStripView extends RelativeLayout implements OnClick
        }
    }

    public void setMoreSuggestionsHeight(final int remainingHeight) {
        mLayoutHelper.setMoreSuggestionsHeight(remainingHeight);
    public int setMoreSuggestionsHeight(final int remainingHeight) {
        return mLayoutHelper.setMoreSuggestionsHeight(remainingHeight);
    }

    public boolean isShowingAddToDictionaryHint() {