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="&quot;"
+                    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="&quot;" />
             </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="&gt;" />
+                    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