Dynamically determine key preview backing view height
Bug: 6023947 Change-Id: I53a5c0eb99100a0dfe3e025808f5dc55747d1287main
parent
c85dde47e8
commit
710c69fc82
|
@ -20,15 +20,15 @@
|
||||||
|
|
||||||
<com.android.inputmethod.latin.InputView
|
<com.android.inputmethod.latin.InputView
|
||||||
xmlns:android="http://schemas.android.com/apk/res/android"
|
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:orientation="vertical"
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
>
|
>
|
||||||
|
<!-- The height of key_preview_backing view will automatically be determined by code. -->
|
||||||
<View
|
<View
|
||||||
android:id="@+id/key_preview_backing"
|
android:id="@+id/key_preview_backing"
|
||||||
android:layout_width="match_parent"
|
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
|
<!-- 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
|
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>
|
<dimen name="more_suggestions_row_height">36dip</dimen>
|
||||||
<integer name="max_more_suggestions_row">2</integer>
|
<integer name="max_more_suggestions_row">2</integer>
|
||||||
<fraction name="min_more_suggestions_width">60%</fraction>
|
<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. -->
|
<!-- Amount of allowance for selecting keys in a mini popup keyboard by sliding finger. -->
|
||||||
<!-- popup_key_height x 1.2 -->
|
<!-- popup_key_height x 1.2 -->
|
||||||
<dimen name="mini_keyboard_slide_allowance">0.336in</dimen>
|
<dimen name="mini_keyboard_slide_allowance">0.336in</dimen>
|
||||||
|
|
|
@ -52,6 +52,4 @@
|
||||||
<dimen name="suggestions_strip_padding">40.0mm</dimen>
|
<dimen name="suggestions_strip_padding">40.0mm</dimen>
|
||||||
<integer name="max_more_suggestions_row">5</integer>
|
<integer name="max_more_suggestions_row">5</integer>
|
||||||
<fraction name="min_more_suggestions_width">50%</fraction>
|
<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>
|
</resources>
|
||||||
|
|
|
@ -69,8 +69,6 @@
|
||||||
<dimen name="more_suggestions_row_height">44dip</dimen>
|
<dimen name="more_suggestions_row_height">44dip</dimen>
|
||||||
<integer name="max_more_suggestions_row">6</integer>
|
<integer name="max_more_suggestions_row">6</integer>
|
||||||
<fraction name="min_more_suggestions_width">90%</fraction>
|
<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="suggestions_strip_padding">15.0mm</dimen>
|
||||||
<dimen name="suggestion_min_width">0.3in</dimen>
|
<dimen name="suggestion_min_width">0.3in</dimen>
|
||||||
<dimen name="suggestion_padding">12dip</dimen>
|
<dimen name="suggestion_padding">12dip</dimen>
|
||||||
|
|
|
@ -72,8 +72,6 @@
|
||||||
<dimen name="more_suggestions_row_height">44dip</dimen>
|
<dimen name="more_suggestions_row_height">44dip</dimen>
|
||||||
<integer name="max_more_suggestions_row">6</integer>
|
<integer name="max_more_suggestions_row">6</integer>
|
||||||
<fraction name="min_more_suggestions_width">90%</fraction>
|
<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="suggestions_strip_padding">15.0mm</dimen>
|
||||||
<dimen name="suggestion_min_width">46dip</dimen>
|
<dimen name="suggestion_min_width">46dip</dimen>
|
||||||
<dimen name="suggestion_padding">8dip</dimen>
|
<dimen name="suggestion_padding">8dip</dimen>
|
||||||
|
|
|
@ -86,8 +86,6 @@
|
||||||
<integer name="max_more_suggestions_row">6</integer>
|
<integer name="max_more_suggestions_row">6</integer>
|
||||||
<fraction name="min_more_suggestions_width">90%</fraction>
|
<fraction name="min_more_suggestions_width">90%</fraction>
|
||||||
<fraction name="more_suggestions_info_ratio">18%</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="suggestions_strip_padding">0dip</dimen>
|
||||||
<dimen name="suggestion_min_width">44dip</dimen>
|
<dimen name="suggestion_min_width">44dip</dimen>
|
||||||
<dimen name="suggestion_padding">6dip</dimen>
|
<dimen name="suggestion_padding">6dip</dimen>
|
||||||
|
|
|
@ -25,6 +25,7 @@ import android.content.IntentFilter;
|
||||||
import android.content.SharedPreferences;
|
import android.content.SharedPreferences;
|
||||||
import android.content.res.Configuration;
|
import android.content.res.Configuration;
|
||||||
import android.content.res.Resources;
|
import android.content.res.Resources;
|
||||||
|
import android.graphics.Rect;
|
||||||
import android.inputmethodservice.InputMethodService;
|
import android.inputmethodservice.InputMethodService;
|
||||||
import android.media.AudioManager;
|
import android.media.AudioManager;
|
||||||
import android.net.ConnectivityManager;
|
import android.net.ConnectivityManager;
|
||||||
|
@ -43,6 +44,7 @@ import android.view.KeyEvent;
|
||||||
import android.view.View;
|
import android.view.View;
|
||||||
import android.view.ViewGroup;
|
import android.view.ViewGroup;
|
||||||
import android.view.ViewParent;
|
import android.view.ViewParent;
|
||||||
|
import android.view.ViewGroup.LayoutParams;
|
||||||
import android.view.inputmethod.CompletionInfo;
|
import android.view.inputmethod.CompletionInfo;
|
||||||
import android.view.inputmethod.EditorInfo;
|
import android.view.inputmethod.EditorInfo;
|
||||||
import android.view.inputmethod.ExtractedText;
|
import android.view.inputmethod.ExtractedText;
|
||||||
|
@ -1048,12 +1050,34 @@ public class LatinIME extends InputMethodServiceCompatWrapper implements Keyboar
|
||||||
setSuggestionStripShownInternal(shown, /* needsInputViewShown */true);
|
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
|
@Override
|
||||||
public void onComputeInsets(InputMethodService.Insets outInsets) {
|
public void onComputeInsets(InputMethodService.Insets outInsets) {
|
||||||
super.onComputeInsets(outInsets);
|
super.onComputeInsets(outInsets);
|
||||||
final KeyboardView inputView = mKeyboardSwitcher.getKeyboardView();
|
final KeyboardView inputView = mKeyboardSwitcher.getKeyboardView();
|
||||||
if (inputView == null || mSuggestionsContainer == null)
|
if (inputView == null || mSuggestionsContainer == null)
|
||||||
return;
|
return;
|
||||||
|
adjustInputViewHeight();
|
||||||
// In fullscreen mode, the height of the extract area managed by InputMethodService should
|
// In fullscreen mode, the height of the extract area managed by InputMethodService should
|
||||||
// be considered.
|
// be considered.
|
||||||
// See {@link android.inputmethodservice.InputMethodService#onComputeInsets}.
|
// See {@link android.inputmethodservice.InputMethodService#onComputeInsets}.
|
||||||
|
|
|
@ -141,7 +141,8 @@ public class SuggestionsView extends RelativeLayout implements OnClickListener,
|
||||||
public final int mDividerWidth;
|
public final int mDividerWidth;
|
||||||
public final int mSuggestionsStripHeight;
|
public final int mSuggestionsStripHeight;
|
||||||
public final int mSuggestionsCountInStrip;
|
public final int mSuggestionsCountInStrip;
|
||||||
public final int mMaxMoreSuggestionsRow;
|
public final int mMoreSuggestionsRowHeight;
|
||||||
|
private int mMaxMoreSuggestionsRow;
|
||||||
public final float mMinMoreSuggestionsWidth;
|
public final float mMinMoreSuggestionsWidth;
|
||||||
public final int mMoreSuggestionsBottomGap;
|
public final int mMoreSuggestionsBottomGap;
|
||||||
|
|
||||||
|
@ -224,6 +225,8 @@ public class SuggestionsView extends RelativeLayout implements OnClickListener,
|
||||||
mCenterSuggestionIndex = mSuggestionsCountInStrip / 2;
|
mCenterSuggestionIndex = mSuggestionsCountInStrip / 2;
|
||||||
mMoreSuggestionsBottomGap = res.getDimensionPixelOffset(
|
mMoreSuggestionsBottomGap = res.getDimensionPixelOffset(
|
||||||
R.dimen.more_suggestions_bottom_gap);
|
R.dimen.more_suggestions_bottom_gap);
|
||||||
|
mMoreSuggestionsRowHeight = res.getDimensionPixelSize(
|
||||||
|
R.dimen.more_suggestions_row_height);
|
||||||
|
|
||||||
final LayoutInflater inflater = LayoutInflater.from(context);
|
final LayoutInflater inflater = LayoutInflater.from(context);
|
||||||
mWordToSaveView = (TextView)inflater.inflate(R.layout.suggestion_word, null);
|
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);
|
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) {
|
private static Drawable getMoreSuggestionsHint(Resources res, float textSize, int color) {
|
||||||
final Paint paint = new Paint();
|
final Paint paint = new Paint();
|
||||||
paint.setAntiAlias(true);
|
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() {
|
public boolean isShowingAddToDictionaryHint() {
|
||||||
return mSuggestionsStrip.getChildCount() > 0
|
return mSuggestionsStrip.getChildCount() > 0
|
||||||
&& mSuggestionsStrip.getChildAt(0) == mParams.mWordToSaveView;
|
&& mSuggestionsStrip.getChildAt(0) == mParams.mWordToSaveView;
|
||||||
|
@ -757,7 +784,7 @@ public class SuggestionsView extends RelativeLayout implements OnClickListener,
|
||||||
final MoreSuggestions.Builder builder = mMoreSuggestionsBuilder;
|
final MoreSuggestions.Builder builder = mMoreSuggestionsBuilder;
|
||||||
builder.layout(mSuggestions, params.mSuggestionsCountInStrip, maxWidth,
|
builder.layout(mSuggestions, params.mSuggestionsCountInStrip, maxWidth,
|
||||||
(int)(maxWidth * params.mMinMoreSuggestionsWidth),
|
(int)(maxWidth * params.mMinMoreSuggestionsWidth),
|
||||||
params.mMaxMoreSuggestionsRow);
|
params.getMaxMoreSuggestionsRow());
|
||||||
mMoreSuggestionsView.setKeyboard(builder.build());
|
mMoreSuggestionsView.setKeyboard(builder.build());
|
||||||
container.measure(
|
container.measure(
|
||||||
ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT);
|
ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT);
|
||||||
|
|
Loading…
Reference in New Issue