1c9aa1beb6de6bbea71af8eba94354bff3001e0acTadashi G. Takaoka/*
2c9aa1beb6de6bbea71af8eba94354bff3001e0acTadashi G. Takaoka * Copyright (C) 2014 The Android Open Source Project
3c9aa1beb6de6bbea71af8eba94354bff3001e0acTadashi G. Takaoka *
4c9aa1beb6de6bbea71af8eba94354bff3001e0acTadashi G. Takaoka * Licensed under the Apache License, Version 2.0 (the "License");
5c9aa1beb6de6bbea71af8eba94354bff3001e0acTadashi G. Takaoka * you may not use this file except in compliance with the License.
6c9aa1beb6de6bbea71af8eba94354bff3001e0acTadashi G. Takaoka * You may obtain a copy of the License at
7c9aa1beb6de6bbea71af8eba94354bff3001e0acTadashi G. Takaoka *
8c9aa1beb6de6bbea71af8eba94354bff3001e0acTadashi G. Takaoka *      http://www.apache.org/licenses/LICENSE-2.0
9c9aa1beb6de6bbea71af8eba94354bff3001e0acTadashi G. Takaoka *
10c9aa1beb6de6bbea71af8eba94354bff3001e0acTadashi G. Takaoka * Unless required by applicable law or agreed to in writing, software
11c9aa1beb6de6bbea71af8eba94354bff3001e0acTadashi G. Takaoka * distributed under the License is distributed on an "AS IS" BASIS,
12c9aa1beb6de6bbea71af8eba94354bff3001e0acTadashi G. Takaoka * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13c9aa1beb6de6bbea71af8eba94354bff3001e0acTadashi G. Takaoka * See the License for the specific language governing permissions and
14c9aa1beb6de6bbea71af8eba94354bff3001e0acTadashi G. Takaoka * limitations under the License.
15c9aa1beb6de6bbea71af8eba94354bff3001e0acTadashi G. Takaoka */
16c9aa1beb6de6bbea71af8eba94354bff3001e0acTadashi G. Takaoka
17c9aa1beb6de6bbea71af8eba94354bff3001e0acTadashi G. Takaokapackage com.android.inputmethod.keyboard.layout.tests;
18c9aa1beb6de6bbea71af8eba94354bff3001e0acTadashi G. Takaoka
19c9aa1beb6de6bbea71af8eba94354bff3001e0acTadashi G. Takaokaimport android.test.suitebuilder.annotation.SmallTest;
20c9aa1beb6de6bbea71af8eba94354bff3001e0acTadashi G. Takaokaimport android.text.InputType;
21c9aa1beb6de6bbea71af8eba94354bff3001e0acTadashi G. Takaokaimport android.view.inputmethod.EditorInfo;
22c9aa1beb6de6bbea71af8eba94354bff3001e0acTadashi G. Takaokaimport android.view.inputmethod.InputMethodSubtype;
23c9aa1beb6de6bbea71af8eba94354bff3001e0acTadashi G. Takaoka
24c9aa1beb6de6bbea71af8eba94354bff3001e0acTadashi G. Takaokaimport com.android.inputmethod.keyboard.KeyboardId;
25c9aa1beb6de6bbea71af8eba94354bff3001e0acTadashi G. Takaokaimport com.android.inputmethod.keyboard.KeyboardLayoutSet;
26c9aa1beb6de6bbea71af8eba94354bff3001e0acTadashi G. Takaokaimport com.android.inputmethod.keyboard.layout.Dvorak;
27c9aa1beb6de6bbea71af8eba94354bff3001e0acTadashi G. Takaokaimport com.android.inputmethod.keyboard.layout.LayoutBase;
28c9aa1beb6de6bbea71af8eba94354bff3001e0acTadashi G. Takaokaimport com.android.inputmethod.keyboard.layout.expected.ExpectedKey;
29c9aa1beb6de6bbea71af8eba94354bff3001e0acTadashi G. Takaokaimport com.android.inputmethod.keyboard.layout.tests.TestsEnglishDvorak.EnglishDvorakCustomizer;
30c9aa1beb6de6bbea71af8eba94354bff3001e0acTadashi G. Takaoka
31c9aa1beb6de6bbea71af8eba94354bff3001e0acTadashi G. Takaokaimport java.util.Locale;
32c9aa1beb6de6bbea71af8eba94354bff3001e0acTadashi G. Takaoka
33c9aa1beb6de6bbea71af8eba94354bff3001e0acTadashi G. Takaoka/**
34c9aa1beb6de6bbea71af8eba94354bff3001e0acTadashi G. Takaoka * en_US: English (United States)/dvorak, email input field.
35c9aa1beb6de6bbea71af8eba94354bff3001e0acTadashi G. Takaoka */
36c9aa1beb6de6bbea71af8eba94354bff3001e0acTadashi G. Takaoka@SmallTest
37c9aa1beb6de6bbea71af8eba94354bff3001e0acTadashi G. Takaokapublic class TestsDvorakEmail extends LayoutTestsBase {
38c9aa1beb6de6bbea71af8eba94354bff3001e0acTadashi G. Takaoka    private static final Locale LOCALE = new Locale("en", "US");
39c9aa1beb6de6bbea71af8eba94354bff3001e0acTadashi G. Takaoka    private static final LayoutBase LAYOUT = new DvorakEmail(new DvorakEmailCustomizer(LOCALE));
40c9aa1beb6de6bbea71af8eba94354bff3001e0acTadashi G. Takaoka
41c9aa1beb6de6bbea71af8eba94354bff3001e0acTadashi G. Takaoka    @Override
42c9aa1beb6de6bbea71af8eba94354bff3001e0acTadashi G. Takaoka    LayoutBase getLayout() { return LAYOUT; }
43c9aa1beb6de6bbea71af8eba94354bff3001e0acTadashi G. Takaoka
44c9aa1beb6de6bbea71af8eba94354bff3001e0acTadashi G. Takaoka    @Override
45c9aa1beb6de6bbea71af8eba94354bff3001e0acTadashi G. Takaoka    protected KeyboardLayoutSet createKeyboardLayoutSet(final InputMethodSubtype subtype,
46c9aa1beb6de6bbea71af8eba94354bff3001e0acTadashi G. Takaoka            final EditorInfo editorInfo, final boolean voiceInputKeyEnabled,
47c9aa1beb6de6bbea71af8eba94354bff3001e0acTadashi G. Takaoka            final boolean languageSwitchKeyEnabled) {
48c9aa1beb6de6bbea71af8eba94354bff3001e0acTadashi G. Takaoka        final EditorInfo emailField = new EditorInfo();
49c9aa1beb6de6bbea71af8eba94354bff3001e0acTadashi G. Takaoka        emailField.inputType =
50c9aa1beb6de6bbea71af8eba94354bff3001e0acTadashi G. Takaoka                InputType.TYPE_CLASS_TEXT | InputType.TYPE_TEXT_VARIATION_EMAIL_ADDRESS;
51c9aa1beb6de6bbea71af8eba94354bff3001e0acTadashi G. Takaoka        return super.createKeyboardLayoutSet(
52c9aa1beb6de6bbea71af8eba94354bff3001e0acTadashi G. Takaoka                subtype, emailField, voiceInputKeyEnabled, languageSwitchKeyEnabled);
53c9aa1beb6de6bbea71af8eba94354bff3001e0acTadashi G. Takaoka    }
54c9aa1beb6de6bbea71af8eba94354bff3001e0acTadashi G. Takaoka
55c9aa1beb6de6bbea71af8eba94354bff3001e0acTadashi G. Takaoka    private static class DvorakEmailCustomizer extends EnglishDvorakCustomizer {
56c9aa1beb6de6bbea71af8eba94354bff3001e0acTadashi G. Takaoka        DvorakEmailCustomizer(final Locale locale) {
57c9aa1beb6de6bbea71af8eba94354bff3001e0acTadashi G. Takaoka            super(locale);
58c9aa1beb6de6bbea71af8eba94354bff3001e0acTadashi G. Takaoka        }
59c9aa1beb6de6bbea71af8eba94354bff3001e0acTadashi G. Takaoka
60c9aa1beb6de6bbea71af8eba94354bff3001e0acTadashi G. Takaoka        @Override
61c9aa1beb6de6bbea71af8eba94354bff3001e0acTadashi G. Takaoka        public ExpectedKey getEnterKey(final boolean isPhone) {
62c9aa1beb6de6bbea71af8eba94354bff3001e0acTadashi G. Takaoka            return isPhone ? LayoutBase.ENTER_KEY : super.getEnterKey(isPhone);
63c9aa1beb6de6bbea71af8eba94354bff3001e0acTadashi G. Takaoka        }
64c9aa1beb6de6bbea71af8eba94354bff3001e0acTadashi G. Takaoka
65c9aa1beb6de6bbea71af8eba94354bff3001e0acTadashi G. Takaoka        @Override
66c9aa1beb6de6bbea71af8eba94354bff3001e0acTadashi G. Takaoka        public ExpectedKey getEmojiKey(final boolean isPhone) {
67c9aa1beb6de6bbea71af8eba94354bff3001e0acTadashi G. Takaoka            return LayoutBase.DOMAIN_KEY;
68c9aa1beb6de6bbea71af8eba94354bff3001e0acTadashi G. Takaoka        }
69c9aa1beb6de6bbea71af8eba94354bff3001e0acTadashi G. Takaoka
70c9aa1beb6de6bbea71af8eba94354bff3001e0acTadashi G. Takaoka        @Override
71c9aa1beb6de6bbea71af8eba94354bff3001e0acTadashi G. Takaoka        public ExpectedKey[] getKeysLeftToSpacebar(final boolean isPhone) {
72c9aa1beb6de6bbea71af8eba94354bff3001e0acTadashi G. Takaoka            return isPhone ? super.getKeysLeftToSpacebar(isPhone)
73c9aa1beb6de6bbea71af8eba94354bff3001e0acTadashi G. Takaoka                    : joinKeys(key("@", LayoutBase.SETTINGS_KEY));
74c9aa1beb6de6bbea71af8eba94354bff3001e0acTadashi G. Takaoka        }
75c9aa1beb6de6bbea71af8eba94354bff3001e0acTadashi G. Takaoka    }
76c9aa1beb6de6bbea71af8eba94354bff3001e0acTadashi G. Takaoka
77c9aa1beb6de6bbea71af8eba94354bff3001e0acTadashi G. Takaoka    private static class DvorakEmail extends Dvorak {
78c9aa1beb6de6bbea71af8eba94354bff3001e0acTadashi G. Takaoka        public DvorakEmail(final LayoutCustomizer customizer) {
79c9aa1beb6de6bbea71af8eba94354bff3001e0acTadashi G. Takaoka            super(customizer);
80c9aa1beb6de6bbea71af8eba94354bff3001e0acTadashi G. Takaoka        }
81c9aa1beb6de6bbea71af8eba94354bff3001e0acTadashi G. Takaoka
82c9aa1beb6de6bbea71af8eba94354bff3001e0acTadashi G. Takaoka        @Override
83c9aa1beb6de6bbea71af8eba94354bff3001e0acTadashi G. Takaoka        protected ExpectedKey getRow1_1Key(final boolean isPhone, final int elementId) {
84c9aa1beb6de6bbea71af8eba94354bff3001e0acTadashi G. Takaoka            if (isPhone && (elementId == KeyboardId.ELEMENT_ALPHABET
85c9aa1beb6de6bbea71af8eba94354bff3001e0acTadashi G. Takaoka                    || elementId == KeyboardId.ELEMENT_ALPHABET_AUTOMATIC_SHIFTED)) {
86c9aa1beb6de6bbea71af8eba94354bff3001e0acTadashi G. Takaoka                return key("@", joinMoreKeys(additionalMoreKey("1")));
87c9aa1beb6de6bbea71af8eba94354bff3001e0acTadashi G. Takaoka            }
88c9aa1beb6de6bbea71af8eba94354bff3001e0acTadashi G. Takaoka            return super.getRow1_1Key(isPhone, elementId);
89c9aa1beb6de6bbea71af8eba94354bff3001e0acTadashi G. Takaoka        }
90c9aa1beb6de6bbea71af8eba94354bff3001e0acTadashi G. Takaoka    }
91c9aa1beb6de6bbea71af8eba94354bff3001e0acTadashi G. Takaoka}
92