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
17package com.android.inputmethod.keyboard.layout.customizer;
18
19import com.android.inputmethod.keyboard.layout.expected.ExpectedKey;
20import com.android.inputmethod.keyboard.layout.expected.ExpectedKeyboardBuilder;
21import com.android.inputmethod.keyboard.layout.expected.ExpectedKey.ExpectedAdditionalMoreKey;
22
23import java.util.Locale;
24
25public class DvorakCustomizer extends LayoutCustomizer {
26    public DvorakCustomizer(final Locale locale) { super(locale); }
27
28    @Override
29    public ExpectedKey[] getLeftShiftKeys(final boolean isPhone) {
30        return isPhone ? joinKeys(SHIFT_KEY): joinKeys(SHIFT_KEY, key("q"));
31    }
32
33    @Override
34    public ExpectedKey[] getRightShiftKeys(final boolean isPhone) {
35        return isPhone ? EMPTY_KEYS : joinKeys(key("z"), SHIFT_KEY);
36    }
37
38    @Override
39    public ExpectedKey[] getKeysLeftToSpacebar(final boolean isPhone) {
40        // U+00A1: "¡" INVERTED EXCLAMATION MARK
41        return isPhone ? joinKeys(key("q", SETTINGS_KEY))
42                : joinKeys(key("!", joinMoreKeys("\u00A1", SETTINGS_KEY)));
43    }
44
45    @Override
46    public ExpectedKey[] getKeysRightToSpacebar(final boolean isPhone) {
47        final ExpectedAdditionalMoreKey[] punctuationMoreKeys =
48                convertToAdditionalMoreKeys(getPunctuationMoreKeys(isPhone));
49        // U+00BF: "¿" INVERTED QUESTION MARK
50        return isPhone
51                ? joinKeys(key("z", punctuationMoreKeys))
52                : joinKeys(key("?", joinMoreKeys(punctuationMoreKeys, "\u00BF")));
53    }
54
55    private static ExpectedAdditionalMoreKey[] convertToAdditionalMoreKeys(
56            final ExpectedKey ... moreKeys) {
57        final ExpectedAdditionalMoreKey[] additionalMoreKeys =
58                new ExpectedAdditionalMoreKey[moreKeys.length];
59        for (int index = 0; index < moreKeys.length; index++) {
60            additionalMoreKeys[index] = ExpectedAdditionalMoreKey.newInstance(moreKeys[index]);
61        }
62        return additionalMoreKeys;
63    }
64
65    public static class EnglishDvorakCustomizer extends DvorakCustomizer {
66        private final EnglishCustomizer mEnglishCustomizer;
67
68        public EnglishDvorakCustomizer(final Locale locale) {
69            super(locale);
70            mEnglishCustomizer = new EnglishCustomizer(locale);
71        }
72
73        @Override
74        public ExpectedKeyboardBuilder setAccentedLetters(final ExpectedKeyboardBuilder builder) {
75            return mEnglishCustomizer.setAccentedLetters(builder);
76        }
77    }
78}
79