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.KeyboardId;
     20 import com.android.inputmethod.keyboard.layout.customizer.EuroCustomizer;
     21 import com.android.inputmethod.keyboard.layout.expected.ExpectedKey;
     22 import com.android.inputmethod.keyboard.layout.expected.ExpectedKeyboardBuilder;
     23 import com.android.inputmethod.latin.common.Constants;
     24 
     25 import java.util.Locale;
     26 
     27 /**
     28  * The Greek alphabet keyboard.
     29  */
     30 public final class Greek extends LayoutBase {
     31     private static final String LAYOUT_NAME = "greek";
     32 
     33     public Greek(final Locale locale) {
     34         super(new GreekCustomizer(locale), Symbols.class, SymbolsShifted.class);
     35     }
     36 
     37     @Override
     38     public String getName() { return LAYOUT_NAME; }
     39 
     40     private static class GreekCustomizer extends EuroCustomizer {
     41         GreekCustomizer(final Locale locale) { super(locale); }
     42 
     43         @Override
     44         public ExpectedKey getAlphabetKey() { return GREEK_ALPHABET_KEY; }
     45 
     46         // U+0391: "" GREEK CAPITAL LETTER ALPHA
     47         // U+0392: "" GREEK CAPITAL LETTER BETA
     48         // U+0393: "" GREEK CAPITAL LETTER GAMMA
     49         private static final ExpectedKey GREEK_ALPHABET_KEY = key(
     50                 "\u0391\u0392\u0393", Constants.CODE_SWITCH_ALPHA_SYMBOL);
     51     }
     52 
     53     @Override
     54     ExpectedKey[][] getCommonAlphabetLayout(final boolean isPhone) {
     55         final ExpectedKeyboardBuilder builder = new ExpectedKeyboardBuilder(ALPHABET_COMMON);
     56         builder.replaceKeyOfLabel(ROW1_1, ROW1_1_SEMICOLON);
     57         builder.replaceKeyOfLabel(ROW1_2, ROW1_2_FINAL_SIGMA);
     58         return builder.build();
     59     }
     60 
     61     @Override
     62     ExpectedKey[][] getCommonAlphabetShiftLayout(final boolean isPhone, final int elementId) {
     63         final ExpectedKeyboardBuilder builder = new ExpectedKeyboardBuilder(ALPHABET_COMMON);
     64         builder.toUpperCase(getLocale());
     65         if (elementId == KeyboardId.ELEMENT_ALPHABET_MANUAL_SHIFTED
     66                 || elementId == KeyboardId.ELEMENT_ALPHABET_SHIFT_LOCK_SHIFTED) {
     67             builder.replaceKeyOfLabel(ROW1_1, ROW1_1_COLON);
     68         } else {
     69             builder.replaceKeyOfLabel(ROW1_1, ROW1_1_SEMICOLON);
     70         }
     71         builder.replaceKeyOfLabel(ROW1_2, ROW1_2_FINAL_SIGMA);
     72         return builder.build();
     73     }
     74 
     75     private static final String ROW1_1 = "ROW1_1";
     76     private static final ExpectedKey ROW1_1_SEMICOLON = key(";", joinMoreKeys("1", ":"));
     77     private static final ExpectedKey ROW1_1_COLON = key(":", joinMoreKeys("1", ";"));
     78 
     79     private static final String ROW1_2 = "ROW2_2";
     80     // U+03C2: "" GREEK SMALL LETTER FINAL SIGMA
     81     private static final ExpectedKey ROW1_2_FINAL_SIGMA = key("\u03C2", moreKey("2"));
     82 
     83     private static final ExpectedKey[][] ALPHABET_COMMON = new ExpectedKeyboardBuilder()
     84             .setKeysOfRow(1,
     85                     key(ROW1_1, moreKey("1")),
     86                     key(ROW1_2, moreKey("2")),
     87                     // U+03B5: "" GREEK SMALL LETTER EPSILON
     88                     // U+03AD: "" GREEK SMALL LETTER EPSILON WITH TONOS
     89                     key("\u03B5", joinMoreKeys("\u03AD", "3")),
     90                     // U+03C1: "" GREEK SMALL LETTER RHO
     91                     key("\u03C1", moreKey("4")),
     92                     // U+03C4: "" GREEK SMALL LETTER TAU
     93                     key("\u03C4", moreKey("5")),
     94                     // U+03C5: "" GREEK SMALL LETTER UPSILON
     95                     // U+03CD: "" GREEK SMALL LETTER UPSILON WITH TONOS
     96                     // U+03CB: "" GREEK SMALL LETTER UPSILON WITH DIALYTIKA
     97                     // U+03B0: "" GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND TONOS
     98                     key("\u03C5", joinMoreKeys("\u03CD", "6", "\u03CB", "\u03B0")),
     99                     // U+03B8: "" GREEK SMALL LETTER THETA
    100                     key("\u03B8", moreKey("7")),
    101                     // U+03B9: "" GREEK SMALL LETTER IOTA
    102                     // U+03AF: "" GREEK SMALL LETTER IOTA WITH TONOS
    103                     // U+03CA: "" GREEK SMALL LETTER IOTA WITH DIALYTIKA
    104                     // U+0390: "" GREEK SMALL LETTER IOTA WITH DIALYTIKA AND TONOS
    105                     key("\u03B9", joinMoreKeys("\u03AF", "8", "\u03CA", "\u0390")),
    106                     // U+03BF: "" GREEK SMALL LETTER OMICRON
    107                     // U+03CC: "" GREEK SMALL LETTER OMICRON WITH TONOS
    108                     key("\u03BF", joinMoreKeys("\u03CC", "9")),
    109                     // U+03C0: "" GREEK SMALL LETTER PI
    110                     key("\u03C0", moreKey("0")))
    111             .setKeysOfRow(2,
    112                     // U+03B1: "" GREEK SMALL LETTER ALPHA
    113                     // U+03AC: "" GREEK SMALL LETTER ALPHA WITH TONOS
    114                     key("\u03B1", moreKey("\u03AC")),
    115                     // U+03C3: "" GREEK SMALL LETTER SIGMA
    116                     // U+03B4: "" GREEK SMALL LETTER DELTA
    117                     // U+03C6: "" GREEK SMALL LETTER PHI
    118                     // U+03B3: "" GREEK SMALL LETTER GAMMA
    119                     "\u03C3", "\u03B4", "\u03C6", "\u03B3",
    120                     // U+03B7: "" GREEK SMALL LETTER ETA
    121                     // U+03AE: "" GREEK SMALL LETTER ETA WITH TONOS
    122                     key("\u03B7", moreKey("\u03AE")),
    123                     // U+03BE: "" GREEK SMALL LETTER XI
    124                     // U+03BA: "" GREEK SMALL LETTER KAPPA
    125                     // U+03BB: "" GREEK SMALL LETTER LAMDA
    126                     "\u03BE", "\u03BA", "\u03BB")
    127             .setKeysOfRow(3,
    128                     // U+03B6: "" GREEK SMALL LETTER ZETA
    129                     // U+03C7: "" GREEK SMALL LETTER CHI
    130                     // U+03C8: "" GREEK SMALL LETTER PSI
    131                     "\u03B6", "\u03C7", "\u03C8",
    132                     // U+03C9: "" GREEK SMALL LETTER OMEGA
    133                     // U+03CE: "" GREEK SMALL LETTER OMEGA WITH TONOS
    134                     key("\u03C9", moreKey("\u03CE")),
    135                     // U+03B2: "" GREEK SMALL LETTER BETA
    136                     // U+03BD: "" GREEK SMALL LETTER NU
    137                     // U+03BC: "" GREEK SMALL LETTER MU
    138                     "\u03B2", "\u03BD", "\u03BC")
    139             .build();
    140 }
    141