Home | History | Annotate | Download | only in layout
      1 /*
      2  * Copyright (C) 2014 The Android Open Source Project
      3  *
      4  * Licensed under the Apache License, Version 2.0 (the "License");
      5  * you may not use this file except in compliance with the License.
      6  * You may obtain a copy of the License at
      7  *
      8  *      http://www.apache.org/licenses/LICENSE-2.0
      9  *
     10  * Unless required by applicable law or agreed to in writing, software
     11  * distributed under the License is distributed on an "AS IS" BASIS,
     12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
     13  * See the License for the specific language governing permissions and
     14  * limitations under the License.
     15  */
     16 
     17 package com.android.inputmethod.keyboard.layout;
     18 
     19 import com.android.inputmethod.keyboard.layout.expected.ExpectedKey;
     20 import com.android.inputmethod.keyboard.layout.expected.ExpectedKeyboardBuilder;
     21 import com.android.inputmethod.latin.Constants;
     22 
     23 import java.util.Locale;
     24 
     25 /**
     26  * The Armenian Phonetic alphabet keyboard.
     27  */
     28 public final class ArmenianPhonetic extends LayoutBase {
     29     private static final String LAYOUT_NAME = "armenian_phonetic";
     30 
     31     public ArmenianPhonetic(final LayoutCustomizer customizer) {
     32         super(customizer, ArmenianSymbols.class, ArmenianSymbolsShifted.class);
     33     }
     34 
     35     @Override
     36     public String getName() { return LAYOUT_NAME; }
     37 
     38     public static class ArmenianPhoneticCustomizer extends LayoutCustomizer {
     39         public ArmenianPhoneticCustomizer(final Locale locale) { super(locale); }
     40 
     41         @Override
     42         public int getNumberOfRows() { return 5; }
     43 
     44         @Override
     45         public ExpectedKey getAlphabetKey() { return ARMENIAN_ALPHABET_KEY; }
     46 
     47         @Override
     48         public ExpectedKey[] getRightShiftKeys(final boolean isPhone) {
     49             if (isPhone) {
     50                 return EMPTY_KEYS;
     51             }
     52             // U+055C: "" ARMENIAN EXCLAMATION MARK
     53             // U+00A1: "" INVERTED EXCLAMATION MARK
     54             // U+055E: "" ARMENIAN QUESTION MARK
     55             // U+00BF: "" INVERTED QUESTION MARK
     56             return joinKeys(key("!", joinMoreKeys("\u055C", "\u00A1")),
     57                     key("?", joinMoreKeys("\u055E", "\u00BF")),
     58                     SHIFT_KEY);
     59         }
     60 
     61         @Override
     62         public ExpectedKey[] getKeysLeftToSpacebar(final boolean isPhone) {
     63             // U+055D: "" ARMENIAN COMMA
     64             return isPhone ? joinKeys(key("\u055D", SETTINGS_KEY))
     65                     : joinKeys(key("\u055D", SETTINGS_KEY));
     66         }
     67 
     68         @Override
     69         public ExpectedKey[] getKeysRightToSpacebar(final boolean isPhone) {
     70             // U+0589: "" ARMENIAN FULL STOP
     71             final ExpectedKey fullStopKey = key("\u0589", getPunctuationMoreKeys(isPhone));
     72             return joinKeys(fullStopKey);
     73         }
     74 
     75         @Override
     76         public ExpectedKey[] getPunctuationMoreKeys(final boolean isPhone) {
     77             return ARMENIAN_PUNCTUATION_MORE_KEYS;
     78         }
     79 
     80         // U+0531: "" ARMENIAN CAPITAL LETTER AYB
     81         // U+0532: "" ARMENIAN CAPITAL LETTER BEN
     82         // U+0533: "" ARMENIAN CAPITAL LETTER GIM
     83         private static final ExpectedKey ARMENIAN_ALPHABET_KEY = key(
     84                 "\u0531\u0532\u0533", Constants.CODE_SWITCH_ALPHA_SYMBOL);
     85 
     86         // U+055E: "" ARMENIAN QUESTION MARK
     87         // U+055C: "" ARMENIAN EXCLAMATION MARK
     88         // U+055A: "" ARMENIAN APOSTROPHE
     89         // U+0559: "" ARMENIAN MODIFIER LETTER LEFT HALF RING
     90         // U+055D: "" ARMENIAN COMMA
     91         // U+055B: "" ARMENIAN EMPHASIS MARK
     92         // U+058A: "" ARMENIAN HYPHEN
     93         // U+00BB: "" RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK
     94         // U+00AB: "" LEFT-POINTING DOUBLE ANGLE QUOTATION MARK
     95         // U+055F: "" ARMENIAN ABBREVIATION MARK
     96         private static final ExpectedKey[] ARMENIAN_PUNCTUATION_MORE_KEYS = joinMoreKeys(
     97                 ",", "\u055E", "\u055C", ".", "\u055A", "\u0559", "?", "!",
     98                 "\u055D", "\u055B", "\u058A", "\u00BB", "\u00AB", "\u055F", ";", ":");
     99     }
    100 
    101     @Override
    102     ExpectedKey[][] getCommonAlphabetLayout(final boolean isPhone) {
    103         final ExpectedKeyboardBuilder builder = new ExpectedKeyboardBuilder(ALPHABET_COMMON);
    104         if (isPhone) {
    105             // U+056D: "" ARMENIAN SMALL LETTER XEH
    106             // U+0577: "" ARMENIAN SMALL LETTER SHA
    107             builder.addKeysOnTheRightOfRow(3, "\u056D")
    108                     .addKeysOnTheRightOfRow(4, "\u0577");
    109         } else {
    110             // U+056D: "" ARMENIAN SMALL LETTER XEH
    111             // U+0577: "" ARMENIAN SMALL LETTER SHA
    112             builder.addKeysOnTheRightOfRow(2, "\u056D")
    113                     .addKeysOnTheRightOfRow(3, "\u0577");
    114         }
    115         return builder.build();
    116     }
    117 
    118     private static final ExpectedKey[][] ALPHABET_COMMON = new ExpectedKeyboardBuilder()
    119             .setKeysOfRow(1,
    120                     // U+0567: "" ARMENIAN SMALL LETTER EH
    121                     key("\u0567", moreKey("1")),
    122                     // U+0569: "" ARMENIAN SMALL LETTER TO
    123                     key("\u0569", moreKey("2")),
    124                     // U+0583: "" ARMENIAN SMALL LETTER PIWR
    125                     key("\u0583", moreKey("3")),
    126                     // U+0571: "" ARMENIAN SMALL LETTER JA
    127                     key("\u0571", moreKey("4")),
    128                     // U+057B: "" ARMENIAN SMALL LETTER JHEH
    129                     key("\u057B", moreKey("5")),
    130                     // U+0580: "" ARMENIAN SMALL LETTER REH
    131                     key("\u0580", moreKey("6")),
    132                     // U+0579: "" ARMENIAN SMALL LETTER CHA
    133                     key("\u0579", moreKey("7")),
    134                     // U+0573: "" ARMENIAN SMALL LETTER CHEH
    135                     key("\u0573", moreKey("8")),
    136                     // U+056A: "" ARMENIAN SMALL LETTER ZHE
    137                     key("\u056A", moreKey("9")),
    138                     // U+056E: "" ARMENIAN SMALL LETTER CA
    139                     key("\u056E", moreKey("0")))
    140             .setKeysOfRow(2,
    141                     // U+0584: "" ARMENIAN SMALL LETTER KEH
    142                     // U+0578: "" ARMENIAN SMALL LETTER VO
    143                     "\u0584", "\u0578",
    144                     // U+0565: "" ARMENIAN SMALL LETTER ECH
    145                     // U+0587: "" ARMENIAN SMALL LIGATURE ECH YIWN
    146                     key("\u0565", moreKey("\u0587")),
    147                     // U+057C: "" ARMENIAN SMALL LETTER RA
    148                     // U+057F: "" ARMENIAN SMALL LETTER TIWN
    149                     // U+0568: "" ARMENIAN SMALL LETTER ET
    150                     // U+0582: "" ARMENIAN SMALL LETTER YIWN
    151                     // U+056B: "" ARMENIAN SMALL LETTER INI
    152                     // U+0585: "" ARMENIAN SMALL LETTER OH
    153                     // U+057A: "" ARMENIAN SMALL LETTER PEH
    154                     "\u057C", "\u057F", "\u0568", "\u0582", "\u056B", "\u0585", "\u057A")
    155             .setKeysOfRow(3,
    156                     // U+0561: "" ARMENIAN SMALL LETTER AYB
    157                     // U+057D: "" ARMENIAN SMALL LETTER SEH
    158                     // U+0564: "" ARMENIAN SMALL LETTER DA
    159                     // U+0586: "" ARMENIAN SMALL LETTER FEH
    160                     // U+0563: "" ARMENIAN SMALL LETTER GIM
    161                     // U+0570: "" ARMENIAN SMALL LETTER HO
    162                     // U+0575: "" ARMENIAN SMALL LETTER YI
    163                     // U+056F: "" ARMENIAN SMALL LETTER KEN
    164                     // U+056C: "" ARMENIAN SMALL LETTER LIWN
    165                     "\u0561", "\u057D", "\u0564", "\u0586", "\u0563", "\u0570", "\u0575", "\u056F",
    166                     "\u056C")
    167             .setKeysOfRow(4,
    168                     // U+0566: "" ARMENIAN SMALL LETTER ZA
    169                     // U+0572: "" ARMENIAN SMALL LETTER GHAD
    170                     // U+0581: "" ARMENIAN SMALL LETTER CO
    171                     // U+057E: "" ARMENIAN SMALL LETTER VEW
    172                     // U+0562: "" ARMENIAN SMALL LETTER BEN
    173                     // U+0576: "" ARMENIAN SMALL LETTER NOW
    174                     // U+0574: "" ARMENIAN SMALL LETTER MEN
    175                     "\u0566", "\u0572", "\u0581", "\u057E", "\u0562", "\u0576", "\u0574")
    176             .build();
    177 
    178     private static final class ArmenianSymbols extends Symbols {
    179         public ArmenianSymbols(final LayoutCustomizer customizer) { super(customizer); }
    180 
    181         @Override
    182         public ExpectedKey[][] getLayout(final boolean isPhone) {
    183             final ExpectedKeyboardBuilder builder = new ExpectedKeyboardBuilder(
    184                     super.getLayout(isPhone));
    185             // U+055D: "" ARMENIAN COMMA
    186             builder.replaceKeyOfLabel(",", "\u055D");
    187             // U+055C: "" ARMENIAN EXCLAMATION MARK
    188             // U+00A1: "" INVERTED EXCLAMATION MARK
    189             // U+055E: "" ARMENIAN QUESTION MARK
    190             // U+00BF: "" INVERTED QUESTION MARK
    191             builder.setMoreKeysOf("!", "\u055C", "\u00A1")
    192                     .setMoreKeysOf("?", "\u055E", "\u00BF");
    193             return builder.build();
    194         }
    195     }
    196 
    197     private static final class ArmenianSymbolsShifted extends SymbolsShifted {
    198         public ArmenianSymbolsShifted(final LayoutCustomizer customizer) { super(customizer); }
    199 
    200         @Override
    201         public ExpectedKey[][] getLayout(final boolean isPhone) {
    202             final ExpectedKeyboardBuilder builder = new ExpectedKeyboardBuilder(
    203                     super.getLayout(isPhone));
    204             // U+055D: "" ARMENIAN COMMA
    205             builder.replaceKeyOfLabel(",", "\u055D");
    206             return builder.build();
    207         }
    208     }
    209 }
    210