am 333362ad: Merge "Fix the one-suggestion case."

* commit '333362adfc2a6a3df980a23ea58eceea5f695b46':
  Fix the one-suggestion case.
main
Jean Chalard 2013-06-25 02:12:01 -07:00 committed by Android Git Automerger
commit 12d0e4f337
1 changed files with 36 additions and 22 deletions

View File

@ -86,6 +86,7 @@ final class SuggestionStripLayoutHelper {
private final float mAlphaObsoleted; private final float mAlphaObsoleted;
private final float mCenterSuggestionWeight; private final float mCenterSuggestionWeight;
private final int mCenterPositionInStrip; private final int mCenterPositionInStrip;
private final int mTypedWordPositionWhenAutocorrect;
private final Drawable mMoreSuggestionsHint; private final Drawable mMoreSuggestionsHint;
private static final String MORE_SUGGESTIONS_HINT = "\u2026"; private static final String MORE_SUGGESTIONS_HINT = "\u2026";
private static final String LEFTWARDS_ARROW = "\u2190"; private static final String LEFTWARDS_ARROW = "\u2190";
@ -159,6 +160,10 @@ final class SuggestionStripLayoutHelper {
mMoreSuggestionsHint = getMoreSuggestionsHint(res, mMoreSuggestionsHint = getMoreSuggestionsHint(res,
res.getDimension(R.dimen.more_suggestions_hint_text_size), mColorAutoCorrect); res.getDimension(R.dimen.more_suggestions_hint_text_size), mColorAutoCorrect);
mCenterPositionInStrip = mSuggestionsCountInStrip / 2; mCenterPositionInStrip = mSuggestionsCountInStrip / 2;
// Assuming there are at least three suggestions. Also, note that the suggestions are
// laid out according to script direction, so this is left of the center for LTR scripts
// and right of the center for RTL scripts.
mTypedWordPositionWhenAutocorrect = mCenterPositionInStrip - 1;
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); mMoreSuggestionsRowHeight = res.getDimensionPixelSize(R.dimen.more_suggestions_row_height);
@ -233,24 +238,31 @@ final class SuggestionStripLayoutHelper {
return spannedWord; return spannedWord;
} }
private int getIndexInSuggestedWords(final int positionInStrip, private int getPositionInSuggestionStrip(final int indexInSuggestedWords,
final SuggestedWords suggestedWords) { final SuggestedWords suggestedWords) {
// TODO: This works for 3 suggestions. Revisit this algorithm when there are 5 or more final int indexToDisplayMostImportantSuggestion;
// suggestions. final int indexToDisplaySecondMostImportantSuggestion;
final int mostImportantIndexInSuggestedWords = suggestedWords.willAutoCorrect() if (suggestedWords.willAutoCorrect()) {
? SuggestedWords.INDEX_OF_AUTO_CORRECTION : SuggestedWords.INDEX_OF_TYPED_WORD; indexToDisplayMostImportantSuggestion = SuggestedWords.INDEX_OF_AUTO_CORRECTION;
if (positionInStrip == mCenterPositionInStrip) { indexToDisplaySecondMostImportantSuggestion = SuggestedWords.INDEX_OF_TYPED_WORD;
return mostImportantIndexInSuggestedWords; } else {
indexToDisplayMostImportantSuggestion = SuggestedWords.INDEX_OF_TYPED_WORD;
indexToDisplaySecondMostImportantSuggestion = SuggestedWords.INDEX_OF_AUTO_CORRECTION;
} }
if (positionInStrip == mostImportantIndexInSuggestedWords) { if (indexInSuggestedWords == indexToDisplayMostImportantSuggestion) {
return mCenterPositionInStrip; return mCenterPositionInStrip;
} }
return positionInStrip; if (indexInSuggestedWords == indexToDisplaySecondMostImportantSuggestion) {
return mTypedWordPositionWhenAutocorrect;
}
// If neither of those, the order in the suggestion strip is the same as in SuggestedWords.
return indexInSuggestedWords;
} }
private int getSuggestionTextColor(final int positionInStrip, private int getSuggestionTextColor(final int indexInSuggestedWords,
final SuggestedWords suggestedWords) { final SuggestedWords suggestedWords) {
final int indexInSuggestedWords = getIndexInSuggestedWords(positionInStrip, suggestedWords); final int positionInStrip =
getPositionInSuggestionStrip(indexInSuggestedWords, suggestedWords);
// TODO: Need to revisit this logic with bigram suggestions // TODO: Need to revisit this logic with bigram suggestions
final boolean isSuggested = (indexInSuggestedWords != SuggestedWords.INDEX_OF_TYPED_WORD); final boolean isSuggested = (indexInSuggestedWords != SuggestedWords.INDEX_OF_TYPED_WORD);
@ -352,7 +364,7 @@ final class SuggestionStripLayoutHelper {
* increase towards the right for LTR scripts and the left for RTL scripts, starting with 0. * increase towards the right for LTR scripts and the left for RTL scripts, starting with 0.
* The position of the most important suggestion is in {@link #mCenterPositionInStrip}. This * The position of the most important suggestion is in {@link #mCenterPositionInStrip}. This
* usually doesn't match the index in <code>suggedtedWords</code> -- see * usually doesn't match the index in <code>suggedtedWords</code> -- see
* {@link #getIndexInSuggestedWords(int,SuggestedWords)}. * {@link #getPositionInSuggestionStrip(int,SuggestedWords)}.
* *
* @param positionInStrip the position in the suggestion strip. * @param positionInStrip the position in the suggestion strip.
* @param width the maximum width for layout in pixels. * @param width the maximum width for layout in pixels.
@ -413,10 +425,19 @@ final class SuggestionStripLayoutHelper {
private void setupWordViewsTextAndColor(final SuggestedWords suggestedWords, private void setupWordViewsTextAndColor(final SuggestedWords suggestedWords,
final int countInStrip) { final int countInStrip) {
// Clear all suggestions first
for (int positionInStrip = 0; positionInStrip < countInStrip; ++positionInStrip) {
mWordViews.get(positionInStrip).setText(null);
// Make this inactive for touches in {@link #layoutWord(int,int)}.
if (SuggestionStripView.DBG) {
mDebugInfoViews.get(positionInStrip).setText(null);
}
}
final int count = Math.min(suggestedWords.size(), countInStrip); final int count = Math.min(suggestedWords.size(), countInStrip);
for (int positionInStrip = 0; positionInStrip < count; positionInStrip++) { for (int indexInSuggestedWords = 0; indexInSuggestedWords < count;
final int indexInSuggestedWords = indexInSuggestedWords++) {
getIndexInSuggestedWords(positionInStrip, suggestedWords); final int positionInStrip =
getPositionInSuggestionStrip(indexInSuggestedWords, suggestedWords);
final TextView wordView = mWordViews.get(positionInStrip); final TextView wordView = mWordViews.get(positionInStrip);
// {@link TextView#getTag()} is used to get the index in suggestedWords at // {@link TextView#getTag()} is used to get the index in suggestedWords at
// {@link SuggestionStripView#onClick(View)}. // {@link SuggestionStripView#onClick(View)}.
@ -428,13 +449,6 @@ final class SuggestionStripLayoutHelper {
Utils.getDebugInfo(suggestedWords, indexInSuggestedWords)); Utils.getDebugInfo(suggestedWords, indexInSuggestedWords));
} }
} }
for (int positionInStrip = count; positionInStrip < countInStrip; positionInStrip++) {
mWordViews.get(positionInStrip).setText(null);
// Make this inactive for touches in {@link #layoutWord(int,int)}.
if (SuggestionStripView.DBG) {
mDebugInfoViews.get(positionInStrip).setText(null);
}
}
} }
private void layoutPunctuationSuggestions(final SuggestedWords suggestedWords, private void layoutPunctuationSuggestions(final SuggestedWords suggestedWords,