Loading java/res/layout/suggestions_strip.xml +15 −0 Original line number Diff line number Diff line Loading @@ -25,4 +25,19 @@ android:orientation="horizontal" android:layout_width="match_parent" android:layout_height="match_parent" /> <LinearLayout android:id="@+id/add_to_dictionary_strip" android:orientation="horizontal" android:layout_width="match_parent" android:layout_height="match_parent" android:visibility="invisible"> <include layout="@layout/suggestion_word" android:id="@+id/word_to_save" /> <include layout="@layout/suggestion_divider" /> <include layout="@layout/hint_add_to_dictionary" android:id="@+id/hint_add_to_dictionary" /> </LinearLayout> </merge> java/src/com/android/inputmethod/latin/suggestions/SuggestionStripLayoutHelper.java +11 −45 Original line number Diff line number Diff line Loading @@ -38,7 +38,6 @@ import android.text.style.StyleSpan; import android.text.style.UnderlineSpan; import android.util.AttributeSet; import android.view.Gravity; import android.view.LayoutInflater; import android.view.View; import android.view.View.OnClickListener; import android.view.ViewGroup; Loading Loading @@ -100,10 +99,6 @@ final class SuggestionStripLayoutHelper { private static final int AUTO_CORRECT_UNDERLINE = 0x02; private static final int VALID_TYPED_WORD_BOLD = 0x04; private final TextView mWordToSaveView; private final TextView mLeftwardsArrowView; private final TextView mHintToSaveView; public SuggestionStripLayoutHelper(final Context context, final AttributeSet attrs, final int defStyle, final ArrayList<TextView> wordViews, final ArrayList<View> dividerViews, final ArrayList<TextView> debugInfoViews) { Loading Loading @@ -157,11 +152,6 @@ final class SuggestionStripLayoutHelper { R.dimen.config_more_suggestions_bottom_gap); mMoreSuggestionsRowHeight = res.getDimensionPixelSize( R.dimen.config_more_suggestions_row_height); final LayoutInflater inflater = LayoutInflater.from(context); mWordToSaveView = (TextView)inflater.inflate(R.layout.suggestion_word, null); mLeftwardsArrowView = (TextView)inflater.inflate(R.layout.hint_add_to_dictionary, null); mHintToSaveView = (TextView)inflater.inflate(R.layout.hint_add_to_dictionary, null); } public int getMaxMoreSuggestionsRow() { Loading Loading @@ -466,54 +456,30 @@ final class SuggestionStripLayoutHelper { mMoreSuggestionsAvailable = (suggestedWords.size() > countInStrip); } public void layoutAddToDictionaryHint(final String word, final ViewGroup stripView, final int stripWidth, final CharSequence hintText, final OnClickListener listener) { public void layoutAddToDictionaryHint(final String word, final ViewGroup addToDictionaryStrip, final int stripWidth, final CharSequence hintText) { final int width = stripWidth - mDividerWidth - mPadding * 2; final TextView wordView = mWordToSaveView; final TextView wordView = (TextView)addToDictionaryStrip.findViewById(R.id.word_to_save); wordView.setTextColor(mColorTypedWord); final int wordWidth = (int)(width * mCenterSuggestionWeight); final CharSequence text = getEllipsizedText(word, wordWidth, wordView.getPaint()); final CharSequence wordToSave = getEllipsizedText(word, wordWidth, wordView.getPaint()); final float wordScaleX = wordView.getTextScaleX(); // {@link TextView#setTag()} is used to hold the word to be added to dictionary. The word // will be extracted at {@link #getAddToDictionaryWord()}. wordView.setTag(word); wordView.setText(text); wordView.setText(wordToSave); wordView.setTextScaleX(wordScaleX); stripView.addView(wordView); setLayoutWeight(wordView, mCenterSuggestionWeight, ViewGroup.LayoutParams.MATCH_PARENT); stripView.addView(mDividerViews.get(0)); final TextView leftArrowView = mLeftwardsArrowView; leftArrowView.setTextColor(mColorAutoCorrect); leftArrowView.setText(LEFTWARDS_ARROW); stripView.addView(leftArrowView); final TextView hintView = mHintToSaveView; final TextView hintView = (TextView)addToDictionaryStrip.findViewById( R.id.hint_add_to_dictionary); hintView.setGravity(Gravity.LEFT | Gravity.CENTER_VERTICAL); hintView.setTextColor(mColorAutoCorrect); final int hintWidth = width - wordWidth - leftArrowView.getWidth(); final float hintScaleX = getTextScaleX(hintText, hintWidth, hintView.getPaint()); hintView.setText(hintText); final int hintWidth = width - wordWidth; final String hintWithArrow = LEFTWARDS_ARROW + hintText; final float hintScaleX = getTextScaleX(hintWithArrow, hintWidth, hintView.getPaint()); hintView.setText(hintWithArrow); hintView.setTextScaleX(hintScaleX); stripView.addView(hintView); setLayoutWeight( hintView, 1.0f - mCenterSuggestionWeight, ViewGroup.LayoutParams.MATCH_PARENT); wordView.setOnClickListener(listener); leftArrowView.setOnClickListener(listener); hintView.setOnClickListener(listener); } public String getAddToDictionaryWord() { // String tag is set at // {@link #layoutAddToDictionaryHint(String,ViewGroup,int,CharSequence,OnClickListener}. return (String)mWordToSaveView.getTag(); } public boolean isAddToDictionaryShowing(final View v) { return v == mWordToSaveView || v == mHintToSaveView || v == mLeftwardsArrowView; } private static void setLayoutWeight(final View v, final float weight, final int height) { Loading java/src/com/android/inputmethod/latin/suggestions/SuggestionStripView.java +51 −20 Original line number Diff line number Diff line Loading @@ -56,6 +56,7 @@ public final class SuggestionStripView extends RelativeLayout implements OnClick static final boolean DBG = LatinImeLogger.sDBG; private final ViewGroup mSuggestionsStrip; private final ViewGroup mAddToDictionaryStrip; MainKeyboardView mMainKeyboardView; private final View mMoreSuggestionsContainer; Loading @@ -70,6 +71,32 @@ public final class SuggestionStripView extends RelativeLayout implements OnClick private SuggestedWords mSuggestedWords = SuggestedWords.EMPTY; private final SuggestionStripLayoutHelper mLayoutHelper; private final StripVisibilityGroup mStripVisibilityGroup; private static class StripVisibilityGroup { private final View mSuggestionsStrip; private final View mAddToDictionaryStrip; public StripVisibilityGroup(final View suggestionsStrip, final View addToDictionaryStrip) { mSuggestionsStrip = suggestionsStrip; mAddToDictionaryStrip = addToDictionaryStrip; showSuggestionsStrip(); } public void showSuggestionsStrip() { mSuggestionsStrip.setVisibility(VISIBLE); mAddToDictionaryStrip.setVisibility(INVISIBLE); } public void showAddToDictionaryStrip() { mSuggestionsStrip.setVisibility(INVISIBLE); mAddToDictionaryStrip.setVisibility(VISIBLE); } public boolean isShowingAddToDictionaryStrip() { return mAddToDictionaryStrip.getVisibility() == VISIBLE; } } /** * Construct a {@link SuggestionStripView} for showing suggestions to be picked by the user. Loading @@ -88,6 +115,9 @@ public final class SuggestionStripView extends RelativeLayout implements OnClick inflater.inflate(R.layout.suggestions_strip, this); mSuggestionsStrip = (ViewGroup)findViewById(R.id.suggestions_strip); mAddToDictionaryStrip = (ViewGroup)findViewById(R.id.add_to_dictionary_strip); mStripVisibilityGroup = new StripVisibilityGroup(mSuggestionsStrip, mAddToDictionaryStrip); for (int pos = 0; pos < SuggestedWords.MAX_SUGGESTIONS; pos++) { final TextView word = (TextView)inflater.inflate(R.layout.suggestion_word, null); word.setOnClickListener(this); Loading Loading @@ -137,14 +167,16 @@ public final class SuggestionStripView extends RelativeLayout implements OnClick } public boolean isShowingAddToDictionaryHint() { return mSuggestionsStrip.getChildCount() > 0 && mLayoutHelper.isAddToDictionaryShowing(mSuggestionsStrip.getChildAt(0)); return mStripVisibilityGroup.isShowingAddToDictionaryStrip(); } public void showAddToDictionaryHint(final String word, final CharSequence hintText) { clear(); mLayoutHelper.layoutAddToDictionaryHint( word, mSuggestionsStrip, getWidth(), hintText, this); mLayoutHelper.layoutAddToDictionaryHint(word, mAddToDictionaryStrip, getWidth(), hintText); // {@link TextView#setTag()} is used to hold the word to be added to dictionary. The word // will be extracted at {@link #onClick(View)}. mAddToDictionaryStrip.setTag(word); mAddToDictionaryStrip.setOnClickListener(this); mStripVisibilityGroup.showAddToDictionaryStrip(); } public boolean dismissAddToDictionaryHint() { Loading @@ -157,8 +189,7 @@ public final class SuggestionStripView extends RelativeLayout implements OnClick public void clear() { mSuggestionsStrip.removeAllViews(); removeAllViews(); addView(mSuggestionsStrip); mStripVisibilityGroup.showSuggestionsStrip(); dismissMoreSuggestionsPanel(); } Loading Loading @@ -302,27 +333,27 @@ public final class SuggestionStripView extends RelativeLayout implements OnClick @Override public void onClick(final View view) { if (mLayoutHelper.isAddToDictionaryShowing(view)) { mListener.addWordToUserDictionary(mLayoutHelper.getAddToDictionaryWord()); final Object tag = view.getTag(); // {@link String} tag is set at {@link #showAddToDictionaryHint(String,CharSequence)}. if (tag instanceof String) { final String wordToSave = (String)tag; mListener.addWordToUserDictionary(wordToSave); clear(); return; } final Object tag = view.getTag(); // Integer tag is set at // {@link Integer} tag is set at // {@link SuggestionStripLayoutHelper#setupWordViewsTextAndColor(SuggestedWords,int)} and // {@link SuggestionStripLayoutHelper#layoutPunctuationSuggestions(SuggestedWords,ViewGroup} if (!(tag instanceof Integer)) { return; } if (tag instanceof Integer) { final int index = (Integer) tag; if (index >= mSuggestedWords.size()) { return; } final SuggestedWordInfo wordInfo = mSuggestedWords.getInfo(index); mListener.pickSuggestionManually(index, wordInfo); } } @Override protected void onDetachedFromWindow() { Loading Loading
java/res/layout/suggestions_strip.xml +15 −0 Original line number Diff line number Diff line Loading @@ -25,4 +25,19 @@ android:orientation="horizontal" android:layout_width="match_parent" android:layout_height="match_parent" /> <LinearLayout android:id="@+id/add_to_dictionary_strip" android:orientation="horizontal" android:layout_width="match_parent" android:layout_height="match_parent" android:visibility="invisible"> <include layout="@layout/suggestion_word" android:id="@+id/word_to_save" /> <include layout="@layout/suggestion_divider" /> <include layout="@layout/hint_add_to_dictionary" android:id="@+id/hint_add_to_dictionary" /> </LinearLayout> </merge>
java/src/com/android/inputmethod/latin/suggestions/SuggestionStripLayoutHelper.java +11 −45 Original line number Diff line number Diff line Loading @@ -38,7 +38,6 @@ import android.text.style.StyleSpan; import android.text.style.UnderlineSpan; import android.util.AttributeSet; import android.view.Gravity; import android.view.LayoutInflater; import android.view.View; import android.view.View.OnClickListener; import android.view.ViewGroup; Loading Loading @@ -100,10 +99,6 @@ final class SuggestionStripLayoutHelper { private static final int AUTO_CORRECT_UNDERLINE = 0x02; private static final int VALID_TYPED_WORD_BOLD = 0x04; private final TextView mWordToSaveView; private final TextView mLeftwardsArrowView; private final TextView mHintToSaveView; public SuggestionStripLayoutHelper(final Context context, final AttributeSet attrs, final int defStyle, final ArrayList<TextView> wordViews, final ArrayList<View> dividerViews, final ArrayList<TextView> debugInfoViews) { Loading Loading @@ -157,11 +152,6 @@ final class SuggestionStripLayoutHelper { R.dimen.config_more_suggestions_bottom_gap); mMoreSuggestionsRowHeight = res.getDimensionPixelSize( R.dimen.config_more_suggestions_row_height); final LayoutInflater inflater = LayoutInflater.from(context); mWordToSaveView = (TextView)inflater.inflate(R.layout.suggestion_word, null); mLeftwardsArrowView = (TextView)inflater.inflate(R.layout.hint_add_to_dictionary, null); mHintToSaveView = (TextView)inflater.inflate(R.layout.hint_add_to_dictionary, null); } public int getMaxMoreSuggestionsRow() { Loading Loading @@ -466,54 +456,30 @@ final class SuggestionStripLayoutHelper { mMoreSuggestionsAvailable = (suggestedWords.size() > countInStrip); } public void layoutAddToDictionaryHint(final String word, final ViewGroup stripView, final int stripWidth, final CharSequence hintText, final OnClickListener listener) { public void layoutAddToDictionaryHint(final String word, final ViewGroup addToDictionaryStrip, final int stripWidth, final CharSequence hintText) { final int width = stripWidth - mDividerWidth - mPadding * 2; final TextView wordView = mWordToSaveView; final TextView wordView = (TextView)addToDictionaryStrip.findViewById(R.id.word_to_save); wordView.setTextColor(mColorTypedWord); final int wordWidth = (int)(width * mCenterSuggestionWeight); final CharSequence text = getEllipsizedText(word, wordWidth, wordView.getPaint()); final CharSequence wordToSave = getEllipsizedText(word, wordWidth, wordView.getPaint()); final float wordScaleX = wordView.getTextScaleX(); // {@link TextView#setTag()} is used to hold the word to be added to dictionary. The word // will be extracted at {@link #getAddToDictionaryWord()}. wordView.setTag(word); wordView.setText(text); wordView.setText(wordToSave); wordView.setTextScaleX(wordScaleX); stripView.addView(wordView); setLayoutWeight(wordView, mCenterSuggestionWeight, ViewGroup.LayoutParams.MATCH_PARENT); stripView.addView(mDividerViews.get(0)); final TextView leftArrowView = mLeftwardsArrowView; leftArrowView.setTextColor(mColorAutoCorrect); leftArrowView.setText(LEFTWARDS_ARROW); stripView.addView(leftArrowView); final TextView hintView = mHintToSaveView; final TextView hintView = (TextView)addToDictionaryStrip.findViewById( R.id.hint_add_to_dictionary); hintView.setGravity(Gravity.LEFT | Gravity.CENTER_VERTICAL); hintView.setTextColor(mColorAutoCorrect); final int hintWidth = width - wordWidth - leftArrowView.getWidth(); final float hintScaleX = getTextScaleX(hintText, hintWidth, hintView.getPaint()); hintView.setText(hintText); final int hintWidth = width - wordWidth; final String hintWithArrow = LEFTWARDS_ARROW + hintText; final float hintScaleX = getTextScaleX(hintWithArrow, hintWidth, hintView.getPaint()); hintView.setText(hintWithArrow); hintView.setTextScaleX(hintScaleX); stripView.addView(hintView); setLayoutWeight( hintView, 1.0f - mCenterSuggestionWeight, ViewGroup.LayoutParams.MATCH_PARENT); wordView.setOnClickListener(listener); leftArrowView.setOnClickListener(listener); hintView.setOnClickListener(listener); } public String getAddToDictionaryWord() { // String tag is set at // {@link #layoutAddToDictionaryHint(String,ViewGroup,int,CharSequence,OnClickListener}. return (String)mWordToSaveView.getTag(); } public boolean isAddToDictionaryShowing(final View v) { return v == mWordToSaveView || v == mHintToSaveView || v == mLeftwardsArrowView; } private static void setLayoutWeight(final View v, final float weight, final int height) { Loading
java/src/com/android/inputmethod/latin/suggestions/SuggestionStripView.java +51 −20 Original line number Diff line number Diff line Loading @@ -56,6 +56,7 @@ public final class SuggestionStripView extends RelativeLayout implements OnClick static final boolean DBG = LatinImeLogger.sDBG; private final ViewGroup mSuggestionsStrip; private final ViewGroup mAddToDictionaryStrip; MainKeyboardView mMainKeyboardView; private final View mMoreSuggestionsContainer; Loading @@ -70,6 +71,32 @@ public final class SuggestionStripView extends RelativeLayout implements OnClick private SuggestedWords mSuggestedWords = SuggestedWords.EMPTY; private final SuggestionStripLayoutHelper mLayoutHelper; private final StripVisibilityGroup mStripVisibilityGroup; private static class StripVisibilityGroup { private final View mSuggestionsStrip; private final View mAddToDictionaryStrip; public StripVisibilityGroup(final View suggestionsStrip, final View addToDictionaryStrip) { mSuggestionsStrip = suggestionsStrip; mAddToDictionaryStrip = addToDictionaryStrip; showSuggestionsStrip(); } public void showSuggestionsStrip() { mSuggestionsStrip.setVisibility(VISIBLE); mAddToDictionaryStrip.setVisibility(INVISIBLE); } public void showAddToDictionaryStrip() { mSuggestionsStrip.setVisibility(INVISIBLE); mAddToDictionaryStrip.setVisibility(VISIBLE); } public boolean isShowingAddToDictionaryStrip() { return mAddToDictionaryStrip.getVisibility() == VISIBLE; } } /** * Construct a {@link SuggestionStripView} for showing suggestions to be picked by the user. Loading @@ -88,6 +115,9 @@ public final class SuggestionStripView extends RelativeLayout implements OnClick inflater.inflate(R.layout.suggestions_strip, this); mSuggestionsStrip = (ViewGroup)findViewById(R.id.suggestions_strip); mAddToDictionaryStrip = (ViewGroup)findViewById(R.id.add_to_dictionary_strip); mStripVisibilityGroup = new StripVisibilityGroup(mSuggestionsStrip, mAddToDictionaryStrip); for (int pos = 0; pos < SuggestedWords.MAX_SUGGESTIONS; pos++) { final TextView word = (TextView)inflater.inflate(R.layout.suggestion_word, null); word.setOnClickListener(this); Loading Loading @@ -137,14 +167,16 @@ public final class SuggestionStripView extends RelativeLayout implements OnClick } public boolean isShowingAddToDictionaryHint() { return mSuggestionsStrip.getChildCount() > 0 && mLayoutHelper.isAddToDictionaryShowing(mSuggestionsStrip.getChildAt(0)); return mStripVisibilityGroup.isShowingAddToDictionaryStrip(); } public void showAddToDictionaryHint(final String word, final CharSequence hintText) { clear(); mLayoutHelper.layoutAddToDictionaryHint( word, mSuggestionsStrip, getWidth(), hintText, this); mLayoutHelper.layoutAddToDictionaryHint(word, mAddToDictionaryStrip, getWidth(), hintText); // {@link TextView#setTag()} is used to hold the word to be added to dictionary. The word // will be extracted at {@link #onClick(View)}. mAddToDictionaryStrip.setTag(word); mAddToDictionaryStrip.setOnClickListener(this); mStripVisibilityGroup.showAddToDictionaryStrip(); } public boolean dismissAddToDictionaryHint() { Loading @@ -157,8 +189,7 @@ public final class SuggestionStripView extends RelativeLayout implements OnClick public void clear() { mSuggestionsStrip.removeAllViews(); removeAllViews(); addView(mSuggestionsStrip); mStripVisibilityGroup.showSuggestionsStrip(); dismissMoreSuggestionsPanel(); } Loading Loading @@ -302,27 +333,27 @@ public final class SuggestionStripView extends RelativeLayout implements OnClick @Override public void onClick(final View view) { if (mLayoutHelper.isAddToDictionaryShowing(view)) { mListener.addWordToUserDictionary(mLayoutHelper.getAddToDictionaryWord()); final Object tag = view.getTag(); // {@link String} tag is set at {@link #showAddToDictionaryHint(String,CharSequence)}. if (tag instanceof String) { final String wordToSave = (String)tag; mListener.addWordToUserDictionary(wordToSave); clear(); return; } final Object tag = view.getTag(); // Integer tag is set at // {@link Integer} tag is set at // {@link SuggestionStripLayoutHelper#setupWordViewsTextAndColor(SuggestedWords,int)} and // {@link SuggestionStripLayoutHelper#layoutPunctuationSuggestions(SuggestedWords,ViewGroup} if (!(tag instanceof Integer)) { return; } if (tag instanceof Integer) { final int index = (Integer) tag; if (index >= mSuggestedWords.size()) { return; } final SuggestedWordInfo wordInfo = mSuggestedWords.getInfo(index); mListener.pickSuggestionManually(index, wordInfo); } } @Override protected void onDetachedFromWindow() { Loading