Dynamically determine key preview backing view height
Bug: 6023947 Change-Id: I53a5c0eb99100a0dfe3e025808f5dc55747d1287
This commit is contained in:
parent
c85dde47e8
commit
710c69fc82
8 changed files with 55 additions and 14 deletions
|
@ -20,15 +20,15 @@
|
|||
|
||||
<com.android.inputmethod.latin.InputView
|
||||
xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
xmlns:latin="http://schemas.android.com/apk/res/com.android.inputmethod.latin"
|
||||
android:orientation="vertical"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
>
|
||||
<!-- 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="@dimen/key_preview_backing_height" />
|
||||
android:layout_height="0dip" />
|
||||
|
||||
<!-- On tablets, the suggestions strip is centered with horizontal paddings on both sides
|
||||
because width of the landscape mode is too long for the suggestions strip. This
|
||||
|
|
|
@ -61,8 +61,6 @@
|
|||
<dimen name="more_suggestions_row_height">36dip</dimen>
|
||||
<integer name="max_more_suggestions_row">2</integer>
|
||||
<fraction name="min_more_suggestions_width">60%</fraction>
|
||||
<!-- key_preview_backing_height = more_suggestions_row_height * max_more_suggestions_row -->
|
||||
<dimen name="key_preview_backing_height">72dip</dimen>
|
||||
<!-- Amount of allowance for selecting keys in a mini popup keyboard by sliding finger. -->
|
||||
<!-- popup_key_height x 1.2 -->
|
||||
<dimen name="mini_keyboard_slide_allowance">0.336in</dimen>
|
||||
|
|
|
@ -52,6 +52,4 @@
|
|||
<dimen name="suggestions_strip_padding">40.0mm</dimen>
|
||||
<integer name="max_more_suggestions_row">5</integer>
|
||||
<fraction name="min_more_suggestions_width">50%</fraction>
|
||||
<!-- key_preview_backing_height = more_suggestions_row_height * max_more_suggestions_row -->
|
||||
<dimen name="key_preview_backing_height">220dip</dimen>
|
||||
</resources>
|
||||
|
|
|
@ -69,8 +69,6 @@
|
|||
<dimen name="more_suggestions_row_height">44dip</dimen>
|
||||
<integer name="max_more_suggestions_row">6</integer>
|
||||
<fraction name="min_more_suggestions_width">90%</fraction>
|
||||
<!-- key_preview_backing_height = more_suggestions_row_height * max_more_suggestions_row -->
|
||||
<dimen name="key_preview_backing_height">264dip</dimen>
|
||||
<dimen name="suggestions_strip_padding">15.0mm</dimen>
|
||||
<dimen name="suggestion_min_width">0.3in</dimen>
|
||||
<dimen name="suggestion_padding">12dip</dimen>
|
||||
|
|
|
@ -72,8 +72,6 @@
|
|||
<dimen name="more_suggestions_row_height">44dip</dimen>
|
||||
<integer name="max_more_suggestions_row">6</integer>
|
||||
<fraction name="min_more_suggestions_width">90%</fraction>
|
||||
<!-- key_preview_backing_height = more_suggestions_row_height * max_more_suggestions_row -->
|
||||
<dimen name="key_preview_backing_height">264dip</dimen>
|
||||
<dimen name="suggestions_strip_padding">15.0mm</dimen>
|
||||
<dimen name="suggestion_min_width">46dip</dimen>
|
||||
<dimen name="suggestion_padding">8dip</dimen>
|
||||
|
|
|
@ -86,8 +86,6 @@
|
|||
<integer name="max_more_suggestions_row">6</integer>
|
||||
<fraction name="min_more_suggestions_width">90%</fraction>
|
||||
<fraction name="more_suggestions_info_ratio">18%</fraction>
|
||||
<!-- key_preview_backing_height = more_suggestions_row_height * max_more_suggestions_row -->
|
||||
<dimen name="key_preview_backing_height">240dip</dimen>
|
||||
<dimen name="suggestions_strip_padding">0dip</dimen>
|
||||
<dimen name="suggestion_min_width">44dip</dimen>
|
||||
<dimen name="suggestion_padding">6dip</dimen>
|
||||
|
|
|
@ -25,6 +25,7 @@ import android.content.IntentFilter;
|
|||
import android.content.SharedPreferences;
|
||||
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;
|
||||
|
@ -43,6 +44,7 @@ import android.view.KeyEvent;
|
|||
import android.view.View;
|
||||
import android.view.ViewGroup;
|
||||
import android.view.ViewParent;
|
||||
import android.view.ViewGroup.LayoutParams;
|
||||
import android.view.inputmethod.CompletionInfo;
|
||||
import android.view.inputmethod.EditorInfo;
|
||||
import android.view.inputmethod.ExtractedText;
|
||||
|
@ -1048,12 +1050,34 @@ public class LatinIME extends InputMethodServiceCompatWrapper implements Keyboar
|
|||
setSuggestionStripShownInternal(shown, /* needsInputViewShown */true);
|
||||
}
|
||||
|
||||
private void adjustInputViewHeight() {
|
||||
if (mKeyPreviewBackingView.getHeight() > 0) {
|
||||
return;
|
||||
}
|
||||
|
||||
final KeyboardView keyboardView = mKeyboardSwitcher.getKeyboardView();
|
||||
if (keyboardView == null) return;
|
||||
final int keyboardHeight = keyboardView.getHeight();
|
||||
final int suggestionsHeight = mSuggestionsContainer.getHeight();
|
||||
final int displayHeight = mResources.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 = mSuggestionsView.setMoreSuggestionsHeight(remainingHeight);
|
||||
mKeyPreviewBackingView.setLayoutParams(params);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onComputeInsets(InputMethodService.Insets outInsets) {
|
||||
super.onComputeInsets(outInsets);
|
||||
final KeyboardView inputView = mKeyboardSwitcher.getKeyboardView();
|
||||
if (inputView == null || mSuggestionsContainer == null)
|
||||
return;
|
||||
adjustInputViewHeight();
|
||||
// In fullscreen mode, the height of the extract area managed by InputMethodService should
|
||||
// be considered.
|
||||
// See {@link android.inputmethodservice.InputMethodService#onComputeInsets}.
|
||||
|
|
|
@ -141,7 +141,8 @@ public class SuggestionsView extends RelativeLayout implements OnClickListener,
|
|||
public final int mDividerWidth;
|
||||
public final int mSuggestionsStripHeight;
|
||||
public final int mSuggestionsCountInStrip;
|
||||
public final int mMaxMoreSuggestionsRow;
|
||||
public final int mMoreSuggestionsRowHeight;
|
||||
private int mMaxMoreSuggestionsRow;
|
||||
public final float mMinMoreSuggestionsWidth;
|
||||
public final int mMoreSuggestionsBottomGap;
|
||||
|
||||
|
@ -224,6 +225,8 @@ public class SuggestionsView extends RelativeLayout implements OnClickListener,
|
|||
mCenterSuggestionIndex = mSuggestionsCountInStrip / 2;
|
||||
mMoreSuggestionsBottomGap = res.getDimensionPixelOffset(
|
||||
R.dimen.more_suggestions_bottom_gap);
|
||||
mMoreSuggestionsRowHeight = res.getDimensionPixelSize(
|
||||
R.dimen.more_suggestions_row_height);
|
||||
|
||||
final LayoutInflater inflater = LayoutInflater.from(context);
|
||||
mWordToSaveView = (TextView)inflater.inflate(R.layout.suggestion_word, null);
|
||||
|
@ -231,6 +234,26 @@ public class SuggestionsView extends RelativeLayout implements OnClickListener,
|
|||
mHintToSaveText = context.getText(R.string.hint_add_to_dictionary);
|
||||
}
|
||||
|
||||
public int getMaxMoreSuggestionsRow() {
|
||||
return mMaxMoreSuggestionsRow;
|
||||
}
|
||||
|
||||
private int getMoreSuggestionsHeight() {
|
||||
return mMaxMoreSuggestionsRow * mMoreSuggestionsRowHeight + mMoreSuggestionsBottomGap;
|
||||
}
|
||||
|
||||
public int setMoreSuggestionsHeight(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(Resources res, float textSize, int color) {
|
||||
final Paint paint = new Paint();
|
||||
paint.setAntiAlias(true);
|
||||
|
@ -642,6 +665,10 @@ public class SuggestionsView extends RelativeLayout implements OnClickListener,
|
|||
}
|
||||
}
|
||||
|
||||
public int setMoreSuggestionsHeight(int remainingHeight) {
|
||||
return mParams.setMoreSuggestionsHeight(remainingHeight);
|
||||
}
|
||||
|
||||
public boolean isShowingAddToDictionaryHint() {
|
||||
return mSuggestionsStrip.getChildCount() > 0
|
||||
&& mSuggestionsStrip.getChildAt(0) == mParams.mWordToSaveView;
|
||||
|
@ -757,7 +784,7 @@ public class SuggestionsView extends RelativeLayout implements OnClickListener,
|
|||
final MoreSuggestions.Builder builder = mMoreSuggestionsBuilder;
|
||||
builder.layout(mSuggestions, params.mSuggestionsCountInStrip, maxWidth,
|
||||
(int)(maxWidth * params.mMinMoreSuggestionsWidth),
|
||||
params.mMaxMoreSuggestionsRow);
|
||||
params.getMaxMoreSuggestionsRow());
|
||||
mMoreSuggestionsView.setKeyboard(builder.build());
|
||||
container.measure(
|
||||
ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT);
|
||||
|
|
Loading…
Reference in a new issue