From 10227a71a047706a2290ff0b57f3437d5add7b35 Mon Sep 17 00:00:00 2001 From: "Tadashi G. Takaoka" <takaoka@google.com> Date: Sat, 13 Nov 2010 00:16:34 -0800 Subject: [PATCH] Implement temporary upper case hint icon This change partially implements the requested feature. The following are not supported yet. - Non-letter key handling on automatic temporary upper case layout. - Non-letter key handling on shift chording in caps lock layout. - Hint icons for manual temporary upper case layout are not final ones. Bug: 3193390 Change-Id: I636da99d1be05b1337935d87c6f4d140661e1cc8 --- .../key_hint_at_large_holo.9.png | Bin 0 -> 719 bytes .../key_hint_colon_large_holo.9.png | Bin 0 -> 1836 bytes .../key_hint_exclamation_large_holo.9.png | Bin 0 -> 2048 bytes .../key_hint_plus_large_holo.9.png | Bin 0 -> 1997 bytes .../key_hint_question_large_holo.9.png | Bin 0 -> 2469 bytes .../key_hint_quote_large_holo.9.png | Bin 0 -> 549 bytes .../key_hint_slash_large_holo.9.png | Bin 0 -> 770 bytes .../key_hint_at_large_holo.9.png | Bin 0 -> 362 bytes .../key_hint_colon_large_holo.9.png | Bin 0 -> 360 bytes .../key_hint_exclamation_large_holo.9.png | Bin 0 -> 1841 bytes .../key_hint_plus_large_holo.9.png | Bin 0 -> 1914 bytes .../key_hint_question_large_holo.9.png | Bin 0 -> 671 bytes .../key_hint_quote_large_holo.9.png | Bin 0 -> 1714 bytes .../key_hint_slash_large_holo.9.png | Bin 0 -> 1933 bytes java/res/values/attrs.xml | 7 +++++-- java/res/xml-xlarge/kbd_qwerty_row2.xml | 3 ++- java/res/xml-xlarge/kbd_qwerty_row3.xml | 6 ++++-- java/res/xml-xlarge/kbd_qwerty_row4.xml | 14 +++++++++----- .../inputmethod/latin/BaseKeyboard.java | 16 +++++++++++++--- .../inputmethod/latin/BaseKeyboardView.java | 18 ++++++------------ .../inputmethod/latin/PointerTracker.java | 14 ++++---------- 21 files changed, 43 insertions(+), 35 deletions(-) create mode 100644 java/res/drawable-xlarge-land/key_hint_at_large_holo.9.png create mode 100644 java/res/drawable-xlarge-land/key_hint_colon_large_holo.9.png create mode 100644 java/res/drawable-xlarge-land/key_hint_exclamation_large_holo.9.png create mode 100644 java/res/drawable-xlarge-land/key_hint_plus_large_holo.9.png create mode 100644 java/res/drawable-xlarge-land/key_hint_question_large_holo.9.png create mode 100644 java/res/drawable-xlarge-land/key_hint_quote_large_holo.9.png create mode 100644 java/res/drawable-xlarge-land/key_hint_slash_large_holo.9.png create mode 100644 java/res/drawable-xlarge/key_hint_at_large_holo.9.png create mode 100644 java/res/drawable-xlarge/key_hint_colon_large_holo.9.png create mode 100644 java/res/drawable-xlarge/key_hint_exclamation_large_holo.9.png create mode 100644 java/res/drawable-xlarge/key_hint_plus_large_holo.9.png create mode 100644 java/res/drawable-xlarge/key_hint_question_large_holo.9.png create mode 100644 java/res/drawable-xlarge/key_hint_quote_large_holo.9.png create mode 100644 java/res/drawable-xlarge/key_hint_slash_large_holo.9.png diff --git a/java/res/drawable-xlarge-land/key_hint_at_large_holo.9.png b/java/res/drawable-xlarge-land/key_hint_at_large_holo.9.png new file mode 100644 index 0000000000000000000000000000000000000000..eaad0664cb0223f4c1fd616b15ced1d845584189 GIT binary patch literal 719 zcmV;=0x<oFP)<h;3K|Lk000e1NJLTq001HY001Zm1^@s6o7^a*00001b5ch_0Itp) z=>Px#A#_DpbW?9;ba!ELWdKKVVQ^?^V?%Flc4cyOWpW@WNp5syY$<n#`WXNK0$fQ% zK~#90?3UZj+CUJ6QKS@*7Tf|Y(1Kf_1-C#8w6H)0Jn;(VetAHci$Gi@ghT<8bDUXg zAqs!^!MR8tX;?hAcR$a}9y^!&VUo)%v&=Hf>@D`s2<m?VG8haBtyYU(3d2w^3P;By zc(7itgVaF!{l00p+hPIWWjYsjoFLNeb_Lf*0MDOJr~Icu<m;E%UBjY=iwuWDSuU5d zTCK{9#iEQcu#R}-!18~7Hk-W%WIP@dz%UD)PRGpWbMt71UawaKKvB!a3^6m`UIM`c zMdt|<0Hoe$>al2qQLOV=d#IqLitoid&-TnM2%pSO=7QkZ=aVx1_syCL2qvuCoq^HQ zloy-LrYJ;&as`OjoofTeSPt9R$X5L&5PhO>I-Q1$qfvPn>aOw7pdRBWiQP3qSj3Br z+p@BZZvjE)#~^6jP>s9ById|Y2vhHZY`5DO1etjs2-6ObIJKkENHlgcF)~7dD?P|a z_->FhVrRt8?p^EwUZ)vkBm2}4+pGXBrvifhxB)>4(g)$rK(j^)QdVgf6*;3apKM_Q z=`M<UiG4DeObRc7I8Vt53*3@)EBDSz&sR^hL(ln}&BlKc;%5-64eANV;czf;+3)wl z@pwG?^xbYp4H0B8KF8SgdVL*)uYE`2*&78c@-WS~#{-=AiN${nLW6d=FEQ&O)zhk| zZrzeXM<~a$y74gxL@U+>7epJ;{SHZVBsCCg#+ZDiQVG<hTCIv5t=DQb!}E<sBfT%Q zKWrJuy=5TxmVw-xBtL)I#Ql?&|CW6R009600|0T3&dk!{a-{$O002ovPDHLkV1h14 BM%4fS literal 0 HcmV?d00001 diff --git a/java/res/drawable-xlarge-land/key_hint_colon_large_holo.9.png b/java/res/drawable-xlarge-land/key_hint_colon_large_holo.9.png new file mode 100644 index 0000000000000000000000000000000000000000..bdf4ed5744d2f62aef577aad4484df9e38daa116 GIT binary patch literal 1836 zcmbVNYfuwc6pn8MDNsQXc`TtSDI~iIc|){GmH^fuCQ%Vzgk*tLk`22nK{Sd80*Y8h zZ9#2)RHq^o+i?U!5kyC=P(TsI7ch$2qEaeVP^{Vwg6&Kle{^Sd@4dU{`@VC|J?Cz2 zRAiW=y@x%GMsth^hgH-_r*40{@zitgZU4j6Fp5xx$!KLwp4~Lsn0QnZO-3u{iFKHP zrPX6`2rJcKqO54NkU6O)t!_0!0&z$JYLw7>f2ySes9r)}%u_;2lN?Dz!_#m?offIl zrLES9^z=Eifsj-&MPNWkEs$zRG7{oc34MrHOwDbtK{_yGLavt3r8YqzS{Vh%F&qJS zEQqOt_z=Knv)Dmgfj|%la3D4WLL89IVX_6{AdVP<fZ>Zysp0x~u?kiUYf&o+J&`0$ zVh}W&%`9^e3&RsYwn!whad0?H%7RI(HImv?rjhU)VSo`rhodGE#f*TBQ5%P?AtiLm z)3+fQOiJZDVk0q}C@N)Os@4RuSrBM2*y0+pCP)?Xj~nl`CNyhJ2&h5`Yz?kMD09CN zFqOLx3)u`QZ^ZL)l-d++5{&8A7!V^F0ZZuA7nUB?ixmQag3T6iApr;C3)yU;oXv%U zcnYDAD~I?}*$Bt`uzVR8;zBS#lr5x?utLfcaHK+oG!%wJB84z?1RG%_NUc$ajOe12 z?l6}3L9AGgBU%!}H5isOQUOtk7>N;ym<f=pd4N)@LyfkzZF}BE3nMt1g6I`EW&nor zD@Na=|DU*pa=u6^<Vj^R9#^Ok(TB16|C2M2at5>&$G?hY<P}wcw&}alrxx#;2Qg9| zgHx^HTd~NAYAatdG@4Xn@uXRcBeXDFYf40Qa?F^5;3R?r{t-qJNn)6@2d7c(85RLc zHL3d^7dC?d3tTTWdl^>pP7%B(Q=JQd{wYZ?SDLYv=i=~j@SF4*x#v!tn5^|%;E`z; z=j-ZF;OtO9W^H$zUfUa-!0BpldQ>>bR&O)!?A_OG6;$m1hUhH{9><swyOVRYAnVmD z3()!KQHl2Ix~mCo34@y2WHd36R^m1(b9QT6TkWR9SJ1NqeSLA!&sIFU@vLa}RczT~ z7lxf(*8QhXUHkj{C$+b?yBW7vI`$d1S7tR<wEnfjZm^=fJT@ienuN}Me&^08Zy%q| z(w%)T?x$=F@fO%03kc^FW!Bfv-O}O-TT08y^4mK)HhAAVWol|}mSY&`sP}J_wq7`N z*?(_gVR~0rm(!8+JbH6;bCg<r)-~rq@yeq=6gz(!Tc7SReY&o5kH=(K4Qy2=?}E;` z9Zkmo1VPT_!Wq;-u&u0&b@}GadilXGjsv?s>gecbGN+`dva_>svw1O#$$T|MW(wl$ zn&~Lzg3{lnI^=Bu>{{yTHr>8{{bwL2-%>U4kyCg=!gr^28KW|s!mU+RgBBq2)<Adn z#A78TCsbEjTF$gxyQYeEoDq}jmJGK&^Y0J+zBMmDf0fUTn#RUPpB1Gp%L-lc()}5X z+=IEknN9B7qV|i<f3;j^@ip8kWGsL3a(tieVR%_ijtu@pwQ!-^G<SDrxm^BZU0q%D z{P{cVvd`9J+zU)>XlR)8?E!<)IH(SL40w5YW!M+F73|)<dmj)<JWwt2vQ}4TmXrjv zwQ_m9CswPq_3qt6aKNltv%-YGE*aPJc`=%llv!TRZ|f;RW0E2Fd;U`Uv7<XHEH4KK zW7n_u{KI-D!pmAyv*q>c4W~n2&$c_+-Hi%^gBw~dUYw}WXoO#13VcP#rh9wGKMZ+3 zZ*-pLJf+gQ+11T$+U6dWhkDnazpS!{EK7(>w_E#0A6&F_>FVm0(R+%D7W7VwiH~WV zdD02beNa_dX_~+Q!3m{>`3{c*u(W}J0TW4%r4Ieyfv4r631h&|s5%(6!|BD5_;u@E zw&&K4mTe>g0|P&sxih)gPug=lgm$s^00W4;5Dcz7(>b?#4TH(#?OTCbERy3r0g^9o h#bwQ*8t%=TF*JT9>M_N$WvlJK77-c=m&sx?{sz;`#wY*) literal 0 HcmV?d00001 diff --git a/java/res/drawable-xlarge-land/key_hint_exclamation_large_holo.9.png b/java/res/drawable-xlarge-land/key_hint_exclamation_large_holo.9.png new file mode 100644 index 0000000000000000000000000000000000000000..6511822aba6d5faec5f943550711cd97c5c2e913 GIT binary patch literal 2048 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 literal 0 HcmV?d00001 diff --git a/java/res/drawable-xlarge-land/key_hint_plus_large_holo.9.png b/java/res/drawable-xlarge-land/key_hint_plus_large_holo.9.png new file mode 100644 index 0000000000000000000000000000000000000000..206d990734f73f47b049921e716d2eb74b04209a GIT binary patch literal 1997 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 literal 0 HcmV?d00001 diff --git a/java/res/drawable-xlarge-land/key_hint_question_large_holo.9.png b/java/res/drawable-xlarge-land/key_hint_question_large_holo.9.png new file mode 100644 index 0000000000000000000000000000000000000000..d205ef83d53e97e20815369deb477a48b5f8819a GIT binary patch literal 2469 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 F{|2bQ06PEx literal 0 HcmV?d00001 diff --git a/java/res/drawable-xlarge-land/key_hint_quote_large_holo.9.png b/java/res/drawable-xlarge-land/key_hint_quote_large_holo.9.png new file mode 100644 index 0000000000000000000000000000000000000000..074d619c9ad3d1c223798387fb5a3af9a97531ed GIT binary patch literal 549 zcmV+=0^0qFP)<h;3K|Lk000e1NJLTq001HY001Zm1^@s6o7^a*0005(Nkl<Zc-rlj zJ!=9n7=XP~>s|4y#Yt|dxH-7E2x1)sH*pc26h#Uuf+)^9>L!Adg4)eRT$~ia1I3R? ze~JGfO|CfzVryF>l{POtaD;q3`Fe92&3gb13l=Q?P;dnN7vTT^+)apJs0yHtb(lMd z0V5C?2=ovw=DRXy6RJ8p)Uk*$LM$I(!iZS-4!5T(B1w`M2n3ALXw(u61{IKi!{JcA z!{M+A;q`i{ig3j8qK>VRNW?13^6PfH1=Hyi^!xo6o6TmA$K&?paw+e2J206{K&#by zCRR{OLqv};hC(4{wOVzq*Xtt^>2x|E7K^!)$)vy8Z2FM|qF5{fv)TLz+uUPxR7G;R zoU_~QI-!IjQm@y6%jI&{YBm3GI8;P7n+?chGN>c!BI-Vy+U<6EHk+04fX7OuaufvN z3CcC*^LYc6uU4ylI-TC1h|t}dUavQX=U|KmMCYMYD#@ZKN~6)}00j=He6d&zQmNDc z);AN^nx`rP&%+pQ&$v)1fNVA^`+PnbmP?65;*ihh54e2b@p!Hxq9!o`=MOc9Je<LL zl1J1@a5O}CBCD$BMIf#wi9poRouvBT6@fR3|G~otF1<A>+E1YI`rgdXI}>3dOoWLr n5hlV!{<jFYr4<2J=3=}7gHz`vmqxqw00000NkvXXu0mjfL1gy_ literal 0 HcmV?d00001 diff --git a/java/res/drawable-xlarge-land/key_hint_slash_large_holo.9.png b/java/res/drawable-xlarge-land/key_hint_slash_large_holo.9.png new file mode 100644 index 0000000000000000000000000000000000000000..a3a02973cb3ef342c73232a952f0015c546a21c3 GIT binary patch literal 770 zcmV+d1O5DoP)<h;3K|Lk000e1NJLTq001HY001Zm1^@s6o7^a*0008XNkl<Zc-rll zO-m|K7{_fUyWKmZWjX3HP$X~_uH1>B6^fuDfwkzx?-0@^MrhS~Y|%o*5M5|Qi%4{% zmM^RO5&Q=84bFX@?h#J+E_6%>xz`8&n{x)|$Mf<(XEYdo2Qe&T8O!(&Vuca+huFP; zAB27RD%Be38`T=K{sBb@nG}dj1A;GFrxHOXDuIFGbpzSi*;)7d{bDp4HK9VGkZvG6 z6=uSGe0*$veSMYt{XThre<#n+&yO@KDC4|9R_Ko#X*r~1GAXs&?VkwJY&J=uP`I#K zt)nvO1G2ZbCuK4jsoU*-faG#Hl1im6n0}cX2*)(2C7aD2R4SDNgy{8pYC4@(VckZv zCC&qcZO~EurF=fGKsgiysn_eu$;pWV>sIC&UZXW=1F_rf0+yv#t0|pMM}cgRQmLfG z<8j?U(5%cZm&<&5db-<aG*m1JPRs4>?O`AgIE4L8W_-C>gN&^EJ7{Zve}Ai7E?*)5 zG%9&{d1={fHaqOunI<((Ve#5Qz&kFnB&}A9RIAmNAPAp8yk4(SLz7Mf@@ZrtY_V9( z2Hw%aCIujJe}8{zGMTnvf1AScFil$fV=M^A)O_>&{M>hUcjrS0kP6<RCK8EV*xR65 z(>SuzfylD#gHregg8_l8s8?54s@v_>1q4(4gUSkJxB>6Dq2BQTCiZ}y!i?<dtU*}s z7&)Z`wI9N?3=yPQEFQsGbA&F-I4)<HKE{K1JRb4v>`a2@9Ky5=p)3Rp?8xbK>IU*L zEqLbu??}A8z2UinC+*PTa7eT);upL_6NrEp9>~HYmISl$^z<ZKES6D&VkUSf6L0uh zj0eH<B^(Yv!YzzMA`ub{24!YabOGU+@fDc6hRE~<!gANw*W5foCcdrD;Pc^c5b6UH zgW&U1dWWX7Mz0U4h54gs39{HAWRWsL=B%;t3m&Fik{0|#82|tP07*qoM6N<$g2R7j A%K!iX literal 0 HcmV?d00001 diff --git a/java/res/drawable-xlarge/key_hint_at_large_holo.9.png b/java/res/drawable-xlarge/key_hint_at_large_holo.9.png new file mode 100644 index 0000000000000000000000000000000000000000..ff56845f88b7b5ae555a019d12f5038cc136a198 GIT binary patch literal 362 zcmV-w0hRuVP)<h;3K|Lk000e1NJLTq001KZ001Ni1^@s61Kfk*0003oNkl<Zc-rlj z&25B0425Z7TcCw)AuVhR+rqRkEu@x|z`%hEKN3Q~9l?>4^SrSmv|1^bodHGjq$dV5 zl0R(olO#W)Bq}N@Dk`Wb!bBLaFlAX@vMl>#=Xp+5RS{z3oFk3%9<MM+lCqJs1H=~_ zNpE@`@tekZ4+9Oua0v#(0EfUhkwS<&06tnI{*A+SnkM^p7yw+K63%R$54K!0Y>qSd zIF9ar!$=YZ_)suj?`CP=CL0PS-Bro#OsL?UE#u{9W=;ho3A8n7UDvj4TiY}ZVcp@_ z>AA!l&(X3h?|-yqKp&OC+8p{h;5$^9q9~4qVWISft0L{Pec#&`b7e3m#yiZ@{HSR6 z2A+e%pk?=UU7eV4PJD!Ctj)G<;b7v=RfIVs44ttu<k^4f8|(u^szt%ST>t<807*qo IM6N<$f}p9KkN^Mx literal 0 HcmV?d00001 diff --git a/java/res/drawable-xlarge/key_hint_colon_large_holo.9.png b/java/res/drawable-xlarge/key_hint_colon_large_holo.9.png new file mode 100644 index 0000000000000000000000000000000000000000..91e788323a8a0aad06264b95e13c5b7858a02f4f GIT binary patch literal 360 zcmV-u0hj)XP)<h;3K|Lk000e1NJLTq001KZ001Ni1^@s61Kfk*0003mNkl<Zc-rlj zF^Ypg6o!pvjR_Lc*;-g>r#6Bfz)R>=Jb{8>VJ%qd0Tk@C@KBSP<PAu6VVB)?6f!@2 zU?I%M%=?)UglCYz!^6YF!!(G?{FlrDBYweQ!F$Qjg(S=eATPd;FJi08(1pmt3UI-k z0U3mjOl6WJQ3z#OUeYu@d!EN!h8&M%7{;ltYrpF{f1YPFj$;!=Q3Ja}k4#)shR%wl z>$*}^RnYf+05WYH$1NP046u<QvtpWNVB2=!x-N1Yr`0rVI~j}$+%Q+*&1J~U;3la> zQK(s#-SRxYhGDp!%+>?^soKLZJgPlSQ-fugR$Exi%*nDWAGgSdHZ{0S%w=|U9qi|# zL<s#z1~*NFf7!fe$bzrXo%@3be*<%wU(299?hIO)Z*vFuOP9}oRo?yp0000<MNUMn GLSTZ6-k_`i literal 0 HcmV?d00001 diff --git a/java/res/drawable-xlarge/key_hint_exclamation_large_holo.9.png b/java/res/drawable-xlarge/key_hint_exclamation_large_holo.9.png new file mode 100644 index 0000000000000000000000000000000000000000..0152ce21b63d58b62875506b8fb62f2193d80a92 GIT binary patch literal 1841 zcmbVNc~BEq9FAnb14Kmd#Ii(X5Fy!3$SEKpAs9&z1JxAK8a4~8B)eg=kbp%&l&JNn z;{^!TDT?(3Yn`eQ2wFu)fz}rBzyk|Hu&Axlf{fUW1>2cA{?VP;ef!?~zVCOu-*0zg zTx|5%F;mCTXtc5N`BD`%&Y<p@qg<#by|ti?8b%mZ(UG(hjXrj2DFsbXlWL_x1mk+9 zMvEsSOtaoVp=h+wd1iwKPDe-}8A(O4Fvc@$EdxNcVT>hQC8#t=kTi6D4uQny#3sNw z>9A1Cm=_L&nnjd=9w9Y=S+B#4B6Aqyt*(fAcPz6Qz*`8J9>x$m3<7Fp93a671mH5k zU>M|q01sk9oDe>r9|W*L2xNh57Q_yQ_#zHl1cJcO#h|Pa+7yvWDjTvz&B7RIBxw+_ zSSFK+Y2q+(B9#RRg+hl0n;lFcf{oc2sWAs*#u>v3Qp5-osDVUr3~(rFlJQJ3j6r$& zcL;ieQu$68GY%z+N*T+nF|Z&e$kOW_alJ(wNfq*s8}CIM6S55mONAKmOaewI_>5sP zmAelcasVlBL<<R&Iuwmgio=<D1S93rFb1{5)S_CEjL(-r5I+Ruvq7E!f&>yMM9SgH z1cDF=$P-5nYrK!ki-h=5AU`S!5>QO3Ow8r8#R8c)N(u^vGC|ZZSB@D;4F)5_c2Uai z5Lfy^u1G>48WJZGa9lTB0dZ+Ki5t^!10ad#0!j^xVvf1vc>a!7iV$cPqLmT29(bEy z5&9nc|A|{5;R(e8t~fH18zPVi8ADv{|H&DPa)#w7j(-))@Df#lj@NgkPfgx64}wu0 zLr|^p@)<9XYAZi7N=?S&DWpk5Ahc*gV@N|`365nU1c?wpfE*(c-E5QP)fB2d6>_OK z!Ccy2)D*K)>{Z{n@{fy$T0WJZ^=zGg)N`q`pYyqH-!9AeW#2K^r*$0pc;~HcQ63CE z!>OFHVfCcb^EUu@oP&vS>|S?n=k>kgKVNma<<yf^=kr-^rl+m_hQ?xHDswwh9I*o_ z*t(xx>{gfh^@4+{o;h;#{Et3^TW_qY6}h#SB|1-Vb9uv@d_VDNg~c+G$jMo-tEqFT z4=2!fpms(0_g%Hl@qxRp^!I0TE4u9+9Ua#|L9O5Q7cV%_WH%>W2(xU{I%>1+C}@7p z^S<1Z<qE^_0d)}1_p#l+QHNok)ytbE{aoOtn7%)&g6BSK(^p?y>nIt=2@j7g;=WXj zTA^hZC=_KrD$eA+4L8SctKSk66LYz@H}gez_mSCNV^DX=q;9*t|D@GA*O;9x+|iKI zVYOQ8?RI-~%B*h_N7}k-rWIaxv2D0}_wJ2Lm)5TXsc*|bo5AdRS+}3*W$WVR+n+w2 z*mCpcf%5Vh_QApBH8nN&zbq-a;Zu0d)@D%e-m^zyu~_`pojrF>R8(3Tng@*>r)vnJ zgUO8Tqns2T8r!m^v{TM-R)gl(EbE!7Dvxy~mJ6k2WqPGTk>)Nj?Py-fy}13^gWI=% z;}m)4ebVp2c~G-AVDoJquc5IqM|F7TNDYwhKf-@BJTdDgxzdG>*0mF7LvwR;_tn*j zZ+E_!rLm^F7o0sb*0W-K#4$RZzBn)A)$7&KI9@4vBH4C9P}ayaEPB}9J~Pj9zo)0? zqf*<dpm|*1iX`TefuMBPhx-B*qB8dgKQCL+qP6*FZd6xSH?Obbc8O}~1-Xlxevpo~ z9yVeaX3ogSnCyA5RN>DtG+eFHHx!)D1_Lj7SEjm!#!ZQsG@%l`Gbl)}Pli0V$n36x zyZb}j)Uv*BkSdSeGv(fodwad{QYRg{yyf|V%Ib=RbHW1VX2xZWSs&SU?@`+9pzf1r zDqRbD`ufz(%JaS(rG1U6V{7DPYd?cw`tg|KNiE7-uLcILc69|bU%9d&**EAX4;R<p z?+BBYSN=JDa}KQ~)Hd#LU4R@-(z_2PMeJEK_3<y$)z_xYGEI1$j+|5{;>9KYYYutA mg}s)-!T{Sss_Wjoq0`PBdgR>-$2U8EZt|#D>50e{YySdFs?RF` literal 0 HcmV?d00001 diff --git a/java/res/drawable-xlarge/key_hint_plus_large_holo.9.png b/java/res/drawable-xlarge/key_hint_plus_large_holo.9.png new file mode 100644 index 0000000000000000000000000000000000000000..5f7d315638b178297a7ed44ab70731383cf66226 GIT binary patch literal 1914 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 I<eBAv0qNT3u>b%7 literal 0 HcmV?d00001 diff --git a/java/res/drawable-xlarge/key_hint_question_large_holo.9.png b/java/res/drawable-xlarge/key_hint_question_large_holo.9.png new file mode 100644 index 0000000000000000000000000000000000000000..8a9dffbe2739819015a648aa2b1fa1aab96397a6 GIT binary patch literal 671 zcmV;Q0$}}#P)<h;3K|Lk000e1NJLTq001KZ001Ni1^@s61Kfk*0007JNkl<Zc-rlj zJ!>LS6oz$1jmE6OK^X!TTP=uKI4M-nLPV`B1#Lpw6e6;n&6-NoLJ<^2`vt+$&qf@- z%f&yiKOz6%?m6xiZZxnPH{&MYffp|0;C(pfJ!g(e^*e~_9OpR4InJ>SH6sqhzaVb! zy<>uWI2gQ0L!|>5s4kiF1@jJfBoz6ZjPMi!WdvPQnHiZtdMYgfWwTjMF_>5^rYjbU z#zv!YjjGjZW>hYhGsDFvgTd76;m`Gx$>iH|x%`P*EEZ(7T0OzDr%tEy)$Mkh1VPwA z@c_>&1!G93(+0S>Je$qr@pvo`hr`-@KHsd@>kWdHN+l^0iAdB-8i3a*24l0?43Z?3 zL9)x`lKp;vt=sKx0B!@BB2YRh8jUIr!!v$B<K9>-mK%@9^SRgSeV<OJD3Zx!f&dt# zCRYrGW4Z}FAtn+DvE6PzK#2&d-|zo0nM?xwCeT)YTh9<e4q(ursZ>gAHk+a>%Ma+4 zR;xvl$)vI{dqWS~Rcp0cui*0FXfz69M!>`}lt=dYd|znROmqOgd26%f+GYk}z$cH8 z5frJ{>!ENs9HN8oa%Wy8Ch!3a=*sDIKHlEmqKMsY4?*b;V6eor%*w(z91g+j^$O75 zRy;$?qfb83@?6leD*B<^!ib`11izG_L}l7V_h8g}+Rj=k^~qocgTXVHcszbm81?QV zoWl8hzEr7HO4VwW6bgmAKp=2O2cm{Cuc9zKvr4f0%(E{wv&;N{7@RFfbkVC}IA-J9 zc|*sX`6CD2t6^T+gZK5X`|rnvIYqob81f!7Llo8@;};tR6gToL%Ul2e002ovPDHLk FV1i5GHNF4< literal 0 HcmV?d00001 diff --git a/java/res/drawable-xlarge/key_hint_quote_large_holo.9.png b/java/res/drawable-xlarge/key_hint_quote_large_holo.9.png new file mode 100644 index 0000000000000000000000000000000000000000..6514e0bf7f587a56376658957fd9beba16bf8d25 GIT binary patch literal 1714 zcmbVNc~BE)6pwh6K@mr25v6qv4$`s7?gnz20J#YzR00DTWWY_bm_V`{Hwy&HQ3Vmj z3n>n*2i}oVu?pj0(W*?fL@J0@9q|AyRk1pVDT0ndHwd;fb^N0{v-=(Ud%xd%?|W~) zbxUKF-d=OPXf&F)DoUoI#vtll=sAu0PQF!qml`J7G)f7rzCEyy+DbPiXi2R)Mxe(n zOvHfeP^R5trBF1QFv4y{^qD9L=+G4=OhoT*K1~Nq1`$1pt%lTADQYxD<q>FnUTlIs zFH_Gq&?CYDp<O@`SWprH>=rX-6WB%cF<t>RcW;AqU<^WLis)juAfQz*1*ABE0&FJ4 z&_f&u;J{2cG>psTeg?207y=;{2(uV4R}jh)KoBtg&?z;-kS@^36ysXdN<=r3q*VZd zIXOAZoKPlCtN>v?pYP^iu^1GBVavrx#LmEMK@$uz)TSp)R?>uHfSVD~;aQ}JPI>w! z1dCOzeoKtm#uG)Q474Lw5N1N4#o~@@3~eJd=s#|}6KzY#wW6Q~wc%NW9;M(x6UJ2T z-Y?_^Qr-x@AWYPuAZ8h^&$6HxsgjB4)E}n7WDqF0Tm=ks!yqmT;_zUYCxydgp=<?@ z7bb-`V#x%@yKFfUm@9|4968LREM*EYo68dO6k@py;`0?e`Gl<svylj<M<;Yml<v4K z`@OaTDS;v+P9)&Cd7=WA8gUZ08F4Ehjb{UDL~p{}YxnWIiB^UZrfk%pAaDyXmS2JC z9s2)?n<wS)#XPoHB4LN|6ny%)t>ORV45XX^-No^*Vwu>YD$qTBTl&=EZS$ZQ)iDIs z8X?2$yQ#KXK+3gbJf2SGAOuQN5{T7k(o1nH8zo4T076t4iJCvnS^F}8M)SC+l8F=S zJ04fVQLMPYGu=Cr57z98?b?em=QmA3wy#;%^O#;1U$Ts`b@gtEv{<L|R?oBug0-gI znzE_)08b|4-lauNj|xVIntWYfezWHKKtaAw;e+O!{`Q)o(bJ=~txvLpjKUj-v|qRV zF{{H>GGG_>UD^Hd=)=I3GcBLAu(bEQ31`p6`4Xb7OnnWytKQccc}`bx>CeI5s@#6v zDB8Pa&*7dE{+XQZl_|+3u?`m+kUx?VaO8Tq|D4G`Og~d1S#ZCOwg2hm;Nv$fjSUUO zF~L_HhVK&>H#9ewzkEGH7<Sdv#06K1XM~AmlMYQuoHXcH=MfzjedKy52!d@Dlt;#B zj|LCpl)q?;meWX&jJP=lt<$hU@%x24cXkC=L>VvlHHLpwzVgz8O`A7+I~<N5?ZWz- z-Q7vj%7oIC{DOjlC$C=JiVN`zyqZzfk>2pZi~JGVv54ox!>wtlsm}nHuOX^6QgPHA zkm%X5{+zBeH7!lKxGK6ah3Qf%m9evkmJw0wNy^!z1^Ej%FRVIx!`!8*^*ekuqqDhr zN%-t_yd(AXJA8b6hM?z<TrYl-mzFrqoXoAxUf<rfD^8~qw7V`^c_(wTv(Gy;wX=l- zpF{m?n~v?j5O9E2=zI7pq!eGKe%2Pbdhf=K8~eVi^K-2@*i-8`uj(xJ`c*PDeOuzH zfuHkEZPIT0aPiZ|YF(*wA5ArAo;zdO!~6G3S0&S1yh74v{o)kbGr+XcYehqQr*C*Y zkF~F}tji%@GSbPf<QMJS@E8#Yg|f5Dx5R86Z0`YERz*f?0#Yh)9PhO9c7Vn6@{=mU zV*LI6qYh~HB-XJbVw(7YGaFBxQd>`?{1)!rwX&=FHdYkmD)i_WsrJ~$C_Y=nB%5z{ zw6z}p_UW{KYoIc`$`45%ZjWK7MyJ~pDOtl=nVIFDuc+H+baXQ9oM+;bIosuh?%PEr LkCoL+maqOB0eP96 literal 0 HcmV?d00001 diff --git a/java/res/drawable-xlarge/key_hint_slash_large_holo.9.png b/java/res/drawable-xlarge/key_hint_slash_large_holo.9.png new file mode 100644 index 0000000000000000000000000000000000000000..75c3bb1a65ba7404faafd89274e6ea3605cbb7d5 GIT binary patch literal 1933 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 a__#AI%t=&~SR9~n{5a#H<DqI<TH#-b<^#h3 literal 0 HcmV?d00001 diff --git a/java/res/values/attrs.xml b/java/res/values/attrs.xml index 72e3f0dd09..815c7fd28c 100644 --- a/java/res/values/attrs.xml +++ b/java/res/values/attrs.xml @@ -106,12 +106,15 @@ <attr name="keyOutputText" format="string" /> <!-- The label to display on the key. --> <attr name="keyLabel" format="string" /> - <!-- The label to display on the key when keyboard is in temporary shift mode. --> - <attr name="temporaryShiftKeyLabel" format="string" /> + <!-- The unicode that this key generates in manual temporary upper case mode. --> + <attr name="manualTemporaryUpperCaseCode" format="integer" /> <!-- The icon to display on the key instead of the label. --> <attr name="keyIcon" format="reference" /> <!-- The hint icon to display on the key in conjunction with the label --> <attr name="keyHintIcon" format="reference" /> + <!-- The hint icon to display on the key when keyboard is in manual temporary upper case + mode. --> + <attr name="manualTemporaryUpperCaseHintIcon" format="reference" /> </declare-styleable> <declare-styleable name="BaseKeyboard_Row"> diff --git a/java/res/xml-xlarge/kbd_qwerty_row2.xml b/java/res/xml-xlarge/kbd_qwerty_row2.xml index 96077306fa..71aa916c7a 100644 --- a/java/res/xml-xlarge/kbd_qwerty_row2.xml +++ b/java/res/xml-xlarge/kbd_qwerty_row2.xml @@ -66,8 +66,9 @@ <default> <Key latin:keyLabel="\'" - latin:temporaryShiftKeyLabel=""" + latin:manualTemporaryUpperCaseCode="34" latin:keyHintIcon="@drawable/key_hint_quote_holo" + latin:manualTemporaryUpperCaseHintIcon="@drawable/key_hint_quote_large_holo" latin:popupKeyboard="@xml/kbd_popup_template" latin:popupCharacters=""" /> </default> diff --git a/java/res/xml-xlarge/kbd_qwerty_row3.xml b/java/res/xml-xlarge/kbd_qwerty_row3.xml index 77a4d4815c..24d1b1db9e 100644 --- a/java/res/xml-xlarge/kbd_qwerty_row3.xml +++ b/java/res/xml-xlarge/kbd_qwerty_row3.xml @@ -64,14 +64,16 @@ <default> <Key latin:keyLabel="," - latin:temporaryShiftKeyLabel="!" + latin:manualTemporaryUpperCaseCode="33" latin:keyHintIcon="@drawable/key_hint_exclamation_holo" + latin:manualTemporaryUpperCaseHintIcon="@drawable/key_hint_exclamation_large_holo" latin:popupKeyboard="@xml/kbd_popup_template" latin:popupCharacters="!" /> <Key latin:keyLabel="." - latin:temporaryShiftKeyLabel="\?" + latin:manualTemporaryUpperCaseCode="63" latin:keyHintIcon="@drawable/key_hint_question_holo" + latin:manualTemporaryUpperCaseHintIcon="@drawable/key_hint_question_large_holo" latin:popupKeyboard="@xml/kbd_popup_template" latin:popupCharacters="\?" /> </default> diff --git a/java/res/xml-xlarge/kbd_qwerty_row4.xml b/java/res/xml-xlarge/kbd_qwerty_row4.xml index 4aae16d6de..63b5c2c6ad 100644 --- a/java/res/xml-xlarge/kbd_qwerty_row4.xml +++ b/java/res/xml-xlarge/kbd_qwerty_row4.xml @@ -55,10 +55,11 @@ latin:popupKeyboard="@xml/popup_smileys" /> <Key latin:keyLabel="=" - latin:temporaryShiftKeyLabel="+" + latin:manualTemporaryUpperCaseCode="43" latin:keyHintIcon="@drawable/key_hint_plus_holo" + latin:manualTemporaryUpperCaseHintIcon="@drawable/key_hint_plus_large_holo" latin:popupKeyboard="@xml/kbd_popup_template" - latin:popupCharacters=">" /> + latin:popupCharacters="+" /> </default> </switch> <Key @@ -77,8 +78,9 @@ <default> <Key latin:keyLabel="-" - latin:temporaryShiftKeyLabel="/" + latin:manualTemporaryUpperCaseCode="47" latin:keyHintIcon="@drawable/key_hint_slash_holo" + latin:manualTemporaryUpperCaseHintIcon="@drawable/key_hint_slash_large_holo" latin:popupKeyboard="@xml/kbd_popup_template" latin:popupCharacters="/" /> </default> @@ -95,16 +97,18 @@ > <Key latin:keyLabel="_" - latin:temporaryShiftKeyLabel=":" + latin:manualTemporaryUpperCaseCode="58" latin:keyHintIcon="@drawable/key_hint_colon_holo" + latin:manualTemporaryUpperCaseHintIcon="@drawable/key_hint_colon_large_holo" latin:popupKeyboard="@xml/kbd_popup_template" latin:popupCharacters=":" /> </case> <default> <Key latin:keyLabel="_" - latin:temporaryShiftKeyLabel="\@" + latin:manualTemporaryUpperCaseCode="64" latin:keyHintIcon="@drawable/key_hint_at_holo" + latin:manualTemporaryUpperCaseHintIcon="@drawable/key_hint_at_large_holo" latin:popupKeyboard="@xml/kbd_popup_template" latin:popupCharacters="\@" /> </default> diff --git a/java/src/com/android/inputmethod/latin/BaseKeyboard.java b/java/src/com/android/inputmethod/latin/BaseKeyboard.java index be0a6a28a5..0f8b75d457 100644 --- a/java/src/com/android/inputmethod/latin/BaseKeyboard.java +++ b/java/src/com/android/inputmethod/latin/BaseKeyboard.java @@ -178,17 +178,23 @@ public class BaseKeyboard { * being the most important. */ public int[] codes; + /** The unicode that this key generates in manual temporary upper case mode. */ + public int manualTemporaryUpperCaseCode; /** Label to display */ public CharSequence label; - /** Label to display when keyboard is in temporary shift mode */ - public CharSequence temporaryShiftLabel; /** Icon to display instead of a label. Icon takes precedence over a label */ public Drawable icon; /** Hint icon to display on the key in conjunction with the label */ public Drawable hintIcon; /** Preview version of the icon, for the preview popup */ + /** + * The hint icon to display on the key when keyboard is in manual temporary upper case + * mode. + */ + public Drawable manualTemporaryUpperCaseHintIcon; + public Drawable iconPreview; /** Width of the key, not including the gap */ public int width; @@ -320,9 +326,13 @@ public class BaseKeyboard { setDefaultBounds(icon); hintIcon = a.getDrawable(R.styleable.BaseKeyboard_Key_keyHintIcon); setDefaultBounds(hintIcon); + manualTemporaryUpperCaseHintIcon = a.getDrawable( + R.styleable.BaseKeyboard_Key_manualTemporaryUpperCaseHintIcon); + setDefaultBounds(manualTemporaryUpperCaseHintIcon); label = a.getText(R.styleable.BaseKeyboard_Key_keyLabel); - temporaryShiftLabel = a.getText(R.styleable.BaseKeyboard_Key_temporaryShiftKeyLabel); + manualTemporaryUpperCaseCode = a.getInt( + R.styleable.BaseKeyboard_Key_manualTemporaryUpperCaseCode, 0); text = a.getText(R.styleable.BaseKeyboard_Key_keyOutputText); if (codes == null && !TextUtils.isEmpty(label)) { diff --git a/java/src/com/android/inputmethod/latin/BaseKeyboardView.java b/java/src/com/android/inputmethod/latin/BaseKeyboardView.java index a31785f507..f2edd6b04a 100644 --- a/java/src/com/android/inputmethod/latin/BaseKeyboardView.java +++ b/java/src/com/android/inputmethod/latin/BaseKeyboardView.java @@ -772,6 +772,8 @@ public class BaseKeyboardView extends View implements PointerTracker.UIProxy { final int kbdPaddingTop = getPaddingTop(); final Key[] keys = mKeys; final Key invalidKey = mInvalidatedKey; + final boolean isTemporaryUpperCase = (mKeyboard instanceof LatinKeyboard + && ((LatinKeyboard)mKeyboard).isTemporaryUpperCase()); paint.setColor(mKeyTextColor); boolean drawSingleKey = false; @@ -807,17 +809,6 @@ public class BaseKeyboardView extends View implements PointerTracker.UIProxy { boolean drawHintIcon = true; if (label != null) { - // If keyboard is multi-touch capable and in temporary upper case state and key has - // tempoarary shift label, label should be hint character and hint icon should not - // be drawn. - if (mHasDistinctMultitouch - && mKeyboard instanceof LatinKeyboard - && ((LatinKeyboard)mKeyboard).isTemporaryUpperCase() - && key.temporaryShiftLabel != null) { - label = key.temporaryShiftLabel.toString(); - drawHintIcon = false; - } - // For characters, use large font. For labels like "Done", use small font. final int labelSize; if (label.length() > 1 && key.codes.length < 2) { @@ -862,7 +853,10 @@ public class BaseKeyboardView extends View implements PointerTracker.UIProxy { int drawableHeight = key.height; int drawableX = 0; int drawableY = HINT_ICON_VERTICAL_ADJUSTMENT_PIXEL; - drawIcon(canvas, key.hintIcon, drawableX, drawableY, drawableWidth, drawableHeight); + Drawable icon = (isTemporaryUpperCase + && key.manualTemporaryUpperCaseHintIcon != null) + ? key.manualTemporaryUpperCaseHintIcon : key.hintIcon; + drawIcon(canvas, icon, drawableX, drawableY, drawableWidth, drawableHeight); } canvas.translate(-key.x - kbdPaddingLeft, -key.y - kbdPaddingTop); } diff --git a/java/src/com/android/inputmethod/latin/PointerTracker.java b/java/src/com/android/inputmethod/latin/PointerTracker.java index c88a58d70f..e76f8c7056 100644 --- a/java/src/com/android/inputmethod/latin/PointerTracker.java +++ b/java/src/com/android/inputmethod/latin/PointerTracker.java @@ -419,12 +419,6 @@ public class PointerTracker { if (key.codes[0] == BaseKeyboard.KEYCODE_SHIFT) { mHandler.startLongPressShiftTimer(mLongPressShiftKeyTimeout, keyIndex, this); } else { - // If keyboard is in temporary upper case state and the key has temporary shift label, - // non-shift long press should not be started. On distinct multi touch device, when - // pressing shift key (in temporary upper case), hint icon should not be drawn on key - // top. So we should disable long press for such key. - if (isTemporaryUpperCase() && key.temporaryShiftLabel != null) - return; mHandler.startLongPressTimer(mLongPressKeyTimeout, keyIndex, this); } } @@ -462,10 +456,10 @@ public class PointerTracker { code = key.codes[mTapCount]; } - // If keyboard is in temporary upper case state and key has temporary shift label, - // alternate character code should be sent. - if (isTemporaryUpperCase() && key.temporaryShiftLabel != null) { - code = key.temporaryShiftLabel.charAt(0); + // If keyboard is in manual temporary upper case state and key has manual temporary + // shift code, alternate character code should be sent. + if (isTemporaryUpperCase() && key.manualTemporaryUpperCaseCode != 0) { + code = key.manualTemporaryUpperCaseCode; codes[0] = code; } -- GitLab