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.action; 18 19 import android.content.Context; 20 import android.content.res.Resources; 21 import android.text.InputType; 22 import android.view.inputmethod.EditorInfo; 23 import android.view.inputmethod.InputMethodSubtype; 24 25 import com.android.inputmethod.keyboard.Key; 26 import com.android.inputmethod.keyboard.Keyboard; 27 import com.android.inputmethod.keyboard.KeyboardId; 28 import com.android.inputmethod.keyboard.KeyboardLayoutSet; 29 import com.android.inputmethod.keyboard.KeyboardLayoutSetTestsBase; 30 import com.android.inputmethod.keyboard.internal.KeyboardIconsSet; 31 import com.android.inputmethod.keyboard.layout.expected.ExpectedKeyVisual; 32 import com.android.inputmethod.latin.common.Constants; 33 import com.android.inputmethod.latin.common.LocaleUtils; 34 import com.android.inputmethod.latin.utils.RunInLocale; 35 import com.android.inputmethod.latin.utils.SubtypeLocaleUtils; 36 37 import java.util.Locale; 38 39 abstract class ActionTestsBase extends KeyboardLayoutSetTestsBase { 40 static class ExpectedActionKey { 41 static ExpectedActionKey newIconKey(final String iconName) { 42 final int iconId = KeyboardIconsSet.getIconId(iconName); 43 return new ExpectedActionKey(ExpectedKeyVisual.newInstance(iconId)); 44 } 45 46 static ExpectedActionKey newLabelKey(final String label) { 47 return new ExpectedActionKey(ExpectedKeyVisual.newInstance(label)); 48 } 49 50 static ExpectedActionKey newLabelKey(final int labelResId, 51 final Locale labelLocale, final Context context) { 52 final RunInLocale<String> getString = new RunInLocale<String>() { 53 @Override 54 protected String job(final Resources res) { 55 return res.getString(labelResId); 56 } 57 }; 58 return newLabelKey(getString.runInLocale(context.getResources(), labelLocale)); 59 } 60 61 private final ExpectedKeyVisual mVisual; 62 63 private ExpectedActionKey(final ExpectedKeyVisual visual) { 64 mVisual = visual; 65 } 66 67 public int getIconId() { return mVisual.getIconId(); } 68 69 public String getLabel() { return mVisual.getLabel(); } 70 } 71 72 protected static Locale getLabelLocale(final InputMethodSubtype subtype) { 73 final String localeString = subtype.getLocale(); 74 if (localeString.equals(SubtypeLocaleUtils.NO_LANGUAGE)) { 75 return null; 76 } 77 return LocaleUtils.constructLocaleFromString(localeString); 78 } 79 80 private static void assertActionKey(final String tag, final KeyboardLayoutSet layoutSet, 81 final int elementId, final ExpectedActionKey expectedKey) { 82 final Keyboard keyboard = layoutSet.getKeyboard(elementId); 83 final Key actualKey = keyboard.getKey(Constants.CODE_ENTER); 84 assertNotNull(tag + " enter key on " + keyboard.mId, actualKey); 85 assertEquals(tag + " label " + expectedKey, expectedKey.getLabel(), actualKey.getLabel()); 86 assertEquals(tag + " icon " + expectedKey, expectedKey.getIconId(), actualKey.getIconId()); 87 } 88 89 protected void doTestActionKey(final String tag, final InputMethodSubtype subtype, 90 final int actionId, final ExpectedActionKey expectedKey) { 91 final EditorInfo editorInfo = new EditorInfo(); 92 editorInfo.imeOptions = actionId; 93 doTestActionKey(tag, subtype, editorInfo, expectedKey); 94 } 95 96 protected void doTestActionKey(final String tag, final InputMethodSubtype subtype, 97 final EditorInfo editorInfo, final ExpectedActionKey expectedKey) { 98 // Test text layouts. 99 editorInfo.inputType = InputType.TYPE_CLASS_TEXT | InputType.TYPE_TEXT_VARIATION_NORMAL; 100 final KeyboardLayoutSet layoutSet = createKeyboardLayoutSet(subtype, editorInfo); 101 assertActionKey(tag, layoutSet, KeyboardId.ELEMENT_ALPHABET, expectedKey); 102 assertActionKey(tag, layoutSet, KeyboardId.ELEMENT_SYMBOLS, expectedKey); 103 assertActionKey(tag, layoutSet, KeyboardId.ELEMENT_SYMBOLS_SHIFTED, expectedKey); 104 // Test phone number layouts. 105 assertActionKey(tag, layoutSet, KeyboardId.ELEMENT_PHONE, expectedKey); 106 assertActionKey(tag, layoutSet, KeyboardId.ELEMENT_PHONE_SYMBOLS, expectedKey); 107 // Test normal number layout. 108 assertActionKey(tag, layoutSet, KeyboardId.ELEMENT_NUMBER, expectedKey); 109 // Test number password layout. 110 editorInfo.inputType = 111 InputType.TYPE_CLASS_NUMBER | InputType.TYPE_NUMBER_VARIATION_PASSWORD; 112 final KeyboardLayoutSet passwordSet = createKeyboardLayoutSet(subtype, editorInfo); 113 assertActionKey(tag, passwordSet, KeyboardId.ELEMENT_NUMBER, expectedKey); 114 } 115 } 116