From cd7b7d3e8febcfbcab4628d1fc5b87e809ce56cc Mon Sep 17 00:00:00 2001 From: "Tadashi G. Takaoka" <takaoka@google.com> Date: Tue, 12 Oct 2010 15:02:44 +0900 Subject: [PATCH] Specify keyboard metrics with physical unit "inch" Cherrypick I44f3b2eef8086d6e0b0db53d38f08487549060c6 from Gingerbread This change also introduces the key background drawables which has no fixed bottom padding. Instead of relying on bottom padding in drawable, this change also specifies Keyboard.verticalGap with physical unit. Other keyboard related length, distance and size are also specified by physical unit. Bug: 3066107 Change-Id: Ib38355ebfc2f8d5b1d26c4e90eba87196fbeddfa --- .../btn_keyboard_key_dark_normal.9.png | Bin 521 -> 511 bytes .../btn_keyboard_key_dark_normal_off.9.png | Bin 783 -> 760 bytes .../btn_keyboard_key_dark_normal_on.9.png | Bin 1112 -> 1088 bytes .../btn_keyboard_key_dark_pressed.9.png | Bin 747 -> 730 bytes .../btn_keyboard_key_dark_pressed_off.9.png | Bin 962 -> 940 bytes .../btn_keyboard_key_dark_pressed_on.9.png | Bin 1282 -> 1260 bytes .../btn_keyboard_key_light_normal.9.png | Bin 481 -> 461 bytes .../btn_keyboard_key_light_pressed.9.png | Bin 1643 -> 811 bytes .../btn_keyboard_key_dark_normal.9.png | Bin 385 -> 377 bytes .../btn_keyboard_key_dark_normal_off.9.png | Bin 550 -> 545 bytes .../btn_keyboard_key_dark_normal_on.9.png | Bin 813 -> 806 bytes .../btn_keyboard_key_dark_pressed.9.png | Bin 518 -> 514 bytes .../btn_keyboard_key_dark_pressed_off.9.png | Bin 700 -> 687 bytes .../btn_keyboard_key_dark_pressed_on.9.png | Bin 950 -> 940 bytes .../btn_keyboard_key_light_normal.9.png | Bin 358 -> 355 bytes .../btn_keyboard_key_light_pressed.9.png | Bin 530 -> 526 bytes java/res/layout/input_gingerbread.xml | 1 + java/res/values-land/dimens.xml | 14 ++- java/res/values-xlarge/dimens.xml | 28 ++++-- java/res/values/dimens.xml | 37 +++++--- java/res/xml-da/kbd_qwerty.xml | 6 +- java/res/xml-da/kbd_qwerty_black.xml | 6 +- java/res/xml-de/kbd_qwerty.xml | 6 +- java/res/xml-de/kbd_qwerty_black.xml | 6 +- java/res/xml-fr/kbd_qwerty.xml | 6 +- java/res/xml-fr/kbd_qwerty_black.xml | 6 +- java/res/xml-iw/kbd_qwerty.xml | 6 +- java/res/xml-iw/kbd_qwerty_black.xml | 6 +- java/res/xml-nb/kbd_qwerty.xml | 6 +- java/res/xml-nb/kbd_qwerty_black.xml | 6 +- java/res/xml-ru/kbd_qwerty.xml | 6 +- java/res/xml-ru/kbd_qwerty_black.xml | 6 +- java/res/xml-sr/kbd_qwerty.xml | 6 +- java/res/xml-sr/kbd_qwerty_black.xml | 6 +- java/res/xml-sv/kbd_qwerty.xml | 6 +- java/res/xml-sv/kbd_qwerty_black.xml | 6 +- java/res/xml-xlarge/kbd_qwerty.xml | 2 +- java/res/xml-xlarge/popup_smileys.xml | 2 +- java/res/xml/kbd_phone.xml | 2 +- java/res/xml/kbd_phone_black.xml | 2 +- java/res/xml/kbd_phone_symbols.xml | 2 +- java/res/xml/kbd_phone_symbols_black.xml | 2 +- java/res/xml/kbd_popup_narrow_template.xml | 2 +- java/res/xml/kbd_popup_template.xml | 2 +- java/res/xml/kbd_qwerty.xml | 6 +- java/res/xml/kbd_qwerty_black.xml | 6 +- java/res/xml/kbd_symbols.xml | 2 +- java/res/xml/kbd_symbols_black.xml | 2 +- java/res/xml/kbd_symbols_shift.xml | 2 +- java/res/xml/kbd_symbols_shift_black.xml | 2 +- java/res/xml/popup_comma.xml | 2 +- java/res/xml/popup_domains.xml | 2 +- java/res/xml/popup_mic.xml | 2 +- java/res/xml/popup_punctuation.xml | 2 +- java/res/xml/popup_smileys.xml | 2 +- .../inputmethod/latin/LatinKeyboard.java | 65 ++++++++----- .../latin/LatinKeyboardBaseView.java | 89 ++++++++++++------ 57 files changed, 240 insertions(+), 136 deletions(-) diff --git a/java/res/drawable-hdpi/btn_keyboard_key_dark_normal.9.png b/java/res/drawable-hdpi/btn_keyboard_key_dark_normal.9.png index 0c4820b34c55f88b8030693a2431cd553f7b9061..01fc8ca780342b16e22a395f702af499a2eb21b3 100644 GIT binary patch delta 462 zcmV;<0WtoG1pfn&7YaED1^@s6boh93ks&C5p-DtRRCwC#noDkjFc5~vV6j82NO#<% zIZSh|^f1Xy*fp#W5<<Kj?1EAi^KdK3KxQJ#Qjo*{F&=x&1Ymg+ZCmaJLID49vo(O0 zGG@U}j6kp%TQNp}VuWIZK%Qq@_hk?S@P0hP+u?v_6_Bga*X;(^%LT$PoVRLyoK9+g z+t2e{^(a6X1IKYx|9L+5E^9qfRTU&jqIygqwrzv!y7Q-2mSxHt-49@}x~|oOmD*;5 z$U(AUf#@<^*`zMrWj;0tlXaSgbP))FtO){$LBPl(?Ld?sF-cJ<MhJvJ2xOZe4AbkC z|9}XY{UY+r-$AhM?k@)dT~31x1k7`Pt;Yuy$A~69NG-k_Hjq}AS@sL~-fWL)qF~=d zuwzbBz-Vgy>aoR%S&Ve9#1`xWns!xI5L<|kIjdGLTi+tczAIMb5o{hoxvNj;qVhC> z5XftQu)%#qmV#vk6;qwvvMjTMRhp(y6a|!JIaCf_f9f<4oO7j33#v==J<kI<-}fgE zGi!T9S`<YP$8rBM;xm*P=bR_rJdLM<HX0}Yf^ipM0C|(<h8jeso&W#<07*qoM6N<$ Ef}5((IsgCw delta 472 zcmV;}0Vn?d1BnEX7YalO1^@s6!$f9nks&C5t4TybRCwC#noDkjFc5|Zu-GA1q&sfX z9Hu!}dYI%U>>5@G2_c@rE+|zo2B!)g%uHl?F>&}m#)HQ=0I#>UZ?C&R+k*AuVw<%N z#3B#^ArPez2!RmDGaz9Y!u#<EZ-)aKLN4^{c7yBX0#Ot#1Nk_e#Ij!$h3IkIatmC4 z*A@Ne`8;wn*`T_vAx%@!V*+s;2RzS{`lTRwo{MM<KY+oSrV%%mYg-J$2l0jlVyJL= z<GN&SrW%B-3{mPL5CT~f1Q3IORz&)NC?hiAryL;=0wEBCKrBpK$G?Dxw?&8|^E?RF z)qQs$Fw`{2KtR9NdVElEC^X4In)bVYVFT%P=~cgg@2#Cm6D9j5k{xrI0$Nk+SC1`E z^m1efCAMUr&}4%l#$?gLm>)}?TBB-xiy%f#EihqfnH>?7tNM&CV<JKz1VSK6vnJOO zeiY14P%)je+qSK@vC6Ux%Cdy2s-}*E*Pl8a1Y=BSlY+|1eBbvW2!h$o%-Rt{;TFd+ zBuO%MBi=*laS{lD5Xe42m<h`|{mGv|2xLznONzp-U~B(d=-hYi0t^6!3Ke;+26%%2 O0000<MNUMnLSTXd1Irx% diff --git a/java/res/drawable-hdpi/btn_keyboard_key_dark_normal_off.9.png b/java/res/drawable-hdpi/btn_keyboard_key_dark_normal_off.9.png index 5a20da1dbb60d404790a46b704f8fccccaf995b4..af4017e2c6f7e8ec7b98fb9641d81b25e9bc138f 100644 GIT binary patch delta 713 zcmV;)0yh1R2KWV#7YaED1^@s6boh93ks&C5nn^@KRCwC#n(I>9KorN%LINltGZn1j z$R}Q-K1_Ws`!M!NWTZ2d`T-DzTaxa7ORQa%%Tg0haF@ws*qyNFmvbd2B8nnPatI;R z267*v&A-_mVDMgVmIhE#KcAxm84kpOB;$WhBM!uYY#E+uvejzQm+Nc#e0D|=7l)RA z$Ir({`hIsuola+U9qC=qx?gW@RN9}-W|VXZV-uMQg@QVNyS-gmHfkgY0vZm7>dXlw zpU+dZTHW2WCX<QM##<M6|1-icR5uo~?F@p8aBzW$D_k6q%e3rmx+twNpU<h=?b3KW zrp01G$45tWesMvSN@Yc+b#lEs2u!7abAL~zQi&S%I^}XXHP?N3pt}72>GU)kAUzpU zt0yN^E|*{CD!xy?j8KEYfXY%Uh*qpYaOZ{80JNd+2jK&0Vx!TBd<nJ}2&JeI-}6*Z zG41EQT6=-8(#TRPNsnT&NP`V~VO}?@$fiU|%d}uJd1+dq%nxvKU4}qLFeJc#>2%85 zM<8JH@>11KFryd-dm|(xY9So|qY<uA3l&7W-KHNhkHGl@nebq8t*a~LAH(P8Y=mEE z1*J!`*;FAHT7fnYda;(7gcxV`Ur$dvl_;!1Y-+8&K*TZ>Ga=a@BtrGeNHhC`Fg34_ z2SRa8!wiJ%YpuT@Rva5-GJ}MF(Vv4G$Wku5>X%dK)#P%{o>^z-T&9qfX=!I}eq!e% zu`0Pa`x==Jr>$V>e{=MYtx*eaB<L_%1Uc-EmD30}jj+t>TjX->X$Rs!J_d+bn@8|G z79CVheRez-w)$g*?kb+g;*tKEc5wQpBO%awfNVxk(<>acT8$cw#@0VHGihrCqu1+E vzu#Y7Hi2Z(N5n37{JlZ-cZN;lw*UhGH1u&6D+t5n00000NkvXXu0mjfX+TN^ delta 736 zcmV<60w4YO1&;=h7YalO1^@s6!$f9nks&C5u}MThRCwC#n(a>FKoo}0Kno}!$qIg8 z<QKQ07qecMdok{nNMw^0{Q(H!tF80SQkN}LN?BV^VTLpfoxq%j_k7W*@H~%_96|`S zfLuoeu7BDZV6avfO9LpWug}q*3<F|7l8HZ~hygJm5yR45Y_(c+b9+nYXJ_Pb321qL z{C<9>pAQez>2%iTQQm`9_xs(QD*Ln9jFN6);$)^mp`gw`?(f&8wTd{7L&M=vojHNz z^LeUPtJ}NQWHM1|e0Fp9Kf`rh^~1uptwHc199$s$4i^XP(oI{NK9ts&&*#+bc4<5w z(_*op<D(<GxV)rFrLtyIm|b5E0$1sOJU&vXRH8<`PPtr8UF$wQQC+_Oc6yo(ke*Db z)sqt{m&+g5Dz;6w%us{DfXY%8WGmJn_~nIE0BQu+gYk}ZvC(KmwglS=gi=(*wk(xY zbn96wa~}|~6j`d0^e7gKG}y2ft_R)9i_@Z{<yvr=ymT#B)&~T6&<00lFciRl>2%6F zMqps`>Pq!aa3dcEYa=BiYat!~qX^fmg$|<KZqqMWM-cpuEO>Ca*7dcDkKx-}HqtLt zLF>_MHdV@nDo_Kd7ju~@h<;^%d41igMPUsRr`OsEL@ZM=6O!FQJaoT|l-V7Gse2tB z2>Cq?GZ2d3YyEw(;@Du59>n#3{v6yumUhMKemSMyfL$ioGaKxj+Z2lBT7fgSIEfb{ zzLea8J;bK{*;df)e{+nF$gG7Y5`r*U1ljK$E29WEMOaq#2)oSov;i?7hXEo&>j>`0 zVh5GeK0EFU$NFQ1-BsL=#V!4i?cnrXM?zrh0k&yDb&qh=YBg#!8j*iXX3|y!qu1+E zzu#Y<)`4U(MoiW+AO^&MWM?4r8bu6<0XYy5YZ>(-qG9{eUM$SM)rUvl1sDKD(R460 Scd&>60000<MNUMnLSTY1$zFf} diff --git a/java/res/drawable-hdpi/btn_keyboard_key_dark_normal_on.9.png b/java/res/drawable-hdpi/btn_keyboard_key_dark_normal_on.9.png index 4ec703d6ceac885c2895b9b0f1919d615498cc90..4c35aca95dd88e92c4bc76673d2509917b0383c3 100644 GIT binary patch delta 1043 zcmV+u1nm3R2*3!C7YaED1^@s6boh93ks&C5;z>k7RCwC#nOkoYITXkL_Dm)TQOP2j zwg{;b;-cM!2OfFZewgKR!H0n-;0-~=1E{E6OVuW6+U#^@Z0|XCCM{|bIu#S#GHzWf zGj4o-KG*R8<u^0x<t<<g!efig1E{PfBrZs+KzwUrjy{6QM=BqwKz>~dCtX}!UBy3t zYin3uTJk0ea8%m*_6<*;Ji+GX=INr=zYibUw4Wr29ZMBZjKmNVgfaYU|Ij>vD2nX( z_|c;iUo%l7N+}Em13Q)l!T>CkkgiMqEXAmHa`lr|grN;`5rQDV!otGoO)HLLs|~lH zC;?)m0rJow6x5~dQo8FbydnsdY8o|vbY|?x8_Tkt8boVtdl?Y92?<HU*CcB701@>t z3M>pS$(l$Lh4hd+kQzl7opxBRNd;**tt>9hq!=S$GZCmo5{*kCb%le$I+D0c>m~%# zM(gq&gkgKMv214A_Gxm>AA~sAgn}A5Z!<u%6(b6t;obv@n|C7AY7stvin0EG>IL@p z{vt(OvnG|LPMZdvfG`Q0Ec-^SF40+hjl1_Ef~b?0+?1<}Av#MTUcY>ccN<qoQz2v^ z@-XHBh;T8Lom>VIms<O{c`L^1jm8)vZ_6t+3=cGRcDHe`cimNm0>w-VC2C~6Ny4Dj z%Ixkp8e*ae^1aJ#g-;*M_<vD<$VY(EK{zsL)wG(hT+;%iX*y@u&e08gFfHREkj)91 zLa*1t)>adLTuIPqeqZ)wlso!;O>>sX(GO|9XHkoHR%HUoVTM8fKWx0aPbT&pE7vr^ z2&<Xo(4f1k@Mir_Y<)F$t_5Mu80`xPtTs|A9O7Y$_Zty1wT6{1>sai6bSeC1*xhLp zz-@f|P$$?PMXijqqMSywCmL~r@U}Z!>+5~m@f5wCzfo`2DaT0qoS@t7VSjJeY9pg8 zZ%Y+z{4p)-CpP$~vD2rt+Xwrx%@tyl$=Q^+XQ{Sx9Ee9gl7GK2d2y&AQ{f=QIQqNY zx6z7697V0OfQS;0SDZY5v<CYOXZ!Tn(@}o^*z-u9+s*`HgqWIuel}2{WLg-+_;uX% z`+^{^X*>f#@mlNX$19E*GKJHUmhHZQjN~d-{ldSK?O8Ha&VDYOeI8}XSv6AV?AJ^> zNA<{0iuuS<{ot3gPm$?Dy;d;i!9PwDwN6y)=Mm&$zp<(`;+sZ(yv*u9kgIw<U4c{} zzXynznn(D(-K-<Zxl1a9Jr^$YU^N^Lk)|oKESvT^c>bnC5MdZv*(QQcD)ZazHaeZo z4<Bactr2e9+uP{(`zLRE{0vo$(;ij}F?09n{x1b3xx_3jvE2U)FaU=Y2<t<<6+Zv~ N002ovPDHLkV1m=9@lgN( delta 1068 zcmV+{1k?M#2-paa7YalO1^@s6!$f9nks&C5`bk7VRCwC#ncZ&NHWbJIq-fc$k$T1A zB*lOLL$_jEd(q3?EDy6jSNAa8)wa7~4R*02L%MEDgT!{6c#0&FJBPHK46)KEm|P|i z6Na$FnCHjyDGI2+*;%h|0c)YoEw&7xx|)!<C9MGot%)W22pS)0e53*Sa7`_`xVgE1 ziEp;Hu)ekyOcda#wD;~EzJK`=ySuwri(214f9}$Lnx<~7RX{NlLo5)+@~`_t^915J zcH?(1UR?N^g&NUXV=|ezu`Un>V4;NcUGirsX0?;ApNu99V^N3@MG;n3R<3SZNs>5i z_yt7`5Hk&shek?Jm#$0cue0!)AarJbXf!anbt7*q%XVcDV~p!{Kolk<BnjV=Xtg86 z)Kwfg7+#V!k);~hDR&^Vnl5_nuw07@QdL$K*Je_T5wV#Fv|@?QJw;vPWU`Gk8Pd8b z!SvC){}@X3XB*3AW?V0mYxy9=!6p>7$a%XFy1fLk`T<YBmU#3yMynO$&$kJGwtx8v zM@L_hA|5)E$}_J`i$Fk_giV%xqt%uetiHmNr!hgaNlSjp$Eym1HHB9{|AyB)4@grA zG7?1?3jjp;n95ErBZ+&xV?6pS!RDu(IYiOcH(HpU7#tk#<K*ZQUlj^eGcDApk@+SG zi(W5xyWi=Eg(k@N?)Np`zOnOv|3xJq0cr=~$YgZaX~J=p1xVZV&ThP;TZCX*)<+<h z6LO8wsE571E<SpYqSO6v*_Tu97>^CjStmz7rTKwHE#6t33#6wxCgXpw^ZFT?*pJwF zXb46)&7`Lm!$XZ<x4*#N-`34_Agmc{LIHu(Mn;80GR^S&PK;b{VdJlVZLAK46n=9Y z9`p&|bNun9O|T=1S~+P&dySYtG~xx}ZTGe|HpjH%8Ab<Rq1|m$j*;{^#c(*n@zJ5v zMowAYl`6)DV_MEnT=3Czr_X4&PmU9pE5t05vng@UGvnrXkbr!o_<muF;?O{5!b6C8 z^!K~(q7{!gi(1zK5j7rvuXuTA4fYw%_Sw0oqvHO#=aC|}T?@ntQJR4MZ=g!av@(bd z>$vOgf}p5r0s}$yTI=j5D2_{HQe{cY_0T|Oa#gE-5#Gu6WimC+ej}WH8D+|KHB#y9 z*Dg9o4aiTb`N&!Q5SFu-$aJe-E7+UhA6JQ57pnD}2y(mMST!1d2~8tGX7%^T)x4f= zKpK#{0U}EC2*0<x?1*ydk_zF@g)2Q+O{Y_2S%y5%%U%aB-*gB<Ddl8a2)d}u@Avx{ z3<mFgm|3<)xb5%nV>}*TydCf}R3*+PYBeAYNCR?n8mEXxBMnFcaz{Ya`QovxK%|20 mgVtgsm$<Bu<o2%@00RJ!lLiIVIQ_E#0000<MNUMnLSTZcZUtTd diff --git a/java/res/drawable-hdpi/btn_keyboard_key_dark_pressed.9.png b/java/res/drawable-hdpi/btn_keyboard_key_dark_pressed.9.png index 93322d2e279dc2efe8de56c94f008f6077520cb0..174f3452c684ba190fc3aa012a825ba1dd3c1e06 100644 GIT binary patch delta 683 zcmV;c0#yC$1=<CW7YaED1^@s6boh93ks&C5d`Uz>RCwC#noX{PFc8NF#IJY@7cRYm z7jfyaTzV0&;L?Rl4`5>AN0jG~_kWpJ3Z;aW4{6dAFlFY)%(O5gk^2_^c6S2em?9y} z2au~4gw&DNgEXxL9%F?180llA2dS?`x{J%@k~W(SEf$N^4$2+JPNFsl{ze?59gjzU z+HSXWI2?+tTD#qjX0sW+Ua#c*{eCAMAg&-J40;%bN#`~g4Cs2j(t5p4P0?CpI-Sz( zc1u72p~Cn80R%dOux^E2iy<D5M{+Y(S^~MYiq0Agz_OpuXEGKBK@327fZ&=Bi!cDo z;*sU?sK$&`H_C!QeDJ8cn2%tGHB>o&S#q@?(v5Uh@!?uhhFr<4TuXxJEaC$ME0y}2 z6^M)lbl)KI9P)8&9qcNA1abM<s)Fb?$HEpdb?4v388WRb(ixB<Ky`rRxmT+!k|+B+ zKum&M?(DXDMP;6d53AV9EA3i!fmFU~)dAvU)v5!;$*R>fkZxyDde>?ih+O7>ngU|l zggdj3bU)aex*?Vh_B<e8AiDE@Lu^Bg#BF(vH!Z(`3e&q*)8Dnqe6dw!kt}__%Obio zrTTSdN?}%=h%lv2qr98Qf{V<MXJy2zYN(A!9ZdOOqeXBd_@^%2?*c@Y-c)_8K%~Ml z$V}<|D%?pegmMj0LRq<%oCGL;Sxs^s8@h_FwQE6nsW8fKh#4QQ1xsMe0nyjlSz(l@ z@Avz^61C5NK1fT9$733eMifO+af_VK=R|3S0f<_f_5}iWW{}BbLYK=$KM(ONFV5$4 zTCG+z91c@%<P$`7H~z!Ge!r*F>6D(P18HFkf+A1$^K@zj{pe_Xjrb83U;ujTTC3^L RyR-lR002ovPDHLkV1hSvL<;}_ delta 700 zcmV;t0z>`U1?vTn7YalO1^@s6!$f9nks&C5jY&j7RCwC#noEwtFbqK55`N+qELd^{ zF2a&yvE(9Lfh7x;8~_Q4kD!dJ@yL_9O;a`LheV3f7Pa=nc9Pl!aNm;O?oL3GfMUXY z0J&;W3_WQ9q-`zo7$Xp3B*aJnX|5^h;&Qo!&1M6O#UitUVy9y#Q5!{nBOOya9*?kp z-EQG<IFy^UcDo(SW;1xbUg`P!{Z2c9xPss?)Z;i#JGQ}K0N3jk*6VfV7SSTp=@f3a zTM9xDI*bnxf}oBds9R~*LWsxXkv<HS=0L8kB3T0gQ1<irOvln76a%C@fzUM{7C``% zg(J$tQI8p}uF8X;_`p$jF(1KB*3jjD<jEC5xEo1U@!?ur2A|2ST#JK97V!Z>GnM|E z6$p<7>b^nvImxGE>tNRbIEc&FRvkoI97|io)SbT<=g73ONN+&O05t(p<X)Y!NRjOC z05J)2xw6~prK<cRKCEIZud-`31ycL0)dYx>S*r;UC$m=DK>D3U39i*P5I)U+wFShq z2=`_k>3^`dbwR8g>_tGnK&11qAa)@}lCEsyP1A3r!vxoA`(CTc8(Uo#$<yb%EFz^T z^|v!q3bXD+gei5ZiXOrXE<8h?ml3b4QEi0lV9Ng*EkX|>|CG}GE<kwcP1nZ?ge%O0 z%#_}*!=3a(DAo`;l$C4on+S@3SCd@FhE&nDb}dq#D@^4#iWwiSMV6qk07R~{qrz08 zzTfZvO4L5TeBhQCkH;_?jX)_?-XiDoIaL~A2t+SU`vM_%Mv%#50+-80zK`OWU!2e9 zuv)EPI2>l&$R~*IZur5#e!qv)>6E=q0_k82U(f}R01`j~NB{{S0i=~DdlYFyC~V{! i-HZL`Wz2MZ1Q-CRep<na0yk^`0000<MNUMnLSTZU&PW#k diff --git a/java/res/drawable-hdpi/btn_keyboard_key_dark_pressed_off.9.png b/java/res/drawable-hdpi/btn_keyboard_key_dark_pressed_off.9.png index 5a9c722cefb461a02dced268bf12e418a38f0e54..1fcbd9a887085ef01807d36e6309f95457beab4a 100644 GIT binary patch delta 894 zcmV-^1A+X)2doE>7YaED1^@s6boh93ks&C5PDw;TRCwC#n#+pnKoEvYjgA*^1Yy*r zE)*9d_yqGJvz*6r>5I5=A-EA&vv4JX3pa{*8}*#O4<$|8xoHwJo)k3EKvMOks=7MW ziJi}9@>625m{9OnPfR)QnGP@*va%q6{JMRdo<t&$2*jWKi#!s6L?AX|=uWm;E&BR@ z`l5QhepNwvCE(YJfGa+ZYW4sA{-#c+L!;5?`Z^e-R^4v5OSxQ*j>n_;e>$DSV2}Wo zHJ1^O$Hjmo5(!$b*Yx@Md3A}_BbiKww%e@$VF(o_2oQ$g0T9^cIJ5w<-|xlEV6+V6 zw^wxD0049!4hL~`48l3U#xn??3&JCR0DvwWp$|uk74z9JgW&wYQ4KM#lYO(<&~P}U z#bO~Mp-?DLyWOTrrE;amOs^J14kMjcybP`7a!LJupYr*<m?aIv5a$Mi0X3UVaZaAe zT!oelqVtGXAh^ePJf?EFOvPgHk{fStZ(`P*PN!5VmFV^L^)?VW7kKyqf+wGUOeQae z$~6ig2($ToF1!W3Jo&gzb`?Md@j@^QVLHXEBt!6%Pp8utop!Irh82X>@ItcLtZ4$X z;Q)2AqIf6>7dLnYNiGZW67{TFtvUjU+a;r)<LBpxYPFhJb|4=(jPQH4T8Tslpp%Ce ze*}O$VCeh%yU+_DOaSl(009DjSSQi&(9q(rg5ixuLqKt&?{+&;D0w2d3&bw$yb^#Q zlynP5r*;|l<cFW)R-bWCjywXywMU!)1r1_V6n~XRe3`Yv2J+lplqj^q2BN+jgaO2^ z2tQ37dH!S%YeBp@*{y(r0@3}C3S#JU#BBdNtR681!50ZCOcYvSUu)fe^2X+sN6hT` zzdRyuwy2#yv;TgGs$aLSXuD{XyBXYj<*tTVN8Bsn4vK7p6@(*?@QpY=)fSCkAaYAc zwZ|2RY_ObUcI|yH!b#l-MUzg3aur(gMGVDCg4#n=VO)n68!sEo+i#pRL4+22f{zv; z`h9k8>7y%-9<01Y9psm353(m-US24bN?mO~SbAhOn+c-<!yxL`bWk81&H%v<7P|G? z>vW%Rpr!xu@ges2)G!JXL=87|?t8r+O(v7;%XA>WQ2v29cuEfiRlgb5$sYj*0PcSv UyOqQ((*OVf07*qoM6N<$f?kfF1ONa4 delta 916 zcmV;F18e-O2f_!C7YalO1^@s6!$f9nks&C5WJyFpRCwC#noVo+KoG|#X{=R2g@Ua| zJt#d?@Ducl^ytU(*e~M6gW#p~<iV2&9=s@}*4IA&<r!JlO-yVOHQj}6Y9N{UWnOkO z6Kl8IQIx~7EFs{Z97{PLnhY>l;?I9!*E;Z!42S`V2*jZT3?z<3SVXWG5Cak;NTbnz zpjN9zwOZ|91?8PUR67D*@kIbDtN&mypmw`W@9*#aK;GWoD3{C8X0s8$x7)3l3=+e( zW<PD)78B#<=7v5$Kk4=L_23e1`pslAv{)<z2t%kaaey!cPk=x--Oz#nV!2$3n?Y$A zC~B+dtN{SXUaeN*=o^G%fR$$uJ{O07MF0R<I6@wd9y{ip;|9U;furhTVF&xy*BABs zeVR_E!V`+cA~l;$DwoR#a@^!<L1Z`5StU%@n$2d^?RF`j&x<VSIF2~i>-FgA=}DZE zGg%<ll0kG92@3@G`1tss$HzyyzrWwdMyXU1S#vZR(Zj<76$*vZK;&5983hP`o_s2m z+AAurQ2>FPO(qjzEy(5M6FAsa02w5Vfh>e{imW6<@RPs0yW7h=_G;{SL3qtDMmC#u z4PaIrpni4~X9eNK4VFQW%L8$V^{i5<_yVzy1!I(Ry<StbS{2(4!~?q#{-4k1BG3Wo z=i%As0FWmXeSUrxash+{0BZn$5Fmi{;|*tZEp{s?Ua!{$6bJhE_qSLmIT8E{<e1xq zH2?xv(rp<1>gD_<J|eD+1d`|cCPvNy64)YsfZ_)6S`@F!B9UaRO9QbfA;Y-VRe-4P z2A2SGY!Ob(I+FZgztjcs<Y4y#iVH;d+boC|A0uwPkxR9RD~M?ADlo=>wJv?Hb;=uC zSQc^9=Wkg=ZnmhEKeyje3{}3auXuFRC|5JM_R3Waw~BaJgDWVq4qgzxEW$Tp|5Qsf zQGv)MAyuD1AhN=8kR2=Uhv80YBNRnC87h!#$rmvc3yG_TsKNwxEmmGunA>k0GjX^U zTY`@sAo@N#m-JB;M-5hgZc)ei<%4XAbUID9x3>rF2TzNP$77*1U>HPgO~(bo?hFug zuu!enUZ?wn110^Jmlx6BQ{5;|5Y^pKx$ks3G#m~OFEgJx84v?vK&}cT5#RlqkNgdY q0r_hnJ~nc@b1Uk#!34vP00RIEp^KZ0{@YUk0000<MNUMnLSTYNtE0#O diff --git a/java/res/drawable-hdpi/btn_keyboard_key_dark_pressed_on.9.png b/java/res/drawable-hdpi/btn_keyboard_key_dark_pressed_on.9.png index 99b6cb17068737696c287a2f12f821afc8bb815f..072753f37dfc12ec6c24858aae888bbd9f58d426 100644 GIT binary patch delta 1217 zcmV;y1U~zM3hW7x7YaED1^@s6boh93ks&C5j!8s8RCwC#np<ldM-<2ZGrPLDrg2NI zC2gS&m_Wg=fkH8XzNVkRkIuJp-u&L@LSOt9+%^xUF%(iYq!`C?Bum=M<eV8FX|r0b zE~`~6S0jyAlC?YMH|KxO%<Kp#znH69UIWHJB^q1WLLh1dvI1Fw<dzl43S<Q`3&{3= z_BQtR_OP|JH8g^9mDlB1r20qIH_w&h<74da@8js`Xflw4g9EIuuOo^g`#z3iTLom^ z5CeNv|Gjd5pp}N!+J5eN9$Kvyc6WD&F5zcgcx`PBoleJs2t*pDxb^&04nm0s24wvQ zfhg^O7=&%hDw!Y*(d+f>#o6d2&^)|<;*58OYma(dWTasYw*rZ&4Y>AItU;|K2m))v z#2^v_V!VLJXGJ~2Mr%*mo>tmG`wAXeVkM*;har38h}w!I9u-v1;O>utkoe$ZT4F_l z-AZ3`?`x-j0*Xu%fBya}niqc~4B8Z*5Apc%PuRG%iHN8eNEwYN9<78-kfe-%vb<76 zS`6V`1%~o~AbN|xUcJDhEkm`6N~Mm*KX35zj~D26pW*JEC*Y>yFmlIfq?H88@<<U7 zZCFm)Wh6SDzWW7Fe((sQM#1d9bNh~uyZ3y&BrgTgBl6sBE4i5T#&u$lWGqOXTjpW_ zV^bEwxPgb?oZ;K=>U{_)_a9V$&~C-}_w^Azt39Rm^4rY~_B22eWcE3?i)MakziE5F zURRm1#Q!_}ul3O&JSyP*JcztHYjN_Rv`T?n@xHX4;LE8I7FH`82s?aEe%pFhkeO@j zvQR`d4DR9V><e@|!@3VcgXX!R#PGfSZXD&Oem(B)#Jnr_Y-}MSblN?C1eeb!OKH5n zh^_Gv8GPA}@%BxKcc)L$xx8h+%jekf#at6<@rWH$|3ze6kK}Z5zCp5jj#uZuVg2*h z@N|!Y{3{v=e?-vvnn1dgdaq*3sOf^eOb|YmQB0`pOtp2<LD2IF;%Cy6Z%2Jj_m^#& zCUxJF6deHNy8e`DYLIb%vMc13tKPMPZ5UIWoVkf3kNQSD;MDJCz{YjLtm(Hbuh5)> zo(eorGl-pc$t)PM7U4ltB3X^hY=xv%cq(t)XyT^xgGGrfsGJu>R{UB1g3d3JwdQqa z*d*3=Dlw&pjf+8hD#s<C&Lb1tn4YHH8v~+oL&{28O97HhbJqobWZWRUR36ELx%t7q zumN!jkIX!290#;0kgWHs0dW~(#4LQ3SimEBASw;BlGb&fYvm14WqV|lJ^wF{$SN(l zB1^B%@>Xl}D(UvK_7%rY8vAQ!TK)5#4tXti>&q<M4%eg&c@PtML@p%y6qvF>q}?RM z)E-Ipemd~PJ7sQvPbVR`@+N2!YAR_ZPZB6;r0k591`(L4r6tBE4VLXUiJ3)6OFSXR z9FXjNb~aeHsJq?nM_bg3{N+Q^6SZ0m)oK;K?@#WLMx$YkW*7lUZ%r=>MC8mM^?Du6 zW;6S|!Tr8L+1%X3&dv@hmCBHe773D;8~<S7@bC~PCnv)!r)7aGVNq(5o>g)O`4biX f&EmN4d=Ov&E%;F~Lv|o)00000NkvXXu0mjfn!sPo delta 1239 zcmV;|1StFL34#ic7YalO1^@s6!$f9nks&C5q)9|URCwC#noDonI1tB&l>EpBZMNuZ zi*6U#6bK3w$hAO$A}G*n_Y>rpeyjABd(R8(C0`-C+e6R>DA0O~7C{=Pc4SK;cZST^ ziY(I)S#F$&HY3}y#QAalLk>j?D8A^kqbRHat$P>Ou)qaDL<v%YlpxMhf|MX7$TT2- z>+9>VwY3FnYik2DC{=!4j76e%6ykg`u)n_#+uPf)x3@PQ$j;6VEH5uZ9LMIpQp!{Y znKeY;UeS9m>>rRqf|SyH?s*=xS}oYz+#I-spLOA-r6mZ0z<@AB8YaK>^b{6Cum}2N zy$6B_X@LlYY|AQ{AOz9vcFo1f=p@j8EWBckw}wj(dz@t?!5D4?qOc9H?F%IVTZb?V zjSXXia15~V48ot~^#~a)Jz;uUNDa~#;Grc(Lc(%rv{%L0R?P7zT<Np+he2?B&@nBs zJi%_HFRAyX)jtBox(WaO{U<a}K0p+<F+T6Zqem}b<@zebNJT(GONiBQC1iqsBxRK4 zl|0fS2=6Q~ga;7DU*O&Q*YI#nW357^QisN;&+zu2*U;&_gxj~C05zqe*d8a5RuUx3 zBY8liCOJtvBH{7y+Z%ZD)I*3G2DAOn&09X)zT?AN^imi<M9<wcl2fQRs$+vBV}a|; zMlJ%-X2^m_HQ@e(Blzw2dJlqs%iUip&~7RC@8cf)RC|u?x!ZLHdm11KGJVc%qnRGk zZ<^k(*F|P5(f<y=w$4q$!vfxSLAdI)#mWPRRSevUcf)vsE+>XqSgou;6wo>Dw&k=S zQ&(k2p%`lv-hrc|pP>^B>OP7zG><h743EusRqP)6<*2(8v#!*$%0R?_5VX4xp1#CU zO2YROWsHx};M2B(FP|g$cK95E)9dEDbdH%{^aYU?&DaY2FGl0KD5sO-6_nL0cz^sC zEMNNwp6p_f-@}RU8HB;F2-3l!_bj%wm@L?f1ff$2MMuJ9s;!d%!mf`Hf1sXxGwaiE zf7-@0sq-DBXaR7n>!nP86N8MBT`sSj^{$z0BZYBtWD`f4^)-9Is^4b7+IGUU!*5Yu z!JGr10%)Qp5R-Rt77V-=p-Gb?SqvT7a!D(9DzEKqV$=ElqJ$Sz)(b2v`pmtc^Ye^a zv$`{^6Kgw>Na?}EMZZ1aaLJGJ$QU=KCu#T6fJnF`rIgk}fFy^1xr+iaY7$;3kGNni zf3VMOLY%-OQzwn1faV2~^}d`C7a>OU+*gS?JmLZoX_!)47d_W<O;AO9WSBiy%Oku> zORmV$t25VXZB`}Se%8L?$fU8icE;5|-Ra=he7C;HLhVpZ+Tem1%OiXt)+fUh4Z`gv zAtv@nviH-0$KEM_a(g-nL6tT^lTZ^$D|r$_aU(^KSZNT3nOItEe9~ave&d*#hqTxe zd~|?h@3WJ^yhYvVbk1#2&-0fLNl(;jHK<mr;QRjg9%(ch#%O|Jko4B{yg*pa1X8cp zq1kL^pVz<N*DtH9tFW=L0hLN+Kt}TfNz09XFtEG33kL^62ZN_&fh=GtK}wJk<f?%9 zmtieZ{>Z-sDM79vh%*rsyvh9o4Rs}$WcU993;-nvZ!yF0Ey(}?002ovPDHLkV1n^x BUhe<^ diff --git a/java/res/drawable-hdpi/btn_keyboard_key_light_normal.9.png b/java/res/drawable-hdpi/btn_keyboard_key_light_normal.9.png index 7dc59bf82268abee3656297857d3e43da52115e3..1ad746053df532f5b8fa9f87c5558456dc2bd725 100644 GIT binary patch delta 412 zcmV;N0b~B*1I+`F7YaED1^@s6boh93ks&C5Z%IT!RCwC#noW*_Fbsul2(V_)0pI{! zhcyRc$DI%dV8I?(BJrO#nL(-sn6iOMGqzNzLTd4smuE*{glBNh;i^Ey_0RFD`#kRf z`2GDll6wLT&?NK$xzZnZg<v3$kVgpQpMbEvi$M@T9LM1MzEa5+MFDA=LZ0Vax9?Sd ztt3gnbzSJX4whw6W9t|OIF2LpiK1x3v8#w}+t4%(jN=HZ^ciuUVvNZJKE1WtwuNCB zz7AuEN`MF@#KKyZbsj{hpjyXYb2`Y2>jDA<LLdb4dro>Qa`gj=+Z0h5L>on@YJG}N z2!ufH1W~bSy~{}(Mf84(LS`or0wJ@1Q$r+=oLpS3Ji>MH2>yhj@=N8H6d@1-ArJ!j z%)rAwB3=bg(**N8E0L*bn(}irz_1HaRh5M3`(6Sm(YYCulMi)W?@O|Z@OshnJP5;3 z{#d0E4zWA3EQ7KvHyqkb(4CsaeVN_;t25TyIg*C}0|0FvxR`EDp!NU&002n`MNUMn GLSTY{0J&`d delta 432 zcmV;h0Z;zT1K|UZ7YalO1^@s6!$f9nks&C5gGod|RCwC#n>~($Fc5{uU_wpL0pI{! zCp8D6<4%YJP|yP<5<dYp_AXMiz=j6aF>j<u5mLf@ett6u22RhIriqRU#@PJl?5OiR z&q3_x`*9@a1T#pJ&<Es5f1DM90Um)z0CEu!zIM>}eG0>nJkL`q*(}Q_j$=yGbm{hg zwW<|G5jl=SP1Ddgj%sWj!ywzXWj^=&eZjG+$nAEcs;a2(ds3y(i0diNxm@7gTdS^X z>bmaxVvI2*K!g%vVJ*wr4<b}ht>e!*ZR9oS0zv=*2tfYMNpD4tz9Dg%A}WJuqX??j zr}zXQ067yx#j5o#Cv6nb`z{L14iJEU!0c#<@W{@^)ygB2E*@dOVNiZiexV3J00Izz zd}grCJ|Z3kKOPSnhCzu;P1BU0tpSErkfJCgMBBC!NQutPxtx3`%W_?kS%lYvuIo|| z1oFo!jc|zFkt7M_dA{Jl1RbgtK&}F!%iOOvilF?$>;Sn4$gbCgUS2Qyuk!jEcGUGt afB^ucy}znl#Q2i{0000<MNUMnLSTZ5KgX&7 diff --git a/java/res/drawable-hdpi/btn_keyboard_key_light_pressed.9.png b/java/res/drawable-hdpi/btn_keyboard_key_light_pressed.9.png index c150341e364f8a3a291a90e8f9c2767920775dbe..ccd59d5fa6e3b25756993299aac599a65e636685 100644 GIT binary patch delta 765 zcmV<Z0s{T(466o^7YaED1^@s6boh93ks&940?kQ8K~#9!?3%%j!XOZar?m$)dNRI+ z2jkJF@lA|x;?sCE9z6K~UOZ~l7`40O?vN3ILbp)2mV{87SmxuO0m?K=(-eG`D2g5( zeD@Q1?FT`qv;SIfkYcDvsX=Ox8l(oPK}so!>gISnhUs()qtQrSc%E91yMd>c%5u4X zgxPEci^aljWnZt?(C_z!!T0-JRNpWhB93EG>E3R)gTY|%va%}`>GgVWyWNEGc#Vb= zh%XopK_J*R8Vv!2wpqK@<#Kr#O~!IX_<f&>a5a9tM%=ds!9Su3{F=KKSH%YiR_u#F zP!V0+&<;D%J&;D8TuT)vK7*Z<puTi}N*EO(<845Sg5o2M*Rt|_;&E~<syyHcLie!3 z7B@)^?pC^i(}L)NJp_nq8qSJMqaq}wtdQ?ur$Fa@5|}fH+^VYQ*VmUAads_}@nwM6 z^q1s?C<`Q)Yh^)&1j(B2GhNH(;l4mjzdy^hY=J_9sP<Xb>&QFBi1UJ2IYr)oZ9&YX z$U6qRsZXnQB+p7)6o}3qhZspMs#g@JJ`Hb(skZvv{r*%m8V`4<&!2;y^g|EmblZb6 zwkWn+mFmx0?+T*px7smcv)}Qph-*w%M-f$y-R7k#<jQWkCqVE>UiZPke>!}q{(@*y z!M7sv+3%mHU(<_B=#phioX2;6LrlAcxE3W__%%<5@v~STg;H+3%62({&_Ob0jQA*- z&R~mhA<7$4rOcHxh@9?11@O1cd|osN*}{RGwkR|L+-IqiP#|bSk|YAe`4j~UxfAzK z%v#CWBwrw0354MTtC$?rdG_n|3Wvi1&gU~6k4KSqqc%h#5Ng})HZ+@PP3Uww_KIva zo5!E``~3rir`$rNr}+m1*dj=`+lB3RtNx$r6OQ3<2$RVKTCLWT0-^R<^0Z3|olYm1 v&*!jOtzKNKGGCcSHltfMsLeOSUjhsONWch?bA^ne00000NkvXXu0mjfJXm?P literal 1643 zcmeAS@N?(olHy`uVBq!ia0vp^MnLSs!3HD`yQJj;DajJoh?3y^w370~qErUQl>DSr z1<%~X^wgl##FWaylc_cg49rTIArU1JzCKpT`MG+DAT@dwxdlMo3=B5*6$OdO*{LN8 zNvY|XdA3ULckfqH$V{<S3ODsN@GWpo&B*kqDoPEm@(W3>%1*XSQL?vFu&J;D8jzb> zlBiITo0C^;Rbi_HHrEQs1_|pcDS(xfWZNo192Makpx~Tel&WB=XP}#GU}m6TW~gUq zY+`P1uA^XNU}&IkV5Dzoq-$tyWo%?+V4wg6N<iC+Qqrt~T-=~`0eQAc86_nJR{Hwo z<>h+i#(Mch>H3D2mX;thjEr=FDs+o0^GXscbn}XpVJ5hw7AF^F7L;V>=P7_pOiaoz zEwNPsx)kDt+yc0<dBxCR0tT3VMPh-zp`HQAOE87LzW9~q=E7AMmjtCE+>6!V;*iRM zRQ;gT;{4L0WMIUlDTAykuyQU+O)SYT3dzsUfrVl~Mt(_taYlZDf^)E`f^TASW*&$S zR`2U;<(XGpl9-pA>gi&u1T;Y}Gc(1?#n{Ev$;{Bn$=KM@(9p%r!pPCW*~rn+*wD?w z$<o9Wrq?AuximL5uLPzy1)<j&r(RG}$SnZc?2=lPS(cjOR+OKs0QRy~CT_P_;xrGc zHwCv_9C7N^2RcR{6tPGV4HE*U9uO0rY=Inj!cWZuruHIWvVOnywk!h!(|u1D$B>F! zZ)O|zy)qDJQ&(hFSRt@|fy0zJZL<~f4rOWxvWl`VSjfWY<Zw^AOkJwy?Two^PNwCa zEb3sHcm99R+X|;C%QScB1d8mn`f=a?$rgE*h3D$B4?1=&R8(zXnZO|Az~rH-I`Qrt zzvTw=&nFtq?BG5h{kp*X!?mEu_18B<=p<~7nz{DP?YClWhZEC2eExZ6Rkj45;PJw+ zm-ikPG+fO1vT>8Qs3Z^DhYA~`#~-D5)dj*0WSSf{<Zg|U6u6c4CTjcbx2YzQr$rxr zkJUPK^~bkaZ}u5-)Cq<@xPE8r4lO;04N37VO<gM<wUyoIe8rym<mA?r!be6oJUL%^ zFKr1EG`h#KL`TE!QiZP8d38DM>x)h?&r=Ao54-h9ZN<U6UZw?J0-+mzGfeb7T)A;& zXv-22(IVM5A}{v%Gi_!QjE*e*^W&GG^0jqKjrVa0O#U}%kw9ppNYPpwjrj_dmuuH$ z&-}APTj1{V{ZFHoIqY*x`K|M~bcvr~(q08KzlpnaJ6c6nCU1EC%OuLZYt5F_#uaZi zc1*moz{+*wtKiQqGqhIUzWYAhb@9i7_FsRjUU>e0!8kXoI^d|-(UR4d{zR@`r?9GS zwyd(+Z`tczH;$zgi%fia!&h!q&AK<cswFw(POgrV_~F~me>PsARBK0=i_P!9AHS@w zp71gDQ%-01k9GZ-+eNM~O5xuB?4?1S*y}|Br+ULL>S+sDc^vBzlvlkgnIoy^Qt7;E z%Faz}f|p}gFw~jNJb#)^G1_9nRk2pLhTl4+kGNTKJtnCzZ?tng==AQ$U*XMRNoFTS zIl`F|e;n{qW3Qa|w{HL8mnBWFzj8hQZ0Wr_@bzK=j;(j|#BaSd`%-0F>{_<_?(5UX zAAe*$6r8v3(&ay`j5&f!?!P}=w|{!Q|2MAV6*g@*bJ*tkJ@;jd|E*JaOSM&RI=9Yr z?;AO0^6NzJ8Lf@xRA5wrCAG;8N|SjLu2vgP-f#L>IDsLkh+|pIy44+^;@{KN&t;uc GLK6U%hk8c< diff --git a/java/res/drawable-mdpi/btn_keyboard_key_dark_normal.9.png b/java/res/drawable-mdpi/btn_keyboard_key_dark_normal.9.png index 53fe9c97d4ab0b350bbefd61883ce63cc2a4e489..4e337fa0836e56404e74b1c9e250e9088dfc1794 100644 GIT binary patch delta 327 zcmV-N0l5Bw1Nj1w7YZi`1^@s6YKoe1ks&C58%ab#RCwC#n9UA@APmO~a`82s$N3b# z_4XP*gGW!^gmyr-!+>oj+SnzM^g>Aa@o)Jk0Q)rB>Ok$~Xe-AFa)SIXNZ<Ex?K;p} zv&}jT1Ke-7w?2~&y0k4!(*({r7Ko~<plKQ~#(=f<Gsry8(TIpC1}Xw*4+P&p?6LrV zGO6*(0T%$0g=Qe=2O#n0ZpnWJLWt2gTgiV8B1MrH8fHasts=y%2(41Y)1Hcm+%<B} z5yEJ^p;?n7NYQvhLoz}`g@hHnYovgL>sidDca$QOB@**Xx#ZtG%TAK_9yw4Exw{6K zK}!BL2x%wC&m38NffbCq(o3I<8OS&?j!@S%8%QYb!yIXCE#+GRRB7d2K4LycRND6t ZU;xg=0|;54gFFBL002ovPDHLkV1jZTk?8;c delta 335 zcmV-V0kHo00)YdN7YZ&21^@s6O@+(3ks&C5BS}O-RCwC#n6VOrAPj~BviKU-u|9=w zZC}G@aCCALNP%mI0&Vp)X9l>-;&I{gPlAa6=PW$xK%C|1D2D_ltAG@c-Br`~J>0tv zq@-gU#}OXG@bOH=n{I6j^E`twh6JLjDrlMplv1Fz{tmJ%OE5&5t3?PA0HgzgUm$va zUBMEm@y-F`0iqX8K&;zfk@lj^`A<O5+F+C`=RXDEqDTl0u_AV>B1o(VZc@b27DZTA z4WD}iZ7|x<Y{?Oe!DvH+JVJw+gk@YcTtNKinaxM<Dn&3!B;rOn=U=@VXyn(AT&M`& zssUn<oc}U%vIR+UWOW0UH|j|*ZWj|ekZGEru4^(7KivB>;@O(ZKeUpp1>|or6-C&B hh#f5h>A6n<1^|Pt_z)2Y(*FPe002ovPDHLkV1jx;lBECu diff --git a/java/res/drawable-mdpi/btn_keyboard_key_dark_normal_off.9.png b/java/res/drawable-mdpi/btn_keyboard_key_dark_normal_off.9.png index 649ef9773b893b964913e1b3aae6d734bffa72df..fe18497d82a1c7d9c1138230ffdd14c24b59ecba 100644 GIT binary patch delta 496 zcmV<M0T2GB1fc|w7YZi`1^@s6YKoe1ks&C5!%0LzRCwC#Sj%q0Fc6$PiWER_;)WVT zIhL>Bujy~_2?%lGKte@A;;q*zRht+{<rsXx(jH=2>&fiSW;Z}Pi%cDOZ8<W<;lq*j z1o8y(Z`CXo3%t+g@O^t2SF061mdihTVfE14Y=+%#hq5fKfCz#B)9Dmp7@{bO%Rth9 zG*w1qr?hyUrvUg85Uv3!PA7;K*hrED>-8GP;}N}H599F|-ELRqK*<0qFIod4<N;yG zMwVsRZnqc?hZv1U3e0A+K|GnL(CGZvfRGT%OxEY&fPTM^D2miGGr}P`@9X^6fwaKL zOQ(ZEhWEFhKqe>eUt(Mz8bd|~g8`C%{T{w#ftg@`tU}Ha4x7%uuVcj2SQW2v%o0)g z!3vqk{K)hC=ge(JBwABO_(EoaFYm~3FbjLh(7A4ira96^4PhqOv|ZG_RCBYPYr;qy zb>!A+R!2xEv&slH$q_-y?1qNi2n}fx)|zUrhlcJaUt=Krd3Hj+k7R^uiDbE3QP%kn zzZ+<BuChLo5qDJs%RqGgpChNUKx#R1k^>f-?MbiNF4lnXAjI>CEg(GH^BvXM+LeE3 m@N{o3=_AW^#H;Ro2`~V<4SC2?3d=kI0000<MNUMnLSTY$9_x<) delta 501 zcmV<R0Sf-11f~R#7YZ&21^@s6O@+(3ks&C5$Vo&&RCwC#m`iTLFc60SJc>jT!HOLs z5oK9U!L8{vI08bfSP-ZJBz8SksoKPlAjjZEEX@MT8h`xrzyr|E;<^r;wjAklxUgh( zARWlVRkK(u@G+mmb<HuZRx5lim;d(s@}c+H47=S9MNt@m@H`LG=@h>2BhT~OAcw<$ zK^o^~T8ra262KKexCfG7E?_OFk)|ou>ou}0Ll}k_kH-jtK;}R}0HrTl0b$|*(^TVh zI$^urVmKUPG#W{m&1Qo*Nn~hL{wpAyF=;yM>v%*IMd<hY@-rzyA-V3W{8vF*P~@%G zLoUMm*N-QXllE^Zt`3c+B7?yI>3$D?SExWrkUy$I$`J~i%D<~pMAxV)CUHz9BJ+bP zBoX;>KA(Tj)GH!rbrqotNeQ~VC&EE0?1e(tzQLO2NE<zblps^SqMlVXwa>XGinP&3 z>Q=Kp!kILqitr{m!nicEq2YFfhAR@*Sk>GQ4S!zwYJ<?vvlZq0N=0}jkqkdzlvV!y zp9eIzuCu;U5qql!hCx*RyOGmckV=kR#DGO+deSRD7b_q%2+=%Z3WSDxx}!W>+wvb; r2hxGma&!&NS`g=fCxg*@zXcco-vxKlbE=MA00000NkvXXu0mjf2Y=@O diff --git a/java/res/drawable-mdpi/btn_keyboard_key_dark_normal_on.9.png b/java/res/drawable-mdpi/btn_keyboard_key_dark_normal_on.9.png index 93f7d87c2b238061186cc2a4a93cda10a4ecb3a3..00aab3d5af5cb97ad0bf3989b2a6f027887a3b40 100644 GIT binary patch delta 759 zcmV<T0to%B2Brp(7YZi`1^@s6YKoe1ks&C5$Vo&&RCwC#SnW;|K@>fA_JbA>p^5S1 zhcPKXh>;kL#s{cx;CuLf@)iQoH2%ece6)qOz`8qgy)!KZ+l6)u8&~6`(>9rzJ7>>5 z=VoSsyJ>ve0CZP@Zi_>qAgwS!{33w(@bUFO%m`8ci)h?e&JoP^Gubt@S`9DO*P)bu zni+($K$QJ^iH2o&WBMSrx3;kHY2#)_s;jGLHk;5|X9ht^KuGs|<+}1{_?Q-iPK^8~ zRI614L4Y`puLsiYc3o%AR$43oyRjd52<AM5%7gEF4xj~*7=!qymd$NX;K{rjfh00$ zGP2<k%*v(04+wK5g|OU4@8pX-(1|dARl&l&=Q3%*#b(x^Nn$lNml@fxK@Bm404SeO znm@ziC!1J%@8iM43K}~J>R&%&ckdnIh%Qq}7z%d`2n&U_XBLQy$WEloD~EXbD#X)g zp&MFS@)3p+PS2V+?W}+_|0d*gATu&TgLQWO;-ZiH%ihq!A{VSwJe13Un?oso@zYb2 zkr79;wyuB^V!QnaM~6Eol?;NA5JimrAD+0eA{y*LiJnHykjh9_$Jp6@AmWTjV{ezS zz4->MW?j;BjKhNpzVED|b#(5W<CAuoyt>UeBf>^jMsQIv<GxNhZ1Al<kAwZUqKy#I zd4zULT+}&tKq1!6g^~UP$l64IJ3y{(BwcildoFKIcfwX8T_+5WtRW_7WG2^Kq{on3 ztF;ujn4B{%48>+p;_a`eCo?ij9l4qwi-<HiE79m#(hZB2%oMI+;f&c}=EjrHooVq? zQq!j|&&FojI>I>v8JHp$*JP8@R2nG=5LcLt$yp<&*o^R)ka9k;^EIbpc)B_^Yh}Ir z)ciq4it8HW3?wc7|F;2u&ua;L`?5VR!P>)8k|blt(J>&6MnjJM<=lYS%e~!W^ln|0 pcWCym!)f$!&UIw;>Wg0j3;^|4(za@KTp9oX002ovPDHLkV1g%tb3Fh6 delta 766 zcmV<a0s;M|2CW8=7YZ&21^@s6O@+(3ks&C5&q+i<RCwC#Sldn;F%UiDy^sK<BvRGO zLscm}psEP9YSj-&|DgZT|0{n{K&?<;X`oz^K*D9aYfr}xmy}%y8?x#?#EO%ZY>&^L zIcH=Cm`vk`2B1j=dMFNslC&w1;r98<yYevNPh530_##UC$~l7Benz{d*=*v?$_kW! zQe%Tq7KpNs*JxOFH)a50b7KQ*U)Sztq_MPwcDoI&b#4%(1cY?YSFS6Mu3poE(20>} zLZi_@5Cn+h_;w)ue&2QGe5J(#up9e<hhWA-s66<-=Kxv|i7|-(XxZHM1fI;h6G$S1 zCMO#%!K_>={D3f1Q3$JDoE(3b7djSyrs|k`^jap(x!BAaG)k<-<}xQ6HmD(n5CG*9 zDzj&J{$d@=pL{%dT1RU;!Pbv&*xCJvIHK!R60U@s0>VO}?YRZwBC-?dV(kE{Z$rF% z6}q8?1s`D;;q<JH(_Rgv`5z%?0~wPMx>#q|&(HgKyy#t7Smc6Q-9xn+xH*)65kEUM zIT>*@YwHR)A$GgZaCoqdO2r@u2~ot@`|XJv>!QIEDAChRGh{N7*D-eX0Ejpv(%9W$ zY_7jYr@bX<I>Nzz9ly4h(K$SK&hbgROb&08W<=P?%LpzjW<1bIj}3lq&0>G=gJ>f} zbRMDG5f}B&9Z-mM3t?pN0<t!L(GHNS8%ZC%qZ5}mr#oRQk**VlN7fJ{G%}WJF4JSk zt<_qJTTIRwmxf|<QR3~dr$;j~P8}Iek3~e9oR#S2S<(%Qmdrg|!@?P}!Pt#QpF6YS zXQXC8Uy+T?ed`Dp4CKNTg}5f4l<uXGk^pgq$(VvQV#>`3r-W4SiJfn0ImOfP*tnH- z@~QccjFi_kC>Tgq{OKjUv_MiCv9~YVixR9oEG0>jI*z7*v|24W_E!r7VlVf0kDGVv wviyfO1u_LP634Wll@<u)I5HHv?_U8103?6VzIxHCp#T5?07*qoM6N<$f}c=nPyhe` diff --git a/java/res/drawable-mdpi/btn_keyboard_key_dark_pressed.9.png b/java/res/drawable-mdpi/btn_keyboard_key_dark_pressed.9.png index 8560b3ba70053c37e19ef7beb7d11e00ba082b6a..ac0bfd3c1e754d21c87d5e6f7e9ba1e93153dbe8 100644 GIT binary patch delta 441 zcmV;q0Y?6Y1cC&R7YZi`1^@s6YKoe1ks&C5q)9|URCwC#n9GfXFbswb1Zag`I8y}m z&<HoKbU`B=c(dbZJ<0|aJYY2JY9d+DNRyv0wi9dsWX60}z>yL<%i+RJ#s}mB^75%k z(-h)32Bnn#JxvqL^Q`UA0~|-2>$*?9q9`ECvTcw&&tV+LA0`3fd7g&B4f?(hNs>T7 z+qTdDDSKhlG|+V&48x!ecR*e_3W5Lxffk0Lo;N}8fqma=Pap`+5+LXi(nkneZvjG{ zKmY=g05Nk7HSMtglL!GEf8NqktMByhSlV{DMqucyo*LU5(jH;u2*KF%8IRbyY>!+W z8di>65gPN@vO{Bs<E<XK#i>~fi&SXLu)qBtIdp2cB7ZhV*dVVYnPjrgckzhBh545` zvRf)%4f5N|PwiboX3cr_LNjd_gi3$Y%(~)C6;HhlY3_pH0`ppzU#Q}-g)m`Qp`muu ztgIyZ8iHY6@pWD6P7iw;=}r$Jf*{aZsJ#hNmL)_{BoY=I1_#1aRi!t2$8TuhtnK!( jgG<34&s-eAF98Mspz#+8-DX;q00000NkvXXu0mjfEzrck delta 445 zcmV;u0Yd(Q1cn5V7YZ&21^@s6O@+(3ks&C5s7XXYRCwC#n9GfXFbswbgrOCB;Y<<K zLnGX{(glrh;LXa>dXx<;c);v1D<WCZNRyur+X;36WX5z<z>yL<%HhIA#tm|Vyu53Y zB!MW3Kq;kvkK+i_G-=!Q0LRhhy6#gi&vQuAbR8tiG8l&8he?2Vo~L2(1%2O#IF6w} zX`1K%l)bR7YiQdR`o7nOZ$Mtz3xWUyfffXTo>xKefnC>WPap`+5+LXi(nkneZw5l1 zKmY=g05Nk7HSIA2lL!GEe_qp4i{JF`SlYI`MqubH?i$-0(jH;u2*KF%5s%oqY>%8B z8di>+5gK#bvO{Bs<E<XK#I9Kii&SXLu)qBr*|lr9A|IP0Y>-!yOfp%gt9ZoW!u-n| z*(?>$2Knvdr?w6uv*tW{pqaJ_LZ!cHW?gZlil^R&G&ezTfqAS;V^s0jLYOeD&``T+ zR#p;y4Z*OE_^PUOr-wa_bf<?9kH<r6q4p|BQ4|n{p-5P47#s*wmZg5tE8d~q7d1D? neb4&&w~Dhb_g_EvOMn3Y7poB)q0SWN00000NkvXXu0mjfaLvxD diff --git a/java/res/drawable-mdpi/btn_keyboard_key_dark_pressed_off.9.png b/java/res/drawable-mdpi/btn_keyboard_key_dark_pressed_off.9.png index 778abaf2491f0f97dadb4d71c3f50790c225f683..ea2f357895aa2c321234be50fe45c019bd8eb31e 100644 GIT binary patch delta 639 zcmV-_0)YLz1+N8=7YZi`1^@s6YKoe1ks&C5QAtEWRCwC#n7gXNKoEu}F<uZ01qH3O zvG4_~t!#W0pTw83)XG+{@g+nX1@G4!|ACcd&*tVPXyL$MBFW^Ne`n&XMDdtw8o-Jx zkST{vUt&LyA4ue`>G%88>-ETS9C|z+?5^vwzx4piVz+IZ9dU-kAq@rte~|HbO!xbL zold6{-EKEN28@yHPk>Y^#mQx}S;}NG)a`cZd_KRfanzeGmkaIpd%g(AfQbVH5b1Q9 za=9E83I#s*1-V|Ye1Y(HK^BVz&1N&&Y&KM>RH)r<Q>|9xWr8BA{R6>+0RuIJB3Pa% zw%u-NKA%&yTBUlu&I(VbQ|fd&tPbLT2ZA7bJX|<#imJ$JwW4ylOvPf6&ruhsk>zqp z`FviR*gp`_A*x3)NH4lgbPj3*-+RTfy+B0kzT;5ics#P2$R4$ZE-aNwuWJH9<adYs z8O5;-jYfk3*6TIHG@DJ|cTyrtgW5u?wpuN2Q-Fx>iwvS>8P!Dli}wh?P_%M??If;9 zP)wa^L3HbGYVxw^;yGS7Bmv_0BkFibsmf})H0lzCQY5LRiPSY-1si9vhVGiMm7ZwV zB&mp6e;;dKxg&KT?zhy4CBvvPezZoCF4k~e<Kd=%6$Hg|H25#K<a5)_lN6W2C?YmO z!ZGBS8e+(fxS>EWJHW+|i<?bqc6xG53`)A>v>+IAWr#R7SYj|j>`)-P-H!J&n65DV z!cDsds)!hXI2;Z<I{Jc)MkAgz#TyXH#07#_NOCfn@aH%Fhennz+h+!ef<2#Uso(tx ZFaQQ6KzDQ{>I?t?002ovPDHLkV1j+@E*<~? delta 652 zcmV;70(1SZ1-u227YZ&21^@s6O@+(3ks&C5UP(kjRCwC#n9Z)iP!Pul^$`&vAz{tN z!V6ei*?1JMa9_a7*jn32Y%IKjup#mN*?a$!dzy3Wl-6l4l1?(A(oTQpKQlF_ME;nm z8zACWAYG0SBn0_fkWQyV?RJ|C!=UT+%5It_`*U}Qut%d&cEsuRderT9@3(Ki->1ue z<wE=Yp3dhpe+P_?0U#EO@#2!nBqb6FYPDK)I2^2V4EsgL<B>L-4WESXfbjza5b=1N zQmGVWG8sO;3vxQ0_ypn4f=s7V8jVJ@TrR0tEK;M<pmMp)X@Vkly8*$C0RuIJB1n%H zTdh_!9*?P1Dp93UVTFgoAvK##RtNEaAA(@@xVdm#<W-URd`^WzfpWPVAEPc%BeU6z z(&@BvVK*S6L+tLwAid}|(K)CM{O%Mh>I5QM_Zf#8yWNh}#OhIN=)!zHZ=LfHM1FS2 zpI#hks8*{Cuvjb@rdF%neI^Bx8q^kAwO+4tn*v01pJx#JD!rO$fAJgv7>ZVZuARUY zc@$G+N)T1vbxlr-DxTqVK@cGK{zMHYDebcArpBHkSBeCc8c$v0RIq*)tLv_DTj_yz zO^}M%>+falD|e&{#C(?;iO4W^8DCl>K^LpLu5obPR|Sva847&MBl5BCD+ehqxlu%H zgoI<r(KW=79dTWOV0M6uAr}{S>+JO8m>85)i&KJN$dw`d*kFml2(ev(tk-Ma&tSU3 z@C(=N8mJ;-0Ajn{^62;{eZQYy7TJ$<*=&{p<h`$si<U(!EOIay&}1@s%XerYNC*<X m%=>&0)j#)t)TU+M0t^77=X0c~ds62B0000<MNUMnLSTZ9gEtTW diff --git a/java/res/drawable-mdpi/btn_keyboard_key_dark_pressed_on.9.png b/java/res/drawable-mdpi/btn_keyboard_key_dark_pressed_on.9.png index 2a23945e503eec0a6cb07ab6880123bea34d3d96..6195ac0d4f52af9ae965d5a31e1ad9b88f1e3b84 100644 GIT binary patch delta 894 zcmV-^1A+Xu2doE>7YZi`1^@s6YKoe1ks&C5PDw;TRCwC#n7eM&Koo}m@r=ER0}BKp zx+pXhNC^muH-Lgr1PMCcffT$(cnCV`6ckAn9)L2DkmwK*f<%#6doR8W=S+51#%r%l z>=j#J<;1&6eCC_~TxP~VJC|<iK(ytkDTjjvx&DJ>uNSW$E{-Cq^{f*Yzl4~sD^n4F zTJukJ)$Hu-V0(KTN-3miYD}Al_1}Svy$b^+;80x%GObhW?d@TA_w8(ugM$MkNrJ&( zfH;oLXNIW<Axs@Q4&TKX0tSFV97n=)J-Dumt*vKfjMC7IMk544fZ=dxJ~K=m5DOut z1F6_Z1?fyc=o{T7qR4~4yh1Pv8IEaxkSK}_gtfXLtb!v2lq;DA=jUH=eDnc9c!F+s z9rrh%qkH8JqFB%vBcs^NWaWVwhSji&aCoZvGlM9XB~eI5-_h&8$K$6Gw{EZE+t)LE z`TP#P|AunpD&iy_D}_noPJ!_3d2nkCRi%h=$YF3aWXdBPWAlNFwRO+@t=m<9@Vp_; zejH(?^9Tv~6QV*9TOoO?T=g>l>-!F_U6+#*rX0nMRf+yD1)b`8eZ)GmrE9G!H1w27 z)+A0K^gW!Ne!|jH3fB{qYZ|9NNgdq1s6w**<O)M$dq?(OEr~!vKoNx}=uuUizC;*& z#Ik>au(w8zpP(O73JLaq(bTekEUkscD4q~-q%jDGIM+Afue?GOD3hF{VMJkx;VMar zq*EbkCo~)#o*^Y_N|w+-ag<O$>O+isjC2%rYYLB+6Gi5ftURDLA!2TxwQcnbq7;9o z{E)>y3qkT~)NS$Ea!$-bW1F300F_jw{tA=zGNGBN79}vRH5{_CMO2l4^@Mz=8i9<T zpB3uT@@-R*d|RjmQkJky6{+&4>d4qONbRlSycEgj-`vZ$Do4u7S1(GAh%8KA#($b4 z^G?=!Ra0V3UlmmOQ-!P7*hKbw(^n1|zo?@KFHl*Nv?FhNv5%~oMX(MCAAs2G?wudL zY@V1?UdAV%Ad4nf2;zBZ-X9Q6`-lbUbUMa&Es$QXXU;QxxZ<M(ThppxRjdz&2*c1E zRc3<h@9$${V`I_*lY$-hWkJ{%PxA2a(A*dC9UARr3uY_K=5u}*jhTOYg5LrR07xM+ UR;~fqvH$=807*qoM6N<$f`h`M0RR91 delta 904 zcmV;319$wa2et>07YZ&21^@s6O@+(3ks&C5SV=@dRCwC#n7wY(P!z}i_rp$`f`KB$ zR+WW;p&%sQ00zoXB-nTdI`9HKKzRr@<_;{~kh(Ia5>hurg&<WWV&}sjmve4&BR7p> zQzvSXV&%k+TA%y7|MPKu4b0{+bsdOVIjYOC04a!!1-UeP_4Y9&uE?S15^VY!1wE&K zxsAUu{3)-R?d@%BZEZnojV#No8GEz&H;|!sVW9-1kaU*hC&TXUE_QZ4Ob6N9+e4bB z==FL?lEhv!Of?7^l!7fKpT!UY7JxydRPa3?p66k6^MxIwFf@a~0AU!S-|yRNhN%ML zAe53&nvGOYas)!Z=&TUOKAOub1f!9E<2Vlz$FYTQRuzO*kV-&%ifM3ia)^W0XN1ua zf?ypFH(nyRb`NnPXpDhXY-+OdzzoA`I7K)-WnF+lw8xTYq=TR6bU)$gbA>y1SMlTf zF%G|dM6>yha^yOaG#M&|QR1Eh;o0-x&KRmp5$lk{APrQ;BOGAkk%zT)-~KIs2sC`Z zkK<o0tTdh=C4WMcDB>z)+)7uy-2XP45;tzDQ3+Fy;?}A{_m76jOtn7ZoVn6<Ru&q% z%O-1@q!8u-j@w_cw3NZ~1?8GS`!}hB`=?b%Ha@wDp>e$<e=e6qASIxf!V`9=D%!6R zg<r7TJVMl2BgfCsjVOf#`#)`eYI&BKg~lqL5^!wLi~2Y*x6xdAgE-VSIS2ii!jiz# ziWJGtg=jXR;pp%TDN!@Blm<%Tl=@K@V%TGp)YPphJVuQanNzazfX0T1xp~&E)ia3J zd`<bGCi|QSGOk9|7N0NY)Gjox*+~nil`ix*F<CDXnyG400`pqKAuC#cM0HV57!Oq~ zkm3E)LS0zCvs7ffEmQ(2O4z!Jl=;(DWSlif<wwPNDKegab1&br94RVab5(Lg<YC5T zywn_-cd}NingXl)s-VoDp167qP2_*q-Pq>*qKYECK;=!*6M5Z(edNt9f>l6x1H|T@ z-udQ>=84_q<$UrEa?<2;CW83Be+Hs%A8{a!M#K891k&kr?0$wfSG<*At6Md!iu1t` zQ54y&%9-#D&+kWMBwY{$79hX(tz)ia*%wc8e}5mXR_jW>LtB6>Ko;*=|9_B~zvQp_ err8~T1sDJ?wSr{R=ZyLQ0000<MNUMnLSTX_@V6!a diff --git a/java/res/drawable-mdpi/btn_keyboard_key_light_normal.9.png b/java/res/drawable-mdpi/btn_keyboard_key_light_normal.9.png index 6af2d8d0c2ee2ef405fa05dc3757b2541165fd7b..50cd06ae3685154ecdf450fe3055e3bc4adf5035 100644 GIT binary patch delta 305 zcmV-10nYyB0^<UZ7YZi`1^@s6YKoe1ks&C51xZ9fRCwC#nB574Fc5^tDA<L?Scvb| zBv^|D_-rfUZ|)+T9QhGJH|}v+@I}Jr%Z!msfO|?_Z4lkn=qg752_U}<QWOR9JVzYI zBr{4W(KHR}x<1~%RaIe{Camj90wRP!nx-hr65}}T?-PAs-}e}Xfz*e2o(;tfkY!na zHZ`K%wfn76bLeG&C<tm0o9&5fFjcAEw*Gt-VFTil?tiWM&{C>mEAQ607U{HxvRHhq zrxo!9qR+wC8Xr4`l{Eq642a|c5`Du2Yq)?2FsT4?3dHxJ$eHxiLm4?$Z#`rgAZ^<s z%Q7-m6iC-~TfROF;g8)**jD~N!As&C|A-M0UIGjNOzaskvYPO+00000NkvXXu0mjf DbB~DL delta 308 zcmV-40n7g50_Fmc7YZ&21^@s6O@+(3ks&C52uVaiRCwC#nB574Fc5?%D%gd^Scvb| zBv^|D_-rfUZ;l9e9ElM{H|%k{;EROa&lw|5fM-hIZJ?fNbeAInlM)aCxx8zNqClSK zh~t=Kpw=2q)1a>FW00z<FijKIb)~T&ijbx$%Cf{bj-UI9y|C|l48uTb!#vN9;tt4v zvMie#N+~jH%nZ965CcICvS)kZTTE4^_g;U#im(CkN%z0jylE*_*{k5z_#V=04P~)- zSx+kx3dEkl*P0MJhLtq}at1_m0a4#DVhtA%NqWBp68fjeoAk^@897aFJ7hT^ZQCNt zGBQ;RNY`~+zCH}$Y>p)aL_jPK`LePf1@R?q9eVCdfB^uxR}w%$HfH|-0000<MNUMn GLSTYVh=w2l diff --git a/java/res/drawable-mdpi/btn_keyboard_key_light_pressed.9.png b/java/res/drawable-mdpi/btn_keyboard_key_light_pressed.9.png index fdaf69966a8e87e7781ce70303605907e4c549b7..7ce52f0f585605e632f2e9810677c62098b77419 100644 GIT binary patch delta 477 zcmV<30V4jA1dard7YZi`1^@s6YKoe1ks&C5ut`KgRCwC#m{HDxFbu~#7@md$a2anx zybcdu#4C6V-T)CkI=-1YH!QA19$eBaCgZ=~x_0XXkZEJAfRYl5<w#&B?FaG$S)Dbf z(+Q5pBWSIk^K<+xv6NCzzlULfs;ZzY%Vm)3^=dxGiK#`ccG9DkBnjks4o%ZM#%T9{ zqx=1CsBv=JOMxH&wlqy4%d%w<oV@S*2Y`i%1wjbZvQTdGf>;1akDvy^SRfV%ZjTfU zjSZ{A@(A4$>Ya~o!+%duZQr829&v*;2E>=ftgUg$C1S*WzuF_NH)3OiW=lv<bG#wp z71uMYV6|}~oi+44VQ0-&9tr7aU->zIj)P+{Aj+7Uiosb6OwS0`@x|h{X14iWoeecv z>AO`5uS#D!a4Qg2jBFLG?=*r(ymb1~!|ki-`%Wv_!7K0K5k+C#GC+E3LPz{=o)cfm z8n#Cy?v;=h`y6p^OJ98%bNhz$bg1<ARaUWY8fvV&h7P3Fw-gA=BXwPy2Ugceb>a^! z><@>7vD@vo401l7p(qMgdAFu|w><(~E*EIqc9;L5f%2_%qTdv3n)4-f{sb5Ra5s2i T6{wb@00000NkvXXu0mjfZ=Kwx delta 481 zcmV<70UrL21d;@h7YZ&21^@s6O@+(3ks&C5v`IukRCwC#nC*>&FbswrNIMM!une1^ zuG1e~q$_lc{^Ogg;ey;Wp{6lcP9l;OA;Fsm$4;C8$h1CGKuHOOazwC^wu9^-i?il* zIzg6YptXL^&;GN-Qc68NcU=eP^BM9yp9i_!Zo|hoFtwn+edtk(q6m^Cfubm;ceMR~ zQQNiyH4biiDG&s}7RNCh4u^RV9K30o3BbUFf*=HH87R9sK@5PTM^FP{3=j(hr$-8g z#)i>hd4x_0_0Gq;;jbsCw(F;y9<hTp1jLobtf{fdC1S*Uzt|(TH$r2CW{XcxbG#wp z727kcU^Q_foi%hlVQ0-+9`WgDSNYk0_nl=SAZjr6C<aF@7<xvq_AeGTHKUFD>S(CR zO5e3ocv1S&7uNz|#mHL0`cA{U#7n0yUEIE!zVEc64V>~Ok0=UbmjTjK<6Gi4bDa1} z*04Pyv9I{F*z1VBTe|AYkloj(r+uZrtFj6`(@<mWHS|SVeM^C`JaWI^hXYnjRaN2# zEbNcR<6w1N&x2ep7f92TRo*SB-c64{*XtF^vfShy+77aV?Dwqy|5ow!l=a8s{s=Gt XR10=%F1yEP00000NkvXXu0mjfQiSKQ diff --git a/java/res/layout/input_gingerbread.xml b/java/res/layout/input_gingerbread.xml index 8f59cae216..73cf0a3fac 100644 --- a/java/res/layout/input_gingerbread.xml +++ b/java/res/layout/input_gingerbread.xml @@ -25,6 +25,7 @@ android:layout_alignParentBottom="true" android:layout_width="match_parent" android:layout_height="wrap_content" + android:paddingBottom="@dimen/keyboard_bottom_padding" android:background="@drawable/keyboard_dark_background" android:textStyle="bold" diff --git a/java/res/values-land/dimens.xml b/java/res/values-land/dimens.xml index 1396bff9bc..043f4b3632 100644 --- a/java/res/values-land/dimens.xml +++ b/java/res/values-land/dimens.xml @@ -19,13 +19,17 @@ --> <resources> - <dimen name="key_height">47dip</dimen> + <!-- key_height + key_bottom_gap = popup_key_height --> + <dimen name="key_height">0.250in</dimen> + <dimen name="key_bottom_gap">0.020in</dimen> + <dimen name="popup_key_height">0.270in</dimen> + <dimen name="keyboard_bottom_padding">0.0in</dimen> <dimen name="candidate_strip_height">38dip</dimen> <dimen name="candidate_strip_fading_edge_length">63dip</dimen> <dimen name="spacebar_vertical_correction">2dip</dimen> <!-- Amount of allowance for selecting keys in a mini popup keyboard by sliding finger. --> - <!-- key_height x 1.7 --> - <dimen name="mini_keyboard_slide_allowance">79.9dip</dimen> - <!-- -key_height x 1.0 --> - <dimen name="mini_keyboard_vertical_correction">-47dip</dimen> + <!-- popup_key_height x 1.7 --> + <dimen name="mini_keyboard_slide_allowance">0.459in</dimen> + <!-- popup_key_height x 1.0 --> + <dimen name="mini_keyboard_vertical_correction">-0.270in</dimen> </resources> diff --git a/java/res/values-xlarge/dimens.xml b/java/res/values-xlarge/dimens.xml index 5674ef6286..d2cd6c7d15 100644 --- a/java/res/values-xlarge/dimens.xml +++ b/java/res/values-xlarge/dimens.xml @@ -19,18 +19,26 @@ --> <resources> - <dimen name="key_height">72dip</dimen> - <dimen name="candidate_strip_height">46dip</dimen> - <dimen name="spacebar_vertical_correction">0dip</dimen> - <dimen name="key_text_size">28sp</dimen> - <dimen name="key_label_text_size">16sp</dimen> - <dimen name="key_preview_height">40dip</dimen> + <!-- key_height + key_bottom_gap = popup_key_height --> + <dimen name="key_height">0.450in</dimen> + <dimen name="key_bottom_gap">0.0in</dimen> + <dimen name="popup_key_height">0.450in</dimen> + <dimen name="keyboard_bottom_padding">0.10in</dimen> + <!-- key_height x 1.6 --> + <dimen name="key_preview_height">0.720in</dimen> <!-- Amount of allowance for selecting keys in a mini popup keyboard by sliding finger. --> - <!-- key_height x 1.7 --> - <dimen name="mini_keyboard_slide_allowance">122.4dip</dimen> - <!-- -key_height x 1.0 --> - <dimen name="mini_keyboard_vertical_correction">-72dip</dimen> + <!-- popup_key_height x 1.7 --> + <dimen name="mini_keyboard_slide_allowance">0.765in</dimen> + <!-- popup_key_height x 1.0 --> + <dimen name="mini_keyboard_vertical_correction">-0.450in</dimen> + + <dimen name="key_text_size">0.175in</dimen> + <dimen name="key_label_text_size">0.100in</dimen> + <dimen name="key_preview_text_size_large">0.245in</dimen> <!-- We use "inch", not "dip" because this value tries dealing with physical distance related to user's finger. --> <dimen name="keyboard_vertical_correction">0.0in</dimen> + + <dimen name="candidate_strip_height">46dip</dimen> + <dimen name="spacebar_vertical_correction">0dip</dimen> </resources> diff --git a/java/res/values/dimens.xml b/java/res/values/dimens.xml index 1378be72cd..2fa47ae529 100644 --- a/java/res/values/dimens.xml +++ b/java/res/values/dimens.xml @@ -19,26 +19,35 @@ --> <resources> - <dimen name="key_height">54dip</dimen> - <dimen name="bubble_pointer_offset">22dip</dimen> + <!-- key_height + key_bottom_gap = popup_key_height --> + <dimen name="key_height">0.290in</dimen> + <dimen name="key_bottom_gap">0.035in</dimen> + <dimen name="popup_key_height">0.325in</dimen> + <dimen name="keyboard_bottom_padding">0.06in</dimen> + <!-- key_height x 1.6 --> + <dimen name="key_preview_height">0.464in</dimen> + <!-- Amount of allowance for selecting keys in a mini popup keyboard by sliding finger. --> + <!-- popup_key_height x 1.7 --> + <dimen name="mini_keyboard_slide_allowance">0.553in</dimen> + <!-- popup_key_height x 1.0 --> + <dimen name="mini_keyboard_vertical_correction">-0.325in</dimen> + + <dimen name="key_text_size">0.13in</dimen> + <dimen name="key_label_text_size">0.083in</dimen> + <dimen name="key_preview_text_size_large">0.236in</dimen> + <dimen name="key_preview_offset">0.000in</dimen> + <!-- We use "inch", not "dip" because this value tries dealing with physical distance related + to user's finger. --> + <dimen name="keyboard_vertical_correction">-0.05in</dimen> + <dimen name="candidate_strip_height">42dip</dimen> <dimen name="candidate_strip_fading_edge_length">63dip</dimen> <dimen name="spacebar_vertical_correction">4dip</dimen> <!-- If the screen height in landscape is larger than the below value, then the keyboard will not go into extract (fullscreen) mode. --> <dimen name="max_height_for_fullscreen">2.5in</dimen> - <dimen name="key_text_size">22sp</dimen> - <dimen name="key_label_text_size">14sp</dimen> - <dimen name="key_preview_offset">0dip</dimen> - <dimen name="key_preview_height">80dip</dimen> - <!-- Amount of allowance for selecting keys in a mini popup keyboard by sliding finger. --> - <!-- key_height x 1.7 --> - <dimen name="mini_keyboard_slide_allowance">91.8dip</dimen> - <!-- -key_height x 1.0 --> - <dimen name="mini_keyboard_vertical_correction">-54dip</dimen> + <dimen name="bubble_pointer_offset">22dip</dimen> + <dimen name="key_hysteresis_distance">0.05in</dimen> - <!-- We use "inch", not "dip" because this value tries dealing with physical distance related - to user's finger. --> - <dimen name="keyboard_vertical_correction">-0.06in</dimen> <dimen name="candidate_min_touchable_width">0.3in</dimen> </resources> diff --git a/java/res/xml-da/kbd_qwerty.xml b/java/res/xml-da/kbd_qwerty.xml index c66290c624..66771c2875 100644 --- a/java/res/xml-da/kbd_qwerty.xml +++ b/java/res/xml-da/kbd_qwerty.xml @@ -28,10 +28,12 @@ xmlns:latin="http://schemas.android.com/apk/res/com.android.inputmethod.latin" latin:keyWidth="9.09%p" latin:horizontalGap="0px" - latin:verticalGap="0px" + latin:verticalGap="@dimen/key_bottom_gap" latin:keyHeight="@dimen/key_height" > - <Row> + <Row + latin:rowEdgeFlags="top" + > <Key latin:keyLabel="q" latin:keyHintIcon="@drawable/keyboard_hint_1" diff --git a/java/res/xml-da/kbd_qwerty_black.xml b/java/res/xml-da/kbd_qwerty_black.xml index 7f6ffaa2e5..d89204ae64 100644 --- a/java/res/xml-da/kbd_qwerty_black.xml +++ b/java/res/xml-da/kbd_qwerty_black.xml @@ -28,10 +28,12 @@ xmlns:latin="http://schemas.android.com/apk/res/com.android.inputmethod.latin" latin:keyWidth="9.09%p" latin:horizontalGap="0px" - latin:verticalGap="0px" + latin:verticalGap="@dimen/key_bottom_gap" latin:keyHeight="@dimen/key_height" > - <Row> + <Row + latin:rowEdgeFlags="top" + > <Key latin:keyLabel="q" latin:keyHintIcon="@drawable/keyboard_hint_1" diff --git a/java/res/xml-de/kbd_qwerty.xml b/java/res/xml-de/kbd_qwerty.xml index 5d40d39b73..30d8de0cff 100644 --- a/java/res/xml-de/kbd_qwerty.xml +++ b/java/res/xml-de/kbd_qwerty.xml @@ -22,10 +22,12 @@ xmlns:latin="http://schemas.android.com/apk/res/com.android.inputmethod.latin" latin:keyWidth="10%p" latin:horizontalGap="0px" - latin:verticalGap="0px" + latin:verticalGap="@dimen/key_bottom_gap" latin:keyHeight="@dimen/key_height" > - <Row> + <Row + latin:rowEdgeFlags="top" + > <Key latin:keyLabel="q" latin:keyHintIcon="@drawable/keyboard_hint_1" diff --git a/java/res/xml-de/kbd_qwerty_black.xml b/java/res/xml-de/kbd_qwerty_black.xml index 9842dd51d2..f394c8d02f 100644 --- a/java/res/xml-de/kbd_qwerty_black.xml +++ b/java/res/xml-de/kbd_qwerty_black.xml @@ -22,10 +22,12 @@ xmlns:latin="http://schemas.android.com/apk/res/com.android.inputmethod.latin" latin:keyWidth="10%p" latin:horizontalGap="0px" - latin:verticalGap="0px" + latin:verticalGap="@dimen/key_bottom_gap" latin:keyHeight="@dimen/key_height" > - <Row> + <Row + latin:rowEdgeFlags="top" + > <Key latin:keyLabel="q" latin:keyHintIcon="@drawable/keyboard_hint_1" diff --git a/java/res/xml-fr/kbd_qwerty.xml b/java/res/xml-fr/kbd_qwerty.xml index 9b82e824d3..9a4a8796ba 100644 --- a/java/res/xml-fr/kbd_qwerty.xml +++ b/java/res/xml-fr/kbd_qwerty.xml @@ -22,10 +22,12 @@ xmlns:latin="http://schemas.android.com/apk/res/com.android.inputmethod.latin" latin:keyWidth="10%p" latin:horizontalGap="0px" - latin:verticalGap="0px" + latin:verticalGap="@dimen/key_bottom_gap" latin:keyHeight="@dimen/key_height" > - <Row> + <Row + latin:rowEdgeFlags="top" + > <Key latin:keyLabel="a" latin:keyHintIcon="@drawable/keyboard_hint_1" diff --git a/java/res/xml-fr/kbd_qwerty_black.xml b/java/res/xml-fr/kbd_qwerty_black.xml index c3f122fa77..be2befbe8f 100644 --- a/java/res/xml-fr/kbd_qwerty_black.xml +++ b/java/res/xml-fr/kbd_qwerty_black.xml @@ -22,10 +22,12 @@ xmlns:latin="http://schemas.android.com/apk/res/com.android.inputmethod.latin" latin:keyWidth="10%p" latin:horizontalGap="0px" - latin:verticalGap="0px" + latin:verticalGap="@dimen/key_bottom_gap" latin:keyHeight="@dimen/key_height" > - <Row> + <Row + latin:rowEdgeFlags="top" + > <Key latin:keyLabel="a" latin:keyHintIcon="@drawable/keyboard_hint_1" diff --git a/java/res/xml-iw/kbd_qwerty.xml b/java/res/xml-iw/kbd_qwerty.xml index 8ae7187a2b..7f66eef569 100644 --- a/java/res/xml-iw/kbd_qwerty.xml +++ b/java/res/xml-iw/kbd_qwerty.xml @@ -22,10 +22,12 @@ xmlns:latin="http://schemas.android.com/apk/res/com.android.inputmethod.latin" latin:keyWidth="10%p" latin:horizontalGap="0px" - latin:verticalGap="0px" + latin:verticalGap="@dimen/key_bottom_gap" latin:keyHeight="@dimen/key_height" > - <Row> + <Row + latin:rowEdgeFlags="top" + > <Key latin:keyLabel="ק" latin:horizontalGap="5%p" diff --git a/java/res/xml-iw/kbd_qwerty_black.xml b/java/res/xml-iw/kbd_qwerty_black.xml index 1435e1e13b..80ade2020a 100644 --- a/java/res/xml-iw/kbd_qwerty_black.xml +++ b/java/res/xml-iw/kbd_qwerty_black.xml @@ -22,10 +22,12 @@ xmlns:latin="http://schemas.android.com/apk/res/com.android.inputmethod.latin" latin:keyWidth="10%p" latin:horizontalGap="0px" - latin:verticalGap="0px" + latin:verticalGap="@dimen/key_bottom_gap" latin:keyHeight="@dimen/key_height" > - <Row> + <Row + latin:rowEdgeFlags="top" + > <Key latin:keyLabel="ק" latin:horizontalGap="5%p" diff --git a/java/res/xml-nb/kbd_qwerty.xml b/java/res/xml-nb/kbd_qwerty.xml index 0efe2a1775..96a86b0130 100644 --- a/java/res/xml-nb/kbd_qwerty.xml +++ b/java/res/xml-nb/kbd_qwerty.xml @@ -28,10 +28,12 @@ xmlns:latin="http://schemas.android.com/apk/res/com.android.inputmethod.latin" latin:keyWidth="9.09%p" latin:horizontalGap="0px" - latin:verticalGap="0px" + latin:verticalGap="@dimen/key_bottom_gap" latin:keyHeight="@dimen/key_height" > - <Row> + <Row + latin:rowEdgeFlags="top" + > <Key latin:keyLabel="q" latin:keyHintIcon="@drawable/keyboard_hint_1" diff --git a/java/res/xml-nb/kbd_qwerty_black.xml b/java/res/xml-nb/kbd_qwerty_black.xml index c7bbf943eb..4adeb48016 100644 --- a/java/res/xml-nb/kbd_qwerty_black.xml +++ b/java/res/xml-nb/kbd_qwerty_black.xml @@ -28,10 +28,12 @@ xmlns:latin="http://schemas.android.com/apk/res/com.android.inputmethod.latin" latin:keyWidth="9.09%p" latin:horizontalGap="0px" - latin:verticalGap="0px" + latin:verticalGap="@dimen/key_bottom_gap" latin:keyHeight="@dimen/key_height" > - <Row> + <Row + latin:rowEdgeFlags="top" + > <Key latin:keyLabel="q" latin:keyHintIcon="@drawable/keyboard_hint_1" diff --git a/java/res/xml-ru/kbd_qwerty.xml b/java/res/xml-ru/kbd_qwerty.xml index e409828551..57114a8ea6 100644 --- a/java/res/xml-ru/kbd_qwerty.xml +++ b/java/res/xml-ru/kbd_qwerty.xml @@ -22,10 +22,12 @@ xmlns:latin="http://schemas.android.com/apk/res/com.android.inputmethod.latin" latin:keyWidth="9.09%p" latin:horizontalGap="0px" - latin:verticalGap="0px" + latin:verticalGap="@dimen/key_bottom_gap" latin:keyHeight="@dimen/key_height" > - <Row> + <Row + latin:rowEdgeFlags="top" + > <Key latin:keyLabel="й" latin:keyHintIcon="@drawable/keyboard_hint_1" diff --git a/java/res/xml-ru/kbd_qwerty_black.xml b/java/res/xml-ru/kbd_qwerty_black.xml index 784f7457fd..8f2f599c3e 100644 --- a/java/res/xml-ru/kbd_qwerty_black.xml +++ b/java/res/xml-ru/kbd_qwerty_black.xml @@ -22,10 +22,12 @@ xmlns:latin="http://schemas.android.com/apk/res/com.android.inputmethod.latin" latin:keyWidth="9.09%p" latin:horizontalGap="0px" - latin:verticalGap="0px" + latin:verticalGap="@dimen/key_bottom_gap" latin:keyHeight="@dimen/key_height" > - <Row> + <Row + latin:rowEdgeFlags="top" + > <Key latin:keyLabel="й" latin:keyHintIcon="@drawable/keyboard_hint_1" diff --git a/java/res/xml-sr/kbd_qwerty.xml b/java/res/xml-sr/kbd_qwerty.xml index 703c188ccb..1a657055a6 100644 --- a/java/res/xml-sr/kbd_qwerty.xml +++ b/java/res/xml-sr/kbd_qwerty.xml @@ -23,10 +23,12 @@ xmlns:latin="http://schemas.android.com/apk/res/com.android.inputmethod.latin" latin:keyWidth="9.09%p" latin:horizontalGap="0px" - latin:verticalGap="0px" + latin:verticalGap="@dimen/key_bottom_gap" latin:keyHeight="@dimen/key_height" > - <Row> + <Row + latin:rowEdgeFlags="top" + > <Key latin:keyLabel="љ" latin:keyHintIcon="@drawable/keyboard_hint_1" diff --git a/java/res/xml-sr/kbd_qwerty_black.xml b/java/res/xml-sr/kbd_qwerty_black.xml index fe80ef6763..e4b09c7170 100644 --- a/java/res/xml-sr/kbd_qwerty_black.xml +++ b/java/res/xml-sr/kbd_qwerty_black.xml @@ -23,10 +23,12 @@ xmlns:latin="http://schemas.android.com/apk/res/com.android.inputmethod.latin" latin:keyWidth="9.09%p" latin:horizontalGap="0px" - latin:verticalGap="0px" + latin:verticalGap="@dimen/key_bottom_gap" latin:keyHeight="@dimen/key_height" > - <Row> + <Row + latin:rowEdgeFlags="top" + > <Key latin:keyLabel="љ" latin:keyHintIcon="@drawable/keyboard_hint_1" diff --git a/java/res/xml-sv/kbd_qwerty.xml b/java/res/xml-sv/kbd_qwerty.xml index 24a2e06579..8819159e85 100644 --- a/java/res/xml-sv/kbd_qwerty.xml +++ b/java/res/xml-sv/kbd_qwerty.xml @@ -30,10 +30,12 @@ xmlns:latin="http://schemas.android.com/apk/res/com.android.inputmethod.latin" latin:keyWidth="9.09%p" latin:horizontalGap="0px" - latin:verticalGap="0px" + latin:verticalGap="@dimen/key_bottom_gap" latin:keyHeight="@dimen/key_height" > - <Row> + <Row + latin:rowEdgeFlags="top" + > <Key latin:keyLabel="q" latin:keyHintIcon="@drawable/keyboard_hint_1" diff --git a/java/res/xml-sv/kbd_qwerty_black.xml b/java/res/xml-sv/kbd_qwerty_black.xml index ec83dec2a4..2532fca8cf 100644 --- a/java/res/xml-sv/kbd_qwerty_black.xml +++ b/java/res/xml-sv/kbd_qwerty_black.xml @@ -30,10 +30,12 @@ xmlns:latin="http://schemas.android.com/apk/res/com.android.inputmethod.latin" latin:keyWidth="9.09%p" latin:horizontalGap="0px" - latin:verticalGap="0px" + latin:verticalGap="@dimen/key_bottom_gap" latin:keyHeight="@dimen/key_height" > - <Row> + <Row + latin:rowEdgeFlags="top" + > <Key latin:keyLabel="q" latin:keyHintIcon="@drawable/keyboard_hint_1" diff --git a/java/res/xml-xlarge/kbd_qwerty.xml b/java/res/xml-xlarge/kbd_qwerty.xml index 740e7f5f2e..b725034145 100644 --- a/java/res/xml-xlarge/kbd_qwerty.xml +++ b/java/res/xml-xlarge/kbd_qwerty.xml @@ -22,7 +22,7 @@ xmlns:latin="http://schemas.android.com/apk/res/com.android.inputmethod.latin" latin:keyWidth="7.5%p" latin:horizontalGap="0px" - latin:verticalGap="0px" + latin:verticalGap="@dimen/key_bottom_gap" latin:keyHeight="@dimen/key_height" > <!-- This row is intentionally not marked as a top row --> diff --git a/java/res/xml-xlarge/popup_smileys.xml b/java/res/xml-xlarge/popup_smileys.xml index cf30a2461f..2cfcf741dd 100644 --- a/java/res/xml-xlarge/popup_smileys.xml +++ b/java/res/xml-xlarge/popup_smileys.xml @@ -23,7 +23,7 @@ latin:keyWidth="7.5%p" latin:horizontalGap="0px" latin:verticalGap="0px" - latin:keyHeight="@dimen/key_height" + latin:keyHeight="@dimen/popup_key_height" > <Row latin:rowEdgeFlags="top" diff --git a/java/res/xml/kbd_phone.xml b/java/res/xml/kbd_phone.xml index dc88e2b24e..17e7ba20b2 100644 --- a/java/res/xml/kbd_phone.xml +++ b/java/res/xml/kbd_phone.xml @@ -22,7 +22,7 @@ xmlns:latin="http://schemas.android.com/apk/res/com.android.inputmethod.latin" latin:keyWidth="26.67%p" latin:horizontalGap="0px" - latin:verticalGap="0px" + latin:verticalGap="@dimen/key_bottom_gap" latin:keyHeight="@dimen/key_height" > <Row diff --git a/java/res/xml/kbd_phone_black.xml b/java/res/xml/kbd_phone_black.xml index 52479459c8..6ade277d93 100644 --- a/java/res/xml/kbd_phone_black.xml +++ b/java/res/xml/kbd_phone_black.xml @@ -22,7 +22,7 @@ xmlns:latin="http://schemas.android.com/apk/res/com.android.inputmethod.latin" latin:keyWidth="26.67%p" latin:horizontalGap="0px" - latin:verticalGap="0px" + latin:verticalGap="@dimen/key_bottom_gap" latin:keyHeight="@dimen/key_height" > <Row diff --git a/java/res/xml/kbd_phone_symbols.xml b/java/res/xml/kbd_phone_symbols.xml index 1400d36708..5062d4707f 100644 --- a/java/res/xml/kbd_phone_symbols.xml +++ b/java/res/xml/kbd_phone_symbols.xml @@ -22,7 +22,7 @@ xmlns:latin="http://schemas.android.com/apk/res/com.android.inputmethod.latin" latin:keyWidth="26.67%p" latin:horizontalGap="0px" - latin:verticalGap="0px" + latin:verticalGap="@dimen/key_bottom_gap" latin:keyHeight="@dimen/key_height" > <Row diff --git a/java/res/xml/kbd_phone_symbols_black.xml b/java/res/xml/kbd_phone_symbols_black.xml index 8b683cc6cf..2a6932a9ee 100644 --- a/java/res/xml/kbd_phone_symbols_black.xml +++ b/java/res/xml/kbd_phone_symbols_black.xml @@ -22,7 +22,7 @@ xmlns:latin="http://schemas.android.com/apk/res/com.android.inputmethod.latin" latin:keyWidth="26.67%p" latin:horizontalGap="0px" - latin:verticalGap="0px" + latin:verticalGap="@dimen/key_bottom_gap" latin:keyHeight="@dimen/key_height" > <Row diff --git a/java/res/xml/kbd_popup_narrow_template.xml b/java/res/xml/kbd_popup_narrow_template.xml index ed3b130031..23c686e8bc 100644 --- a/java/res/xml/kbd_popup_narrow_template.xml +++ b/java/res/xml/kbd_popup_narrow_template.xml @@ -22,6 +22,6 @@ android:keyWidth="9.45%p" android:horizontalGap="0px" android:verticalGap="0px" - android:keyHeight="@dimen/key_height" + android:keyHeight="@dimen/popup_key_height" > </Keyboard> diff --git a/java/res/xml/kbd_popup_template.xml b/java/res/xml/kbd_popup_template.xml index cbb705835b..f1aa86f392 100644 --- a/java/res/xml/kbd_popup_template.xml +++ b/java/res/xml/kbd_popup_template.xml @@ -22,6 +22,6 @@ latin:keyWidth="10%p" latin:horizontalGap="0px" latin:verticalGap="0px" - latin:keyHeight="@dimen/key_height" + latin:keyHeight="@dimen/popup_key_height" > </Keyboard> diff --git a/java/res/xml/kbd_qwerty.xml b/java/res/xml/kbd_qwerty.xml index c14c7fa0c6..21a7ccb781 100644 --- a/java/res/xml/kbd_qwerty.xml +++ b/java/res/xml/kbd_qwerty.xml @@ -22,10 +22,12 @@ xmlns:latin="http://schemas.android.com/apk/res/com.android.inputmethod.latin" latin:keyWidth="10%p" latin:horizontalGap="0px" - latin:verticalGap="0px" + latin:verticalGap="@dimen/key_bottom_gap" latin:keyHeight="@dimen/key_height" > - <Row> + <Row + latin:rowEdgeFlags="top" + > <Key latin:keyLabel="q" latin:keyHintIcon="@drawable/keyboard_hint_1" diff --git a/java/res/xml/kbd_qwerty_black.xml b/java/res/xml/kbd_qwerty_black.xml index e1aa4f3235..adb10dcfb5 100644 --- a/java/res/xml/kbd_qwerty_black.xml +++ b/java/res/xml/kbd_qwerty_black.xml @@ -22,10 +22,12 @@ xmlns:latin="http://schemas.android.com/apk/res/com.android.inputmethod.latin" latin:keyWidth="10%p" latin:horizontalGap="0px" - latin:verticalGap="0px" + latin:verticalGap="@dimen/key_bottom_gap" latin:keyHeight="@dimen/key_height" > - <Row> + <Row + latin:rowEdgeFlags="top" + > <Key latin:keyLabel="q" latin:keyHintIcon="@drawable/keyboard_hint_1" diff --git a/java/res/xml/kbd_symbols.xml b/java/res/xml/kbd_symbols.xml index 4cdc53947c..4ce9a867b5 100644 --- a/java/res/xml/kbd_symbols.xml +++ b/java/res/xml/kbd_symbols.xml @@ -22,7 +22,7 @@ xmlns:latin="http://schemas.android.com/apk/res/com.android.inputmethod.latin" latin:keyWidth="10%p" latin:horizontalGap="0px" - latin:verticalGap="0px" + latin:verticalGap="@dimen/key_bottom_gap" latin:keyHeight="@dimen/key_height" > <Row diff --git a/java/res/xml/kbd_symbols_black.xml b/java/res/xml/kbd_symbols_black.xml index cb695f5341..dedd2da08e 100644 --- a/java/res/xml/kbd_symbols_black.xml +++ b/java/res/xml/kbd_symbols_black.xml @@ -22,7 +22,7 @@ xmlns:latin="http://schemas.android.com/apk/res/com.android.inputmethod.latin" latin:keyWidth="10%p" latin:horizontalGap="0px" - latin:verticalGap="0px" + latin:verticalGap="@dimen/key_bottom_gap" latin:keyHeight="@dimen/key_height" > <Row diff --git a/java/res/xml/kbd_symbols_shift.xml b/java/res/xml/kbd_symbols_shift.xml index e346384aaf..52afa38e33 100644 --- a/java/res/xml/kbd_symbols_shift.xml +++ b/java/res/xml/kbd_symbols_shift.xml @@ -22,7 +22,7 @@ xmlns:latin="http://schemas.android.com/apk/res/com.android.inputmethod.latin" latin:keyWidth="10%p" latin:horizontalGap="0px" - latin:verticalGap="0px" + latin:verticalGap="@dimen/key_bottom_gap" latin:keyHeight="@dimen/key_height" > <Row diff --git a/java/res/xml/kbd_symbols_shift_black.xml b/java/res/xml/kbd_symbols_shift_black.xml index a157492122..c1bd4e395a 100644 --- a/java/res/xml/kbd_symbols_shift_black.xml +++ b/java/res/xml/kbd_symbols_shift_black.xml @@ -22,7 +22,7 @@ xmlns:latin="http://schemas.android.com/apk/res/com.android.inputmethod.latin" latin:keyWidth="10%p" latin:horizontalGap="0px" - latin:verticalGap="0px" + latin:verticalGap="@dimen/key_bottom_gap" latin:keyHeight="@dimen/key_height" > <Row diff --git a/java/res/xml/popup_comma.xml b/java/res/xml/popup_comma.xml index 4e88f26c44..cef836acde 100644 --- a/java/res/xml/popup_comma.xml +++ b/java/res/xml/popup_comma.xml @@ -23,7 +23,7 @@ latin:keyWidth="10%p" latin:horizontalGap="0px" latin:verticalGap="0px" - latin:keyHeight="@dimen/key_height" + latin:keyHeight="@dimen/popup_key_height" > <Row latin:rowEdgeFlags="top|bottom" diff --git a/java/res/xml/popup_domains.xml b/java/res/xml/popup_domains.xml index c110ef6c26..5f92e2f746 100644 --- a/java/res/xml/popup_domains.xml +++ b/java/res/xml/popup_domains.xml @@ -23,7 +23,7 @@ latin:keyWidth="15%p" latin:horizontalGap="0px" latin:verticalGap="0px" - latin:keyHeight="@dimen/key_height" + latin:keyHeight="@dimen/popup_key_height" > <Row latin:rowEdgeFlags="top|bottom" diff --git a/java/res/xml/popup_mic.xml b/java/res/xml/popup_mic.xml index f5ef6eeb00..99c97ce39d 100644 --- a/java/res/xml/popup_mic.xml +++ b/java/res/xml/popup_mic.xml @@ -23,7 +23,7 @@ latin:keyWidth="10%p" latin:horizontalGap="0px" latin:verticalGap="0px" - latin:keyHeight="@dimen/key_height" + latin:keyHeight="@dimen/popup_key_height" > <Row latin:rowEdgeFlags="top|bottom" diff --git a/java/res/xml/popup_punctuation.xml b/java/res/xml/popup_punctuation.xml index ecbf09f721..76572b06a1 100644 --- a/java/res/xml/popup_punctuation.xml +++ b/java/res/xml/popup_punctuation.xml @@ -23,7 +23,7 @@ latin:keyWidth="10%p" latin:horizontalGap="0px" latin:verticalGap="0px" - latin:keyHeight="@dimen/key_height" + latin:keyHeight="@dimen/popup_key_height" > <Row latin:rowEdgeFlags="top" diff --git a/java/res/xml/popup_smileys.xml b/java/res/xml/popup_smileys.xml index 33006f6ec2..2f082318ad 100644 --- a/java/res/xml/popup_smileys.xml +++ b/java/res/xml/popup_smileys.xml @@ -23,7 +23,7 @@ latin:keyWidth="15%p" latin:horizontalGap="0px" latin:verticalGap="0px" - latin:keyHeight="@dimen/key_height" + latin:keyHeight="@dimen/popup_key_height" > <Row latin:rowEdgeFlags="top" diff --git a/java/src/com/android/inputmethod/latin/LatinKeyboard.java b/java/src/com/android/inputmethod/latin/LatinKeyboard.java index e10346570e..246df5fc4e 100644 --- a/java/src/com/android/inputmethod/latin/LatinKeyboard.java +++ b/java/src/com/android/inputmethod/latin/LatinKeyboard.java @@ -86,6 +86,10 @@ public class LatinKeyboard extends BaseKeyboard { // TODO: generalize for any keyboardId private boolean mIsBlackSym; + // TODO: remove this attribute when either Keyboard.mDefaultVerticalGap or Key.parent becomes + // non-private. + private final int mVerticalGap; + private static final int SHIFT_OFF = 0; private static final int SHIFT_ON = 1; private static final int SHIFT_LOCKED = 2; @@ -133,6 +137,8 @@ public class LatinKeyboard extends BaseKeyboard { mIsAlphaKeyboard = xmlLayoutResId == R.xml.kbd_qwerty || xmlLayoutResId == R.xml.kbd_qwerty_black; mSpaceKeyIndex = indexOf(LatinIME.KEYCODE_SPACE); + // TODO remove this initialization after cleanup + mVerticalGap = super.getVerticalGap(); } @Override @@ -168,31 +174,30 @@ public class LatinKeyboard extends BaseKeyboard { } public void setImeOptions(Resources res, int mode, int options) { - if (mEnterKey != null) { - switch (options & (EditorInfo.IME_MASK_ACTION|EditorInfo.IME_FLAG_NO_ENTER_ACTION)) { - case EditorInfo.IME_ACTION_GO: - resetKeyAttributes(mEnterKey, res.getText(R.string.label_go_key)); - break; - case EditorInfo.IME_ACTION_NEXT: - resetKeyAttributes(mEnterKey, res.getText(R.string.label_next_key)); - break; - case EditorInfo.IME_ACTION_DONE: - resetKeyAttributes(mEnterKey, res.getText(R.string.label_done_key)); - break; - case EditorInfo.IME_ACTION_SEARCH: - resetKeyAttributes(mEnterKey, null); - mEnterKey.iconPreview = res.getDrawable( - R.drawable.sym_keyboard_feedback_search); - mEnterKey.icon = res.getDrawable(mIsBlackSym ? - R.drawable.sym_bkeyboard_search : R.drawable.sym_keyboard_search); - break; - case EditorInfo.IME_ACTION_SEND: - resetKeyAttributes(mEnterKey, res.getText(R.string.label_send_key)); - break; - } - // Set the initial size of the preview icon - setDefaultBounds(mEnterKey.iconPreview); + if (mEnterKey == null) + return; + switch (options & (EditorInfo.IME_MASK_ACTION | EditorInfo.IME_FLAG_NO_ENTER_ACTION)) { + case EditorInfo.IME_ACTION_GO: + resetKeyAttributes(mEnterKey, res.getText(R.string.label_go_key)); + break; + case EditorInfo.IME_ACTION_NEXT: + resetKeyAttributes(mEnterKey, res.getText(R.string.label_next_key)); + break; + case EditorInfo.IME_ACTION_DONE: + resetKeyAttributes(mEnterKey, res.getText(R.string.label_done_key)); + break; + case EditorInfo.IME_ACTION_SEARCH: + resetKeyAttributes(mEnterKey, null); + mEnterKey.iconPreview = res.getDrawable(R.drawable.sym_keyboard_feedback_search); + mEnterKey.icon = res.getDrawable(mIsBlackSym ? R.drawable.sym_bkeyboard_search + : R.drawable.sym_keyboard_search); + break; + case EditorInfo.IME_ACTION_SEND: + resetKeyAttributes(mEnterKey, res.getText(R.string.label_send_key)); + break; } + // Set the initial size of the preview icon + setDefaultBounds(mEnterKey.iconPreview); } public void enableShiftLock() { @@ -663,6 +668,7 @@ public class LatinKeyboard extends BaseKeyboard { return textSize; } + // TODO LatinKey could be static class class LatinKey extends BaseKeyboard.Key { // functional normal state (with properties) @@ -711,6 +717,8 @@ public class LatinKeyboard extends BaseKeyboard { */ @Override public boolean isInside(int x, int y) { + // TODO This should be done by parent.isInside(this, x, y) + // if Key.parent were protected. boolean result = LatinKeyboard.this.isInside(this, x, y); return result; } @@ -730,6 +738,15 @@ public class LatinKeyboard extends BaseKeyboard { } return super.getCurrentDrawableState(); } + + @Override + public int squaredDistanceFrom(int x, int y) { + // We should count vertical gap between rows to calculate the center of this Key. + final int verticalGap = LatinKeyboard.this.mVerticalGap; + final int xDist = this.x + width / 2 - x; + final int yDist = this.y + (height + verticalGap) / 2 - y; + return xDist * xDist + yDist * yDist; + } } /** diff --git a/java/src/com/android/inputmethod/latin/LatinKeyboardBaseView.java b/java/src/com/android/inputmethod/latin/LatinKeyboardBaseView.java index 83b7619044..660fe0ed0b 100644 --- a/java/src/com/android/inputmethod/latin/LatinKeyboardBaseView.java +++ b/java/src/com/android/inputmethod/latin/LatinKeyboardBaseView.java @@ -47,6 +47,7 @@ import android.widget.PopupWindow; import android.widget.TextView; import java.util.ArrayList; +import java.util.HashMap; import java.util.LinkedList; import java.util.List; import java.util.WeakHashMap; @@ -158,6 +159,7 @@ public class LatinKeyboardBaseView extends View implements PointerTracker.UIProx // Miscellaneous constants /* package */ static final int NOT_A_KEY = -1; private static final int[] LONG_PRESSABLE_STATE_SET = { android.R.attr.state_long_pressable }; + private static final int NUMBER_HINT_VERTICAL_ADJUSTMENT_PIXEL = -1; // XML attribute private int mKeyTextSize; @@ -178,6 +180,8 @@ public class LatinKeyboardBaseView extends View implements PointerTracker.UIProx // Main keyboard private BaseKeyboard mKeyboard; private Key[] mKeys; + // TODO this attribute should be gotten from Keyboard. + private int mKeyboardVerticalGap; // Key preview popup private TextView mPreviewText; @@ -240,6 +244,11 @@ public class LatinKeyboardBaseView extends View implements PointerTracker.UIProx private final Paint mPaint; private final Rect mPadding; private final Rect mClipRegion = new Rect(0, 0, 0, 0); + // This map caches key label text height in pixel as value and key label text size as map key. + private final HashMap<Integer, Integer> mTextHeightCache = new HashMap<Integer, Integer>(); + // Distance from horizontal center of the key, proportional to key label text height. + private final float KEY_LABEL_VERTICAL_ADJUSTMENT_FACTOR = 0.55f; + private final String KEY_LABEL_HEIGHT_REFERENCE_CHAR = "H"; private final UIHandler mHandler = new UIHandler(); @@ -468,7 +477,7 @@ public class LatinKeyboardBaseView extends View implements PointerTracker.UIProx mPreviewPopup = new PopupWindow(context); if (previewLayout != 0) { mPreviewText = (TextView) inflate.inflate(previewLayout, null); - mPreviewTextSizeLarge = (int) mPreviewText.getTextSize(); + mPreviewTextSizeLarge = (int) res.getDimension(R.dimen.key_preview_text_size_large); mPreviewPopup.setContentView(mPreviewText); mPreviewPopup.setBackgroundDrawable(null); } else { @@ -579,6 +588,7 @@ public class LatinKeyboardBaseView extends View implements PointerTracker.UIProx LatinImeLogger.onSetKeyboard(keyboard); mKeys = mKeyDetector.setKeyboard(keyboard, -getPaddingLeft(), -getPaddingTop() + mVerticalCorrection); + mKeyboardVerticalGap = (int)getResources().getDimension(R.dimen.key_bottom_gap); for (PointerTracker tracker : mPointerTrackers) { tracker.setKeyboard(keyboard, mKeys, mKeyHysteresisDistance); } @@ -723,7 +733,7 @@ public class LatinKeyboardBaseView extends View implements PointerTracker.UIProx int dimensionSum = 0; for (int i = 0; i < length; i++) { Key key = keys[i]; - dimensionSum += Math.min(key.width, key.height) + key.gap; + dimensionSum += Math.min(key.width, key.height + mKeyboardVerticalGap) + key.gap; } if (dimensionSum < 0 || length == 0) return; mKeyDetector.setProximityThreshold((int) (dimensionSum * 1.4f / length)); @@ -775,13 +785,14 @@ public class LatinKeyboardBaseView extends View implements PointerTracker.UIProx paint.setColor(mKeyTextColor); boolean drawSingleKey = false; if (invalidKey != null && canvas.getClipBounds(clipRegion)) { - // Is clipRegion completely contained within the invalidated key? - if (invalidKey.x + kbdPaddingLeft - 1 <= clipRegion.left && - invalidKey.y + kbdPaddingTop - 1 <= clipRegion.top && - invalidKey.x + invalidKey.width + kbdPaddingLeft + 1 >= clipRegion.right && - invalidKey.y + invalidKey.height + kbdPaddingTop + 1 >= clipRegion.bottom) { - drawSingleKey = true; - } + // TODO we should use Rect.inset and Rect.contains here. + // Is clipRegion completely contained within the invalidated key? + if (invalidKey.x + kbdPaddingLeft - 1 <= clipRegion.left && + invalidKey.y + kbdPaddingTop - 1 <= clipRegion.top && + invalidKey.x + invalidKey.width + kbdPaddingLeft + 1 >= clipRegion.right && + invalidKey.y + invalidKey.height + kbdPaddingTop + 1 >= clipRegion.bottom) { + drawSingleKey = true; + } } canvas.drawColor(0x00000000, PorterDuff.Mode.CLEAR); final int keyCount = keys.length; @@ -797,8 +808,7 @@ public class LatinKeyboardBaseView extends View implements PointerTracker.UIProx String label = key.label == null? null : adjustCase(key.label).toString(); final Rect bounds = keyBackground.getBounds(); - if (key.width != bounds.right || - key.height != bounds.bottom) { + if (key.width != bounds.right || key.height != bounds.bottom) { keyBackground.setBounds(0, 0, key.width, key.height); } canvas.translate(key.x + kbdPaddingLeft, key.y + kbdPaddingTop); @@ -818,22 +828,34 @@ public class LatinKeyboardBaseView extends View implements PointerTracker.UIProx } // For characters, use large font. For labels like "Done", use small font. + final int labelSize; if (label.length() > 1 && key.codes.length < 2) { - paint.setTextSize(mLabelTextSize); + labelSize = mLabelTextSize; paint.setTypeface(Typeface.DEFAULT_BOLD); } else { - paint.setTextSize(mKeyTextSize); + labelSize = mKeyTextSize; paint.setTypeface(mKeyTextStyle); } + paint.setTextSize(labelSize); + + Integer labelHeightValue = mTextHeightCache.get(labelSize); + final int labelHeight; + if (labelHeightValue != null) { + labelHeight = labelHeightValue; + } else { + Rect textBounds = new Rect(); + paint.getTextBounds(KEY_LABEL_HEIGHT_REFERENCE_CHAR, 0, 1, textBounds); + labelHeight = textBounds.height(); + mTextHeightCache.put(labelSize, labelHeight); + } + // Draw a drop shadow for the text paint.setShadowLayer(mShadowRadius, 0, 0, mShadowColor); - // Draw the text - canvas.drawText(label, - (key.width - padding.left - padding.right) / 2 - + padding.left, - (key.height - padding.top - padding.bottom) / 2 - + (paint.getTextSize() - paint.descent()) / 2 + padding.top, - paint); + final int centerX = (key.width + padding.left - padding.right) / 2; + final int centerY = (key.height + padding.top - padding.bottom) / 2; + final float baseline = centerY + + labelHeight * KEY_LABEL_VERTICAL_ADJUSTMENT_FACTOR; + canvas.drawText(label, centerX, baseline, paint); // Turn off drop shadow paint.setShadowLayer(0, 0, 0, 0); } @@ -843,16 +865,22 @@ public class LatinKeyboardBaseView extends View implements PointerTracker.UIProx if (icon == null && key.hintIcon != null && drawHintIcon) icon = key.hintIcon; if (icon != null) { - // Hack for key hint icon displaying at the top right corner of the key. - final int drawableWidth = icon == key.hintIcon - ? key.width : icon.getIntrinsicWidth(); - final int drawableHeight = icon == key.hintIcon - ? key.height : icon.getIntrinsicHeight(); - - final int drawableX = (key.width - padding.left - padding.right - - drawableWidth) / 2 + padding.left; - final int drawableY = (key.height - padding.top - padding.bottom - - drawableHeight) / 2 + padding.top; + // Special handing for the upper-right number hint icons + final int drawableWidth; + final int drawableHeight; + final int drawableX; + final int drawableY; + if (icon == key.hintIcon) { + drawableWidth = key.width; + drawableHeight = key.height; + drawableX = 0; + drawableY = NUMBER_HINT_VERTICAL_ADJUSTMENT_PIXEL; + } else { + drawableWidth = key.icon.getIntrinsicWidth(); + drawableHeight = key.icon.getIntrinsicHeight(); + drawableX = (key.width + padding.left - padding.right - drawableWidth) / 2; + drawableY = (key.height + padding.top - padding.bottom - drawableHeight) / 2; + } canvas.translate(drawableX, drawableY); icon.setBounds(0, 0, drawableWidth, drawableHeight); icon.draw(canvas); @@ -1020,6 +1048,7 @@ public class LatinKeyboardBaseView extends View implements PointerTracker.UIProx if (key == null) return; mInvalidatedKey = key; + // TODO we should clean up this and record key's region to use in onBufferDraw. mDirtyRect.union(key.x + getPaddingLeft(), key.y + getPaddingTop(), key.x + key.width + getPaddingLeft(), key.y + key.height + getPaddingTop()); onBufferDraw(); -- GitLab