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