diff --git a/java/res/drawable-hdpi/keyboard_popup_panel_background_holo.9.png b/java/res/drawable-hdpi/keyboard_popup_panel_background_holo.9.png deleted file mode 100644 index 4002dbe65384b708c0b80bf1e47582207e624924..0000000000000000000000000000000000000000 Binary files a/java/res/drawable-hdpi/keyboard_popup_panel_background_holo.9.png and /dev/null differ diff --git a/java/res/drawable-mdpi/keyboard_popup_panel_background_holo.9.png b/java/res/drawable-mdpi/keyboard_popup_panel_background_holo.9.png deleted file mode 100644 index 7be7ab7e228efeecff57d4f44d7d9e61c703117b..0000000000000000000000000000000000000000 Binary files a/java/res/drawable-mdpi/keyboard_popup_panel_background_holo.9.png and /dev/null differ diff --git a/java/res/layout/candidates_strip.xml b/java/res/layout/candidates_strip.xml index bcc1322b6f6db4ae7f029c34a095f91e769ae5f6..46cd691a7e111298423ddf3a72ab33d3e68b876e 100644 --- a/java/res/layout/candidates_strip.xml +++ b/java/res/layout/candidates_strip.xml @@ -25,35 +25,6 @@ <LinearLayout android:id="@+id/candidates_strip" android:orientation="horizontal" - android:layout_weight="1.0" - android:layout_width="0dp" - android:layout_height="match_parent" /> - <LinearLayout - android:id="@+id/touch_to_save" - android:orientation="horizontal" android:layout_width="match_parent" - android:layout_height="match_parent" - android:visibility="gone" - > - <Button - android:id="@+id/word_to_save" - android:layout_weight="1.0" - android:layout_width="0dp" - android:layout_height="match_parent" - android:layout_gravity="center_vertical" - android:textSize="@dimen/candidate_text_size" - android:singleLine="true" - android:ellipsize="middle" - style="?attr/suggestionBackgroundStyle" /> - <include - layout="@layout/candidate_divider" /> - <TextView - android:layout_weight="2.0" - android:layout_width="0dp" - android:layout_height="match_parent" - android:gravity="left|center_vertical" - android:text="@string/hint_add_to_dictionary" - android:textSize="@dimen/candidate_text_size" - android:background="@null" /> - </LinearLayout> + android:layout_height="match_parent" /> </merge> diff --git a/java/res/values/styles.xml b/java/res/values/styles.xml index cb9edb0b881e82b6807ab8da91735d5abdcd802f..7936f3c3c6264c8a7826f8e1abee80b64202adc5 100644 --- a/java/res/values/styles.xml +++ b/java/res/values/styles.xml @@ -29,7 +29,8 @@ <item name="maxPopupKeyboardColumn">@integer/config_max_popup_keyboard_column</item> </style> <style name="LatinKeyboard"> - <item name="autoCorrectionSpacebarLedEnabled">@bool/config_auto_correction_spacebar_led_enabled</item> + <item name="autoCorrectionSpacebarLedEnabled">@bool/config_auto_correction_spacebar_led_enabled + </item> <item name="spacebarTextColor">#FFC0C0C0</item> <item name="spacebarTextShadowColor">#80000000</item> </style> @@ -66,7 +67,10 @@ <item name="shadowRadius">2.75</item> <item name="backgroundDimAmount">0.5</item> </style> - <style name="PopupMiniKeyboardView" parent="KeyboardView"> + <style + name="PopupMiniKeyboardView" + parent="KeyboardView" + > <item name="keyBackground">@drawable/btn_keyboard_key_popup</item> <item name="verticalCorrection">@dimen/mini_keyboard_vertical_correction</item> </style> @@ -84,7 +88,10 @@ <style name="SuggestionPreviewBackgroundStyle"> <item name="android:background">@drawable/candidate_feedback_background</item> </style> - <style name="CandidateViewStyle" parent="SuggestionsStripBackgroundStyle"> + <style + name="CandidateViewStyle" + parent="SuggestionsStripBackgroundStyle" + > <item name="suggestionStripOption">autoCorrectBold</item> <item name="colorTypedWord">#FFFFFFFF</item> <item name="colorAutoCorrect">#FFFCAE00</item> @@ -93,23 +100,35 @@ <item name="centerCandidatePercentile">@integer/center_candidate_percentile</item> </style> <!-- Theme "Basic high contrast" --> - <style name="KeyboardView.HighContrast" parent="KeyboardView"> + <style + name="KeyboardView.HighContrast" + parent="KeyboardView" + > <item name="android:background">@android:color/black</item> <item name="keyBackground">@drawable/btn_keyboard_key3</item> </style> <!-- Theme "Stone" --> - <style name="Keyboard.Stone" parent="Keyboard"> + <style + name="Keyboard.Stone" + parent="Keyboard" + > <item name="keyboardHeight">@dimen/keyboardHeight_stone</item> <item name="keyboardTopPadding">@fraction/keyboard_top_padding_stone</item> <item name="keyboardBottomPadding">@fraction/keyboard_bottom_padding_stone</item> <item name="horizontalGap">@fraction/key_horizontal_gap_stone</item> <item name="verticalGap">@fraction/key_bottom_gap_stone</item> </style> - <style name="LatinKeyboard.Stone" parent="LatinKeyboard"> + <style + name="LatinKeyboard.Stone" + parent="LatinKeyboard" + > <item name="spacebarTextColor">#FF000000</item> <item name="spacebarTextShadowColor">#D0FFFFFF</item> </style> - <style name="KeyboardView.Stone" parent="KeyboardView"> + <style + name="KeyboardView.Stone" + parent="KeyboardView" + > <item name="keyBackground">@drawable/btn_keyboard_key_stone</item> <item name="keyTextColor">#FF000000</item> <item name="keyTextInactivatedColor">#FF808080</item> @@ -119,39 +138,63 @@ <item name="keyUppercaseLetterActivatedColor">#CC000000</item> <item name="shadowColor">#FFFFFFFF</item> </style> - <style name="PopupMiniKeyboardView.Stone" parent="PopupMiniKeyboardView"> + <style + name="PopupMiniKeyboardView.Stone" + parent="PopupMiniKeyboardView" + > <item name="keyBackground">@drawable/btn_keyboard_key_stone</item> <item name="keyTextColor">#FF000000</item> <item name="shadowColor">#FFFFFFFF</item> </style> <!-- Theme "Stone bold" --> - <style name="KeyboardView.Stone.Bold" parent="KeyboardView.Stone"> + <style + name="KeyboardView.Stone.Bold" + parent="KeyboardView.Stone" + > <item name="keyTextStyle">bold</item> </style> <!-- Theme "Gingerbread" --> - <style name="Keyboard.Gingerbread" parent="Keyboard"> + <style + name="Keyboard.Gingerbread" + parent="Keyboard" + > <item name="horizontalGap">@fraction/key_horizontal_gap_gb</item> <item name="verticalGap">@fraction/key_bottom_gap_gb</item> </style> - <style name="KeyboardView.Gingerbread" parent="KeyboardView"> + <style + name="KeyboardView.Gingerbread" + parent="KeyboardView" + > <item name="android:background">@drawable/keyboard_dark_background</item> <item name="keyBackground">@drawable/btn_keyboard_key_gingerbread</item> <item name="keyTextStyle">bold</item> </style> - <style name="PopupMiniKeyboardView.Gingerbread" parent="PopupMiniKeyboardView"> + <style + name="PopupMiniKeyboardView.Gingerbread" + parent="PopupMiniKeyboardView" + > <item name="android:background">@null</item> </style> <!-- Theme "IceCreamSandwich" --> - <style name="Keyboard.IceCreamSandwich" parent="Keyboard" > + <style + name="Keyboard.IceCreamSandwich" + parent="Keyboard" + > <item name="keyboardTopPadding">@fraction/keyboard_top_padding_ics</item> <item name="keyboardBottomPadding">@fraction/keyboard_bottom_padding_ics</item> <item name="horizontalGap">@fraction/key_horizontal_gap_ics</item> <item name="verticalGap">@fraction/key_bottom_gap_ics</item> </style> - <style name="LatinKeyboard.IceCreamSandwich" parent="LatinKeyboard"> + <style + name="LatinKeyboard.IceCreamSandwich" + parent="LatinKeyboard" + > <item name="disabledShortcutIcon">@drawable/sym_keyboard_voice_off_holo</item> </style> - <style name="KeyboardView.IceCreamSandwich" parent="KeyboardView"> + <style + name="KeyboardView.IceCreamSandwich" + parent="KeyboardView" + > <item name="android:background">@drawable/keyboard_background_holo</item> <item name="keyBackground">@drawable/btn_keyboard_key_ics</item> <item name="keyTextStyle">bold</item> @@ -169,7 +212,10 @@ <item name="shadowColor">#00000000</item> <item name="shadowRadius">0.0</item> </style> - <style name="PopupMiniKeyboardView.IceCreamSandwich" parent="PopupMiniKeyboardView"> + <style + name="PopupMiniKeyboardView.IceCreamSandwich" + parent="PopupMiniKeyboardView" + > <item name="android:background">@null</item> <item name="keyBackground">@drawable/btn_keyboard_key_popup_ics</item> </style> @@ -184,10 +230,15 @@ <style name="SuggestionBackgroundStyle.IceCreamSandwich"> <item name="android:background">@drawable/btn_candidate_ics</item> </style> - <style name="SuggestionPreviewBackgroundStyle.IceCreamSandwich"> - <item name="android:background">@drawable/keyboard_popup_panel_background_holo</item> + <style + name="SuggestionPreviewBackgroundStyle.IceCreamSandwich" + parent="PopupMiniKeyboardPanelStyle.IceCreamSandwich" + > </style> - <style name="CandidateViewStyle.IceCreamSandwich" parent="SuggestionsStripBackgroundStyle.IceCreamSandwich"> + <style + name="CandidateViewStyle.IceCreamSandwich" + parent="SuggestionsStripBackgroundStyle.IceCreamSandwich" + > <item name="suggestionStripOption">autoCorrectBold|validTypedWordBold</item> <item name="colorTypedWord">#FFBCBEC0</item> <item name="colorAutoCorrect">#FF0099CC</item> diff --git a/java/src/com/android/inputmethod/latin/CandidateView.java b/java/src/com/android/inputmethod/latin/CandidateView.java index 5f20c70b483ac3f8bc9bc251b37a350c25ac2ec1..85870f38e61441b0fefcd726c3915fcfb946627c 100644 --- a/java/src/com/android/inputmethod/latin/CandidateView.java +++ b/java/src/com/android/inputmethod/latin/CandidateView.java @@ -76,13 +76,9 @@ public class CandidateView extends LinearLayout implements OnClickListener, OnLo private final PopupWindow mPreviewPopup; private final TextView mPreviewText; - private final View mTouchToSave; - private final TextView mWordToSave; - private Listener mListener; private SuggestedWords mSuggestions = SuggestedWords.EMPTY; private boolean mShowingAutoCorrectionInverted; - private boolean mShowingAddToDictionary; private final SuggestionsStripParams mStripParams; private final SuggestionsPaneParams mPaneParams; @@ -94,7 +90,7 @@ public class CandidateView extends LinearLayout implements OnClickListener, OnLo private static final int MSG_HIDE_PREVIEW = 0; private static final int MSG_UPDATE_SUGGESTION = 1; - private static final long DELAY_HIDE_PREVIEW = 1000; + private static final long DELAY_HIDE_PREVIEW = 1300; private static final long DELAY_UPDATE_SUGGESTION = 300; public UiHandler(CandidateView outerInstance) { @@ -274,13 +270,16 @@ public class CandidateView extends LinearLayout implements OnClickListener, OnLo private static final int AUTO_CORRECT_INVERT = 0x04; private static final int VALID_TYPED_WORD_BOLD = 0x08; - private final TextPaint mPaint; private final int mSuggestionStripOption; private final ArrayList<CharSequence> mTexts = new ArrayList<CharSequence>(); public boolean mMoreSuggestionsAvailable; + public final TextView mWordToSaveView; + private final TextView mHintToSaveView; + private final CharSequence mHintToSaveText; + public SuggestionsStripParams(Context context, AttributeSet attrs, int defStyle, List<TextView> words, List<View> dividers, List<TextView> infos) { super(words, dividers, infos); @@ -305,9 +304,10 @@ public class CandidateView extends LinearLayout implements OnClickListener, OnLo mInvertedForegroundColorSpan = new ForegroundColorSpan(mColorTypedWord ^ 0x00ffffff); mInvertedBackgroundColorSpan = new BackgroundColorSpan(mColorTypedWord); - mPaint = new TextPaint(); - final float textSize = res.getDimension(R.dimen.candidate_text_size); - mPaint.setTextSize(textSize); + final LayoutInflater inflater = LayoutInflater.from(context); + mWordToSaveView = (TextView)inflater.inflate(R.layout.candidate_word, null); + mHintToSaveView = (TextView)inflater.inflate(R.layout.candidate_word, null); + mHintToSaveText = context.getText(R.string.hint_add_to_dictionary); } public int getTextColor() { @@ -498,6 +498,33 @@ public class CandidateView extends LinearLayout implements OnClickListener, OnLo mMoreSuggestionsAvailable = false; return countInStrip; } + + public void layoutAddToDictionaryHint(CharSequence word, ViewGroup stripView, + int stripWidth) { + final int width = stripWidth - mDividerWidth - mPadding * 2; + + final TextView wordView = mWordToSaveView; + wordView.setTextColor(mColorTypedWord); + final int wordWidth = (int)(width * mCenterCandidateWeight); + final CharSequence text = getEllipsizedText(word, wordWidth, wordView.getPaint()); + final float wordScaleX = wordView.getTextScaleX(); + wordView.setTag(word); + wordView.setText(text); + wordView.setTextScaleX(wordScaleX); + stripView.addView(wordView); + setLayoutWeight(wordView, mCenterCandidateWeight, MATCH_PARENT); + + stripView.addView(mDividers.get(0)); + + final TextView hintView = mHintToSaveView; + hintView.setTextColor(mColorAutoCorrect); + final int hintWidth = width - wordWidth; + final float hintScaleX = getTextScaleX(mHintToSaveText, hintWidth, hintView.getPaint()); + hintView.setText(mHintToSaveText); + hintView.setTextScaleX(hintScaleX); + stripView.addView(hintView); + setLayoutWeight(hintView, 1.0f - mCenterCandidateWeight, MATCH_PARENT); + } } /** @@ -517,7 +544,7 @@ public class CandidateView extends LinearLayout implements OnClickListener, OnLo super(context, attrs); if (defStyle != R.attr.candidateViewStyle) { throw new IllegalArgumentException( - "can't accept defStyle other than R.attr.candidayeViewStyle: defStyle=" + "can't accept defStyle other than R.attr.candidateViewStyle: defStyle=" + defStyle); } setBackgroundDrawable(LinearLayoutCompatUtils.getBackgroundDrawable( @@ -546,13 +573,10 @@ public class CandidateView extends LinearLayout implements OnClickListener, OnLo mInfos.add((TextView)inflater.inflate(R.layout.candidate_info, null)); } - mTouchToSave = findViewById(R.id.touch_to_save); - mWordToSave = (TextView)findViewById(R.id.word_to_save); - mWordToSave.setOnClickListener(this); - mStripParams = new SuggestionsStripParams(context, attrs, defStyle, mWords, mDividers, mInfos); mPaneParams = new SuggestionsPaneParams(mWords, mDividers, mInfos); + mStripParams.mWordToSaveView.setOnClickListener(this); } /** @@ -636,6 +660,15 @@ public class CandidateView extends LinearLayout implements OnClickListener, OnLo } } + private static float getTextScaleX(CharSequence text, int maxWidth, TextPaint paint) { + paint.setTextScaleX(1.0f); + final int width = getTextWidth(text, paint); + if (width <= maxWidth) { + return 1.0f; + } + return maxWidth / (float)width; + } + private static CharSequence getEllipsizedText(CharSequence text, int maxWidth, TextPaint paint) { if (text == null) return null; @@ -718,20 +751,21 @@ public class CandidateView extends LinearLayout implements OnClickListener, OnLo } public boolean isShowingAddToDictionaryHint() { - return mShowingAddToDictionary; + return mCandidatesStrip.getChildCount() > 0 + && mCandidatesStrip.getChildAt(0) == mStripParams.mWordToSaveView; } public void showAddToDictionaryHint(CharSequence word) { - mWordToSave.setText(word); - mShowingAddToDictionary = true; - mCandidatesStrip.setVisibility(GONE); - mTouchToSave.setVisibility(VISIBLE); + clear(); + mStripParams.layoutAddToDictionaryHint(word, mCandidatesStrip, getWidth()); } public boolean dismissAddToDictionaryHint() { - if (!mShowingAddToDictionary) return false; - clear(); - return true; + if (isShowingAddToDictionaryHint()) { + clear(); + return true; + } + return false; } public SuggestedWords getSuggestions() { @@ -739,10 +773,7 @@ public class CandidateView extends LinearLayout implements OnClickListener, OnLo } public void clear() { - mShowingAddToDictionary = false; mShowingAutoCorrectionInverted = false; - mTouchToSave.setVisibility(GONE); - mCandidatesStrip.setVisibility(VISIBLE); mCandidatesStrip.removeAllViews(); mCandidatesPane.removeAllViews(); closeCandidatesPane(); @@ -752,7 +783,7 @@ public class CandidateView extends LinearLayout implements OnClickListener, OnLo mPreviewPopup.dismiss(); } - private void showPreview(int index, CharSequence word) { + private void showPreview(View view, CharSequence word) { if (TextUtils.isEmpty(word)) return; @@ -761,9 +792,8 @@ public class CandidateView extends LinearLayout implements OnClickListener, OnLo previewText.setText(word); previewText.measure(MeasureSpec.makeMeasureSpec(0, MeasureSpec.UNSPECIFIED), MeasureSpec.makeMeasureSpec(0, MeasureSpec.UNSPECIFIED)); - View v = mWords.get(index); final int[] offsetInWindow = new int[2]; - v.getLocationInWindow(offsetInWindow); + view.getLocationInWindow(offsetInWindow); final int posX = offsetInWindow[0]; final int posY = offsetInWindow[1] - previewText.getMeasuredHeight(); final PopupWindow previewPopup = mPreviewPopup; @@ -778,7 +808,8 @@ public class CandidateView extends LinearLayout implements OnClickListener, OnLo private void addToDictionary(CharSequence word) { if (mListener.addWordToDictionary(word.toString())) { - showPreview(0, getContext().getString(R.string.added_word, word)); + final CharSequence message = getContext().getString(R.string.added_word, word); + showPreview(mStripParams.mWordToSaveView, message); } } @@ -793,8 +824,8 @@ public class CandidateView extends LinearLayout implements OnClickListener, OnLo @Override public void onClick(View view) { - if (view == mWordToSave) { - addToDictionary(((TextView)view).getText()); + if (view == mStripParams.mWordToSaveView) { + addToDictionary((CharSequence)view.getTag()); clear(); return; }