diff options
Diffstat (limited to 'java')
17 files changed, 2200 insertions, 98 deletions
diff --git a/java/res/values-v18/emoji-categories.xml b/java/res/values-v18/emoji-categories.xml new file mode 100644 index 000000000..17a2053d2 --- /dev/null +++ b/java/res/values-v18/emoji-categories.xml @@ -0,0 +1,922 @@ +<?xml version="1.0" encoding="utf-8"?> +<!-- Copyright (C) 2013 The Android Open Source Project + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +--> + +<!-- Note: This emoji code point list is valid on JB-MR2 (API == 18). + There is another emoji code point list for KLP and later under res/xml/values-v19. --> +<resources> + <!-- Dummy codeArrays for recents emoji keyboard. + Do not remove these keys, because they are used as a template. --> + <array + name="emoji_recents" + format="string" + > + <item>52</item> + <item>45</item> + <item>43</item> + <item>45</item> + <item>4E</item> + <item>54</item> + </array> + <array + name="emoji_nature" + format="string" + > + <!-- <item>1f415</item> --> + <item>1f436</item> + <item>1f429</item> + <!-- <item>1f408</item> --> + <item>1f431</item> + <!-- <item>1f400</item> --> + <!-- <item>1f401</item> --> + <item>1f42d</item> + <item>1f439</item> + <item>1f422</item> + <!-- <item>1f407</item> --> + <item>1f430</item> + <!-- <item>1f413</item> --> + <item>1f414</item> + <item>1f423</item> + <item>1f424</item> + <item>1f425</item> + <item>1f426</item> + <!-- <item>1f40f</item> --> + <item>1f411</item> + <!-- <item>1f410</item> --> + <item>1f43a</item> + <!-- <item>1f403</item> --> + <!-- <item>1f402</item> --> + <!-- <item>1f404</item> --> + <item>1f42e</item> + <item>1f434</item> + <item>1f417</item> + <!-- <item>1f416</item> --> + <item>1f437</item> + <item>1f43d</item> + <item>1f438</item> + <item>1f40d</item> + <item>1f43c</item> + <item>1f427</item> + <item>1f418</item> + <item>1f428</item> + <item>1f412</item> + <item>1f435</item> + <!-- <item>1f406</item> --> + <item>1f42f</item> + <item>1f43b</item> + <item>1f42b</item> + <!-- <item>1f42a</item> --> + <!-- <item>1f40a</item> --> + <item>1f433</item> + <!-- <item>1f40b</item> --> + <item>1f41f</item> + <item>1f420</item> + <item>1f421</item> + <item>1f419</item> + <item>1f41a</item> + <item>1f42c</item> + <item>1f40c</item> + <item>1f41b</item> + <item>1f41c</item> + <item>1f41d</item> + <item>1f41e</item> + <item>1f432</item> + <!-- <item>1f409</item> --> + <item>1f43e</item> + <item>1f378</item> + <item>1f37a</item> + <item>1f37b</item> + <item>1f377</item> + <item>1f379</item> + <item>1f376</item> + <!-- <item>2615</item> --> + <item>1f375</item> + <!-- <item>1f37c</item> --> + <item>1f374</item> + <item>1f368</item> + <item>1f367</item> + <item>1f366</item> + <item>1f369</item> + <item>1f370</item> + <item>1f36a</item> + <item>1f36b</item> + <item>1f36c</item> + <item>1f36d</item> + <item>1f36e</item> + <item>1f36f</item> + <item>1f373</item> + <item>1f354</item> + <item>1f35f</item> + <item>1f35d</item> + <item>1f355</item> + <item>1f356</item> + <item>1f357</item> + <item>1f364</item> + <item>1f363</item> + <item>1f371</item> + <item>1f35e</item> + <item>1f35c</item> + <item>1f359</item> + <item>1f35a</item> + <item>1f35b</item> + <item>1f372</item> + <item>1f365</item> + <item>1f362</item> + <item>1f361</item> + <item>1f358</item> + <item>1f360</item> + <item>1f34c</item> + <item>1f34e</item> + <item>1f34f</item> + <item>1f34a</item> + <!-- <item>1f34b</item> --> + <item>1f344</item> + <item>1f345</item> + <item>1f346</item> + <item>1f347</item> + <item>1f348</item> + <item>1f349</item> + <!-- <item>1f350</item> --> + <item>1f351</item> + <item>1f352</item> + <item>1f353</item> + <item>1f34d</item> + <item>1f330</item> + <item>1f331</item> + <!-- <item>1f332</item> --> + <!-- <item>1f333</item> --> + <item>1f334</item> + <item>1f335</item> + <item>1f337</item> + <item>1f338</item> + <item>1f339</item> + <item>1f340</item> + <item>1f341</item> + <item>1f342</item> + <item>1f343</item> + <item>1f33a</item> + <item>1f33b</item> + <item>1f33c</item> + <item>1f33d</item> + <item>1f33e</item> + <item>1f33f</item> + <item>2600</item> + <item>1f308</item> + <item>26c5</item> + <item>2601</item> + <item>1f301</item> + <item>1f302</item> + <!-- <item>2614</item> --> + <item>1f4a7</item> + <item>26a1</item> + <item>1f300</item> + <item>2744</item> + <item>26c4</item> + <item>1f319</item> + <!-- <item>1f31e</item> --> + <!-- <item>1f31d</item> --> + <!-- <item>1f31a</item> --> + <item>1f31b</item> + <!-- <item>1f31c</item> --> + <item>1f311</item> + <!-- <item>1f312</item> --> + <item>1f313</item> + <item>1f314</item> + <item>1f315</item> + <!-- <item>1f316</item> --> + <!-- <item>1f317</item> --> + <!-- <item>1f318</item> --> + <item>1f391</item> + <item>1f304</item> + <item>1f305</item> + <item>1f307</item> + <item>1f306</item> + <item>1f303</item> + <item>1f30c</item> + <item>1f309</item> + <item>1f30a</item> + <item>1f30b</item> + <!-- <item>1f30e</item> --> + <item>1f30f</item> + <!-- <item>1f30d</item> --> + <!-- <item>1f310</item> --> + </array> + <array + name="emoji_symbols" + format="string" + > + <!-- <item>fe82e|0031,20e3</item> --> + <!-- <item>fe82f|0032,20e3</item> --> + <!-- <item>fe830|0033,20e3</item> --> + <!-- <item>fe831|0034,20e3</item> --> + <!-- <item>fe832|0035,20e3</item> --> + <!-- <item>fe833|0036,20e3</item> --> + <!-- <item>fe834|0037,20e3</item> --> + <!-- <item>fe835|0038,20e3</item> --> + <!-- <item>fe836|0039,20e3</item> --> + <!-- <item>fe837|0030,20e3</item> --> + <!-- <item>1f51f</item> --> + <!-- <item>fe82c|0023,20e3</item> --> + <item>1f51d</item> + <item>1f519</item> + <item>1f51b</item> + <item>1f51c</item> + <item>1f51a</item> + <item>23f3</item> + <item>231b</item> + <item>23f0</item> + <item>2648</item> + <item>2649</item> + <item>264a</item> + <item>264b</item> + <item>264c</item> + <item>264d</item> + <item>264e</item> + <item>264f</item> + <item>2650</item> + <item>2651</item> + <item>2652</item> + <item>2653</item> + <item>26ce</item> + <item>1f531</item> + <item>1f52f</item> + <item>1f6bb</item> + <!-- <item>1f6ae</item> --> + <!-- <item>1f6af</item> --> + <!-- <item>1f6b0</item> --> + <!-- <item>1f6b1</item> --> + <item>1f170</item> + <item>1f171</item> + <item>1f18e</item> + <item>1f17e</item> + <item>1f4ae</item> + <item>1f4af</item> + <item>1f520</item> + <item>1f521</item> + <item>1f522</item> + <item>1f523</item> + <item>1f524</item> + <item>27bf</item> + <item>1f4f6</item> + <item>1f4f3</item> + <item>1f4f4</item> + <!-- <item>1f4f5</item> --> + <item>1f6b9</item> + <item>1f6ba</item> + <item>1f6bc</item> + <item>267f</item> + <item>267b</item> + <item>1f6ad</item> + <item>1f6a9</item> + <item>26a0</item> + <item>1f201</item> + <item>1f51e</item> + <item>26d4</item> + <item>1f192</item> + <item>1f197</item> + <item>1f195</item> + <item>1f198</item> + <item>1f199</item> + <item>1f193</item> + <item>1f196</item> + <item>1f19a</item> + <item>1f232</item> + <item>1f233</item> + <item>1f234</item> + <item>1f235</item> + <item>1f236</item> + <item>1f237</item> + <item>1f238</item> + <item>1f239</item> + <item>1f202</item> + <item>1f23a</item> + <item>1f250</item> + <item>1f251</item> + <item>3299</item> + <item>00ae</item> + <item>00a9</item> + <item>2122</item> + <item>1f21a</item> + <item>1f22f</item> + <item>3297</item> + <item>2b55</item> + <item>274c</item> + <item>274e</item> + <item>2139</item> + <item>1f6ab</item> + <item>2705</item> + <item>2714</item> + <item>1f517</item> + <item>2734</item> + <item>2733</item> + <item>2795</item> + <item>2796</item> + <item>2716</item> + <item>2797</item> + <item>1f4a0</item> + <item>1f4a1</item> + <item>1f4a4</item> + <item>1f4a2</item> + <item>1f525</item> + <item>1f4a5</item> + <item>1f4a8</item> + <item>1f4a6</item> + <item>1f4ab</item> + <item>1f55b</item> + <!-- <item>1f567</item> --> + <item>1f550</item> + <!-- <item>1f55c</item> --> + <item>1f551</item> + <!-- <item>1f55d</item> --> + <item>1f552</item> + <!-- <item>1f55e</item> --> + <item>1f553</item> + <!-- <item>1f55f</item> --> + <item>1f554</item> + <!-- <item>1f560</item> --> + <item>1f555</item> + <!-- <item>1f561</item> --> + <item>1f556</item> + <!-- <item>1f562</item> --> + <item>1f557</item> + <!-- <item>1f563</item> --> + <item>1f558</item> + <!-- <item>1f564</item> --> + <item>1f559</item> + <!-- <item>1f565</item> --> + <item>1f55a</item> + <!-- <item>1f566</item> --> + <item>2195</item> + <item>2b06</item> + <item>2197</item> + <item>27a1</item> + <item>2198</item> + <item>2b07</item> + <item>2199</item> + <item>2b05</item> + <item>2196</item> + <item>2194</item> + <item>2934</item> + <item>2935</item> + <item>23ea</item> + <item>23eb</item> + <item>23ec</item> + <item>23e9</item> + <item>25c0</item> + <item>25b6</item> + <item>1f53d</item> + <item>1f53c</item> + <item>2747</item> + <item>2728</item> + <item>1f534</item> + <item>1f535</item> + <item>26aa</item> + <item>26ab</item> + <item>1f533</item> + <item>1f532</item> + <item>2b50</item> + <item>1f31f</item> + <item>1f320</item> + <item>25ab</item> + <item>25aa</item> + <item>25fd</item> + <item>25fe</item> + <item>25fb</item> + <item>25fc</item> + <item>2b1c</item> + <item>2b1b</item> + <item>1f538</item> + <item>1f539</item> + <item>1f536</item> + <item>1f537</item> + <item>1f53a</item> + <item>1f53b</item> + <item>2754</item> + <item>2753</item> + <item>2755</item> + <item>2757</item> + <item>203c</item> + <item>2049</item> + <item>3030</item> + <item>27b0</item> + <item>2660</item> + <item>2665</item> + <item>2663</item> + <item>2666</item> + <item>1f194</item> + <item>1f511</item> + <item>21a9</item> + <item>1f191</item> + <item>1f50d</item> + <item>1f512</item> + <item>1f513</item> + <item>21aa</item> + <item>1f510</item> + <!-- <item>2611</item> --> + <item>1f518</item> + <item>1f50e</item> + <item>1f516</item> + <item>1f50f</item> + <item>1f503</item> + <!-- <item>1f500</item> --> + <!-- <item>1f501</item> --> + <!-- <item>1f502</item> --> + <!-- <item>1f504</item> --> + <item>1f4e7</item> + <!-- <item>1f505</item> --> + <!-- <item>1f506</item> --> + <!-- <item>1f507</item> --> + <!-- <item>1f508</item> --> + <!-- <item>1f509</item> --> + <item>1f50a</item> + </array> + <array + name="emoji_faces" + format="string" + > + <item>263a</item> + <item>1f60a</item> + <!-- <item>1f600</item> --> + <item>1f601</item> + <item>1f602</item> + <item>1f603</item> + <item>1f604</item> + <item>1f605</item> + <item>1f606</item> + <!-- <item>1f607</item> --> + <!-- <item>1f608</item> --> + <item>1f609</item> + <!-- <item>1f62f</item> --> + <!-- <item>1f610</item> --> + <!-- <item>1f611</item> --> + <!-- <item>1f615</item> --> + <item>1f620</item> + <!-- <item>1f62c</item> --> + <item>1f621</item> + <item>1f622</item> + <!-- <item>1f634</item> --> + <!-- <item>1f62e</item> --> + <item>1f623</item> + <item>1f624</item> + <item>1f625</item> + <!-- <item>1f626</item> --> + <!-- <item>1f627</item> --> + <item>1f628</item> + <item>1f629</item> + <item>1f630</item> + <!-- <item>1f61f</item> --> + <item>1f631</item> + <item>1f632</item> + <item>1f633</item> + <item>1f635</item> + <!-- <item>1f636</item> --> + <item>1f637</item> + <item>1f61e</item> + <item>1f612</item> + <item>1f60d</item> + <!-- <item>1f61b</item> --> + <item>1f61c</item> + <item>1f61d</item> + <item>1f60b</item> + <!-- <item>1f617</item> --> + <!-- <item>1f619</item> --> + <item>1f618</item> + <item>1f61a</item> + <!-- <item>1f60e</item> --> + <item>1f62d</item> + <item>1f60c</item> + <item>1f616</item> + <item>1f614</item> + <item>1f62a</item> + <item>1f60f</item> + <item>1f613</item> + <item>1f62b</item> + <item>1f64b</item> + <item>1f64c</item> + <item>1f64d</item> + <item>1f645</item> + <item>1f646</item> + <item>1f647</item> + <item>1f64e</item> + <item>1f64f</item> + <item>1f63a</item> + <item>1f63c</item> + <item>1f638</item> + <item>1f639</item> + <item>1f63b</item> + <item>1f63d</item> + <item>1f63f</item> + <item>1f63e</item> + <item>1f640</item> + <item>1f648</item> + <item>1f649</item> + <item>1f64a</item> + <item>1f4a9</item> + <item>1f476</item> + <item>1f466</item> + <item>1f467</item> + <item>1f468</item> + <item>1f469</item> + <item>1f474</item> + <item>1f475</item> + <item>1f48f</item> + <item>1f491</item> + <item>1f46a</item> + <item>1f46b</item> + <!-- <item>1f46c</item> --> + <!-- <item>1f46d</item> --> + <item>1f464</item> + <!-- <item>1f465</item> --> + <item>1f46e</item> + <item>1f477</item> + <item>1f481</item> + <item>1f482</item> + <item>1f46f</item> + <item>1f470</item> + <item>1f478</item> + <item>1f385</item> + <item>1f47c</item> + <!-- <item>1f471</item> --> + <!-- <item>1f472</item> --> + <!-- <item>1f473</item> --> + <item>1f483</item> + <item>1f486</item> + <item>1f487</item> + <item>1f485</item> + <item>1f47b</item> + <item>1f479</item> + <item>1f47a</item> + <item>1f47d</item> + <item>1f47e</item> + <item>1f47f</item> + <item>1f480</item> + <item>1f4aa</item> + <item>1f440</item> + <item>1f442</item> + <item>1f443</item> + <item>1f463</item> + <item>1f444</item> + <item>1f445</item> + <item>1f48b</item> + <item>2764</item> + <item>1f499</item> + <item>1f49a</item> + <item>1f49b</item> + <item>1f49c</item> + <item>1f493</item> + <item>1f494</item> + <item>1f495</item> + <item>1f496</item> + <item>1f497</item> + <item>1f498</item> + <item>1f49d</item> + <item>1f49e</item> + <item>1f49f</item> + <item>1f44d</item> + <item>1f44e</item> + <item>1f44c</item> + <item>270a</item> + <item>270c</item> + <item>270b</item> + <item>1f44a</item> + <!-- <item>261d</item> --> + <item>1f446</item> + <item>1f447</item> + <item>1f448</item> + <item>1f449</item> + <item>1f44b</item> + <item>1f44f</item> + <!-- <item>1f450</item> --> + </array> + <array + name="emoji_objects" + format="string" + > + <item>1f530</item> + <item>1f484</item> + <item>1f45e</item> + <item>1f45f</item> + <item>1f451</item> + <item>1f452</item> + <item>1f3a9</item> + <item>1f393</item> + <item>1f453</item> + <item>231a</item> + <item>1f454</item> + <item>1f455</item> + <item>1f456</item> + <item>1f457</item> + <item>1f458</item> + <item>1f459</item> + <item>1f460</item> + <item>1f461</item> + <item>1f462</item> + <item>1f45a</item> + <item>1f45c</item> + <item>1f4bc</item> + <item>1f392</item> + <item>1f45d</item> + <item>1f45b</item> + <item>1f4b0</item> + <item>1f4b3</item> + <item>1f4b2</item> + <item>1f4b5</item> + <item>1f4b4</item> + <!-- <item>1f4b6</item> --> + <!-- <item>1f4b7</item> --> + <item>1f4b8</item> + <item>1f4b1</item> + <item>1f4b9</item> + <item>1f52b</item> + <item>1f52a</item> + <item>1f4a3</item> + <item>1f489</item> + <item>1f48a</item> + <item>1f6ac</item> + <item>1f514</item> + <!-- <item>1f515</item> --> + <item>1f6aa</item> + <!-- <item>1f52c</item> --> + <!-- <item>1f52d</item> --> + <item>1f52e</item> + <item>1f526</item> + <item>1f50b</item> + <item>1f50c</item> + <item>1f4dc</item> + <item>1f4d7</item> + <item>1f4d8</item> + <item>1f4d9</item> + <item>1f4da</item> + <item>1f4d4</item> + <item>1f4d2</item> + <item>1f4d1</item> + <item>1f4d3</item> + <item>1f4d5</item> + <item>1f4d6</item> + <item>1f4f0</item> + <item>1f4db</item> + <item>1f383</item> + <item>1f384</item> + <item>1f380</item> + <item>1f381</item> + <item>1f382</item> + <item>1f388</item> + <item>1f386</item> + <item>1f387</item> + <item>1f389</item> + <item>1f38a</item> + <item>1f38d</item> + <item>1f38f</item> + <item>1f38c</item> + <item>1f390</item> + <item>1f38b</item> + <item>1f38e</item> + <item>1f4f1</item> + <item>1f4f2</item> + <item>1f4df</item> + <item>260e</item> + <item>1f4de</item> + <item>1f4e0</item> + <item>1f4e6</item> + <item>2709</item> + <item>1f4e8</item> + <item>1f4e9</item> + <item>1f4ea</item> + <item>1f4eb</item> + <!-- <item>1f4ed</item> --> + <!-- <item>1f4ec</item> --> + <item>1f4ee</item> + <item>1f4e4</item> + <item>1f4e5</item> + <!-- <item>1f4ef</item> --> + <item>1f4e2</item> + <item>1f4e3</item> + <item>1f4e1</item> + <item>1f4ac</item> + <!-- <item>1f4ad</item> --> + <item>2712</item> + <item>270f</item> + <item>1f4dd</item> + <item>1f4cf</item> + <item>1f4d0</item> + <item>1f4cd</item> + <item>1f4cc</item> + <item>1f4ce</item> + <item>2702</item> + <item>1f4ba</item> + <item>1f4bb</item> + <item>1f4bd</item> + <item>1f4be</item> + <item>1f4bf</item> + <item>1f4c6</item> + <item>1f4c5</item> + <item>1f4c7</item> + <item>1f4cb</item> + <item>1f4c1</item> + <item>1f4c2</item> + <item>1f4c3</item> + <item>1f4c4</item> + <item>1f4ca</item> + <item>1f4c8</item> + <item>1f4c9</item> + <item>26fa</item> + <item>1f3a1</item> + <item>1f3a2</item> + <item>1f3a0</item> + <item>1f3aa</item> + <item>1f3a8</item> + <item>1f3ac</item> + <item>1f3a5</item> + <item>1f4f7</item> + <item>1f4f9</item> + <item>1f3a6</item> + <item>1f3ad</item> + <item>1f3ab</item> + <item>1f3ae</item> + <item>1f3b2</item> + <item>1f3b0</item> + <item>1f0cf</item> + <item>1f3b4</item> + <item>1f004</item> + <item>1f3af</item> + <item>1f4fa</item> + <item>1f4fb</item> + <item>1f4c0</item> + <item>1f4fc</item> + <item>1f3a7</item> + <item>1f3a4</item> + <item>1f3b5</item> + <item>1f3b6</item> + <item>1f3bc</item> + <item>1f3bb</item> + <item>1f3b9</item> + <item>1f3b7</item> + <item>1f3ba</item> + <item>1f3b8</item> + <item>303d</item> + </array> + <array + name="emoji_places" + format="string" + > + <item>1f3e0</item> + <item>1f3e1</item> + <item>1f3e2</item> + <item>1f3e3</item> + <!-- <item>1f3e4</item> --> + <item>1f3e5</item> + <item>1f3e6</item> + <item>1f3e7</item> + <item>1f3e8</item> + <item>1f3e9</item> + <item>1f3ea</item> + <item>1f3eb</item> + <item>26ea</item> + <item>26f2</item> + <item>1f3ec</item> + <item>1f3ef</item> + <item>1f3f0</item> + <item>1f3ed</item> + <item>1f5fb</item> + <item>1f5fc</item> + <item>1f5fd</item> + <item>1f5fe</item> + <item>1f5ff</item> + <item>2693</item> + <item>1f3ee</item> + <item>1f488</item> + <item>1f527</item> + <item>1f528</item> + <item>1f529</item> + <!-- <item>1f6bf</item> --> + <!-- <item>1f6c1</item> --> + <item>1f6c0</item> + <item>1f6bd</item> + <item>1f6be</item> + <item>1f3bd</item> + <item>1f3a3</item> + <item>1f3b1</item> + <item>1f3b3</item> + <item>26be</item> + <item>26f3</item> + <item>1f3be</item> + <item>26bd</item> + <item>1f3bf</item> + <item>1f3c0</item> + <item>1f3c1</item> + <item>1f3c2</item> + <item>1f3c3</item> + <item>1f3c4</item> + <item>1f3c6</item> + <!-- <item>1f3c7</item> --> + <item>1f40e</item> + <item>1f3c8</item> + <!-- <item>1f3c9</item> --> + <item>1f3ca</item> + <!-- <item>1f682</item> --> + <item>1f683</item> + <item>1f684</item> + <item>1f685</item> + <!-- <item>1f686</item> --> + <item>1f687</item> + <item>24c2</item> + <!-- <item>1f688</item> --> + <!-- <item>1f68a</item> --> + <!-- <item>1f68b</item> --> + <item>1f68c</item> + <!-- <item>1f68d</item> --> + <!-- <item>1f68e</item> --> + <item>1f68f</item> + <!-- <item>1f690</item> --> + <item>1f691</item> + <item>1f692</item> + <item>1f693</item> + <!-- <item>1f694</item> --> + <item>1f695</item> + <!-- <item>1f696</item> --> + <item>1f697</item> + <!-- <item>1f698</item> --> + <item>1f699</item> + <!-- <item>1f69a</item> --> + <!-- <item>1f69b</item> --> + <!-- <item>1f69c</item> --> + <!-- <item>1f69d</item> --> + <!-- <item>1f69e</item> --> + <!-- <item>1f69f</item> --> + <!-- <item>1f6a0</item> --> + <!-- <item>1f6a1</item> --> + <item>1f6a2</item> + <!-- <item>1f6a3</item> --> + <!-- <item>1f681</item> --> + <item>2708</item> + <!-- <item>1f6c2</item> --> + <!-- <item>1f6c3</item> --> + <!-- <item>1f6c4</item> --> + <!-- <item>1f6c5</item> --> + <item>26f5</item> + <item>1f6b2</item> + <!-- <item>1f6b3</item> --> + <!-- <item>1f6b4</item> --> + <!-- <item>1f6b5</item> --> + <!-- <item>1f6b7</item> --> + <!-- <item>1f6b8</item> --> + <item>1f689</item> + <item>1f680</item> + <item>1f6a4</item> + <item>1f6b6</item> + <item>26fd</item> + <item>1f17f</item> + <item>1f6a5</item> + <!-- <item>1f6a6</item> --> + <item>1f6a7</item> + <item>1f6a8</item> + <item>2668</item> + <item>1f48c</item> + <item>1f48d</item> + <item>1f48e</item> + <item>1f490</item> + <item>1f492</item> + <item>fe4e5|1f1ef,1f1f5</item> + <item>fe4e6|1f1fa,1f1f8</item> + <item>fe4e7|1f1eb,1f1f7</item> + <item>fe4e8|1f1e9,1f1ea</item> + <item>fe4e9|1f1ee,1f1f9</item> + <item>fe4ea|1f1ec,1f1e7</item> + <item>fe4eb|1f1ea,1f1f8</item> + <item>fe4ec|1f1f7,1f1fa</item> + <item>fe4ed|1f1e8,1f1f3</item> + <item>fe4ee|1f1f0,1f1f7</item> + </array> + <array + name="emoji_emoticons" + format="string" + > + <item>=-O</item> + <item>:-P</item> + <item>;-)</item> + <item>:-(</item> + <item>:-)</item> + <item>:-!</item> + <item>:-$</item> + <item>B-)</item> + <item>:O</item> + <item>:-*</item> + <item>:-D</item> + <item>:\'(</item> + <item>:-\\</item> + <item>O:-)</item> + <item>:-[</item> + </array> +</resources> diff --git a/java/res/values-v19/emoji-categories.xml b/java/res/values-v19/emoji-categories.xml new file mode 100644 index 000000000..a6affc421 --- /dev/null +++ b/java/res/values-v19/emoji-categories.xml @@ -0,0 +1,922 @@ +<?xml version="1.0" encoding="utf-8"?> +<!-- Copyright (C) 2013 The Android Open Source Project + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +--> + +<!-- Note: This emoji code point list is valid on KLP and later (API >= 19). + There is another emoji code point list for JB-MR2 under res/xml/values and values-v18.--> +<resources> + <!-- Dummy codeArrays for recents emoji keyboard. + Do not remove these keys, because they are used as a template. --> + <array + name="emoji_recents" + format="string" + > + <item>52</item> + <item>45</item> + <item>43</item> + <item>45</item> + <item>4E</item> + <item>54</item> + </array> + <array + name="emoji_nature" + format="string" + > + <item>1f415</item> + <item>1f436</item> + <item>1f429</item> + <item>1f408</item> + <item>1f431</item> + <item>1f400</item> + <item>1f401</item> + <item>1f42d</item> + <item>1f439</item> + <item>1f422</item> + <item>1f407</item> + <item>1f430</item> + <item>1f413</item> + <item>1f414</item> + <item>1f423</item> + <item>1f424</item> + <item>1f425</item> + <item>1f426</item> + <item>1f40f</item> + <item>1f411</item> + <item>1f410</item> + <item>1f43a</item> + <item>1f403</item> + <item>1f402</item> + <item>1f404</item> + <item>1f42e</item> + <item>1f434</item> + <item>1f417</item> + <item>1f416</item> + <item>1f437</item> + <item>1f43d</item> + <item>1f438</item> + <item>1f40d</item> + <item>1f43c</item> + <item>1f427</item> + <item>1f418</item> + <item>1f428</item> + <item>1f412</item> + <item>1f435</item> + <item>1f406</item> + <item>1f42f</item> + <item>1f43b</item> + <item>1f42b</item> + <item>1f42a</item> + <item>1f40a</item> + <item>1f433</item> + <item>1f40b</item> + <item>1f41f</item> + <item>1f420</item> + <item>1f421</item> + <item>1f419</item> + <item>1f41a</item> + <item>1f42c</item> + <item>1f40c</item> + <item>1f41b</item> + <item>1f41c</item> + <item>1f41d</item> + <item>1f41e</item> + <item>1f432</item> + <item>1f409</item> + <item>1f43e</item> + <item>1f378</item> + <item>1f37a</item> + <item>1f37b</item> + <item>1f377</item> + <item>1f379</item> + <item>1f376</item> + <item>2615</item> + <item>1f375</item> + <item>1f37c</item> + <item>1f374</item> + <item>1f368</item> + <item>1f367</item> + <item>1f366</item> + <item>1f369</item> + <item>1f370</item> + <item>1f36a</item> + <item>1f36b</item> + <item>1f36c</item> + <item>1f36d</item> + <item>1f36e</item> + <item>1f36f</item> + <item>1f373</item> + <item>1f354</item> + <item>1f35f</item> + <item>1f35d</item> + <item>1f355</item> + <item>1f356</item> + <item>1f357</item> + <item>1f364</item> + <item>1f363</item> + <item>1f371</item> + <item>1f35e</item> + <item>1f35c</item> + <item>1f359</item> + <item>1f35a</item> + <item>1f35b</item> + <item>1f372</item> + <item>1f365</item> + <item>1f362</item> + <item>1f361</item> + <item>1f358</item> + <item>1f360</item> + <item>1f34c</item> + <item>1f34e</item> + <item>1f34f</item> + <item>1f34a</item> + <item>1f34b</item> + <item>1f344</item> + <item>1f345</item> + <item>1f346</item> + <item>1f347</item> + <item>1f348</item> + <item>1f349</item> + <item>1f350</item> + <item>1f351</item> + <item>1f352</item> + <item>1f353</item> + <item>1f34d</item> + <item>1f330</item> + <item>1f331</item> + <item>1f332</item> + <item>1f333</item> + <item>1f334</item> + <item>1f335</item> + <item>1f337</item> + <item>1f338</item> + <item>1f339</item> + <item>1f340</item> + <item>1f341</item> + <item>1f342</item> + <item>1f343</item> + <item>1f33a</item> + <item>1f33b</item> + <item>1f33c</item> + <item>1f33d</item> + <item>1f33e</item> + <item>1f33f</item> + <item>2600</item> + <item>1f308</item> + <item>26c5</item> + <item>2601</item> + <item>1f301</item> + <item>1f302</item> + <item>2614</item> + <item>1f4a7</item> + <item>26a1</item> + <item>1f300</item> + <item>2744</item> + <item>26c4</item> + <item>1f319</item> + <item>1f31e</item> + <item>1f31d</item> + <item>1f31a</item> + <item>1f31b</item> + <item>1f31c</item> + <item>1f311</item> + <item>1f312</item> + <item>1f313</item> + <item>1f314</item> + <item>1f315</item> + <item>1f316</item> + <item>1f317</item> + <item>1f318</item> + <item>1f391</item> + <item>1f304</item> + <item>1f305</item> + <item>1f307</item> + <item>1f306</item> + <item>1f303</item> + <item>1f30c</item> + <item>1f309</item> + <item>1f30a</item> + <item>1f30b</item> + <item>1f30e</item> + <item>1f30f</item> + <item>1f30d</item> + <item>1f310</item> + </array> + <array + name="emoji_symbols" + format="string" + > + <item>fe82e|0031,20e3</item> + <item>fe82f|0032,20e3</item> + <item>fe830|0033,20e3</item> + <item>fe831|0034,20e3</item> + <item>fe832|0035,20e3</item> + <item>fe833|0036,20e3</item> + <item>fe834|0037,20e3</item> + <item>fe835|0038,20e3</item> + <item>fe836|0039,20e3</item> + <item>fe837|0030,20e3</item> + <item>1f51f</item> + <item>fe82c|0023,20e3</item> + <item>1f51d</item> + <item>1f519</item> + <item>1f51b</item> + <item>1f51c</item> + <item>1f51a</item> + <item>23f3</item> + <item>231b</item> + <item>23f0</item> + <item>2648</item> + <item>2649</item> + <item>264a</item> + <item>264b</item> + <item>264c</item> + <item>264d</item> + <item>264e</item> + <item>264f</item> + <item>2650</item> + <item>2651</item> + <item>2652</item> + <item>2653</item> + <item>26ce</item> + <item>1f531</item> + <item>1f52f</item> + <item>1f6bb</item> + <item>1f6ae</item> + <item>1f6af</item> + <item>1f6b0</item> + <item>1f6b1</item> + <item>1f170</item> + <item>1f171</item> + <item>1f18e</item> + <item>1f17e</item> + <item>1f4ae</item> + <item>1f4af</item> + <item>1f520</item> + <item>1f521</item> + <item>1f522</item> + <item>1f523</item> + <item>1f524</item> + <item>27bf</item> + <item>1f4f6</item> + <item>1f4f3</item> + <item>1f4f4</item> + <item>1f4f5</item> + <item>1f6b9</item> + <item>1f6ba</item> + <item>1f6bc</item> + <item>267f</item> + <item>267b</item> + <item>1f6ad</item> + <item>1f6a9</item> + <item>26a0</item> + <item>1f201</item> + <item>1f51e</item> + <item>26d4</item> + <item>1f192</item> + <item>1f197</item> + <item>1f195</item> + <item>1f198</item> + <item>1f199</item> + <item>1f193</item> + <item>1f196</item> + <item>1f19a</item> + <item>1f232</item> + <item>1f233</item> + <item>1f234</item> + <item>1f235</item> + <item>1f236</item> + <item>1f237</item> + <item>1f238</item> + <item>1f239</item> + <item>1f202</item> + <item>1f23a</item> + <item>1f250</item> + <item>1f251</item> + <item>3299</item> + <item>00ae</item> + <item>00a9</item> + <item>2122</item> + <item>1f21a</item> + <item>1f22f</item> + <item>3297</item> + <item>2b55</item> + <item>274c</item> + <item>274e</item> + <item>2139</item> + <item>1f6ab</item> + <item>2705</item> + <item>2714</item> + <item>1f517</item> + <item>2734</item> + <item>2733</item> + <item>2795</item> + <item>2796</item> + <item>2716</item> + <item>2797</item> + <item>1f4a0</item> + <item>1f4a1</item> + <item>1f4a4</item> + <item>1f4a2</item> + <item>1f525</item> + <item>1f4a5</item> + <item>1f4a8</item> + <item>1f4a6</item> + <item>1f4ab</item> + <item>1f55b</item> + <item>1f567</item> + <item>1f550</item> + <item>1f55c</item> + <item>1f551</item> + <item>1f55d</item> + <item>1f552</item> + <item>1f55e</item> + <item>1f553</item> + <item>1f55f</item> + <item>1f554</item> + <item>1f560</item> + <item>1f555</item> + <item>1f561</item> + <item>1f556</item> + <item>1f562</item> + <item>1f557</item> + <item>1f563</item> + <item>1f558</item> + <item>1f564</item> + <item>1f559</item> + <item>1f565</item> + <item>1f55a</item> + <item>1f566</item> + <item>2195</item> + <item>2b06</item> + <item>2197</item> + <item>27a1</item> + <item>2198</item> + <item>2b07</item> + <item>2199</item> + <item>2b05</item> + <item>2196</item> + <item>2194</item> + <item>2934</item> + <item>2935</item> + <item>23ea</item> + <item>23eb</item> + <item>23ec</item> + <item>23e9</item> + <item>25c0</item> + <item>25b6</item> + <item>1f53d</item> + <item>1f53c</item> + <item>2747</item> + <item>2728</item> + <item>1f534</item> + <item>1f535</item> + <item>26aa</item> + <item>26ab</item> + <item>1f533</item> + <item>1f532</item> + <item>2b50</item> + <item>1f31f</item> + <item>1f320</item> + <item>25ab</item> + <item>25aa</item> + <item>25fd</item> + <item>25fe</item> + <item>25fb</item> + <item>25fc</item> + <item>2b1c</item> + <item>2b1b</item> + <item>1f538</item> + <item>1f539</item> + <item>1f536</item> + <item>1f537</item> + <item>1f53a</item> + <item>1f53b</item> + <item>2754</item> + <item>2753</item> + <item>2755</item> + <item>2757</item> + <item>203c</item> + <item>2049</item> + <item>3030</item> + <item>27b0</item> + <item>2660</item> + <item>2665</item> + <item>2663</item> + <item>2666</item> + <item>1f194</item> + <item>1f511</item> + <item>21a9</item> + <item>1f191</item> + <item>1f50d</item> + <item>1f512</item> + <item>1f513</item> + <item>21aa</item> + <item>1f510</item> + <item>2611</item> + <item>1f518</item> + <item>1f50e</item> + <item>1f516</item> + <item>1f50f</item> + <item>1f503</item> + <item>1f500</item> + <item>1f501</item> + <item>1f502</item> + <item>1f504</item> + <item>1f4e7</item> + <item>1f505</item> + <item>1f506</item> + <item>1f507</item> + <item>1f508</item> + <item>1f509</item> + <item>1f50a</item> + </array> + <array + name="emoji_faces" + format="string" + > + <item>263a</item> + <item>1f60a</item> + <item>1f600</item> + <item>1f601</item> + <item>1f602</item> + <item>1f603</item> + <item>1f604</item> + <item>1f605</item> + <item>1f606</item> + <item>1f607</item> + <item>1f608</item> + <item>1f609</item> + <item>1f62f</item> + <item>1f610</item> + <item>1f611</item> + <item>1f615</item> + <item>1f620</item> + <item>1f62c</item> + <item>1f621</item> + <item>1f622</item> + <item>1f634</item> + <item>1f62e</item> + <item>1f623</item> + <item>1f624</item> + <item>1f625</item> + <item>1f626</item> + <item>1f627</item> + <item>1f628</item> + <item>1f629</item> + <item>1f630</item> + <item>1f61f</item> + <item>1f631</item> + <item>1f632</item> + <item>1f633</item> + <item>1f635</item> + <item>1f636</item> + <item>1f637</item> + <item>1f61e</item> + <item>1f612</item> + <item>1f60d</item> + <item>1f61b</item> + <item>1f61c</item> + <item>1f61d</item> + <item>1f60b</item> + <item>1f617</item> + <item>1f619</item> + <item>1f618</item> + <item>1f61a</item> + <item>1f60e</item> + <item>1f62d</item> + <item>1f60c</item> + <item>1f616</item> + <item>1f614</item> + <item>1f62a</item> + <item>1f60f</item> + <item>1f613</item> + <item>1f62b</item> + <item>1f64b</item> + <item>1f64c</item> + <item>1f64d</item> + <item>1f645</item> + <item>1f646</item> + <item>1f647</item> + <item>1f64e</item> + <item>1f64f</item> + <item>1f63a</item> + <item>1f63c</item> + <item>1f638</item> + <item>1f639</item> + <item>1f63b</item> + <item>1f63d</item> + <item>1f63f</item> + <item>1f63e</item> + <item>1f640</item> + <item>1f648</item> + <item>1f649</item> + <item>1f64a</item> + <item>1f4a9</item> + <item>1f476</item> + <item>1f466</item> + <item>1f467</item> + <item>1f468</item> + <item>1f469</item> + <item>1f474</item> + <item>1f475</item> + <item>1f48f</item> + <item>1f491</item> + <item>1f46a</item> + <item>1f46b</item> + <item>1f46c</item> + <item>1f46d</item> + <item>1f464</item> + <item>1f465</item> + <item>1f46e</item> + <item>1f477</item> + <item>1f481</item> + <item>1f482</item> + <item>1f46f</item> + <item>1f470</item> + <item>1f478</item> + <item>1f385</item> + <item>1f47c</item> + <item>1f471</item> + <item>1f472</item> + <item>1f473</item> + <item>1f483</item> + <item>1f486</item> + <item>1f487</item> + <item>1f485</item> + <item>1f47b</item> + <item>1f479</item> + <item>1f47a</item> + <item>1f47d</item> + <item>1f47e</item> + <item>1f47f</item> + <item>1f480</item> + <item>1f4aa</item> + <item>1f440</item> + <item>1f442</item> + <item>1f443</item> + <item>1f463</item> + <item>1f444</item> + <item>1f445</item> + <item>1f48b</item> + <item>2764</item> + <item>1f499</item> + <item>1f49a</item> + <item>1f49b</item> + <item>1f49c</item> + <item>1f493</item> + <item>1f494</item> + <item>1f495</item> + <item>1f496</item> + <item>1f497</item> + <item>1f498</item> + <item>1f49d</item> + <item>1f49e</item> + <item>1f49f</item> + <item>1f44d</item> + <item>1f44e</item> + <item>1f44c</item> + <item>270a</item> + <item>270c</item> + <item>270b</item> + <item>1f44a</item> + <item>261d</item> + <item>1f446</item> + <item>1f447</item> + <item>1f448</item> + <item>1f449</item> + <item>1f44b</item> + <item>1f44f</item> + <item>1f450</item> + </array> + <array + name="emoji_objects" + format="string" + > + <item>1f530</item> + <item>1f484</item> + <item>1f45e</item> + <item>1f45f</item> + <item>1f451</item> + <item>1f452</item> + <item>1f3a9</item> + <item>1f393</item> + <item>1f453</item> + <item>231a</item> + <item>1f454</item> + <item>1f455</item> + <item>1f456</item> + <item>1f457</item> + <item>1f458</item> + <item>1f459</item> + <item>1f460</item> + <item>1f461</item> + <item>1f462</item> + <item>1f45a</item> + <item>1f45c</item> + <item>1f4bc</item> + <item>1f392</item> + <item>1f45d</item> + <item>1f45b</item> + <item>1f4b0</item> + <item>1f4b3</item> + <item>1f4b2</item> + <item>1f4b5</item> + <item>1f4b4</item> + <item>1f4b6</item> + <item>1f4b7</item> + <item>1f4b8</item> + <item>1f4b1</item> + <item>1f4b9</item> + <item>1f52b</item> + <item>1f52a</item> + <item>1f4a3</item> + <item>1f489</item> + <item>1f48a</item> + <item>1f6ac</item> + <item>1f514</item> + <item>1f515</item> + <item>1f6aa</item> + <item>1f52c</item> + <item>1f52d</item> + <item>1f52e</item> + <item>1f526</item> + <item>1f50b</item> + <item>1f50c</item> + <item>1f4dc</item> + <item>1f4d7</item> + <item>1f4d8</item> + <item>1f4d9</item> + <item>1f4da</item> + <item>1f4d4</item> + <item>1f4d2</item> + <item>1f4d1</item> + <item>1f4d3</item> + <item>1f4d5</item> + <item>1f4d6</item> + <item>1f4f0</item> + <item>1f4db</item> + <item>1f383</item> + <item>1f384</item> + <item>1f380</item> + <item>1f381</item> + <item>1f382</item> + <item>1f388</item> + <item>1f386</item> + <item>1f387</item> + <item>1f389</item> + <item>1f38a</item> + <item>1f38d</item> + <item>1f38f</item> + <item>1f38c</item> + <item>1f390</item> + <item>1f38b</item> + <item>1f38e</item> + <item>1f4f1</item> + <item>1f4f2</item> + <item>1f4df</item> + <item>260e</item> + <item>1f4de</item> + <item>1f4e0</item> + <item>1f4e6</item> + <item>2709</item> + <item>1f4e8</item> + <item>1f4e9</item> + <item>1f4ea</item> + <item>1f4eb</item> + <item>1f4ed</item> + <item>1f4ec</item> + <item>1f4ee</item> + <item>1f4e4</item> + <item>1f4e5</item> + <item>1f4ef</item> + <item>1f4e2</item> + <item>1f4e3</item> + <item>1f4e1</item> + <item>1f4ac</item> + <item>1f4ad</item> + <item>2712</item> + <item>270f</item> + <item>1f4dd</item> + <item>1f4cf</item> + <item>1f4d0</item> + <item>1f4cd</item> + <item>1f4cc</item> + <item>1f4ce</item> + <item>2702</item> + <item>1f4ba</item> + <item>1f4bb</item> + <item>1f4bd</item> + <item>1f4be</item> + <item>1f4bf</item> + <item>1f4c6</item> + <item>1f4c5</item> + <item>1f4c7</item> + <item>1f4cb</item> + <item>1f4c1</item> + <item>1f4c2</item> + <item>1f4c3</item> + <item>1f4c4</item> + <item>1f4ca</item> + <item>1f4c8</item> + <item>1f4c9</item> + <item>26fa</item> + <item>1f3a1</item> + <item>1f3a2</item> + <item>1f3a0</item> + <item>1f3aa</item> + <item>1f3a8</item> + <item>1f3ac</item> + <item>1f3a5</item> + <item>1f4f7</item> + <item>1f4f9</item> + <item>1f3a6</item> + <item>1f3ad</item> + <item>1f3ab</item> + <item>1f3ae</item> + <item>1f3b2</item> + <item>1f3b0</item> + <item>1f0cf</item> + <item>1f3b4</item> + <item>1f004</item> + <item>1f3af</item> + <item>1f4fa</item> + <item>1f4fb</item> + <item>1f4c0</item> + <item>1f4fc</item> + <item>1f3a7</item> + <item>1f3a4</item> + <item>1f3b5</item> + <item>1f3b6</item> + <item>1f3bc</item> + <item>1f3bb</item> + <item>1f3b9</item> + <item>1f3b7</item> + <item>1f3ba</item> + <item>1f3b8</item> + <item>303d</item> + </array> + <array + name="emoji_places" + format="string" + > + <item>1f3e0</item> + <item>1f3e1</item> + <item>1f3e2</item> + <item>1f3e3</item> + <item>1f3e4</item> + <item>1f3e5</item> + <item>1f3e6</item> + <item>1f3e7</item> + <item>1f3e8</item> + <item>1f3e9</item> + <item>1f3ea</item> + <item>1f3eb</item> + <item>26ea</item> + <item>26f2</item> + <item>1f3ec</item> + <item>1f3ef</item> + <item>1f3f0</item> + <item>1f3ed</item> + <item>1f5fb</item> + <item>1f5fc</item> + <item>1f5fd</item> + <item>1f5fe</item> + <item>1f5ff</item> + <item>2693</item> + <item>1f3ee</item> + <item>1f488</item> + <item>1f527</item> + <item>1f528</item> + <item>1f529</item> + <item>1f6bf</item> + <item>1f6c1</item> + <item>1f6c0</item> + <item>1f6bd</item> + <item>1f6be</item> + <item>1f3bd</item> + <item>1f3a3</item> + <item>1f3b1</item> + <item>1f3b3</item> + <item>26be</item> + <item>26f3</item> + <item>1f3be</item> + <item>26bd</item> + <item>1f3bf</item> + <item>1f3c0</item> + <item>1f3c1</item> + <item>1f3c2</item> + <item>1f3c3</item> + <item>1f3c4</item> + <item>1f3c6</item> + <item>1f3c7</item> + <item>1f40e</item> + <item>1f3c8</item> + <item>1f3c9</item> + <item>1f3ca</item> + <item>1f682</item> + <item>1f683</item> + <item>1f684</item> + <item>1f685</item> + <item>1f686</item> + <item>1f687</item> + <item>24c2</item> + <item>1f688</item> + <item>1f68a</item> + <item>1f68b</item> + <item>1f68c</item> + <item>1f68d</item> + <item>1f68e</item> + <item>1f68f</item> + <item>1f690</item> + <item>1f691</item> + <item>1f692</item> + <item>1f693</item> + <item>1f694</item> + <item>1f695</item> + <item>1f696</item> + <item>1f697</item> + <item>1f698</item> + <item>1f699</item> + <item>1f69a</item> + <item>1f69b</item> + <item>1f69c</item> + <item>1f69d</item> + <item>1f69e</item> + <item>1f69f</item> + <item>1f6a0</item> + <item>1f6a1</item> + <item>1f6a2</item> + <item>1f6a3</item> + <item>1f681</item> + <item>2708</item> + <item>1f6c2</item> + <item>1f6c3</item> + <item>1f6c4</item> + <item>1f6c5</item> + <item>26f5</item> + <item>1f6b2</item> + <item>1f6b3</item> + <item>1f6b4</item> + <item>1f6b5</item> + <item>1f6b7</item> + <item>1f6b8</item> + <item>1f689</item> + <item>1f680</item> + <item>1f6a4</item> + <item>1f6b6</item> + <item>26fd</item> + <item>1f17f</item> + <item>1f6a5</item> + <item>1f6a6</item> + <item>1f6a7</item> + <item>1f6a8</item> + <item>2668</item> + <item>1f48c</item> + <item>1f48d</item> + <item>1f48e</item> + <item>1f490</item> + <item>1f492</item> + <item>fe4e5|1f1ef,1f1f5</item> + <item>fe4e6|1f1fa,1f1f8</item> + <item>fe4e7|1f1eb,1f1f7</item> + <item>fe4e8|1f1e9,1f1ea</item> + <item>fe4e9|1f1ee,1f1f9</item> + <item>fe4ea|1f1ec,1f1e7</item> + <item>fe4eb|1f1ea,1f1f8</item> + <item>fe4ec|1f1f7,1f1fa</item> + <item>fe4ed|1f1e8,1f1f3</item> + <item>fe4ee|1f1f0,1f1f7</item> + </array> + <array + name="emoji_emoticons" + format="string" + > + <item>=-O</item> + <item>:-P</item> + <item>;-)</item> + <item>:-(</item> + <item>:-)</item> + <item>:-!</item> + <item>:-$</item> + <item>B-)</item> + <item>:O</item> + <item>:-*</item> + <item>:-D</item> + <item>:\'(</item> + <item>:-\\</item> + <item>O:-)</item> + <item>:-[</item> + </array> +</resources> diff --git a/java/res/values/attrs.xml b/java/res/values/attrs.xml index 3512686d0..4c5097654 100644 --- a/java/res/values/attrs.xml +++ b/java/res/values/attrs.xml @@ -373,6 +373,13 @@ <enum name="phone" value="7" /> <enum name="phoneSymbols" value="8" /> <enum name="number" value="9" /> + <enum name="emojiRecents" value="10" /> + <enum name="emojiCategory1" value="11" /> + <enum name="emojiCategory2" value="12" /> + <enum name="emojiCategory3" value="13" /> + <enum name="emojiCategory4" value="14" /> + <enum name="emojiCategory5" value="15" /> + <enum name="emojiCategory6" value="16" /> </attr> <!-- This should be aligned with KeyboardId.MODE_* --> <attr name="mode" format="enum|string"> @@ -427,6 +434,13 @@ <enum name="phone" value="7" /> <enum name="phoneSymbols" value="8" /> <enum name="number" value="9" /> + <enum name="emojiRecents" value="10" /> + <enum name="emojiCategory1" value="11" /> + <enum name="emojiCategory2" value="12" /> + <enum name="emojiCategory3" value="13" /> + <enum name="emojiCategory4" value="14" /> + <enum name="emojiCategory5" value="15" /> + <enum name="emojiCategory6" value="16" /> </attr> <attr name="elementKeyboard" format="reference"/> <!-- Enable proximity characters correction. Disabled by default. --> diff --git a/java/res/values/emoji-categories.xml b/java/res/values/emoji-categories.xml new file mode 100644 index 000000000..734a7a7b0 --- /dev/null +++ b/java/res/values/emoji-categories.xml @@ -0,0 +1,79 @@ +<?xml version="1.0" encoding="utf-8"?> +<!-- Copyright (C) 2013 The Android Open Source Project + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +--> + +<!-- Note: This emoji code point list is valid prior to JB-MR2 (API < 18). + There is another emoji code point list for JB-MR2 and KLP and later under + res/xml/values-v1[89].--> +<resources> + <!-- Dummy codeArrays for recents emoji keyboard. + Do not remove these keys, because they are used as a template. --> + <array + name="emoji_recents" + format="string" + > + <item>52</item> + <item>45</item> + <item>43</item> + <item>45</item> + <item>4E</item> + <item>54</item> + </array> + <array + name="emoji_nature" + format="string" + > + </array> + <array + name="emoji_symbols" + format="string" + > + </array> + <array + name="emoji_faces" + format="string" + > + </array> + <array + name="emoji_objects" + format="string" + > + </array> + <array + name="emoji_places" + format="string" + > + </array> + <array + name="emoji_emoticons" + format="string" + > + <item>=-O</item> + <item>:-P</item> + <item>;-)</item> + <item>:-(</item> + <item>:-)</item> + <item>:-!</item> + <item>:-$</item> + <item>B-)</item> + <item>:O</item> + <item>:-*</item> + <item>:-D</item> + <item>:\'(</item> + <item>:-\\</item> + <item>O:-)</item> + <item>:-[</item> + </array> +</resources> diff --git a/java/res/xml-sw600dp/key_styles_common.xml b/java/res/xml-sw600dp/key_styles_common.xml index f407ba346..fc9342b91 100644 --- a/java/res/xml-sw600dp/key_styles_common.xml +++ b/java/res/xml-sw600dp/key_styles_common.xml @@ -178,16 +178,6 @@ latin:keyLabel="!text/label_to_alpha_key" latin:parentStyle="baseForLayoutSwitchKeyStyle" /> <key-style - latin:styleName="toMoreSymbolKeyStyle" - latin:code="!code/key_shift" - latin:keyLabel="!text/label_to_more_symbol_for_tablet_key" - latin:parentStyle="baseForLayoutSwitchKeyStyle" /> - <key-style - latin:styleName="backFromMoreSymbolKeyStyle" - latin:code="!code/key_shift" - latin:keyLabel="!text/label_to_symbol_key" - latin:parentStyle="baseForLayoutSwitchKeyStyle" /> - <key-style latin:styleName="comKeyStyle" latin:keyLabel="!text/keylabel_for_popular_domain" latin:keyLabelFlags="autoXScale|fontNormal|hasPopupHint|preserveCase" diff --git a/java/res/xml-sw768dp/key_styles_common.xml b/java/res/xml-sw768dp/key_styles_common.xml index 7c0a82a71..538930948 100644 --- a/java/res/xml-sw768dp/key_styles_common.xml +++ b/java/res/xml-sw768dp/key_styles_common.xml @@ -168,16 +168,6 @@ latin:keyLabel="!text/label_to_alpha_key" latin:parentStyle="baseForLayoutSwitchKeyStyle" /> <key-style - latin:styleName="toMoreSymbolKeyStyle" - latin:code="!code/key_shift" - latin:keyLabel="!text/label_to_more_symbol_for_tablet_key" - latin:parentStyle="baseForLayoutSwitchKeyStyle" /> - <key-style - latin:styleName="backFromMoreSymbolKeyStyle" - latin:code="!code/key_shift" - latin:keyLabel="!text/label_to_symbol_key" - latin:parentStyle="baseForLayoutSwitchKeyStyle" /> - <key-style latin:styleName="comKeyStyle" latin:keyLabel="!text/keylabel_for_popular_domain" latin:keyLabelFlags="fontNormal|hasPopupHint|preserveCase" diff --git a/java/res/xml/key_styles_common.xml b/java/res/xml/key_styles_common.xml index 355455e3b..dabe1e7eb 100644 --- a/java/res/xml/key_styles_common.xml +++ b/java/res/xml/key_styles_common.xml @@ -179,15 +179,6 @@ latin:keyLabel="!text/label_to_alpha_key" latin:parentStyle="baseForLayoutSwitchKeyStyle" /> <key-style - latin:styleName="toMoreSymbolKeyStyle" - latin:code="!code/key_shift" - latin:keyLabel="!text/label_to_more_symbol_key" - latin:parentStyle="baseForLayoutSwitchKeyStyle" /> - <key-style - latin:styleName="backFromMoreSymbolKeyStyle" - latin:code="!code/key_shift" - latin:parentStyle="baseForToSymbolKeyStyle" /> - <key-style latin:styleName="punctuationKeyStyle" latin:keyLabel="." latin:keyLabelFlags="hasPopupHint" diff --git a/java/src/com/android/inputmethod/accessibility/AccessibilityEntityProvider.java b/java/src/com/android/inputmethod/accessibility/AccessibilityEntityProvider.java index 8ce126330..7639432aa 100644 --- a/java/src/com/android/inputmethod/accessibility/AccessibilityEntityProvider.java +++ b/java/src/com/android/inputmethod/accessibility/AccessibilityEntityProvider.java @@ -157,7 +157,7 @@ public final class AccessibilityEntityProvider extends AccessibilityNodeProvider // Add the virtual children of the root View. final Keyboard keyboard = mKeyboardView.getKeyboard(); - final Key[] keys = keyboard.mKeys; + final Key[] keys = keyboard.getKeys(); for (Key key : keys) { final int childVirtualViewId = generateVirtualViewIdForKey(key); rootInfo.addChild(mKeyboardView, childVirtualViewId); @@ -300,7 +300,7 @@ public final class AccessibilityEntityProvider extends AccessibilityNodeProvider } mVirtualViewIdToKey.clear(); - final Key[] keys = keyboard.mKeys; + final Key[] keys = keyboard.getKeys(); for (Key key : keys) { final int virtualViewId = generateVirtualViewIdForKey(key); mVirtualViewIdToKey.put(virtualViewId, key); diff --git a/java/src/com/android/inputmethod/keyboard/Keyboard.java b/java/src/com/android/inputmethod/keyboard/Keyboard.java index c40ddeabe..0b3737e48 100644 --- a/java/src/com/android/inputmethod/keyboard/Keyboard.java +++ b/java/src/com/android/inputmethod/keyboard/Keyboard.java @@ -69,7 +69,7 @@ public class Keyboard { public final int mMaxMoreKeysKeyboardColumn; /** Array of keys and icons in this keyboard */ - public final Key[] mKeys; + private final Key[] mKeys; public final Key[] mShiftKeys; public final Key[] mAltCodeKeysWhileTyping; public final KeyboardIconsSet mIconsSet; @@ -104,6 +104,28 @@ public class Keyboard { mProximityCharsCorrectionEnabled = params.mProximityCharsCorrectionEnabled; } + protected Keyboard(final Keyboard keyboard) { + mId = keyboard.mId; + mThemeId = keyboard.mThemeId; + mOccupiedHeight = keyboard.mOccupiedHeight; + mOccupiedWidth = keyboard.mOccupiedWidth; + mMostCommonKeyHeight = keyboard.mMostCommonKeyHeight; + mMostCommonKeyWidth = keyboard.mMostCommonKeyWidth; + mMoreKeysTemplate = keyboard.mMoreKeysTemplate; + mMaxMoreKeysKeyboardColumn = keyboard.mMaxMoreKeysKeyboardColumn; + mKeyVisualAttributes = keyboard.mKeyVisualAttributes; + mTopPadding = keyboard.mTopPadding; + mVerticalGap = keyboard.mVerticalGap; + + mKeys = keyboard.mKeys; + mShiftKeys = keyboard.mShiftKeys; + mAltCodeKeysWhileTyping = keyboard.mAltCodeKeysWhileTyping; + mIconsSet = keyboard.mIconsSet; + + mProximityInfo = keyboard.mProximityInfo; + mProximityCharsCorrectionEnabled = keyboard.mProximityCharsCorrectionEnabled; + } + public boolean hasProximityCharsCorrection(final int code) { if (!mProximityCharsCorrectionEnabled) { return false; @@ -120,6 +142,10 @@ public class Keyboard { return mProximityInfo; } + public Key[] getKeys() { + return mKeys; + } + public Key getKey(final int code) { if (code == Constants.CODE_UNSPECIFIED) { return null; @@ -130,7 +156,7 @@ public class Keyboard { return mKeyCache.valueAt(index); } - for (final Key key : mKeys) { + for (final Key key : getKeys()) { if (key.getCode() == code) { mKeyCache.put(code, key); return key; @@ -146,7 +172,7 @@ public class Keyboard { return true; } - for (final Key key : mKeys) { + for (final Key key : getKeys()) { if (key == aKey) { mKeyCache.put(key.getCode(), key); return true; diff --git a/java/src/com/android/inputmethod/keyboard/KeyboardId.java b/java/src/com/android/inputmethod/keyboard/KeyboardId.java index 08ce064e0..53748bb58 100644 --- a/java/src/com/android/inputmethod/keyboard/KeyboardId.java +++ b/java/src/com/android/inputmethod/keyboard/KeyboardId.java @@ -53,6 +53,13 @@ public final class KeyboardId { public static final int ELEMENT_PHONE = 7; public static final int ELEMENT_PHONE_SYMBOLS = 8; public static final int ELEMENT_NUMBER = 9; + public static final int ELEMENT_EMOJI_RECENTS = 10; + public static final int ELEMENT_EMOJI_CATEGORY1 = 11; + public static final int ELEMENT_EMOJI_CATEGORY2 = 12; + public static final int ELEMENT_EMOJI_CATEGORY3 = 13; + public static final int ELEMENT_EMOJI_CATEGORY4 = 14; + public static final int ELEMENT_EMOJI_CATEGORY5 = 15; + public static final int ELEMENT_EMOJI_CATEGORY6 = 16; public final InputMethodSubtype mSubtype; public final Locale mLocale; @@ -215,6 +222,13 @@ public final class KeyboardId { case ELEMENT_PHONE: return "phone"; case ELEMENT_PHONE_SYMBOLS: return "phoneSymbols"; case ELEMENT_NUMBER: return "number"; + case ELEMENT_EMOJI_RECENTS: return "emojiRecents"; + case ELEMENT_EMOJI_CATEGORY1: return "emojiCategory1"; + case ELEMENT_EMOJI_CATEGORY2: return "emojiCategory2"; + case ELEMENT_EMOJI_CATEGORY3: return "emojiCategory3"; + case ELEMENT_EMOJI_CATEGORY4: return "emojiCategory4"; + case ELEMENT_EMOJI_CATEGORY5: return "emojiCategory5"; + case ELEMENT_EMOJI_CATEGORY6: return "emojiCategory6"; default: return null; } } diff --git a/java/src/com/android/inputmethod/keyboard/KeyboardView.java b/java/src/com/android/inputmethod/keyboard/KeyboardView.java index d049a861e..0ef6802ca 100644 --- a/java/src/com/android/inputmethod/keyboard/KeyboardView.java +++ b/java/src/com/android/inputmethod/keyboard/KeyboardView.java @@ -285,7 +285,7 @@ public class KeyboardView extends View { // TODO: Confirm if it's really required to draw all keys when hardware acceleration is on. if (drawAllKeys || isHardwareAccelerated) { // Draw all keys. - for (final Key key : mKeyboard.mKeys) { + for (final Key key : mKeyboard.getKeys()) { onDrawKey(key, canvas, paint); } } else { diff --git a/java/src/com/android/inputmethod/keyboard/MoreKeysDetector.java b/java/src/com/android/inputmethod/keyboard/MoreKeysDetector.java index a2001cb8f..6b76e2461 100644 --- a/java/src/com/android/inputmethod/keyboard/MoreKeysDetector.java +++ b/java/src/com/android/inputmethod/keyboard/MoreKeysDetector.java @@ -39,7 +39,7 @@ public final class MoreKeysDetector extends KeyDetector { Key nearestKey = null; int nearestDist = (y < 0) ? mSlideAllowanceSquareTop : mSlideAllowanceSquare; - for (final Key key : getKeyboard().mKeys) { + for (final Key key : getKeyboard().getKeys()) { final int dist = key.squaredDistanceToEdge(touchX, touchY); if (dist < nearestDist) { nearestKey = key; diff --git a/java/src/com/android/inputmethod/keyboard/internal/KeyboardTextsSet.java b/java/src/com/android/inputmethod/keyboard/internal/KeyboardTextsSet.java index fce245824..507080db4 100644 --- a/java/src/com/android/inputmethod/keyboard/internal/KeyboardTextsSet.java +++ b/java/src/com/android/inputmethod/keyboard/internal/KeyboardTextsSet.java @@ -226,32 +226,30 @@ public final class KeyboardTextsSet { /* 121 */ "shortcut_as_more_key", /* 122 */ "action_next_as_more_key", /* 123 */ "action_previous_as_more_key", - /* 124 */ "label_to_more_symbol_key", - /* 125 */ "label_to_more_symbol_for_tablet_key", - /* 126 */ "label_tab_key", - /* 127 */ "label_to_phone_numeric_key", - /* 128 */ "label_to_phone_symbols_key", - /* 129 */ "label_time_am", - /* 130 */ "label_time_pm", - /* 131 */ "label_to_symbol_key_pcqwerty", - /* 132 */ "keylabel_for_popular_domain", - /* 133 */ "more_keys_for_popular_domain", - /* 134 */ "more_keys_for_smiley", - /* 135 */ "single_laqm_raqm", - /* 136 */ "single_laqm_raqm_rtl", - /* 137 */ "single_raqm_laqm", - /* 138 */ "double_laqm_raqm", - /* 139 */ "double_laqm_raqm_rtl", - /* 140 */ "double_raqm_laqm", - /* 141 */ "single_lqm_rqm", - /* 142 */ "single_9qm_lqm", - /* 143 */ "single_9qm_rqm", - /* 144 */ "double_lqm_rqm", - /* 145 */ "double_9qm_lqm", - /* 146 */ "double_9qm_rqm", - /* 147 */ "more_keys_for_single_quote", - /* 148 */ "more_keys_for_double_quote", - /* 149 */ "more_keys_for_tablet_double_quote", + /* 124 */ "label_tab_key", + /* 125 */ "label_to_phone_numeric_key", + /* 126 */ "label_to_phone_symbols_key", + /* 127 */ "label_time_am", + /* 128 */ "label_time_pm", + /* 129 */ "label_to_symbol_key_pcqwerty", + /* 130 */ "keylabel_for_popular_domain", + /* 131 */ "more_keys_for_popular_domain", + /* 132 */ "more_keys_for_smiley", + /* 133 */ "single_laqm_raqm", + /* 134 */ "single_laqm_raqm_rtl", + /* 135 */ "single_raqm_laqm", + /* 136 */ "double_laqm_raqm", + /* 137 */ "double_laqm_raqm_rtl", + /* 138 */ "double_raqm_laqm", + /* 139 */ "single_lqm_rqm", + /* 140 */ "single_9qm_lqm", + /* 141 */ "single_9qm_rqm", + /* 142 */ "double_lqm_rqm", + /* 143 */ "double_9qm_lqm", + /* 144 */ "double_9qm_rqm", + /* 145 */ "more_keys_for_single_quote", + /* 146 */ "more_keys_for_double_quote", + /* 147 */ "more_keys_for_tablet_double_quote", }; private static final String EMPTY = ""; @@ -379,28 +377,24 @@ public final class KeyboardTextsSet { /* 121 */ "!icon/shortcut_key|!code/key_shortcut", /* 122 */ "!hasLabels!,!text/label_next_key|!code/key_action_next", /* 123 */ "!hasLabels!,!text/label_previous_key|!code/key_action_previous", - // Label for "switch to more symbol" modifier key. Must be short to fit on key! - /* 124 */ "= \\ <", - // Label for "switch to more symbol" modifier key on tablets. Must be short to fit on key! - /* 125 */ "~ \\ {", // Label for "Tab" key. Must be short to fit on key! - /* 126 */ "Tab", + /* 124 */ "Tab", // Label for "switch to phone numeric" key. Must be short to fit on key! - /* 127 */ "123", + /* 125 */ "123", // Label for "switch to phone symbols" key. Must be short to fit on key! // U+FF0A: "*" FULLWIDTH ASTERISK // U+FF03: "#" FULLWIDTH NUMBER SIGN - /* 128 */ "\uFF0A\uFF03", + /* 126 */ "\uFF0A\uFF03", // Key label for "ante meridiem" - /* 129 */ "AM", + /* 127 */ "AM", // Key label for "post meridiem" - /* 130 */ "PM", + /* 128 */ "PM", // Label for "switch to symbols" key on PC QWERTY layout - /* 131 */ "Sym", - /* 132 */ ".com", + /* 129 */ "Sym", + /* 130 */ ".com", // popular web domains for the locale - most popular, displayed on the keyboard - /* 133 */ "!hasLabels!,.net,.org,.gov,.edu", - /* 134 */ "!fixedColumnOrder!5,!hasLabels!,=-O|=-O ,:-P|:-P ,;-)|;-) ,:-(|:-( ,:-)|:-) ,:-!|:-! ,:-$|:-$ ,B-)|B-) ,:O|:O ,:-*|:-* ,:-D|:-D ,:\'(|:\'( ,:-\\\\|:-\\\\ ,O:-)|O:-) ,:-[|:-[ ", + /* 131 */ "!hasLabels!,.net,.org,.gov,.edu", + /* 132 */ "!fixedColumnOrder!5,!hasLabels!,=-O|=-O ,:-P|:-P ,;-)|;-) ,:-(|:-( ,:-)|:-) ,:-!|:-! ,:-$|:-$ ,B-)|B-) ,:O|:O ,:-*|:-* ,:-D|:-D ,:\'(|:\'( ,:-\\\\|:-\\\\ ,O:-)|O:-) ,:-[|:-[ ", // U+2039: "‹" SINGLE LEFT-POINTING ANGLE QUOTATION MARK // U+203A: "›" SINGLE RIGHT-POINTING ANGLE QUOTATION MARK // U+00AB: "«" LEFT-POINTING DOUBLE ANGLE QUOTATION MARK @@ -422,24 +416,24 @@ public final class KeyboardTextsSet { // The following each quotation mark pair consist of // <opening quotation mark>, <closing quotation mark> // and is named after (single|double)_<opening quotation mark>_<closing quotation mark>. - /* 135 */ "\u2039,\u203A", - /* 136 */ "\u2039|\u203A,\u203A|\u2039", - /* 137 */ "\u203A,\u2039", - /* 138 */ "\u00AB,\u00BB", - /* 139 */ "\u00AB|\u00BB,\u00BB|\u00AB", - /* 140 */ "\u00BB,\u00AB", + /* 133 */ "\u2039,\u203A", + /* 134 */ "\u2039|\u203A,\u203A|\u2039", + /* 135 */ "\u203A,\u2039", + /* 136 */ "\u00AB,\u00BB", + /* 137 */ "\u00AB|\u00BB,\u00BB|\u00AB", + /* 138 */ "\u00BB,\u00AB", // The following each quotation mark triplet consists of // <another quotation mark>, <opening quotation mark>, <closing quotation mark> // and is named after (single|double)_<opening quotation mark>_<closing quotation mark>. - /* 141 */ "\u201A,\u2018,\u2019", - /* 142 */ "\u2019,\u201A,\u2018", - /* 143 */ "\u2018,\u201A,\u2019", - /* 144 */ "\u201E,\u201C,\u201D", - /* 145 */ "\u201D,\u201E,\u201C", - /* 146 */ "\u201C,\u201E,\u201D", - /* 147 */ "!fixedColumnOrder!5,!text/single_quotes,!text/single_angle_quotes", - /* 148 */ "!fixedColumnOrder!5,!text/double_quotes,!text/double_angle_quotes", - /* 149 */ "!fixedColumnOrder!6,!text/double_quotes,!text/single_quotes,!text/double_angle_quotes,!text/single_angle_quotes", + /* 139 */ "\u201A,\u2018,\u2019", + /* 140 */ "\u2019,\u201A,\u2018", + /* 141 */ "\u2018,\u201A,\u2019", + /* 142 */ "\u201E,\u201C,\u201D", + /* 143 */ "\u201D,\u201E,\u201C", + /* 144 */ "\u201C,\u201E,\u201D", + /* 145 */ "!fixedColumnOrder!5,!text/single_quotes,!text/single_angle_quotes", + /* 146 */ "!fixedColumnOrder!5,!text/double_quotes,!text/double_angle_quotes", + /* 147 */ "!fixedColumnOrder!6,!text/double_quotes,!text/single_quotes,!text/double_angle_quotes,!text/single_angle_quotes", }; /* Language af: Afrikaans */ diff --git a/java/src/com/android/inputmethod/latin/ExpandableBinaryDictionary.java b/java/src/com/android/inputmethod/latin/ExpandableBinaryDictionary.java index 37256770a..7124c4c97 100644 --- a/java/src/com/android/inputmethod/latin/ExpandableBinaryDictionary.java +++ b/java/src/com/android/inputmethod/latin/ExpandableBinaryDictionary.java @@ -23,6 +23,7 @@ import android.util.Log; import com.android.inputmethod.annotations.UsedForTesting; import com.android.inputmethod.keyboard.ProximityInfo; import com.android.inputmethod.latin.SuggestedWords.SuggestedWordInfo; +import com.android.inputmethod.latin.personalization.DynamicPersonalizationDictionaryWriter; import com.android.inputmethod.latin.utils.CollectionUtils; import java.io.File; @@ -118,10 +119,9 @@ abstract public class ExpandableBinaryDictionary extends Dictionary { } private static AbstractDictionaryWriter getDictionaryWriter(final Context context, - final String dictType, final boolean isUpdatable) { - if (isUpdatable) { - // TODO: Employ dynamically updatable DictionaryWriter. - return new DictionaryWriter(context, dictType); + final String dictType, final boolean isDynamicPersonalizationDictionary) { + if (isDynamicPersonalizationDictionary) { + return new DynamicPersonalizationDictionaryWriter(context, dictType); } else { return new DictionaryWriter(context, dictType); } @@ -145,6 +145,7 @@ abstract public class ExpandableBinaryDictionary extends Dictionary { mIsUpdatable = isUpdatable; mBinaryDictionary = null; mSharedDictionaryController = getSharedDictionaryController(filename); + // Currently, only dynamic personalization dictionary is updatable. mDictionaryWriter = getDictionaryWriter(context, dictType, isUpdatable); } diff --git a/java/src/com/android/inputmethod/latin/ExpandableDictionary.java b/java/src/com/android/inputmethod/latin/ExpandableDictionary.java index fc87cfac2..491964f38 100644 --- a/java/src/com/android/inputmethod/latin/ExpandableDictionary.java +++ b/java/src/com/android/inputmethod/latin/ExpandableDictionary.java @@ -327,7 +327,7 @@ public class ExpandableDictionary extends Dictionary { return (node == null) ? false : !node.mShortcutOnly; } - protected boolean removeBigram(final String word1, final String word2) { + public boolean removeBigram(final String word1, final String word2) { // Refer to addOrSetBigram() about word1.toLowerCase() final Node firstWord = searchWord(mRoots, word1.toLowerCase(), 0, null); final Node secondWord = searchWord(mRoots, word2, 0, null); @@ -359,7 +359,7 @@ public class ExpandableDictionary extends Dictionary { return (node == null) ? -1 : node.mFrequency; } - protected NextWord getBigramWord(final String word1, final String word2) { + public NextWord getBigramWord(final String word1, final String word2) { // Refer to addOrSetBigram() about word1.toLowerCase() final Node firstWord = searchWord(mRoots, word1.toLowerCase(), 0, null); final Node secondWord = searchWord(mRoots, word2, 0, null); @@ -700,7 +700,7 @@ public class ExpandableDictionary extends Dictionary { return null; } - protected void clearDictionary() { + public void clearDictionary() { mRoots = new NodeArray(); } diff --git a/java/src/com/android/inputmethod/latin/personalization/DynamicPersonalizationDictionaryWriter.java b/java/src/com/android/inputmethod/latin/personalization/DynamicPersonalizationDictionaryWriter.java new file mode 100644 index 000000000..a1d93efc4 --- /dev/null +++ b/java/src/com/android/inputmethod/latin/personalization/DynamicPersonalizationDictionaryWriter.java @@ -0,0 +1,159 @@ +/* + * Copyright (C) 2013 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.android.inputmethod.latin.personalization; + +import android.content.Context; + +import com.android.inputmethod.keyboard.ProximityInfo; +import com.android.inputmethod.latin.AbstractDictionaryWriter; +import com.android.inputmethod.latin.ExpandableDictionary; +import com.android.inputmethod.latin.WordComposer; +import com.android.inputmethod.latin.ExpandableDictionary.NextWord; +import com.android.inputmethod.latin.SuggestedWords.SuggestedWordInfo; +import com.android.inputmethod.latin.makedict.DictEncoder; +import com.android.inputmethod.latin.makedict.FormatSpec; +import com.android.inputmethod.latin.makedict.UnsupportedFormatException; +import com.android.inputmethod.latin.utils.UserHistoryDictIOUtils; +import com.android.inputmethod.latin.utils.UserHistoryDictIOUtils.BigramDictionaryInterface; +import com.android.inputmethod.latin.utils.UserHistoryForgettingCurveUtils; +import com.android.inputmethod.latin.utils.UserHistoryForgettingCurveUtils.ForgettingCurveParams; + +import java.io.IOException; +import java.util.ArrayList; + +// Currently this class is used to implement dynamic prodiction dictionary. +// TODO: Move to native code. +public class DynamicPersonalizationDictionaryWriter extends AbstractDictionaryWriter { + private static final String TAG = DynamicPersonalizationDictionaryWriter.class.getSimpleName(); + /** Maximum number of pairs. Pruning will start when databases goes above this number. */ + public static final int MAX_HISTORY_BIGRAMS = 10000; + + /** Any pair being typed or picked */ + private static final int FREQUENCY_FOR_TYPED = 2; + + private static final int BINARY_DICT_VERSION = 3; + private static final FormatSpec.FormatOptions FORMAT_OPTIONS = + new FormatSpec.FormatOptions(BINARY_DICT_VERSION, true /* supportsDynamicUpdate */); + + private final UserHistoryDictionaryBigramList mBigramList = + new UserHistoryDictionaryBigramList(); + private final ExpandableDictionary mExpandableDictionary; + + public DynamicPersonalizationDictionaryWriter(final Context context, final String dictType) { + super(context, dictType); + mExpandableDictionary = new ExpandableDictionary(context, dictType); + } + + @Override + public void clear() { + mBigramList.evictAll(); + mExpandableDictionary.clearDictionary(); + } + + /** + * Adds a word unigram to the fusion dictionary. Call updateBinaryDictionary when all changes + * are done to update the binary dictionary. + */ + @Override + public void addUnigramWord(final String word, final String shortcutTarget, final int frequency, + final boolean isNotAWord) { + mExpandableDictionary.addWord(word, shortcutTarget, frequency); + mBigramList.addBigram(null, word, (byte)frequency); + } + + @Override + public void addBigramWords(final String word0, final String word1, final int frequency, + final boolean isValid, final long lastModifiedTime) { + if (lastModifiedTime > 0) { + mExpandableDictionary.setBigramAndGetFrequency(word0, word1, + new ForgettingCurveParams(frequency, System.currentTimeMillis(), + lastModifiedTime)); + mBigramList.addBigram(word0, word1, (byte)frequency); + } else { + mExpandableDictionary.setBigramAndGetFrequency(word0, word1, + new ForgettingCurveParams(isValid)); + mBigramList.addBigram(word0, word1, (byte)frequency); + } + } + + @Override + public void removeBigramWords(final String word0, final String word1) { + if (mBigramList.removeBigram(word0, word1)) { + mExpandableDictionary.removeBigram(word0, word1); + } + } + + @Override + protected void writeDictionary(final DictEncoder dictEncoder) + throws IOException, UnsupportedFormatException { + UserHistoryDictIOUtils.writeDictionary(dictEncoder, + new FrequencyProvider(mBigramList, mExpandableDictionary), mBigramList, + FORMAT_OPTIONS); + } + + private static class FrequencyProvider implements BigramDictionaryInterface { + final private UserHistoryDictionaryBigramList mBigramList; + final private ExpandableDictionary mExpandableDictionary; + + public FrequencyProvider(final UserHistoryDictionaryBigramList bigramList, + final ExpandableDictionary expandableDictionary) { + mBigramList = bigramList; + mExpandableDictionary = expandableDictionary; + } + @Override + public int getFrequency(final String word0, final String word1) { + final int freq; + if (word0 == null) { // unigram + freq = FREQUENCY_FOR_TYPED; + } else { // bigram + final NextWord nw = mExpandableDictionary.getBigramWord(word0, word1); + if (nw != null) { + final ForgettingCurveParams forgettingCurveParams = nw.getFcParams(); + final byte prevFc = mBigramList.getBigrams(word0).get(word1); + final byte fc = forgettingCurveParams.getFc(); + final boolean isValid = forgettingCurveParams.isValid(); + if (prevFc > 0 && prevFc == fc) { + freq = fc & 0xFF; + } else if (UserHistoryForgettingCurveUtils. + needsToSave(fc, isValid, mBigramList.size() <= MAX_HISTORY_BIGRAMS)) { + freq = fc & 0xFF; + } else { + // Delete this entry + freq = -1; + } + } else { + // Delete this entry + freq = -1; + } + } + return freq; + } + } + + @Override + public ArrayList<SuggestedWordInfo> getSuggestions(final WordComposer composer, + final String prevWord, final ProximityInfo proximityInfo, + boolean blockOffensiveWords) { + return mExpandableDictionary.getSuggestions(composer, prevWord, proximityInfo, + blockOffensiveWords); + } + + @Override + public boolean isValidWord(final String word) { + return mExpandableDictionary.isValidWord(word); + } +} diff --git a/java/src/com/android/inputmethod/research/ResearchLogger.java b/java/src/com/android/inputmethod/research/ResearchLogger.java index 3a3408266..da9c61103 100644 --- a/java/src/com/android/inputmethod/research/ResearchLogger.java +++ b/java/src/com/android/inputmethod/research/ResearchLogger.java @@ -1427,7 +1427,7 @@ public class ResearchLogger implements SharedPreferences.OnSharedPreferenceChang kid.navigateNext(), kid.navigatePrevious(), kid.mClobberSettingsKey, isPasswordView, kid.mShortcutKeyEnabled, kid.mHasShortcutKey, kid.mLanguageSwitchKeyEnabled, kid.isMultiLine(), keyboard.mOccupiedWidth, - keyboard.mOccupiedHeight, keyboard.mKeys); + keyboard.mOccupiedHeight, keyboard.getKeys()); } /** |