From 30bd8cb2daf6c26a2e89a74f1d2aa4f11a17cf16 Mon Sep 17 00:00:00 2001 From: "Tadashi G. Takaoka" Date: Thu, 8 Sep 2011 18:57:44 +0900 Subject: [PATCH] Add visual dividers to more suggestions panel Bug: 5275003 Change-Id: I9464db71388a40ea768984b4cf06c8da05bfa26c --- .../more_suggestions_divider.png | Bin 0 -> 1034 bytes ...ider.png => suggestions_strip_divider.png} | Bin .../more_suggestions_divider.png | Bin 0 -> 2940 bytes ...ider.png => suggestions_strip_divider.png} | Bin .../more_suggestions_divider.png | Bin 0 -> 1053 bytes .../suggestions_strip_divider.png | Bin 0 -> 1066 bytes java/res/layout/suggestion_divider.xml | 2 +- .../com/android/inputmethod/keyboard/Key.java | 7 +++ .../inputmethod/latin/MoreSuggestions.java | 55 +++++++++++++----- 9 files changed, 48 insertions(+), 16 deletions(-) create mode 100644 java/res/drawable-hdpi/more_suggestions_divider.png rename java/res/drawable-hdpi/{keyboard_suggest_strip_divider.png => suggestions_strip_divider.png} (100%) create mode 100644 java/res/drawable-mdpi/more_suggestions_divider.png rename java/res/drawable-mdpi/{keyboard_suggest_strip_divider.png => suggestions_strip_divider.png} (100%) create mode 100644 java/res/drawable-xhdpi/more_suggestions_divider.png create mode 100644 java/res/drawable-xhdpi/suggestions_strip_divider.png diff --git a/java/res/drawable-hdpi/more_suggestions_divider.png b/java/res/drawable-hdpi/more_suggestions_divider.png new file mode 100644 index 0000000000000000000000000000000000000000..a5912f95cdb712d78efd974fe53e3981984690a6 GIT binary patch literal 1034 zcmbVLPixdb6i+QksTT35c$lUr7To;pZjzy~Z2q+irY_qB7f)uBX*YC}36p6z?WN#F z{0O3W@#3i;Ko5QZr5{7^BzP(wTqoO2^-y~-kj%Wv@BM!7y?O6tdvkqZ{`Ne_aSN>t zr^D7O?A7M3vhTf_*N`nUd1u|?j!*7<%wSbHuK{NnGGE8$= znEZqnvVD0h@?Zj?yC&Z(1wqem0~-?r>Vi}YrG^9=vLLG~nx;JfiX=;-q=>RolQpO+ zP?Es(;h7qVwqeKdrdrH0`2nRF6vfeKB#cx6lO0hu45Q>wlo~_S@`IEHMJ>&jDh3DT zA&D~@;}n#PK_Bl?lV_2hrI2L4e@>j{(?YS5iA9i!vLJ~`Qsy;5=d^?VgmED{?;d1G z?4TU)kq|NXQsvBQcezjrWYNIKBxaWq3>_TqB`BpW$K=@`A&Mi|Fm&BjbWgGrt)a_u z)AJl%m8H62xSFfk6~{%smS^d8-LRXM%pS+HT*Ym=s_r<7>e;SW`L@!W25E>Y-I(c4 zeXUDEEi)ECAV={M|^ zrei6d`memte53!VnaF|>%jWp2S*jz}f#vqR^_g)#JSb%oL)d8idVB2y8>>a?_UIPg zrlWu$Zk+_#AP#Mu?ju4G0ry)eMZ@LMi=Vd`_-@N-c8fRt)A4w1c1~@doF0As@@o9< h`cwJ+O~0Jd@pzW|eB)?2T5SI)?UuXg99z$x{{~vWK!E@N literal 0 HcmV?d00001 diff --git a/java/res/drawable-hdpi/keyboard_suggest_strip_divider.png b/java/res/drawable-hdpi/suggestions_strip_divider.png similarity index 100% rename from java/res/drawable-hdpi/keyboard_suggest_strip_divider.png rename to java/res/drawable-hdpi/suggestions_strip_divider.png diff --git a/java/res/drawable-mdpi/more_suggestions_divider.png b/java/res/drawable-mdpi/more_suggestions_divider.png new file mode 100644 index 0000000000000000000000000000000000000000..a46284f218c2dd3ffd3000f6c7d619eac71cb68e GIT binary patch literal 2940 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 Dqen@v literal 0 HcmV?d00001 diff --git a/java/res/drawable-xhdpi/suggestions_strip_divider.png b/java/res/drawable-xhdpi/suggestions_strip_divider.png new file mode 100644 index 0000000000000000000000000000000000000000..157513e14fc7051eec977fccd842f13c55dd7199 GIT binary patch literal 1066 zcmbVLJ#5oJ6gEUcQ0PpH7!G$S67erdY^$M)|5{6=RB0r_1de@etj0d;d~Murg#jTz zLJV}N80g-O1qNUQA=t|T-4Fv3VyGAz&S_E@N(WA|@7~?_zVF?;_wLQkObrj68)6t{ z*qJtKbk5PwIeCKqcfV~sr_-^dHl;ILAI^WJhx0+bK^oPonukKp^-&XYX&6%!!%R%3 zvFj~D0-A6kh|28um#C zjuI^`vprsouCr~P1w9B^EVGqN5HzZ@z(5#+0w?4>p(uc&$cgghQmJ$aNP;Nvg2anb zUMy*{qzMA(50+%z90 zV*>^gCLRuA5}*iVjBXPxkupmo-M>N@SE~oaQPNKoO&OoMF)wlgABNezdgz4I;GZxK zMJM%@81glkpe5`<3LhId)7%{`lmTfp+BF=|M{(OG@|Hpv5yvdE^n~*RUn{DLVo8cE z=u)Yuh+@UIO+^-kf~s02t7Hr~4)fJ*T`4H4QPD*@Ok1}kt76HDX-cwfSoXlzi4x*Q z9vtWfRJZS|AL*+Z7`g=EIzsJ11W*0Mj`0s zR|^i)FB+FCrY_m?zwW*7>;F&Acp40!6~|x2GT5ROm@N-VpBe|v10&ion6}2=)6*|# zTU{VlgUq3M(s40lrm!2g0?$CvGQ{u-rV%P}kUbfdZ3?M~*-$Pe(y z$g|DO?x*eTz4i6=?#ItNJ3nqZ&Z+VD!n@Ho8~4xh(#FKf<1eq*a(BSP%`uOd Uw`))ApEsz!8}9v7@c;k- literal 0 HcmV?d00001 diff --git a/java/res/layout/suggestion_divider.xml b/java/res/layout/suggestion_divider.xml index e38a725b1..a8b78c082 100644 --- a/java/res/layout/suggestion_divider.xml +++ b/java/res/layout/suggestion_divider.xml @@ -22,6 +22,6 @@ xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="wrap_content" android:layout_height="match_parent" - android:src="@drawable/keyboard_suggest_strip_divider" + android:src="@drawable/suggestions_strip_divider" android:padding="0dp" android:gravity="center" /> diff --git a/java/src/com/android/inputmethod/keyboard/Key.java b/java/src/com/android/inputmethod/keyboard/Key.java index 735caaebb..4ccb27e4c 100644 --- a/java/src/com/android/inputmethod/keyboard/Key.java +++ b/java/src/com/android/inputmethod/keyboard/Key.java @@ -573,6 +573,13 @@ public class Key { super(res, params, row, parser, keyStyles); } + /** + * This constructor is being used only for divider in more keys keyboard. + */ + public Spacer(KeyboardParams params, Drawable icon, int x, int y, int width, int height) { + super(params, null, null, icon, Keyboard.CODE_DUMMY, null, x, y, width, height, 0); + } + @Override public boolean isSpacer() { return true; diff --git a/java/src/com/android/inputmethod/latin/MoreSuggestions.java b/java/src/com/android/inputmethod/latin/MoreSuggestions.java index 10d5b5c48..24011c41e 100644 --- a/java/src/com/android/inputmethod/latin/MoreSuggestions.java +++ b/java/src/com/android/inputmethod/latin/MoreSuggestions.java @@ -16,7 +16,9 @@ package com.android.inputmethod.latin; +import android.content.res.Resources; import android.graphics.Paint; +import android.graphics.drawable.Drawable; import android.text.TextUtils; import com.android.inputmethod.keyboard.Key; @@ -49,14 +51,21 @@ public class MoreSuggestions extends Keyboard { private final int[] mNumColumnsInRow = new int[SuggestionsView.MAX_SUGGESTIONS]; private static final int MAX_COLUMNS_IN_ROW = 3; private int mNumRows; + public Drawable mDivider; + public int mDividerWidth; public int layout(SuggestedWords suggestions, int fromPos, int maxWidth, int minWidth, int maxRow, KeyboardView view) { clearKeys(); final Paint paint = new Paint(); paint.setAntiAlias(true); - final int padding = (int) view.getContext().getResources() - .getDimension(R.dimen.more_suggestions_key_horizontal_padding); + final Resources res = view.getContext().getResources(); + mDivider = res.getDrawable(R.drawable.more_suggestions_divider); + // TODO: Drawable itself should has an alpha value. + mDivider.setAlpha(128); + mDividerWidth = mDivider.getIntrinsicWidth(); + final int padding = (int) res.getDimension( + R.dimen.more_suggestions_key_horizontal_padding); int row = 0; int pos = fromPos, rowStartPos = fromPos; @@ -66,8 +75,10 @@ public class MoreSuggestions extends Keyboard { // TODO: Should take care of text x-scaling. mWidths[pos] = (int)view.getDefaultLabelWidth(word, paint) + padding; final int numColumn = pos - rowStartPos + 1; + final int columnWidth = + (maxWidth - mDividerWidth * (numColumn - 1)) / numColumn; if (numColumn > MAX_COLUMNS_IN_ROW - || !fitInWidth(rowStartPos, pos + 1, maxWidth / numColumn)) { + || !fitInWidth(rowStartPos, pos + 1, columnWidth)) { if ((row + 1) >= maxRow) { break; } @@ -98,13 +109,14 @@ public class MoreSuggestions extends Keyboard { int maxRowWidth = 0; int pos = startPos; for (int row = 0; row < mNumRows; row++) { - final int numColumn = mNumColumnsInRow[row]; + final int numColumnInRow = mNumColumnsInRow[row]; int maxKeyWidth = 0; while (pos < endPos && mRowNumbers[pos] == row) { maxKeyWidth = Math.max(maxKeyWidth, mWidths[pos]); pos++; } - maxRowWidth = Math.max(maxRowWidth, maxKeyWidth * numColumn); + maxRowWidth = Math.max(maxRowWidth, + maxKeyWidth * numColumnInRow + mDividerWidth * (numColumnInRow - 1)); } return maxRowWidth; } @@ -115,15 +127,19 @@ public class MoreSuggestions extends Keyboard { { 2, 0, 1}, }; - private int getColumnNumber(int pos) { + public int getNumColumnInRow(int pos) { + return mNumColumnsInRow[mRowNumbers[pos]]; + } + + public int getColumnNumber(int pos) { final int columnOrder = mColumnOrders[pos]; - final int numColumn = mNumColumnsInRow[mRowNumbers[pos]]; + final int numColumn = getNumColumnInRow(pos); return COLUMN_ORDER_TO_NUMBER[numColumn - 1][columnOrder]; } public int getX(int pos) { final int columnNumber = getColumnNumber(pos); - return columnNumber * getWidth(pos); + return columnNumber * (getWidth(pos) + mDividerWidth); } public int getY(int pos) { @@ -132,9 +148,8 @@ public class MoreSuggestions extends Keyboard { } public int getWidth(int pos) { - final int row = mRowNumbers[pos]; - final int numColumn = mNumColumnsInRow[row]; - return mWidth / numColumn; + final int numColumnInRow = getNumColumnInRow(pos); + return (mWidth - mDividerWidth * (numColumnInRow - 1)) / numColumnInRow; } public int getFlags(int pos) { @@ -146,11 +161,11 @@ public class MoreSuggestions extends Keyboard { if (row == mNumRows - 1) rowFlags |= Keyboard.EDGE_TOP; - final int numColumn = mNumColumnsInRow[row]; + final int numColumnInRow = mNumColumnsInRow[row]; final int column = getColumnNumber(pos); if (column == 0) rowFlags |= Keyboard.EDGE_LEFT; - if (column == numColumn - 1) + if (column == numColumnInRow - 1) rowFlags |= Keyboard.EDGE_RIGHT; return rowFlags; @@ -190,13 +205,23 @@ public class MoreSuggestions extends Keyboard { public MoreSuggestions build() { final MoreSuggestionsParam params = mParams; for (int pos = mFromPos; pos < mToPos; pos++) { + final int x = params.getX(pos); + final int y = params.getY(pos); + final int width = params.getWidth(pos); final String word = mSuggestions.getWord(pos).toString(); final String info = getDebugInfo(mSuggestions, pos); final int index = pos + SUGGESTION_CODE_BASE; final Key key = new Key( - params, word, info, null, index, null, params.getX(pos), params.getY(pos), - params.getWidth(pos), params.mDefaultRowHeight, params.getFlags(pos)); + params, word, info, null, index, null, x, y, width, + params.mDefaultRowHeight, params.getFlags(pos)); params.onAddKey(key); + final int columnNumber = params.getColumnNumber(pos); + final int numColumnInRow = params.getNumColumnInRow(pos); + if (columnNumber < numColumnInRow - 1) { + final Key.Spacer spacer = new Key.Spacer(params, params.mDivider, x + width, y, + params.mDividerWidth, params.mDefaultRowHeight); + params.onAddKey(spacer); + } } return new MoreSuggestions(params); }