Home | History | Annotate | Download | only in dialpad
      1 package com.android.dialer.dialpad;
      2 
      3 public class LatinSmartDialMap implements SmartDialMap {
      4 
      5     private static final char[] LATIN_LETTERS_TO_DIGITS = {
      6         '2', '2', '2', // A,B,C -> 2
      7         '3', '3', '3', // D,E,F -> 3
      8         '4', '4', '4', // G,H,I -> 4
      9         '5', '5', '5', // J,K,L -> 5
     10         '6', '6', '6', // M,N,O -> 6
     11         '7', '7', '7', '7', // P,Q,R,S -> 7
     12         '8', '8', '8', // T,U,V -> 8
     13         '9', '9', '9', '9' // W,X,Y,Z -> 9
     14     };
     15 
     16     @Override
     17     public boolean isValidDialpadAlphabeticChar(char ch) {
     18         return (ch >= 'a' && ch <= 'z');
     19     }
     20 
     21     @Override
     22     public boolean isValidDialpadNumericChar(char ch) {
     23         return (ch >= '0' && ch <= '9');
     24     }
     25 
     26     @Override
     27     public boolean isValidDialpadCharacter(char ch) {
     28         return (isValidDialpadAlphabeticChar(ch) || isValidDialpadNumericChar(ch));
     29     }
     30 
     31     /*
     32      * The switch statement in this function was generated using the python code:
     33      * from unidecode import unidecode
     34      * for i in range(192, 564):
     35      *     char = unichr(i)
     36      *     decoded = unidecode(char)
     37      *     # Unicode characters that decompose into multiple characters i.e.
     38      *     #  into ss are not supported for now
     39      *     if (len(decoded) == 1 and decoded.isalpha()):
     40      *         print "case '" + char + "': return '" + unidecode(char) +  "';"
     41      *
     42      * This gives us a way to map characters containing accents/diacritics to their
     43      * alphabetic equivalents. The unidecode library can be found at:
     44      * http://pypi.python.org/pypi/Unidecode/0.04.1
     45      *
     46      * Also remaps all upper case latin characters to their lower case equivalents.
     47      */
     48     @Override
     49     public char normalizeCharacter(char ch) {
     50         switch (ch) {
     51             case '': return 'a';
     52             case '': return 'a';
     53             case '': return 'a';
     54             case '': return 'a';
     55             case '': return 'a';
     56             case '': return 'a';
     57             case '': return 'c';
     58             case '': return 'e';
     59             case '': return 'e';
     60             case '': return 'e';
     61             case '': return 'e';
     62             case '': return 'i';
     63             case '': return 'i';
     64             case '': return 'i';
     65             case '': return 'i';
     66             case '': return 'd';
     67             case '': return 'n';
     68             case '': return 'o';
     69             case '': return 'o';
     70             case '': return 'o';
     71             case '': return 'o';
     72             case '': return 'o';
     73             case '': return 'x';
     74             case '': return 'o';
     75             case '': return 'u';
     76             case '': return 'u';
     77             case '': return 'u';
     78             case '': return 'u';
     79             case '': return 'u';
     80             case '': return 'a';
     81             case '': return 'a';
     82             case '': return 'a';
     83             case '': return 'a';
     84             case '': return 'a';
     85             case '': return 'a';
     86             case '': return 'c';
     87             case '': return 'e';
     88             case '': return 'e';
     89             case '': return 'e';
     90             case '': return 'e';
     91             case '': return 'i';
     92             case '': return 'i';
     93             case '': return 'i';
     94             case '': return 'i';
     95             case '': return 'd';
     96             case '': return 'n';
     97             case '': return 'o';
     98             case '': return 'o';
     99             case '': return 'o';
    100             case '': return 'o';
    101             case '': return 'o';
    102             case '': return 'o';
    103             case '': return 'u';
    104             case '': return 'u';
    105             case '': return 'u';
    106             case '': return 'u';
    107             case '': return 'y';
    108             case '': return 'y';
    109             case '': return 'a';
    110             case '': return 'a';
    111             case '': return 'a';
    112             case '': return 'a';
    113             case '': return 'a';
    114             case '': return 'a';
    115             case '': return 'c';
    116             case '': return 'c';
    117             case '': return 'c';
    118             case '': return 'c';
    119             case '': return 'c';
    120             case '': return 'c';
    121             case '': return 'c';
    122             case '': return 'c';
    123             case '': return 'd';
    124             case '': return 'd';
    125             case '': return 'd';
    126             case '': return 'd';
    127             case '': return 'e';
    128             case '': return 'e';
    129             case '': return 'e';
    130             case '': return 'e';
    131             case '': return 'e';
    132             case '': return 'e';
    133             case '': return 'e';
    134             case '': return 'e';
    135             case '': return 'e';
    136             case '': return 'e';
    137             case '': return 'g';
    138             case '': return 'g';
    139             case '': return 'g';
    140             case '': return 'g';
    141             case '': return 'g';
    142             case '': return 'g';
    143             case '': return 'g';
    144             case '': return 'g';
    145             case '': return 'h';
    146             case '': return 'h';
    147             case '': return 'h';
    148             case '': return 'h';
    149             case '': return 'i';
    150             case '': return 'i';
    151             case '': return 'i';
    152             case '': return 'i';
    153             case '': return 'i';
    154             case '': return 'i';
    155             case '': return 'i';
    156             case '': return 'i';
    157             case '': return 'i';
    158             case '': return 'i';
    159             case '': return 'j';
    160             case '': return 'j';
    161             case '': return 'k';
    162             case '': return 'k';
    163             case '': return 'k';
    164             case '': return 'l';
    165             case '': return 'l';
    166             case '': return 'l';
    167             case '': return 'l';
    168             case '': return 'l';
    169             case '': return 'l';
    170             case '': return 'l';
    171             case '': return 'l';
    172             case '': return 'l';
    173             case '': return 'l';
    174             case '': return 'n';
    175             case '': return 'n';
    176             case '': return 'n';
    177             case '': return 'n';
    178             case '': return 'n';
    179             case '': return 'n';
    180             case '': return 'o';
    181             case '': return 'o';
    182             case '': return 'o';
    183             case '': return 'o';
    184             case '': return 'o';
    185             case '': return 'o';
    186             case '': return 'r';
    187             case '': return 'r';
    188             case '': return 'r';
    189             case '': return 'r';
    190             case '': return 'r';
    191             case '': return 'r';
    192             case '': return 's';
    193             case '': return 's';
    194             case '': return 's';
    195             case '': return 's';
    196             case '': return 's';
    197             case '': return 's';
    198             case '': return 's';
    199             case '': return 's';
    200             case '': return 't';
    201             case '': return 't';
    202             case '': return 't';
    203             case '': return 't';
    204             case '': return 't';
    205             case '': return 't';
    206             case '': return 'u';
    207             case '': return 'u';
    208             case '': return 'u';
    209             case '': return 'u';
    210             case '': return 'u';
    211             case '': return 'u';
    212             case '': return 'u';
    213             case '': return 'u';
    214             case '': return 'u';
    215             case '': return 'u';
    216             case '': return 'u';
    217             case '': return 'u';
    218             case '': return 'w';
    219             case '': return 'w';
    220             case '': return 'y';
    221             case '': return 'y';
    222             case '': return 'y';
    223             case '': return 'z';
    224             case '': return 'z';
    225             case '': return 'z';
    226             case '': return 'z';
    227             case '': return 'z';
    228             case '': return 'z';
    229             case '': return 's';
    230             case '': return 'b';
    231             case '': return 'b';
    232             case '': return 'b';
    233             case '': return 'b';
    234             case '': return 'o';
    235             case '': return 'c';
    236             case '': return 'c';
    237             case '': return 'd';
    238             case '': return 'd';
    239             case '': return 'd';
    240             case '': return 'd';
    241             case '': return 'd';
    242             case '': return 'e';
    243             case '': return 'f';
    244             case '': return 'f';
    245             case '': return 'g';
    246             case '': return 'g';
    247             case '': return 'i';
    248             case '': return 'i';
    249             case '': return 'k';
    250             case '': return 'k';
    251             case '': return 'l';
    252             case '': return 'l';
    253             case '': return 'w';
    254             case '': return 'n';
    255             case '': return 'n';
    256             case '': return 'o';
    257             case '': return 'o';
    258             case '': return 'o';
    259             case '': return 'p';
    260             case '': return 'p';
    261             case '': return 't';
    262             case '': return 't';
    263             case '': return 't';
    264             case '': return 't';
    265             case '': return 'u';
    266             case '': return 'u';
    267             case '': return 'y';
    268             case '': return 'v';
    269             case '': return 'y';
    270             case '': return 'y';
    271             case '': return 'z';
    272             case '': return 'z';
    273             case '': return 'w';
    274             case '': return 'a';
    275             case '': return 'a';
    276             case '': return 'i';
    277             case '': return 'i';
    278             case '': return 'o';
    279             case '': return 'o';
    280             case '': return 'u';
    281             case '': return 'u';
    282             case '': return 'u';
    283             case '': return 'u';
    284             case '': return 'u';
    285             case '': return 'u';
    286             case '': return 'u';
    287             case '': return 'u';
    288             case '': return 'u';
    289             case '': return 'u';
    290             case '': return 'a';
    291             case '': return 'a';
    292             case '': return 'a';
    293             case '': return 'a';
    294             case '': return 'g';
    295             case '': return 'g';
    296             case '': return 'g';
    297             case '': return 'g';
    298             case '': return 'k';
    299             case '': return 'k';
    300             case '': return 'o';
    301             case '': return 'o';
    302             case '': return 'o';
    303             case '': return 'o';
    304             case '': return 'j';
    305             case '': return 'd';
    306             case '': return 'g';
    307             case '': return 'g';
    308             case '': return 'w';
    309             case '': return 'n';
    310             case '': return 'n';
    311             case '': return 'a';
    312             case '': return 'a';
    313             case '': return 'o';
    314             case '': return 'o';
    315             case '': return 'a';
    316             case '': return 'a';
    317             case '': return 'a';
    318             case '': return 'a';
    319             case '': return 'e';
    320             case '': return 'e';
    321             case '': return 'e';
    322             case '': return 'e';
    323             case '': return 'i';
    324             case '': return 'i';
    325             case '': return 'i';
    326             case '': return 'i';
    327             case '': return 'o';
    328             case '': return 'o';
    329             case '': return 'o';
    330             case '': return 'o';
    331             case '': return 'r';
    332             case '': return 'r';
    333             case '': return 'r';
    334             case '': return 'r';
    335             case '': return 'u';
    336             case '': return 'u';
    337             case '': return 'u';
    338             case '': return 'u';
    339             case '': return 's';
    340             case '': return 's';
    341             case '': return 't';
    342             case '': return 't';
    343             case '': return 'y';
    344             case '': return 'y';
    345             case '': return 'h';
    346             case '': return 'h';
    347             case '': return 'z';
    348             case '': return 'z';
    349             case '': return 'a';
    350             case '': return 'a';
    351             case '': return 'e';
    352             case '': return 'e';
    353             case '': return 'o';
    354             case '': return 'o';
    355             case '': return 'o';
    356             case '': return 'o';
    357             case '': return 'o';
    358             case '': return 'o';
    359             case '': return 'o';
    360             case '': return 'o';
    361             case '': return 'y';
    362             case '': return 'y';
    363             case 'A': return 'a';
    364             case 'B': return 'b';
    365             case 'C': return 'c';
    366             case 'D': return 'd';
    367             case 'E': return 'e';
    368             case 'F': return 'f';
    369             case 'G': return 'g';
    370             case 'H': return 'h';
    371             case 'I': return 'i';
    372             case 'J': return 'j';
    373             case 'K': return 'k';
    374             case 'L': return 'l';
    375             case 'M': return 'm';
    376             case 'N': return 'n';
    377             case 'O': return 'o';
    378             case 'P': return 'p';
    379             case 'Q': return 'q';
    380             case 'R': return 'r';
    381             case 'S': return 's';
    382             case 'T': return 't';
    383             case 'U': return 'u';
    384             case 'V': return 'v';
    385             case 'W': return 'w';
    386             case 'X': return 'x';
    387             case 'Y': return 'y';
    388             case 'Z': return 'z';
    389             default:
    390                 return ch;
    391         }
    392     }
    393 
    394     @Override
    395     public byte getDialpadIndex(char ch) {
    396         if (ch >= '0' && ch <= '9') {
    397             return (byte) (ch - '0');
    398         } else if (ch >= 'a' && ch <= 'z') {
    399             return (byte) (LATIN_LETTERS_TO_DIGITS[ch - 'a'] - '0');
    400         } else {
    401             return -1;
    402         }
    403     }
    404 
    405     @Override
    406     public char getDialpadNumericCharacter(char ch) {
    407         if (ch >= 'a' && ch <= 'z') {
    408             return LATIN_LETTERS_TO_DIGITS[ch - 'a'];
    409         }
    410         return ch;
    411     }
    412 
    413 }
    414