Automatically layout mini keyboard
Bug: 2214959
Change-Id: I06370e1c9e0683666ad19454a2fb501008af95c0
diff --git a/tests/src/com/android/inputmethod/keyboard/MiniKeyboardBuilderTests.java b/tests/src/com/android/inputmethod/keyboard/MiniKeyboardBuilderTests.java
new file mode 100644
index 0000000..7e3106d
--- /dev/null
+++ b/tests/src/com/android/inputmethod/keyboard/MiniKeyboardBuilderTests.java
@@ -0,0 +1,312 @@
+/*
+ * Copyright (C) 2011 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License"); you may not
+ * use this file except in compliance with the License. You may obtain a copy of
+ * the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+ * License for the specific language governing permissions and limitations under
+ * the License.
+ */
+
+package com.android.inputmethod.keyboard;
+
+import com.android.inputmethod.keyboard.MiniKeyboardBuilder.MiniKeyboardLayoutParams;
+
+import android.test.AndroidTestCase;
+
+public class MiniKeyboardBuilderTests extends AndroidTestCase {
+ private static final int MAX_COLUMNS = 5;
+ private static final int WIDTH = 10;
+ private static final int HEIGHT = 10;
+
+ @Override
+ protected void setUp() throws Exception {
+ super.setUp();
+ }
+
+ public void testLayoutError() {
+ MiniKeyboardLayoutParams params = null;
+ try {
+ params = new MiniKeyboardLayoutParams(
+ 10, MAX_COLUMNS + 1, WIDTH, HEIGHT,
+ WIDTH * 2, WIDTH * MAX_COLUMNS);
+ fail("Should throw IllegalArgumentException");
+ } catch (IllegalArgumentException e) {
+ // Too small keyboard to hold mini keyboard.
+ }
+ assertNull("Too small keyboard to hold mini keyboard", params);
+ }
+
+ // Mini keyboard layout test.
+ // "[n]" represents n-th key position in mini keyboard.
+ // "[1]" is the default key.
+
+ // [1]
+ public void testLayout1Key() {
+ MiniKeyboardLayoutParams params = new MiniKeyboardLayoutParams(
+ 1, MAX_COLUMNS, WIDTH, HEIGHT,
+ WIDTH * 5, WIDTH * 10);
+ assertEquals("1 key columns", 1, params.mNumColumns);
+ assertEquals("1 key rows", 1, params.mNumRows);
+ assertEquals("1 key left", 0, params.mLeftKeys);
+ assertEquals("1 key right", 1, params.mRightKeys);
+ assertEquals("1 key [1]", 0, params.getColumnPos(0));
+ assertEquals("1 key centering", false, params.mTopRowNeedsCentering);
+ assertEquals("1 key default", 0, params.getDefaultKeyCoordX());
+ }
+
+ // [1] [2]
+ public void testLayout2Key() {
+ MiniKeyboardLayoutParams params = new MiniKeyboardLayoutParams(
+ 2, MAX_COLUMNS, WIDTH, HEIGHT,
+ WIDTH * 5, WIDTH * 10);
+ assertEquals("2 key columns", 2, params.mNumColumns);
+ assertEquals("2 key rows", 1, params.mNumRows);
+ assertEquals("2 key left", 0, params.mLeftKeys);
+ assertEquals("2 key right", 2, params.mRightKeys);
+ assertEquals("2 key [1]", 0, params.getColumnPos(0));
+ assertEquals("2 key [2]", 1, params.getColumnPos(1));
+ assertEquals("2 key centering", false, params.mTopRowNeedsCentering);
+ assertEquals("2 key default", 0, params.getDefaultKeyCoordX());
+ }
+
+ // [3] [1] [2]
+ public void testLayout3Key() {
+ MiniKeyboardLayoutParams params = new MiniKeyboardLayoutParams(
+ 3, MAX_COLUMNS, WIDTH, HEIGHT,
+ WIDTH * 5, WIDTH * 10);
+ assertEquals("3 key columns", 3, params.mNumColumns);
+ assertEquals("3 key rows", 1, params.mNumRows);
+ assertEquals("3 key left", 1, params.mLeftKeys);
+ assertEquals("3 key right", 2, params.mRightKeys);
+ assertEquals("3 key [1]", 0, params.getColumnPos(0));
+ assertEquals("3 key [2]", 1, params.getColumnPos(1));
+ assertEquals("3 key [3]", -1, params.getColumnPos(2));
+ assertEquals("3 key centering", false, params.mTopRowNeedsCentering);
+ assertEquals("3 key default", WIDTH, params.getDefaultKeyCoordX());
+ }
+
+ // [3] [1] [2] [4]
+ public void testLayout4Key() {
+ MiniKeyboardLayoutParams params = new MiniKeyboardLayoutParams(
+ 4, MAX_COLUMNS, WIDTH, HEIGHT,
+ WIDTH * 5, WIDTH * 10);
+ assertEquals("4 key columns", 4, params.mNumColumns);
+ assertEquals("4 key rows", 1, params.mNumRows);
+ assertEquals("4 key left", 1, params.mLeftKeys);
+ assertEquals("4 key right", 3, params.mRightKeys);
+ assertEquals("4 key [1]", 0, params.getColumnPos(0));
+ assertEquals("4 key [2]", 1, params.getColumnPos(1));
+ assertEquals("4 key [3]", -1, params.getColumnPos(2));
+ assertEquals("4 key [4]", 2, params.getColumnPos(3));
+ assertEquals("4 key centering", false, params.mTopRowNeedsCentering);
+ assertEquals("4 key default", WIDTH, params.getDefaultKeyCoordX());
+ }
+
+ // [5] [3] [1] [2] [4]
+ public void testLayout5Key() {
+ MiniKeyboardLayoutParams params = new MiniKeyboardLayoutParams(
+ 5, MAX_COLUMNS, WIDTH, HEIGHT,
+ WIDTH * 5, WIDTH * 10);
+ assertEquals("5 key columns", 5, params.mNumColumns);
+ assertEquals("5 key rows", 1, params.mNumRows);
+ assertEquals("5 key left", 2, params.mLeftKeys);
+ assertEquals("5 key right", 3, params.mRightKeys);
+ assertEquals("5 key [1]", 0, params.getColumnPos(0));
+ assertEquals("5 key [2]", 1, params.getColumnPos(1));
+ assertEquals("5 key [3]", -1, params.getColumnPos(2));
+ assertEquals("5 key [4]", 2, params.getColumnPos(3));
+ assertEquals("5 key [5]", -2, params.getColumnPos(4));
+ assertEquals("5 key centering", false, params.mTopRowNeedsCentering);
+ assertEquals("5 key default", WIDTH * 2, params.getDefaultKeyCoordX());
+ }
+
+ // [6]
+ // [5] [3] [1] [2] [4]
+ public void testLayout6Key() {
+ MiniKeyboardLayoutParams params = new MiniKeyboardLayoutParams(
+ 6, MAX_COLUMNS, WIDTH, HEIGHT,
+ WIDTH * 5, WIDTH * 10);
+ assertEquals("6 key columns", 5, params.mNumColumns);
+ assertEquals("6 key rows", 2, params.mNumRows);
+ assertEquals("6 key left", 2, params.mLeftKeys);
+ assertEquals("6 key right", 3, params.mRightKeys);
+ assertEquals("6 key [1]", 0, params.getColumnPos(0));
+ assertEquals("6 key [2]", 1, params.getColumnPos(1));
+ assertEquals("6 key [3]", -1, params.getColumnPos(2));
+ assertEquals("6 key [4]", 2, params.getColumnPos(3));
+ assertEquals("6 key [5]", -2, params.getColumnPos(4));
+ assertEquals("6 key [6]", 0, params.getColumnPos(5));
+ assertEquals("6 key centering", false, params.mTopRowNeedsCentering);
+ assertEquals("6 key default", WIDTH * 2, params.getDefaultKeyCoordX());
+ }
+
+ // [6] [7]
+ // [5] [3] [1] [2] [4]
+ public void testLayout7Key() {
+ MiniKeyboardLayoutParams params = new MiniKeyboardLayoutParams(
+ 7, MAX_COLUMNS, WIDTH, HEIGHT,
+ WIDTH * 5, WIDTH * 10);
+ assertEquals("7 key columns", 5, params.mNumColumns);
+ assertEquals("7 key rows", 2, params.mNumRows);
+ assertEquals("7 key left", 2, params.mLeftKeys);
+ assertEquals("7 key right", 3, params.mRightKeys);
+ assertEquals("7 key [1]", 0, params.getColumnPos(0));
+ assertEquals("7 key [2]", 1, params.getColumnPos(1));
+ assertEquals("7 key [3]", -1, params.getColumnPos(2));
+ assertEquals("7 key [4]", 2, params.getColumnPos(3));
+ assertEquals("7 key [5]", -2, params.getColumnPos(4));
+ assertEquals("7 key [6]", 0, params.getColumnPos(5));
+ assertEquals("7 key [7]", 1, params.getColumnPos(6));
+ assertEquals("7 key centering", true, params.mTopRowNeedsCentering);
+ assertEquals("7 key default", WIDTH * 2, params.getDefaultKeyCoordX());
+ }
+
+ // [8] [6] [7]
+ // [5] [3] [1] [2] [4]
+ public void testLayout8Key() {
+ MiniKeyboardLayoutParams params = new MiniKeyboardLayoutParams(
+ 8, MAX_COLUMNS, WIDTH, HEIGHT,
+ WIDTH * 5, WIDTH * 10);
+ assertEquals("8 key columns", 5, params.mNumColumns);
+ assertEquals("8 key rows", 2, params.mNumRows);
+ assertEquals("8 key left", 2, params.mLeftKeys);
+ assertEquals("8 key right", 3, params.mRightKeys);
+ assertEquals("8 key [1]", 0, params.getColumnPos(0));
+ assertEquals("8 key [2]", 1, params.getColumnPos(1));
+ assertEquals("8 key [3]", -1, params.getColumnPos(2));
+ assertEquals("8 key [4]", 2, params.getColumnPos(3));
+ assertEquals("8 key [5]", -2, params.getColumnPos(4));
+ assertEquals("8 key [6]", 0, params.getColumnPos(5));
+ assertEquals("8 key [7]", 1, params.getColumnPos(6));
+ assertEquals("8 key [8]", -1, params.getColumnPos(7));
+ assertEquals("8 key centering", false, params.mTopRowNeedsCentering);
+ assertEquals("8 key default", WIDTH * 2, params.getDefaultKeyCoordX());
+ }
+
+ // [8] [6] [7] [9]
+ // [5] [3] [1] [2] [4]
+ public void testLayout9Key() {
+ MiniKeyboardLayoutParams params = new MiniKeyboardLayoutParams(
+ 9, MAX_COLUMNS, WIDTH, HEIGHT,
+ WIDTH * 5, WIDTH * 10);
+ assertEquals("9 key columns", 5, params.mNumColumns);
+ assertEquals("9 key rows", 2, params.mNumRows);
+ assertEquals("9 key left", 2, params.mLeftKeys);
+ assertEquals("9 key right", 3, params.mRightKeys);
+ assertEquals("9 key [1]", 0, params.getColumnPos(0));
+ assertEquals("9 key [2]", 1, params.getColumnPos(1));
+ assertEquals("9 key [3]", -1, params.getColumnPos(2));
+ assertEquals("9 key [4]", 2, params.getColumnPos(3));
+ assertEquals("9 key [5]", -2, params.getColumnPos(4));
+ assertEquals("9 key [6]", 0, params.getColumnPos(5));
+ assertEquals("9 key [7]", 1, params.getColumnPos(6));
+ assertEquals("9 key [8]", -1, params.getColumnPos(7));
+ assertEquals("9 key [9]", 2, params.getColumnPos(8));
+ assertEquals("9 key centering", true, params.mTopRowNeedsCentering);
+ assertEquals("9 key default", WIDTH * 2, params.getDefaultKeyCoordX());
+ }
+
+ // Nine keys test. There is no key space for mini keyboard at left of the parent key.
+ // [6] [7] [8] [9]
+ // [1] [2] [3] [4] [5]
+ public void testLayout9KeyLeft() {
+ MiniKeyboardLayoutParams params = new MiniKeyboardLayoutParams(
+ 9, MAX_COLUMNS, WIDTH, HEIGHT,
+ 0, WIDTH * 10);
+ assertEquals("9 key left columns", 5, params.mNumColumns);
+ assertEquals("9 key left rows", 2, params.mNumRows);
+ assertEquals("9 key left left", 0, params.mLeftKeys);
+ assertEquals("9 key left right", 5, params.mRightKeys);
+ assertEquals("9 key left [1]", 0, params.getColumnPos(0));
+ assertEquals("9 key left [2]", 1, params.getColumnPos(1));
+ assertEquals("9 key left [3]", 2, params.getColumnPos(2));
+ assertEquals("9 key left [4]", 3, params.getColumnPos(3));
+ assertEquals("9 key left [5]", 4, params.getColumnPos(4));
+ assertEquals("9 key left [6]", 0, params.getColumnPos(5));
+ assertEquals("9 key left [7]", 1, params.getColumnPos(6));
+ assertEquals("9 key left [8]", 2, params.getColumnPos(7));
+ assertEquals("9 key left [9]", 3, params.getColumnPos(8));
+ assertEquals("9 key left centering", true, params.mTopRowNeedsCentering);
+ assertEquals("9 key left default", 0, params.getDefaultKeyCoordX());
+ }
+
+ // Nine keys test. There is only one key space for mini keyboard at left of the parent key.
+ // [8] [6] [7] [9]
+ // [3] [1] [2] [4] [5]
+ public void testLayout9KeyNearLeft() {
+ MiniKeyboardLayoutParams params = new MiniKeyboardLayoutParams(
+ 9, MAX_COLUMNS, WIDTH, HEIGHT,
+ WIDTH, WIDTH * 10);
+ assertEquals("9 key near left columns", 5, params.mNumColumns);
+ assertEquals("9 key near left rows", 2, params.mNumRows);
+ assertEquals("9 key near left left", 1, params.mLeftKeys);
+ assertEquals("9 key near left right", 4, params.mRightKeys);
+ assertEquals("9 key near left [1]", 0, params.getColumnPos(0));
+ assertEquals("9 key near left [2]", 1, params.getColumnPos(1));
+ assertEquals("9 key near left [3]", -1, params.getColumnPos(2));
+ assertEquals("9 key near left [4]", 2, params.getColumnPos(3));
+ assertEquals("9 key near left [5]", 3, params.getColumnPos(4));
+ assertEquals("9 key near left [6]", 0, params.getColumnPos(5));
+ assertEquals("9 key near left [7]", 1, params.getColumnPos(6));
+ assertEquals("9 key near left [8]", -1, params.getColumnPos(7));
+ assertEquals("9 key near left [9]", 2, params.getColumnPos(8));
+ assertEquals("9 key near left centering", true, params.mTopRowNeedsCentering);
+ assertEquals("9 key near left default", WIDTH, params.getDefaultKeyCoordX());
+ }
+
+
+ // Nine keys test. There is no key space for mini keyboard at right of the parent key.
+ // [9] [8] [7] [6]
+ // [5] [4] [3] [2] [1]
+ public void testLayout9KeyRight() {
+ MiniKeyboardLayoutParams params = new MiniKeyboardLayoutParams(
+ 9, MAX_COLUMNS, WIDTH, HEIGHT,
+ WIDTH * 9, WIDTH * 10);
+ assertEquals("9 key right columns", 5, params.mNumColumns);
+ assertEquals("9 key right rows", 2, params.mNumRows);
+ assertEquals("9 key right left", 4, params.mLeftKeys);
+ assertEquals("9 key right right", 1, params.mRightKeys);
+ assertEquals("9 key right [1]", 0, params.getColumnPos(0));
+ assertEquals("9 key right [2]", -1, params.getColumnPos(1));
+ assertEquals("9 key right [3]", -2, params.getColumnPos(2));
+ assertEquals("9 key right [4]", -3, params.getColumnPos(3));
+ assertEquals("9 key right [5]", -4, params.getColumnPos(4));
+ assertEquals("9 key right [6]", 0, params.getColumnPos(5));
+ assertEquals("9 key right [7]", -1, params.getColumnPos(6));
+ assertEquals("9 key right [8]", -2, params.getColumnPos(7));
+ assertEquals("9 key right [9]", -3, params.getColumnPos(8));
+ assertEquals("9 key right centering", true, params.mTopRowNeedsCentering);
+ assertEquals("9 key right default", WIDTH * 4, params.getDefaultKeyCoordX());
+ }
+
+ // Nine keys test. There is only one key space for mini keyboard at right of the parent key.
+ // [9] [8] [6] [7]
+ // [5] [4] [3] [1] [2]
+ public void testLayout9KeyNearRight() {
+ MiniKeyboardLayoutParams params = new MiniKeyboardLayoutParams(
+ 9, MAX_COLUMNS, WIDTH, HEIGHT,
+ WIDTH * 8, WIDTH * 10);
+ assertEquals("9 key near right columns", 5, params.mNumColumns);
+ assertEquals("9 key near right rows", 2, params.mNumRows);
+ assertEquals("9 key near right left", 3, params.mLeftKeys);
+ assertEquals("9 key near right right", 2, params.mRightKeys);
+ assertEquals("9 key near right [1]", 0, params.getColumnPos(0));
+ assertEquals("9 key near right [2]", 1, params.getColumnPos(1));
+ assertEquals("9 key near right [3]", -1, params.getColumnPos(2));
+ assertEquals("9 key near right [4]", -2, params.getColumnPos(3));
+ assertEquals("9 key near right [5]", -3, params.getColumnPos(4));
+ assertEquals("9 key near right [6]", 0, params.getColumnPos(5));
+ assertEquals("9 key near right [7]", 1, params.getColumnPos(6));
+ assertEquals("9 key near right [8]", -1, params.getColumnPos(7));
+ assertEquals("9 key near right [9]", -2, params.getColumnPos(8));
+ assertEquals("9 key near right centering", true, params.mTopRowNeedsCentering);
+ assertEquals("9 key near right default", WIDTH * 3, params.getDefaultKeyCoordX());
+ }
+}