diff --git a/res/drawable-hdpi/keyboard_suggest_strip_divider.png b/res/drawable-hdpi/keyboard_suggest_strip_divider.png
old mode 100755
new mode 100644
index 1a03c52e6..a5980388a
Binary files a/res/drawable-hdpi/keyboard_suggest_strip_divider.png and b/res/drawable-hdpi/keyboard_suggest_strip_divider.png differ
diff --git a/res/layout/candidates.xml b/res/layout/candidates.xml
index 3af967fd2..068c17e56 100755
--- a/res/layout/candidates.xml
+++ b/res/layout/candidates.xml
@@ -22,7 +22,7 @@
xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="horizontal"
android:layout_width="match_parent"
- android:layout_height="wrap_content"
+ android:layout_height="@dimen/candidate_strip_height"
android:background="@drawable/keyboard_suggest_strip"
>
@@ -76,4 +76,4 @@
/>
-
\ No newline at end of file
+
diff --git a/res/values/donottranslate.xml b/res/values/donottranslate.xml
index b9cfbd135..edf230061 100644
--- a/res/values/donottranslate.xml
+++ b/res/values/donottranslate.xml
@@ -22,6 +22,8 @@
.\u0020,;:!?\n()[]*&@{}/<>_+=|\u0022
.,!?
+
+ !?,@_
diff --git a/src/com/android/inputmethod/latin/CandidateView.java b/src/com/android/inputmethod/latin/CandidateView.java
index e6a9d6bbf..0b6b89e6b 100755
--- a/src/com/android/inputmethod/latin/CandidateView.java
+++ b/src/com/android/inputmethod/latin/CandidateView.java
@@ -26,6 +26,7 @@ import android.graphics.Canvas;
import android.graphics.Paint;
import android.graphics.Rect;
import android.graphics.Typeface;
+import android.graphics.Paint.Align;
import android.graphics.drawable.Drawable;
import android.os.Handler;
import android.os.Message;
@@ -82,7 +83,9 @@ public class CandidateView extends View {
private int mDescent;
private boolean mScrolled;
private int mTargetScrollX;
-
+
+ private int mMinTouchableWidth;
+
private int mTotalWidth;
private GestureDetector mGestureDetector;
@@ -133,7 +136,10 @@ public class CandidateView extends View {
mPaint.setAntiAlias(true);
mPaint.setTextSize(mPreviewText.getTextSize());
mPaint.setStrokeWidth(0);
+ mPaint.setTextAlign(Align.CENTER);
mDescent = (int) mPaint.descent();
+ // 80 pixels for a 160dpi device would mean half an inch
+ mMinTouchableWidth = (int) (getResources().getDisplayMetrics().density * 50);
mGestureDetector = new GestureDetector(new GestureDetector.SimpleOnGestureListener() {
@Override
@@ -203,7 +209,7 @@ public class CandidateView extends View {
if (getBackground() != null) {
getBackground().getPadding(mBgPadding);
}
- mDivider.setBounds(0, mBgPadding.top, mDivider.getIntrinsicWidth(),
+ mDivider.setBounds(0, 0, mDivider.getIntrinsicWidth(),
mDivider.getIntrinsicHeight());
}
int x = 0;
@@ -233,7 +239,7 @@ public class CandidateView extends View {
wordWidth = mWordWidth[i];
} else {
float textWidth = paint.measureText(suggestion, 0, suggestion.length());
- wordWidth = (int) textWidth + X_GAP * 2;
+ wordWidth = Math.max(mMinTouchableWidth, (int) textWidth + X_GAP * 2);
mWordWidth[i] = wordWidth;
}
@@ -253,7 +259,7 @@ public class CandidateView extends View {
}
if (canvas != null) {
- canvas.drawText(suggestion, 0, suggestion.length(), x + X_GAP, y, paint);
+ canvas.drawText(suggestion, 0, suggestion.length(), x + wordWidth / 2, y, paint);
paint.setColor(mColorOther);
canvas.translate(x + wordWidth, 0);
mDivider.draw(canvas);
@@ -462,7 +468,8 @@ public class CandidateView extends View {
+ mPreviewText.getPaddingLeft() + mPreviewText.getPaddingRight();
final int popupHeight = mPreviewText.getMeasuredHeight();
//mPreviewText.setVisibility(INVISIBLE);
- mPopupPreviewX = mWordX[wordIndex] - mPreviewText.getPaddingLeft() - getScrollX();
+ mPopupPreviewX = mWordX[wordIndex] - mPreviewText.getPaddingLeft() - getScrollX()
+ + (mWordWidth[wordIndex] - wordWidth) / 2;
mPopupPreviewY = - popupHeight;
mHandler.removeMessages(MSG_REMOVE_PREVIEW);
int [] offsetInWindow = new int[2];
@@ -488,6 +495,7 @@ public class CandidateView extends View {
private void longPressFirstWord() {
CharSequence word = mSuggestions.get(0);
+ if (word.length() < 2) return;
if (mService.addWordToDictionary(word.toString())) {
showPreview(0, getContext().getResources().getString(R.string.added_word, word));
}
diff --git a/src/com/android/inputmethod/latin/KeyboardSwitcher.java b/src/com/android/inputmethod/latin/KeyboardSwitcher.java
index 0ebfe4a9a..529edeb81 100644
--- a/src/com/android/inputmethod/latin/KeyboardSwitcher.java
+++ b/src/com/android/inputmethod/latin/KeyboardSwitcher.java
@@ -159,7 +159,6 @@ public class KeyboardSwitcher {
void setVoiceMode(boolean enableVoice, boolean voiceOnPrimary) {
if (enableVoice != mHasVoice || voiceOnPrimary != mVoiceOnPrimary) {
- System.err.println("Clearing keyboards");
mKeyboards.clear();
}
mHasVoice = enableVoice;
diff --git a/src/com/android/inputmethod/latin/LatinIME.java b/src/com/android/inputmethod/latin/LatinIME.java
index ee525b495..992456183 100644
--- a/src/com/android/inputmethod/latin/LatinIME.java
+++ b/src/com/android/inputmethod/latin/LatinIME.java
@@ -215,6 +215,7 @@ public class LatinIME extends InputMethodService
private boolean mEnableVoice = true;
private boolean mVoiceOnPrimary;
private int mOrientation;
+ private List mSuggestPuncList;
// Indicates whether the suggestion strip is to be on in landscape
private boolean mJustAccepted;
@@ -296,6 +297,7 @@ public class LatinIME extends InputMethodService
}
initSuggest(inputLanguage);
mOrientation = conf.orientation;
+ initSuggestPuncList();
mVibrateDuration = mResources.getInteger(R.integer.vibrate_duration_ms);
@@ -1337,7 +1339,7 @@ public class LatinIME extends InputMethodService
}
if (!mPredicting) {
- setSuggestions(null, false, false, false);
+ setNextSuggestions();
return;
}
@@ -1397,6 +1399,12 @@ public class LatinIME extends InputMethodService
updateShiftKeyState(getCurrentInputEditorInfo());
return;
}
+
+ // If this is a punctuation, apply it through the normal key press
+ if (suggestion.length() == 1 && isWordSeparator(suggestion.charAt(0))) {
+ onKey(suggestion.charAt(0), null);
+ return;
+ }
pickSuggestion(suggestion);
TextEntryState.acceptedSuggestion(mComposing.toString(), suggestion);
// Follow it with a space
@@ -1430,10 +1438,14 @@ public class LatinIME extends InputMethodService
}
mPredicting = false;
mCommittedLength = suggestion.length();
- setSuggestions(null, false, false, false);
+ setNextSuggestions();
updateShiftKeyState(getCurrentInputEditorInfo());
}
+ private void setNextSuggestions() {
+ setSuggestions(mSuggestPuncList, false, false, false);
+ }
+
private boolean isCursorTouchingWord() {
InputConnection ic = getCurrentInputConnection();
if (ic == null) return false;
@@ -1767,6 +1779,16 @@ public class LatinIME extends InputMethodService
return sp.getString(PREF_SELECTED_LANGUAGES, null);
}
+ private void initSuggestPuncList() {
+ mSuggestPuncList = new ArrayList();
+ String suggestPuncs = mResources.getString(R.string.suggested_punctuations);
+ if (suggestPuncs != null) {
+ for (int i = 0; i < suggestPuncs.length(); i++) {
+ mSuggestPuncList.add(suggestPuncs.subSequence(i, i + 1));
+ }
+ }
+ }
+
private void showOptionsMenu() {
AlertDialog.Builder builder = new AlertDialog.Builder(this);
builder.setCancelable(true);