Support fixed order more keys

Change-Id: I979f54e8b54243da4d23cfbe08198d2aa495f870
diff --git a/tests/src/com/android/inputmethod/keyboard/MoreKeysKeyboardBuilderTests.java b/tests/src/com/android/inputmethod/keyboard/MoreKeysKeyboardBuilderTests.java
index 1a1d643..90bbf7e 100644
--- a/tests/src/com/android/inputmethod/keyboard/MoreKeysKeyboardBuilderTests.java
+++ b/tests/src/com/android/inputmethod/keyboard/MoreKeysKeyboardBuilderTests.java
@@ -61,409 +61,626 @@
 
     // More keys keyboard layout test.
     // "[n]" represents n-th key position in more keys keyboard.
-    // "[1]" is the default key.
+    // "<1>" is the default key.
 
-    // [1]
+    // <1>
     public void testLayout1KeyMax5M0() {
         MoreKeysKeyboardParams params = createParams(1, 5, XPOS_M0);
         assertEquals("1 key max 5 M0 columns", 1, params.mNumColumns);
         assertEquals("1 key max 5 M0 rows", 1, params.mNumRows);
         assertEquals("1 key max 5 M0 left", 0, params.mLeftKeys);
         assertEquals("1 key max 5 M0 right", 1, params.mRightKeys);
-        assertEquals("1 key max 5 M0 [1]", 0, params.getColumnPos(0));
+        assertEquals("1 key max 5 M0 <1>", 0, params.getColumnPos(0));
         assertEquals("1 key max 5 M0 adjust", 0, params.mTopRowAdjustment);
         assertEquals("1 key max 5 M0 default", WIDTH * 0, params.getDefaultKeyCoordX());
     }
 
-    // |[1]
+    // |<1>
     public void testLayout1KeyMax5L0() {
         MoreKeysKeyboardParams params = createParams(1, 5, XPOS_L0);
         assertEquals("1 key max 5 L0 columns", 1, params.mNumColumns);
         assertEquals("1 key max 5 L0 rows", 1, params.mNumRows);
         assertEquals("1 key max 5 L0 left", 0, params.mLeftKeys);
         assertEquals("1 key max 5 L0 right", 1, params.mRightKeys);
-        assertEquals("1 key max 5 L0 [1]", 0, params.getColumnPos(0));
+        assertEquals("1 key max 5 L0 <1>", 0, params.getColumnPos(0));
         assertEquals("1 key max 5 L0 adjust", 0, params.mTopRowAdjustment);
         assertEquals("1 key max 5 L0 default", WIDTH * 0, params.getDefaultKeyCoordX());
     }
 
-    // |___ [1]
+    // |___ <1>
     public void testLayout1KeyMax5L1() {
         MoreKeysKeyboardParams params = createParams(1, 5, XPOS_L1);
         assertEquals("1 key max 5 L1 columns", 1, params.mNumColumns);
         assertEquals("1 key max 5 L1 rows", 1, params.mNumRows);
         assertEquals("1 key max 5 L1 left", 0, params.mLeftKeys);
         assertEquals("1 key max 5 L1 right", 1, params.mRightKeys);
-        assertEquals("1 key max 5 L1 [1]", 0, params.getColumnPos(0));
+        assertEquals("1 key max 5 L1 <1>", 0, params.getColumnPos(0));
         assertEquals("1 key max 5 L1 adjust", 0, params.mTopRowAdjustment);
         assertEquals("1 key max 5 L1 default", WIDTH * 0, params.getDefaultKeyCoordX());
     }
 
-    // |___ ___ [1]
+    // |___ ___ <1>
     public void testLayout1KeyMax5L2() {
         MoreKeysKeyboardParams params = createParams(1, 5, XPOS_L2);
         assertEquals("1 key max 5 L2 columns", 1, params.mNumColumns);
         assertEquals("1 key max 5 L2 rows", 1, params.mNumRows);
         assertEquals("1 key max 5 L2 left", 0, params.mLeftKeys);
         assertEquals("1 key max 5 L2 right", 1, params.mRightKeys);
-        assertEquals("1 key max 5 L2 [1]", 0, params.getColumnPos(0));
+        assertEquals("1 key max 5 L2 <1>", 0, params.getColumnPos(0));
         assertEquals("1 key max 5 L2 adjust", 0, params.mTopRowAdjustment);
         assertEquals("1 key max 5 L2 default", WIDTH * 0, params.getDefaultKeyCoordX());
     }
 
-    // [1]|
+    // <1>|
     public void testLayout1KeyMax5R0() {
         MoreKeysKeyboardParams params = createParams(1, 5, XPOS_R0);
         assertEquals("1 key max 5 R0 columns", 1, params.mNumColumns);
         assertEquals("1 key max 5 R0 rows", 1, params.mNumRows);
         assertEquals("1 key max 5 R0 left", 0, params.mLeftKeys);
         assertEquals("1 key max 5 R0 right", 1, params.mRightKeys);
-        assertEquals("1 key max 5 R0 [1]", 0, params.getColumnPos(0));
+        assertEquals("1 key max 5 R0 <1>", 0, params.getColumnPos(0));
         assertEquals("1 key max 5 R0 adjust", 0, params.mTopRowAdjustment);
         assertEquals("1 key max 5 R0 default", WIDTH * 0, params.getDefaultKeyCoordX());
     }
 
-    // [1] ___|
+    // <1> ___|
     public void testLayout1KeyMax5R1() {
         MoreKeysKeyboardParams params = createParams(1, 5, XPOS_R1);
         assertEquals("1 key max 5 R1 columns", 1, params.mNumColumns);
         assertEquals("1 key max 5 R1 rows", 1, params.mNumRows);
         assertEquals("1 key max 5 R1 left", 0, params.mLeftKeys);
         assertEquals("1 key max 5 R1 right", 1, params.mRightKeys);
-        assertEquals("1 key max 5 R1 [1]", 0, params.getColumnPos(0));
+        assertEquals("1 key max 5 R1 <1>", 0, params.getColumnPos(0));
         assertEquals("1 key max 5 R1 adjust", 0, params.mTopRowAdjustment);
         assertEquals("1 key max 5 R1 default", WIDTH * 0, params.getDefaultKeyCoordX());
     }
 
-    // [1] ___ ___|
+    // <1> ___ ___|
     public void testLayout1KeyMax5R2() {
         MoreKeysKeyboardParams params = createParams(1, 5, XPOS_R2);
         assertEquals("1 key max 5 R2 columns", 1, params.mNumColumns);
         assertEquals("1 key max 5 R2 rows", 1, params.mNumRows);
         assertEquals("1 key max 5 R2 left", 0, params.mLeftKeys);
         assertEquals("1 key max 5 R2 right", 1, params.mRightKeys);
-        assertEquals("1 key max 5 R2 [1]", 0, params.getColumnPos(0));
+        assertEquals("1 key max 5 R2 <1>", 0, params.getColumnPos(0));
         assertEquals("1 key max 5 R2 adjust", 0, params.mTopRowAdjustment);
         assertEquals("1 key max 5 R2 default", WIDTH * 0, params.getDefaultKeyCoordX());
     }
 
-    // [1] [2]
+    // <1> [2]
     public void testLayout2KeyMax5M0() {
         MoreKeysKeyboardParams params = createParams(2, 5, XPOS_M0);
         assertEquals("2 key max 5 M0 columns", 2, params.mNumColumns);
         assertEquals("2 key max 5 M0 rows", 1, params.mNumRows);
         assertEquals("2 key max 5 M0 left", 0, params.mLeftKeys);
         assertEquals("2 key max 5 M0 right", 2, params.mRightKeys);
-        assertEquals("2 key max 5 M0 [1]", 0, params.getColumnPos(0));
+        assertEquals("2 key max 5 M0 <1>", 0, params.getColumnPos(0));
         assertEquals("2 key max 5 M0 [2]", 1, params.getColumnPos(1));
         assertEquals("2 key max 5 M0 adjust", 0, params.mTopRowAdjustment);
         assertEquals("2 key max 5 M0 default", WIDTH * 0, params.getDefaultKeyCoordX());
     }
 
-    // |[1] [2]
+    // |<1> [2]
     public void testLayout2KeyMax5L0() {
         MoreKeysKeyboardParams params = createParams(2, 5, XPOS_L0);
         assertEquals("2 key max 5 L0 columns", 2, params.mNumColumns);
         assertEquals("2 key max 5 L0 rows", 1, params.mNumRows);
         assertEquals("2 key max 5 L0 left", 0, params.mLeftKeys);
         assertEquals("2 key max 5 L0 right", 2, params.mRightKeys);
-        assertEquals("2 key max 5 L0 [1]", 0, params.getColumnPos(0));
+        assertEquals("2 key max 5 L0 <1>", 0, params.getColumnPos(0));
         assertEquals("2 key max 5 L0 [2]", 1, params.getColumnPos(1));
         assertEquals("2 key max 5 L0 adjust", 0, params.mTopRowAdjustment);
         assertEquals("2 key max 5 L0 default", WIDTH * 0, params.getDefaultKeyCoordX());
     }
 
-    // |___ [1] [2]
+    // |___ <1> [2]
     public void testLayout2KeyMax5L1() {
         MoreKeysKeyboardParams params = createParams(2, 5, XPOS_L1);
         assertEquals("2 key max 5 L1 columns", 2, params.mNumColumns);
         assertEquals("2 key max 5 L1 rows", 1, params.mNumRows);
         assertEquals("2 key max 5 L1 left", 0, params.mLeftKeys);
         assertEquals("2 key max 5 L1 right", 2, params.mRightKeys);
-        assertEquals("2 key max 5 L1 [1]", 0, params.getColumnPos(0));
+        assertEquals("2 key max 5 L1 <1>", 0, params.getColumnPos(0));
         assertEquals("2 key max 5 L1 [2]", 1, params.getColumnPos(1));
         assertEquals("2 key max 5 L1 adjust", 0, params.mTopRowAdjustment);
         assertEquals("2 key max 5 L1 default", WIDTH * 0, params.getDefaultKeyCoordX());
     }
 
-    // |___ ___ [1] [2]
+    // |___ ___ <1> [2]
     public void testLayout2KeyMax5L2() {
         MoreKeysKeyboardParams params = createParams(2, 5, XPOS_L2);
         assertEquals("2 key max 5 L2 columns", 2, params.mNumColumns);
         assertEquals("2 key max 5 L2 rows", 1, params.mNumRows);
         assertEquals("2 key max 5 L2 left", 0, params.mLeftKeys);
         assertEquals("2 key max 5 L2 right", 2, params.mRightKeys);
-        assertEquals("2 key max 5 L2 [1]", 0, params.getColumnPos(0));
+        assertEquals("2 key max 5 L2 <1>", 0, params.getColumnPos(0));
         assertEquals("2 key max 5 L2 [2]", 1, params.getColumnPos(1));
         assertEquals("2 key max 5 L2 adjust", 0, params.mTopRowAdjustment);
         assertEquals("2 key max 5 L2 default", WIDTH * 0, params.getDefaultKeyCoordX());
     }
 
-    // [2] [1]|
+    // [2] <1>|
     public void testLayout2KeyMax5R0() {
         MoreKeysKeyboardParams params = createParams(2, 5, XPOS_R0);
         assertEquals("2 key max 5 R0 columns", 2, params.mNumColumns);
         assertEquals("2 key max 5 R0 rows", 1, params.mNumRows);
         assertEquals("2 key max 5 R0 left", 1, params.mLeftKeys);
         assertEquals("2 key max 5 R0 right", 1, params.mRightKeys);
-        assertEquals("2 key max 5 R0 [1]", 0, params.getColumnPos(0));
+        assertEquals("2 key max 5 R0 <1>", 0, params.getColumnPos(0));
         assertEquals("2 key max 5 R0 [2]", -1, params.getColumnPos(1));
         assertEquals("2 key max 5 R0 adjust", 0, params.mTopRowAdjustment);
         assertEquals("2 key max 5 R0 default", WIDTH * 1, params.getDefaultKeyCoordX());
     }
 
-    // [2] [1] ___|
+    // [2] <1> ___|
     public void testLayout2KeyMax5R1() {
         MoreKeysKeyboardParams params = createParams(2, 5, XPOS_R1);
         assertEquals("2 key max 5 R1 columns", 2, params.mNumColumns);
         assertEquals("2 key max 5 R1 rows", 1, params.mNumRows);
         assertEquals("2 key max 5 R1 left", 1, params.mLeftKeys);
         assertEquals("2 key max 5 R1 right", 1, params.mRightKeys);
-        assertEquals("2 key max 5 R1 [1]", 0, params.getColumnPos(0));
+        assertEquals("2 key max 5 R1 <1>", 0, params.getColumnPos(0));
         assertEquals("2 key max 5 R1 [2]", -1, params.getColumnPos(1));
         assertEquals("2 key max 5 R1 adjust", 0, params.mTopRowAdjustment);
         assertEquals("2 key max 5 R1 default", WIDTH * 1, params.getDefaultKeyCoordX());
     }
 
-    // [1] [2] ___|
+    // <1> [2] ___|
     public void testLayout2KeyMax5R2() {
         MoreKeysKeyboardParams params = createParams(2, 5, XPOS_R2);
         assertEquals("2 key max 5 R2 columns", 2, params.mNumColumns);
         assertEquals("2 key max 5 R2 rows", 1, params.mNumRows);
         assertEquals("2 key max 5 R2 left", 0, params.mLeftKeys);
         assertEquals("2 key max 5 R2 right", 2, params.mRightKeys);
-        assertEquals("2 key max 5 R2 [1]", 0, params.getColumnPos(0));
+        assertEquals("2 key max 5 R2 <1>", 0, params.getColumnPos(0));
         assertEquals("2 key max 5 R2 [2]", 1, params.getColumnPos(1));
         assertEquals("2 key max 5 R2 adjust", 0, params.mTopRowAdjustment);
         assertEquals("2 key max 5 R2 default", WIDTH * 0, params.getDefaultKeyCoordX());
     }
 
-    // [3] [1] [2]
+    // [3] <1> [2]
     public void testLayout3KeyMax5M0() {
         MoreKeysKeyboardParams params = createParams(3, 5, XPOS_M0);
-        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 adjust", 0, params.mTopRowAdjustment);
-        assertEquals("3 key default", WIDTH * 1, params.getDefaultKeyCoordX());
+        assertEquals("3 key max 5 M0 columns", 3, params.mNumColumns);
+        assertEquals("3 key max 5 M0 rows", 1, params.mNumRows);
+        assertEquals("3 key max 5 M0 left", 1, params.mLeftKeys);
+        assertEquals("3 key max 5 M0 right", 2, params.mRightKeys);
+        assertEquals("3 key max 5 M0 <1>", 0, params.getColumnPos(0));
+        assertEquals("3 key max 5 M0 [2]", 1, params.getColumnPos(1));
+        assertEquals("3 key max 5 M0 [3]", -1, params.getColumnPos(2));
+        assertEquals("3 key max 5 M0 adjust", 0, params.mTopRowAdjustment);
+        assertEquals("3 key max 5 M0 default", WIDTH * 1, params.getDefaultKeyCoordX());
     }
 
-    // |[1] [2] [3]
+    // |<1> [2] [3]
     public void testLayout3KeyMax5L0() {
         MoreKeysKeyboardParams params = createParams(3, 5, XPOS_L0);
         assertEquals("3 key max 5 L0 columns", 3, params.mNumColumns);
         assertEquals("3 key max 5 L0 rows", 1, params.mNumRows);
         assertEquals("3 key max 5 L0 left", 0, params.mLeftKeys);
         assertEquals("3 key max 5 L0 right", 3, params.mRightKeys);
-        assertEquals("3 key max 5 L0 [1]", 0, params.getColumnPos(0));
+        assertEquals("3 key max 5 L0 <1>", 0, params.getColumnPos(0));
         assertEquals("3 key max 5 L0 [2]", 1, params.getColumnPos(1));
         assertEquals("3 key max 5 L0 [3]", 2, params.getColumnPos(2));
         assertEquals("3 key max 5 L0 adjust", 0, params.mTopRowAdjustment);
         assertEquals("3 key max 5 L0 default", WIDTH * 0, params.getDefaultKeyCoordX());
     }
 
-    // |___ [1] [2] [3]
+    // |___ <1> [2] [3]
     public void testLayout3KeyMax5L1() {
         MoreKeysKeyboardParams params = createParams(3, 5, XPOS_L1);
         assertEquals("3 key max 5 L1 columns", 3, params.mNumColumns);
         assertEquals("3 key max 5 L1 rows", 1, params.mNumRows);
         assertEquals("3 key max 5 L1 left", 0, params.mLeftKeys);
         assertEquals("3 key max 5 L1 right", 3, params.mRightKeys);
-        assertEquals("3 key max 5 L1 [1]", 0, params.getColumnPos(0));
+        assertEquals("3 key max 5 L1 <1>", 0, params.getColumnPos(0));
         assertEquals("3 key max 5 L1 [2]", 1, params.getColumnPos(1));
         assertEquals("3 key max 5 L1 [3]", 2, params.getColumnPos(2));
         assertEquals("3 key max 5 L1 adjust", 0, params.mTopRowAdjustment);
         assertEquals("3 key max 5 L1 default", WIDTH * 0, params.getDefaultKeyCoordX());
     }
 
-    // |___ [3] [1] [2]
+    // |___ [3] <1> [2]
     public void testLayout3KeyMax5L2() {
         MoreKeysKeyboardParams params = createParams(3, 5, XPOS_L2);
         assertEquals("3 key max 5 L2 columns", 3, params.mNumColumns);
         assertEquals("3 key max 5 L2 rows", 1, params.mNumRows);
         assertEquals("3 key max 5 L2 left", 1, params.mLeftKeys);
         assertEquals("3 key max 5 L2 right", 2, params.mRightKeys);
-        assertEquals("3 key max 5 L2 [1]", 0, params.getColumnPos(0));
+        assertEquals("3 key max 5 L2 <1>", 0, params.getColumnPos(0));
         assertEquals("3 key max 5 L2 [2]", 1, params.getColumnPos(1));
         assertEquals("3 key max 5 L2 [3]", -1, params.getColumnPos(2));
         assertEquals("3 key max 5 L2 adjust", 0, params.mTopRowAdjustment);
         assertEquals("3 key max 5 L2 default", WIDTH * 1, params.getDefaultKeyCoordX());
     }
 
-    // [3] [2] [1]|
+    // [3] [2] <1>|
     public void testLayout3KeyMax5R0() {
         MoreKeysKeyboardParams params = createParams(3, 5, XPOS_R0);
         assertEquals("3 key max 5 R0 columns", 3, params.mNumColumns);
         assertEquals("3 key max 5 R0 rows", 1, params.mNumRows);
         assertEquals("3 key max 5 R0 left", 2, params.mLeftKeys);
         assertEquals("3 key max 5 R0 right", 1, params.mRightKeys);
-        assertEquals("3 key max 5 R0 [1]", 0, params.getColumnPos(0));
+        assertEquals("3 key max 5 R0 <1>", 0, params.getColumnPos(0));
         assertEquals("3 key max 5 R0 [2]", -1, params.getColumnPos(1));
         assertEquals("3 key max 5 R0 [3]", -2, params.getColumnPos(2));
         assertEquals("3 key max 5 R0 adjust", 0, params.mTopRowAdjustment);
         assertEquals("3 key max 5 R0 default", WIDTH * 2, params.getDefaultKeyCoordX());
     }
 
-    // [3] [2] [1] ___|
+    // [3] [2] <1> ___|
     public void testLayout3KeyMax5R1() {
         MoreKeysKeyboardParams params = createParams(3, 5, XPOS_R1);
         assertEquals("3 key max 5 R1 columns", 3, params.mNumColumns);
         assertEquals("3 key max 5 R1 rows", 1, params.mNumRows);
         assertEquals("3 key max 5 R1 left", 2, params.mLeftKeys);
         assertEquals("3 key max 5 R1 right", 1, params.mRightKeys);
-        assertEquals("3 key max 5 R1 [1]", 0, params.getColumnPos(0));
+        assertEquals("3 key max 5 R1 <1>", 0, params.getColumnPos(0));
         assertEquals("3 key max 5 R1 [2]", -1, params.getColumnPos(1));
         assertEquals("3 key max 5 R1 [3]", -2, params.getColumnPos(2));
         assertEquals("3 key max 5 R1 adjust", 0, params.mTopRowAdjustment);
         assertEquals("3 key max 5 R1 default", WIDTH * 2, params.getDefaultKeyCoordX());
     }
 
-    // [3] [1] [2] ___|
+    // [3] <1> [2] ___|
     public void testLayout3KeyMax5R2() {
         MoreKeysKeyboardParams params = createParams(3, 5, XPOS_R2);
         assertEquals("3 key max 5 R2 columns", 3, params.mNumColumns);
         assertEquals("3 key max 5 R2 rows", 1, params.mNumRows);
         assertEquals("3 key max 5 R2 left", 1, params.mLeftKeys);
         assertEquals("3 key max 5 R2 right", 2, params.mRightKeys);
-        assertEquals("3 key max 5 R2 [1]", 0, params.getColumnPos(0));
+        assertEquals("3 key max 5 R2 <1>", 0, params.getColumnPos(0));
         assertEquals("3 key max 5 R2 [2]", 1, params.getColumnPos(1));
         assertEquals("3 key max 5 R2 [3]", -1, params.getColumnPos(2));
         assertEquals("3 key max 5 R2 adjust", 0, params.mTopRowAdjustment);
         assertEquals("3 key max 5 R2 default", WIDTH * 1, params.getDefaultKeyCoordX());
     }
 
-    //   [3]
-    // [1] [2]
+    // [3]
+    // <1> [2]
     public void testLayout3KeyMax2M0() {
         MoreKeysKeyboardParams params = createParams(3, 2, XPOS_M0);
-        assertEquals("3 key max 2 columns", 2, params.mNumColumns);
-        assertEquals("3 key max 2 rows", 2, params.mNumRows);
-        assertEquals("3 key max 2 left", 0, params.mLeftKeys);
-        assertEquals("3 key max 2 right", 2, params.mRightKeys);
-        assertEquals("3 key max 2 [1]", 0, params.getColumnPos(0));
-        assertEquals("3 key max 2 [2]", 1, params.getColumnPos(1));
-        assertEquals("3 key max 2 [3]", 0, params.getColumnPos(2));
-        assertEquals("3 key max 2 adjust", 1, params.mTopRowAdjustment);
-        assertEquals("3 key max 2 default", WIDTH * 0, params.getDefaultKeyCoordX());
+        assertEquals("3 key max 2 M0 columns", 2, params.mNumColumns);
+        assertEquals("3 key max 2 M0 rows", 2, params.mNumRows);
+        assertEquals("3 key max 2 M0 left", 0, params.mLeftKeys);
+        assertEquals("3 key max 2 M0 right", 2, params.mRightKeys);
+        assertEquals("3 key max 2 M0 <1>", 0, params.getColumnPos(0));
+        assertEquals("3 key max 2 M0 [2]", 1, params.getColumnPos(1));
+        assertEquals("3 key max 2 M0 [3]", 0, params.getColumnPos(2));
+        assertEquals("3 key max 2 M0 adjust", 0, params.mTopRowAdjustment);
+        assertEquals("3 key max 2 M0 default", WIDTH * 0, params.getDefaultKeyCoordX());
     }
 
-    // |  [3]
-    // |[1] [2]
+    // |[3]
+    // |<1> [2]
     public void testLayout3KeyMax2L0() {
         MoreKeysKeyboardParams params = createParams(3, 2, XPOS_L0);
         assertEquals("3 key max 2 L0 columns", 2, params.mNumColumns);
         assertEquals("3 key max 2 L0 rows", 2, params.mNumRows);
         assertEquals("3 key max 2 L0 left", 0, params.mLeftKeys);
         assertEquals("3 key max 2 L0 right", 2, params.mRightKeys);
-        assertEquals("3 key max 2 L0 [1]", 0, params.getColumnPos(0));
+        assertEquals("3 key max 2 L0 <1>", 0, params.getColumnPos(0));
         assertEquals("3 key max 2 L0 [2]", 1, params.getColumnPos(1));
         assertEquals("3 key max 2 L0 [3]", 0, params.getColumnPos(2));
-        assertEquals("3 key max 2 L0 adjust", 1, params.mTopRowAdjustment);
+        assertEquals("3 key max 2 L0 adjust", 0, params.mTopRowAdjustment);
         assertEquals("3 key max 2 L0 default", WIDTH * 0, params.getDefaultKeyCoordX());
     }
 
-    // |___   [3]
-    // |___ [1] [2]
+    // |___ [3]
+    // |___ <1> [2]
     public void testLayout3KeyMax2L1() {
         MoreKeysKeyboardParams params = createParams(3, 2, XPOS_L1);
         assertEquals("3 key max 2 L1 columns", 2, params.mNumColumns);
         assertEquals("3 key max 2 L1 rows", 2, params.mNumRows);
         assertEquals("3 key max 2 L1 left", 0, params.mLeftKeys);
         assertEquals("3 key max 2 L1 right", 2, params.mRightKeys);
-        assertEquals("3 key max 2 L1 [1]", 0, params.getColumnPos(0));
+        assertEquals("3 key max 2 L1 <1>", 0, params.getColumnPos(0));
         assertEquals("3 key max 2 L1 [2]", 1, params.getColumnPos(1));
         assertEquals("3 key max 2 L1 [3]", 0, params.getColumnPos(2));
-        assertEquals("3 key max 2 L1 adjust", 1, params.mTopRowAdjustment);
+        assertEquals("3 key max 2 L1 adjust", 0, params.mTopRowAdjustment);
         assertEquals("3 key max 2 L1 default", WIDTH * 0, params.getDefaultKeyCoordX());
     }
 
-    // |          [3]
-    // |___ ___ [1] [2]
+    // |        [3]
+    // |___ ___ <1> [2]
     public void testLayout3KeyMax2L2() {
         MoreKeysKeyboardParams params = createParams(3, 2, XPOS_L2);
         assertEquals("3 key max 2 L2 columns", 2, params.mNumColumns);
         assertEquals("3 key max 2 L2 rows", 2, params.mNumRows);
         assertEquals("3 key max 2 L2 left", 0, params.mLeftKeys);
         assertEquals("3 key max 2 L2 right", 2, params.mRightKeys);
-        assertEquals("3 key max 2 L2 [1]", 0, params.getColumnPos(0));
+        assertEquals("3 key max 2 L2 <1>", 0, params.getColumnPos(0));
         assertEquals("3 key max 2 L2 [2]", 1, params.getColumnPos(1));
         assertEquals("3 key max 2 L2 [3]", 0, params.getColumnPos(2));
-        assertEquals("3 key max 2 L2 adjust", 1, params.mTopRowAdjustment);
+        assertEquals("3 key max 2 L2 adjust", 0, params.mTopRowAdjustment);
         assertEquals("3 key max 2 L2 default", WIDTH * 0, params.getDefaultKeyCoordX());
     }
 
-    //   [3]  |
-    // [2] [1]|
+    //     [3]|
+    // [2] <1>|
     public void testLayout3KeyMax2R0() {
         MoreKeysKeyboardParams params = createParams(3, 2, XPOS_R0);
         assertEquals("3 key max 2 R0 columns", 2, params.mNumColumns);
         assertEquals("3 key max 2 R0 rows", 2, params.mNumRows);
         assertEquals("3 key max 2 R0 left", 1, params.mLeftKeys);
         assertEquals("3 key max 2 R0 right", 1, params.mRightKeys);
-        assertEquals("3 key max 2 R0 [1]", 0, params.getColumnPos(0));
+        assertEquals("3 key max 2 R0 <1>", 0, params.getColumnPos(0));
         assertEquals("3 key max 2 R0 [2]", -1, params.getColumnPos(1));
         assertEquals("3 key max 2 R0 [3]", 0, params.getColumnPos(2));
-        assertEquals("3 key max 2 R0 adjust", -1, params.mTopRowAdjustment);
+        assertEquals("3 key max 2 R0 adjust", 0, params.mTopRowAdjustment);
         assertEquals("3 key max 2 R0 default", WIDTH * 1, params.getDefaultKeyCoordX());
     }
 
-    //   [3]      |
-    // [2] [1] ___|
+    //     [3]    |
+    // [2] <1> ___|
     public void testLayout3KeyMax2R1() {
         MoreKeysKeyboardParams params = createParams(3, 2, XPOS_R1);
         assertEquals("3 key max 2 R1 columns", 2, params.mNumColumns);
         assertEquals("3 key max 2 R1 rows", 2, params.mNumRows);
         assertEquals("3 key max 2 R1 left", 1, params.mLeftKeys);
         assertEquals("3 key max 2 R1 right", 1, params.mRightKeys);
-        assertEquals("3 key max 2 R1 [1]", 0, params.getColumnPos(0));
+        assertEquals("3 key max 2 R1 <1>", 0, params.getColumnPos(0));
         assertEquals("3 key max 2 R1 [2]", -1, params.getColumnPos(1));
         assertEquals("3 key max 2 R1 [3]", 0, params.getColumnPos(2));
-        assertEquals("3 key max 2 R1 adjust", -1, params.mTopRowAdjustment);
+        assertEquals("3 key max 2 R1 adjust", 0, params.mTopRowAdjustment);
         assertEquals("3 key max 2 R1 default", WIDTH * 1, params.getDefaultKeyCoordX());
     }
 
-    //   [3]      |
-    // [1] [2] ___|
+    // [3]        |
+    // <1> [2] ___|
     public void testLayout3KeyMax2R2() {
         MoreKeysKeyboardParams params = createParams(3, 2, XPOS_R2);
         assertEquals("3 key max 2 R2 columns", 2, params.mNumColumns);
         assertEquals("3 key max 2 R2 rows", 2, params.mNumRows);
         assertEquals("3 key max 2 R2 left", 0, params.mLeftKeys);
         assertEquals("3 key max 2 R2 right", 2, params.mRightKeys);
-        assertEquals("3 key max 2 R2 [1]", 0, params.getColumnPos(0));
+        assertEquals("3 key max 2 R2 <1>", 0, params.getColumnPos(0));
         assertEquals("3 key max 2 R2 [2]", 1, params.getColumnPos(1));
         assertEquals("3 key max 2 R2 [3]", 0, params.getColumnPos(2));
-        assertEquals("3 key max 2 R2 adjust", 1, params.mTopRowAdjustment);
+        assertEquals("3 key max 2 R2 adjust", 0, params.mTopRowAdjustment);
         assertEquals("3 key max 2 R2 default", WIDTH * 0, params.getDefaultKeyCoordX());
     }
 
-    // [3] [1] [2] [4]
-    public void testLayout4KeyMax5M0() {
-        MoreKeysKeyboardParams params = createParams(4, 5, XPOS_M0);
-        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 adjust", 0, params.mTopRowAdjustment);
-        assertEquals("4 key default", WIDTH * 1, params.getDefaultKeyCoordX());
+    // [3] [4]
+    // <1> [2]
+    public void testLayout4KeyMax3M0() {
+        MoreKeysKeyboardParams params = createParams(4, 3, XPOS_M0);
+        assertEquals("4 key max 3 M0 columns", 2, params.mNumColumns);
+        assertEquals("4 key max 3 M0 rows", 2, params.mNumRows);
+        assertEquals("4 key max 3 M0 left", 0, params.mLeftKeys);
+        assertEquals("4 key max 3 M0 right", 2, params.mRightKeys);
+        assertEquals("4 key max 3 M0 <1>", 0, params.getColumnPos(0));
+        assertEquals("4 key max 3 M0 [2]", 1, params.getColumnPos(1));
+        assertEquals("4 key max 3 M0 [3]", 0, params.getColumnPos(2));
+        assertEquals("4 key max 3 M0 [4]", 1, params.getColumnPos(3));
+        assertEquals("4 key max 3 M0 adjust", 0, params.mTopRowAdjustment);
+        assertEquals("4 key max 3 M0 default", WIDTH * 0, params.getDefaultKeyCoordX());
     }
 
-    // |[1] [2] [3] [4]
+    // |[3] [4]
+    // |<1> [2]
+    public void testLayout4KeyMax3L0() {
+        MoreKeysKeyboardParams params = createParams(4, 3, XPOS_L0);
+        assertEquals("4 key max 3 L0 columns", 2, params.mNumColumns);
+        assertEquals("4 key max 3 L0 rows", 2, params.mNumRows);
+        assertEquals("4 key max 3 L0 left", 0, params.mLeftKeys);
+        assertEquals("4 key max 3 L0 right", 2, params.mRightKeys);
+        assertEquals("4 key max 3 L0 <1>", 0, params.getColumnPos(0));
+        assertEquals("4 key max 3 L0 [2]", 1, params.getColumnPos(1));
+        assertEquals("4 key max 3 L0 [3]", 0, params.getColumnPos(2));
+        assertEquals("4 key max 3 L0 [4]", 1, params.getColumnPos(3));
+        assertEquals("4 key max 3 L0 adjust", 0, params.mTopRowAdjustment);
+        assertEquals("4 key max 3 L0 default", WIDTH * 0, params.getDefaultKeyCoordX());
+    }
+
+    // |___ [3] [4]
+    // |___ <1> [2]
+    public void testLayout4KeyMax3L1() {
+        MoreKeysKeyboardParams params = createParams(4, 3, XPOS_L1);
+        assertEquals("4 key max 3 L1 columns", 2, params.mNumColumns);
+        assertEquals("4 key max 3 L1 rows", 2, params.mNumRows);
+        assertEquals("4 key max 3 L1 left", 0, params.mLeftKeys);
+        assertEquals("4 key max 3 L1 right", 2, params.mRightKeys);
+        assertEquals("4 key max 3 L1 <1>", 0, params.getColumnPos(0));
+        assertEquals("4 key max 3 L1 [2]", 1, params.getColumnPos(1));
+        assertEquals("4 key max 3 L1 [3]", 0, params.getColumnPos(2));
+        assertEquals("4 key max 3 L1 [4]", 1, params.getColumnPos(3));
+        assertEquals("4 key max 3 L1 adjust", 0, params.mTopRowAdjustment);
+        assertEquals("4 key max 3 L1 default", WIDTH * 0, params.getDefaultKeyCoordX());
+    }
+
+    // |___ ___ [3] [4]
+    // |___ ___ <1> [2]
+    public void testLayout4KeyMax3L2() {
+        MoreKeysKeyboardParams params = createParams(4, 3, XPOS_L2);
+        assertEquals("4 key max 3 L2 columns", 2, params.mNumColumns);
+        assertEquals("4 key max 3 L2 rows", 2, params.mNumRows);
+        assertEquals("4 key max 3 L2 left", 0, params.mLeftKeys);
+        assertEquals("4 key max 3 L2 right", 2, params.mRightKeys);
+        assertEquals("4 key max 3 L2 <1>", 0, params.getColumnPos(0));
+        assertEquals("4 key max 3 L2 [2]", 1, params.getColumnPos(1));
+        assertEquals("4 key max 3 L2 [3]", 0, params.getColumnPos(2));
+        assertEquals("4 key max 3 L2 [4]", 1, params.getColumnPos(3));
+        assertEquals("4 key max 3 L2 adjust", 0, params.mTopRowAdjustment);
+        assertEquals("4 key max 3 L2 default", WIDTH * 0, params.getDefaultKeyCoordX());
+    }
+
+    // [4] [3]|
+    // [2] <1>|
+    public void testLayout4KeyMax3R0() {
+        MoreKeysKeyboardParams params = createParams(4, 3, XPOS_R0);
+        assertEquals("4 key max 3 R0 columns", 2, params.mNumColumns);
+        assertEquals("4 key max 3 R0 rows", 2, params.mNumRows);
+        assertEquals("4 key max 3 R0 left", 1, params.mLeftKeys);
+        assertEquals("4 key max 3 R0 right", 1, params.mRightKeys);
+        assertEquals("4 key max 3 R0 <1>", 0, params.getColumnPos(0));
+        assertEquals("4 key max 3 R0 [2]", -1, params.getColumnPos(1));
+        assertEquals("4 key max 3 R0 [3]", 0, params.getColumnPos(2));
+        assertEquals("4 key max 3 R0 [4]", -1, params.getColumnPos(3));
+        assertEquals("4 key max 3 R0 adjust", 0, params.mTopRowAdjustment);
+        assertEquals("4 key max 3 R0 default", WIDTH * 1, params.getDefaultKeyCoordX());
+    }
+
+    // [4] [3] ___|
+    // [2] <1> ___|
+    public void testLayout4KeyMax3R1() {
+        MoreKeysKeyboardParams params = createParams(4, 3, XPOS_R1);
+        assertEquals("4 key max 3 R1 columns", 2, params.mNumColumns);
+        assertEquals("4 key max 3 R1 rows", 2, params.mNumRows);
+        assertEquals("4 key max 3 R1 left", 1, params.mLeftKeys);
+        assertEquals("4 key max 3 R1 right", 1, params.mRightKeys);
+        assertEquals("4 key max 3 R1 <1>", 0, params.getColumnPos(0));
+        assertEquals("4 key max 3 R1 [2]", -1, params.getColumnPos(1));
+        assertEquals("4 key max 3 R1 [3]", 0, params.getColumnPos(2));
+        assertEquals("4 key max 3 R1 [4]", -1, params.getColumnPos(3));
+        assertEquals("4 key max 3 R1 adjust", 0, params.mTopRowAdjustment);
+        assertEquals("4 key max 3 R1 default", WIDTH * 1, params.getDefaultKeyCoordX());
+    }
+
+    // [3] [4] ___|
+    // <1> [2] ___|
+    public void testLayout4KeyMax3R2() {
+        MoreKeysKeyboardParams params = createParams(4, 3, XPOS_R2);
+        assertEquals("4 key max 3 R2 columns", 2, params.mNumColumns);
+        assertEquals("4 key max 3 R2 rows", 2, params.mNumRows);
+        assertEquals("4 key max 3 R2 left", 0, params.mLeftKeys);
+        assertEquals("4 key max 3 R2 right", 2, params.mRightKeys);
+        assertEquals("4 key max 3 R2 <1>", 0, params.getColumnPos(0));
+        assertEquals("4 key max 3 R2 [2]", 1, params.getColumnPos(1));
+        assertEquals("4 key max 3 R2 [3]", 0, params.getColumnPos(2));
+        assertEquals("4 key max 3 R2 [4]", 1, params.getColumnPos(3));
+        assertEquals("4 key max 3 R2 adjust", 0, params.mTopRowAdjustment);
+        assertEquals("4 key max 3 R2 default", WIDTH * 0, params.getDefaultKeyCoordX());
+    }
+
+    // [3] <1> [2] [4]
+    public void testLayout4KeyMax4M0() {
+        MoreKeysKeyboardParams params = createParams(4, 4, XPOS_M0);
+        assertEquals("4 key max 4 M0 columns", 4, params.mNumColumns);
+        assertEquals("4 key max 4 M0 rows", 1, params.mNumRows);
+        assertEquals("4 key max 4 M0 left", 1, params.mLeftKeys);
+        assertEquals("4 key max 4 M0 right", 3, params.mRightKeys);
+        assertEquals("4 key max 4 M0 <1>", 0, params.getColumnPos(0));
+        assertEquals("4 key max 4 M0 [2]", 1, params.getColumnPos(1));
+        assertEquals("4 key max 4 M0 [3]", -1, params.getColumnPos(2));
+        assertEquals("4 key max 4 M0 [4]", 2, params.getColumnPos(3));
+        assertEquals("4 key max 4 M0 adjust", 0, params.mTopRowAdjustment);
+        assertEquals("4 key max 4 M0 default", WIDTH * 1, params.getDefaultKeyCoordX());
+    }
+
+    // |<1> [2] [3] [4]
+    public void testLayout4KeyMax4L0() {
+        MoreKeysKeyboardParams params = createParams(4, 4, XPOS_L0);
+        assertEquals("4 key max 4 L0 columns", 4, params.mNumColumns);
+        assertEquals("4 key max 4 L0 rows", 1, params.mNumRows);
+        assertEquals("4 key max 4 L0 left", 0, params.mLeftKeys);
+        assertEquals("4 key max 4 L0 right", 4, params.mRightKeys);
+        assertEquals("4 key max 4 L0 <1>", 0, params.getColumnPos(0));
+        assertEquals("4 key max 4 L0 [2]", 1, params.getColumnPos(1));
+        assertEquals("4 key max 4 L0 [3]", 2, params.getColumnPos(2));
+        assertEquals("4 key max 4 L0 [4]", 3, params.getColumnPos(3));
+        assertEquals("4 key max 4 L0 adjust", 0, params.mTopRowAdjustment);
+        assertEquals("4 key max 4 L0 default", WIDTH * 0, params.getDefaultKeyCoordX());
+    }
+
+    // |___ <1> [2] [3] [4]
+    public void testLayout4KeyMax4L1() {
+        MoreKeysKeyboardParams params = createParams(4, 4, XPOS_L1);
+        assertEquals("4 key max 4 L1 columns", 4, params.mNumColumns);
+        assertEquals("4 key max 4 L1 rows", 1, params.mNumRows);
+        assertEquals("4 key max 4 L1 left", 0, params.mLeftKeys);
+        assertEquals("4 key max 4 L1 right", 4, params.mRightKeys);
+        assertEquals("4 key max 4 L1 <1>", 0, params.getColumnPos(0));
+        assertEquals("4 key max 4 L1 [2]", 1, params.getColumnPos(1));
+        assertEquals("4 key max 4 L1 [3]", 2, params.getColumnPos(2));
+        assertEquals("4 key max 4 L1 [4]", 3, params.getColumnPos(3));
+        assertEquals("4 key max 4 L1 adjust", 0, params.mTopRowAdjustment);
+        assertEquals("4 key max 4 L1 default", WIDTH * 0, params.getDefaultKeyCoordX());
+    }
+
+    // |___ [3] <1> [2] [4]
+    public void testLayout4KeyMax4L2() {
+        MoreKeysKeyboardParams params = createParams(4, 4, XPOS_L2);
+        assertEquals("4 key max 4 L2 columns", 4, params.mNumColumns);
+        assertEquals("4 key max 4 L2 rows", 1, params.mNumRows);
+        assertEquals("4 key max 4 L2 left", 1, params.mLeftKeys);
+        assertEquals("4 key max 4 L2 right", 3, params.mRightKeys);
+        assertEquals("4 key max 4 L2 <1>", 0, params.getColumnPos(0));
+        assertEquals("4 key max 4 L2 [2]", 1, params.getColumnPos(1));
+        assertEquals("4 key max 4 L2 [3]", -1, params.getColumnPos(2));
+        assertEquals("4 key max 4 L2 [4]", 2, params.getColumnPos(3));
+        assertEquals("4 key max 4 L2 adjust", 0, params.mTopRowAdjustment);
+        assertEquals("4 key max 4 L2 default", WIDTH * 1, params.getDefaultKeyCoordX());
+    }
+
+    // [4] [3] [2] <1>|
+    public void testLayout4KeyMax4R0() {
+        MoreKeysKeyboardParams params = createParams(4, 4, XPOS_R0);
+        assertEquals("4 key max 4 R0 columns", 4, params.mNumColumns);
+        assertEquals("4 key max 4 R0 rows", 1, params.mNumRows);
+        assertEquals("4 key max 4 R0 left", 3, params.mLeftKeys);
+        assertEquals("4 key max 4 R0 right", 1, params.mRightKeys);
+        assertEquals("4 key max 4 R0 <1>", 0, params.getColumnPos(0));
+        assertEquals("4 key max 4 R0 [2]", -1, params.getColumnPos(1));
+        assertEquals("4 key max 4 R0 [3]", -2, params.getColumnPos(2));
+        assertEquals("4 key max 4 R0 [4]", -3, params.getColumnPos(3));
+        assertEquals("4 key max 4 R0 adjust", 0, params.mTopRowAdjustment);
+        assertEquals("4 key max 4 R0 default", WIDTH * 3, params.getDefaultKeyCoordX());
+    }
+
+    // [4] [3] [2] <1> ___|
+    public void testLayout4KeyMax4R1() {
+        MoreKeysKeyboardParams params = createParams(4, 4, XPOS_R1);
+        assertEquals("4 key max 4 R1 columns", 4, params.mNumColumns);
+        assertEquals("4 key max 4 R1 rows", 1, params.mNumRows);
+        assertEquals("4 key max 4 R1 left", 3, params.mLeftKeys);
+        assertEquals("4 key max 4 R1 right", 1, params.mRightKeys);
+        assertEquals("4 key max 4 R1 <1>", 0, params.getColumnPos(0));
+        assertEquals("4 key max 4 R1 [2]", -1, params.getColumnPos(1));
+        assertEquals("4 key max 4 R1 [3]", -2, params.getColumnPos(2));
+        assertEquals("4 key max 4 R1 [4]", -3, params.getColumnPos(3));
+        assertEquals("4 key max 4 R1 adjust", 0, params.mTopRowAdjustment);
+        assertEquals("4 key max 4 R1 default", WIDTH * 3, params.getDefaultKeyCoordX());
+    }
+
+    // [4] [3] <1> [2] ___|
+    public void testLayout4KeyMax4R2() {
+        MoreKeysKeyboardParams params = createParams(4, 4, XPOS_R2);
+        assertEquals("4 key max 4 R2 columns", 4, params.mNumColumns);
+        assertEquals("4 key max 4 R2 rows", 1, params.mNumRows);
+        assertEquals("4 key max 4 R2 left", 2, params.mLeftKeys);
+        assertEquals("4 key max 4 R2 right", 2, params.mRightKeys);
+        assertEquals("4 key max 4 R2 <1>", 0, params.getColumnPos(0));
+        assertEquals("4 key max 4 R2 [2]", 1, params.getColumnPos(1));
+        assertEquals("4 key max 4 R2 [3]", -1, params.getColumnPos(2));
+        assertEquals("4 key max 4 R2 [4]", -2, params.getColumnPos(3));
+        assertEquals("4 key max 4 R2 adjust", 0, params.mTopRowAdjustment);
+        assertEquals("4 key max 4 R2 default", WIDTH * 2, params.getDefaultKeyCoordX());
+    }
+
+    // [3] <1> [2] [4]
+    public void testLayout4KeyMax5M0() {
+        MoreKeysKeyboardParams params = createParams(4, 5, XPOS_M0);
+        assertEquals("4 key max 5 M0 columns", 4, params.mNumColumns);
+        assertEquals("4 key max 5 M0 rows", 1, params.mNumRows);
+        assertEquals("4 key max 5 M0 left", 1, params.mLeftKeys);
+        assertEquals("4 key max 5 M0 right", 3, params.mRightKeys);
+        assertEquals("4 key max 5 M0 <1>", 0, params.getColumnPos(0));
+        assertEquals("4 key max 5 M0 [2]", 1, params.getColumnPos(1));
+        assertEquals("4 key max 5 M0 [3]", -1, params.getColumnPos(2));
+        assertEquals("4 key max 5 M0 [4]", 2, params.getColumnPos(3));
+        assertEquals("4 key max 5 M0 adjust", 0, params.mTopRowAdjustment);
+        assertEquals("4 key max 5 M0 default", WIDTH * 1, params.getDefaultKeyCoordX());
+    }
+
+    // |<1> [2] [3] [4]
     public void testLayout4KeyMax5L0() {
         MoreKeysKeyboardParams params = createParams(4, 5, XPOS_L0);
         assertEquals("4 key max 5 L0 columns", 4, params.mNumColumns);
         assertEquals("4 key max 5 L0 rows", 1, params.mNumRows);
         assertEquals("4 key max 5 L0 left", 0, params.mLeftKeys);
         assertEquals("4 key max 5 L0 right", 4, params.mRightKeys);
-        assertEquals("4 key max 5 L0 [1]", 0, params.getColumnPos(0));
+        assertEquals("4 key max 5 L0 <1>", 0, params.getColumnPos(0));
         assertEquals("4 key max 5 L0 [2]", 1, params.getColumnPos(1));
         assertEquals("4 key max 5 L0 [3]", 2, params.getColumnPos(2));
         assertEquals("4 key max 5 L0 [4]", 3, params.getColumnPos(3));
@@ -471,14 +688,14 @@
         assertEquals("4 key max 5 L0 default", WIDTH * 0, params.getDefaultKeyCoordX());
     }
 
-    // |___ [1] [2] [3] [4]
+    // |___ <1> [2] [3] [4]
     public void testLayout4KeyMax5L1() {
         MoreKeysKeyboardParams params = createParams(4, 5, XPOS_L1);
         assertEquals("4 key max 5 L1 columns", 4, params.mNumColumns);
         assertEquals("4 key max 5 L1 rows", 1, params.mNumRows);
         assertEquals("4 key max 5 L1 left", 0, params.mLeftKeys);
         assertEquals("4 key max 5 L1 right", 4, params.mRightKeys);
-        assertEquals("4 key max 5 L1 [1]", 0, params.getColumnPos(0));
+        assertEquals("4 key max 5 L1 <1>", 0, params.getColumnPos(0));
         assertEquals("4 key max 5 L1 [2]", 1, params.getColumnPos(1));
         assertEquals("4 key max 5 L1 [3]", 2, params.getColumnPos(2));
         assertEquals("4 key max 5 L1 [4]", 3, params.getColumnPos(3));
@@ -486,14 +703,14 @@
         assertEquals("4 key max 5 L1 default", WIDTH * 0, params.getDefaultKeyCoordX());
     }
 
-    // |___ [3] [1] [2] [4]
+    // |___ [3] <1> [2] [4]
     public void testLayout4KeyMax5L2() {
         MoreKeysKeyboardParams params = createParams(4, 5, XPOS_L2);
         assertEquals("4 key max 5 L2 columns", 4, params.mNumColumns);
         assertEquals("4 key max 5 L2 rows", 1, params.mNumRows);
         assertEquals("4 key max 5 L2 left", 1, params.mLeftKeys);
         assertEquals("4 key max 5 L2 right", 3, params.mRightKeys);
-        assertEquals("4 key max 5 L2 [1]", 0, params.getColumnPos(0));
+        assertEquals("4 key max 5 L2 <1>", 0, params.getColumnPos(0));
         assertEquals("4 key max 5 L2 [2]", 1, params.getColumnPos(1));
         assertEquals("4 key max 5 L2 [3]", -1, params.getColumnPos(2));
         assertEquals("4 key max 5 L2 [4]", 2, params.getColumnPos(3));
@@ -501,14 +718,14 @@
         assertEquals("4 key max 5 L2 default", WIDTH * 1, params.getDefaultKeyCoordX());
     }
 
-    // [4] [3] [2] [1]|
+    // [4] [3] [2] <1>|
     public void testLayout4KeyMax5R0() {
         MoreKeysKeyboardParams params = createParams(4, 5, XPOS_R0);
         assertEquals("4 key max 5 R0 columns", 4, params.mNumColumns);
         assertEquals("4 key max 5 R0 rows", 1, params.mNumRows);
         assertEquals("4 key max 5 R0 left", 3, params.mLeftKeys);
         assertEquals("4 key max 5 R0 right", 1, params.mRightKeys);
-        assertEquals("4 key max 5 R0 [1]", 0, params.getColumnPos(0));
+        assertEquals("4 key max 5 R0 <1>", 0, params.getColumnPos(0));
         assertEquals("4 key max 5 R0 [2]", -1, params.getColumnPos(1));
         assertEquals("4 key max 5 R0 [3]", -2, params.getColumnPos(2));
         assertEquals("4 key max 5 R0 [4]", -3, params.getColumnPos(3));
@@ -516,14 +733,14 @@
         assertEquals("4 key max 5 R0 default", WIDTH * 3, params.getDefaultKeyCoordX());
     }
 
-    // [4] [3] [2] [1] ___|
+    // [4] [3] [2] <1> ___|
     public void testLayout4KeyMax5R1() {
         MoreKeysKeyboardParams params = createParams(4, 5, XPOS_R1);
         assertEquals("4 key max 5 R1 columns", 4, params.mNumColumns);
         assertEquals("4 key max 5 R1 rows", 1, params.mNumRows);
         assertEquals("4 key max 5 R1 left", 3, params.mLeftKeys);
         assertEquals("4 key max 5 R1 right", 1, params.mRightKeys);
-        assertEquals("4 key max 5 R1 [1]", 0, params.getColumnPos(0));
+        assertEquals("4 key max 5 R1 <1>", 0, params.getColumnPos(0));
         assertEquals("4 key max 5 R1 [2]", -1, params.getColumnPos(1));
         assertEquals("4 key max 5 R1 [3]", -2, params.getColumnPos(2));
         assertEquals("4 key max 5 R1 [4]", -3, params.getColumnPos(3));
@@ -531,14 +748,14 @@
         assertEquals("4 key max 5 R1 default", WIDTH * 3, params.getDefaultKeyCoordX());
     }
 
-    // [4] [3] [1] [2] ___|
+    // [4] [3] <1> [2] ___|
     public void testLayout4KeyMax5R2() {
         MoreKeysKeyboardParams params = createParams(4, 5, XPOS_R2);
         assertEquals("4 key max 5 R2 columns", 4, params.mNumColumns);
         assertEquals("4 key max 5 R2 rows", 1, params.mNumRows);
         assertEquals("4 key max 5 R2 left", 2, params.mLeftKeys);
         assertEquals("4 key max 5 R2 right", 2, params.mRightKeys);
-        assertEquals("4 key max 5 R2 [1]", 0, params.getColumnPos(0));
+        assertEquals("4 key max 5 R2 <1>", 0, params.getColumnPos(0));
         assertEquals("4 key max 5 R2 [2]", 1, params.getColumnPos(1));
         assertEquals("4 key max 5 R2 [3]", -1, params.getColumnPos(2));
         assertEquals("4 key max 5 R2 [4]", -2, params.getColumnPos(3));
@@ -546,30 +763,268 @@
         assertEquals("4 key max 5 R2 default", WIDTH * 2, params.getDefaultKeyCoordX());
     }
 
-    // [5] [3] [1] [2] [4]
-    public void testLayout5KeyMax5M0() {
-        MoreKeysKeyboardParams params = createParams(5, 5, XPOS_M0);
-        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 adjust", 0, params.mTopRowAdjustment);
-        assertEquals("5 key default", WIDTH * 2, params.getDefaultKeyCoordX());
+    //   [4] [5]
+    // [3] <1> [2]
+    public void testLayout5KeyMax3M0() {
+        MoreKeysKeyboardParams params = createParams(5, 3, XPOS_M0);
+        assertEquals("5 key max 3 M0 columns", 3, params.mNumColumns);
+        assertEquals("5 key max 3 M0 rows", 2, params.mNumRows);
+        assertEquals("5 key max 3 M0 left", 1, params.mLeftKeys);
+        assertEquals("5 key max 3 M0 right", 2, params.mRightKeys);
+        assertEquals("5 key max 3 M0 <1>", 0, params.getColumnPos(0));
+        assertEquals("5 key max 3 M0 [2]", 1, params.getColumnPos(1));
+        assertEquals("5 key max 3 M0 [3]", -1, params.getColumnPos(2));
+        assertEquals("5 key max 3 M0 [4]", 0, params.getColumnPos(3));
+        assertEquals("5 key max 3 M0 [5]", 1, params.getColumnPos(4));
+        assertEquals("5 key max 3 M0 adjust", -1, params.mTopRowAdjustment);
+        assertEquals("5 key max 3 M0 default", WIDTH * 1, params.getDefaultKeyCoordX());
     }
 
-    // |[1] [2] [3] [4] [5]
+    // |[4] [5]
+    // |<1> [2] [3]
+    public void testLayout5KeyMax3L0() {
+        MoreKeysKeyboardParams params = createParams(5, 3, XPOS_L0);
+        assertEquals("5 key max 3 L0 columns", 3, params.mNumColumns);
+        assertEquals("5 key max 3 L0 rows", 2, params.mNumRows);
+        assertEquals("5 key max 3 L0 left", 0, params.mLeftKeys);
+        assertEquals("5 key max 3 L0 right", 3, params.mRightKeys);
+        assertEquals("5 key max 3 L0 <1>", 0, params.getColumnPos(0));
+        assertEquals("5 key max 3 L0 [2]", 1, params.getColumnPos(1));
+        assertEquals("5 key max 3 L0 [3]", 2, params.getColumnPos(2));
+        assertEquals("5 key max 3 L0 [4]", 0, params.getColumnPos(3));
+        assertEquals("5 key max 3 L0 [5]", 1, params.getColumnPos(4));
+        assertEquals("5 key max 3 L0 adjust", 0, params.mTopRowAdjustment);
+        assertEquals("5 key max 3 L0 default", WIDTH * 0, params.getDefaultKeyCoordX());
+    }
+
+    // |___ [4] [5]
+    // |___ <1> [2] [3]
+    public void testLayout5KeyMax3L1() {
+        MoreKeysKeyboardParams params = createParams(5, 3, XPOS_L1);
+        assertEquals("5 key max 3 L1 columns", 3, params.mNumColumns);
+        assertEquals("5 key max 3 L1 rows", 2, params.mNumRows);
+        assertEquals("5 key max 3 L1 left", 0, params.mLeftKeys);
+        assertEquals("5 key max 3 L1 right", 3, params.mRightKeys);
+        assertEquals("5 key max 3 L1 <1>", 0, params.getColumnPos(0));
+        assertEquals("5 key max 3 L1 [2]", 1, params.getColumnPos(1));
+        assertEquals("5 key max 3 L1 [3]", 2, params.getColumnPos(2));
+        assertEquals("5 key max 3 L1 [4]", 0, params.getColumnPos(3));
+        assertEquals("5 key max 3 L1 [5]", 1, params.getColumnPos(4));
+        assertEquals("5 key max 3 L1 adjust", 0, params.mTopRowAdjustment);
+        assertEquals("5 key max 3 L1 default", WIDTH * 0, params.getDefaultKeyCoordX());
+    }
+
+    // |___   [4] [5]
+    // |___ [3] <1> [2]
+    public void testLayout5KeyMax3L2() {
+        MoreKeysKeyboardParams params = createParams(5, 3, XPOS_L2);
+        assertEquals("5 key max 3 L2 columns", 3, params.mNumColumns);
+        assertEquals("5 key max 3 L2 rows", 2, params.mNumRows);
+        assertEquals("5 key max 3 L2 left", 1, params.mLeftKeys);
+        assertEquals("5 key max 3 L2 right", 2, params.mRightKeys);
+        assertEquals("5 key max 3 L2 <1>", 0, params.getColumnPos(0));
+        assertEquals("5 key max 3 L2 [2]", 1, params.getColumnPos(1));
+        assertEquals("5 key max 3 L2 [3]", -1, params.getColumnPos(2));
+        assertEquals("5 key max 3 L2 [4]", 0, params.getColumnPos(3));
+        assertEquals("5 key max 3 L2 [5]", 1, params.getColumnPos(4));
+        assertEquals("5 key max 3 L2 adjust", -1, params.mTopRowAdjustment);
+        assertEquals("5 key max 3 L2 default", WIDTH * 1, params.getDefaultKeyCoordX());
+    }
+
+    //     [5] [4]|
+    // [3] [2] <1>|
+    public void testLayout5KeyMax3R0() {
+        MoreKeysKeyboardParams params = createParams(5, 3, XPOS_R0);
+        assertEquals("5 key max 3 R0 columns", 3, params.mNumColumns);
+        assertEquals("5 key max 3 R0 rows", 2, params.mNumRows);
+        assertEquals("5 key max 3 R0 left", 2, params.mLeftKeys);
+        assertEquals("5 key max 3 R0 right", 1, params.mRightKeys);
+        assertEquals("5 key max 3 R0 <1>", 0, params.getColumnPos(0));
+        assertEquals("5 key max 3 R0 [2]", -1, params.getColumnPos(1));
+        assertEquals("5 key max 3 R0 [3]", -2, params.getColumnPos(2));
+        assertEquals("5 key max 3 R0 [4]", 0, params.getColumnPos(3));
+        assertEquals("5 key max 3 R0 [5]", -1, params.getColumnPos(4));
+        assertEquals("5 key max 3 R0 adjust", 0, params.mTopRowAdjustment);
+        assertEquals("5 key max 3 R0 default", WIDTH * 2, params.getDefaultKeyCoordX());
+    }
+
+    //     [5] [4] ___|
+    // [3] [2] <1> ___|
+    public void testLayout5KeyMax3R1() {
+        MoreKeysKeyboardParams params = createParams(5, 3, XPOS_R1);
+        assertEquals("5 key max 3 R1 columns", 3, params.mNumColumns);
+        assertEquals("5 key max 3 R1 rows", 2, params.mNumRows);
+        assertEquals("5 key max 3 R1 left", 2, params.mLeftKeys);
+        assertEquals("5 key max 3 R1 right", 1, params.mRightKeys);
+        assertEquals("5 key max 3 R1 <1>", 0, params.getColumnPos(0));
+        assertEquals("5 key max 3 R1 [2]", -1, params.getColumnPos(1));
+        assertEquals("5 key max 3 R1 [3]", -2, params.getColumnPos(2));
+        assertEquals("5 key max 3 R1 [4]", 0, params.getColumnPos(3));
+        assertEquals("5 key max 3 R1 [5]", -1, params.getColumnPos(4));
+        assertEquals("5 key max 3 R1 adjust", 0, params.mTopRowAdjustment);
+        assertEquals("5 key max 3 R1 default", WIDTH * 2, params.getDefaultKeyCoordX());
+    }
+
+    //   [4] [5]   ___|
+    // [3] <1> [2] ___|
+    public void testLayout5KeyMax3R2() {
+        MoreKeysKeyboardParams params = createParams(5, 3, XPOS_R2);
+        assertEquals("5 key max 3 R2 columns", 3, params.mNumColumns);
+        assertEquals("5 key max 3 R2 rows", 2, params.mNumRows);
+        assertEquals("5 key max 3 R2 left", 1, params.mLeftKeys);
+        assertEquals("5 key max 3 R2 right", 2, params.mRightKeys);
+        assertEquals("5 key max 3 R2 <1>", 0, params.getColumnPos(0));
+        assertEquals("5 key max 3 R2 [2]", 1, params.getColumnPos(1));
+        assertEquals("5 key max 3 R2 [3]", -1, params.getColumnPos(2));
+        assertEquals("5 key max 3 R2 [4]", 0, params.getColumnPos(3));
+        assertEquals("5 key max 3 R2 [5]", 1, params.getColumnPos(4));
+        assertEquals("5 key max 3 R2 adjust", -1, params.mTopRowAdjustment);
+        assertEquals("5 key max 3 R2 default", WIDTH * 1, params.getDefaultKeyCoordX());
+    }
+
+    //   [4] [5]
+    // [3] <1> [2]
+    public void testLayout5KeyMax4M0() {
+        MoreKeysKeyboardParams params = createParams(5, 4, XPOS_M0);
+        assertEquals("5 key max 4 M0 columns", 3, params.mNumColumns);
+        assertEquals("5 key max 4 M0 rows", 2, params.mNumRows);
+        assertEquals("5 key max 4 M0 left", 1, params.mLeftKeys);
+        assertEquals("5 key max 4 M0 right", 2, params.mRightKeys);
+        assertEquals("5 key max 4 M0 <1>", 0, params.getColumnPos(0));
+        assertEquals("5 key max 4 M0 [2]", 1, params.getColumnPos(1));
+        assertEquals("5 key max 4 M0 [3]", -1, params.getColumnPos(2));
+        assertEquals("5 key max 4 M0 [4]", 0, params.getColumnPos(3));
+        assertEquals("5 key max 4 M0 [5]", 1, params.getColumnPos(4));
+        assertEquals("5 key max 4 M0 adjust", -1, params.mTopRowAdjustment);
+        assertEquals("5 key max 4 M0 default", WIDTH * 1, params.getDefaultKeyCoordX());
+    }
+
+    // |[4] [5]
+    // |<1> [2] [3]
+    public void testLayout5KeyMax4L0() {
+        MoreKeysKeyboardParams params = createParams(5, 4, XPOS_L0);
+        assertEquals("5 key max 4 L0 columns", 3, params.mNumColumns);
+        assertEquals("5 key max 4 L0 rows", 2, params.mNumRows);
+        assertEquals("5 key max 4 L0 left", 0, params.mLeftKeys);
+        assertEquals("5 key max 4 L0 right", 3, params.mRightKeys);
+        assertEquals("5 key max 4 L0 <1>", 0, params.getColumnPos(0));
+        assertEquals("5 key max 4 L0 [2]", 1, params.getColumnPos(1));
+        assertEquals("5 key max 4 L0 [3]", 2, params.getColumnPos(2));
+        assertEquals("5 key max 4 L0 [4]", 0, params.getColumnPos(3));
+        assertEquals("5 key max 4 L0 [5]", 1, params.getColumnPos(4));
+        assertEquals("5 key max 4 L0 adjust", 0, params.mTopRowAdjustment);
+        assertEquals("5 key max 4 L0 default", WIDTH * 0, params.getDefaultKeyCoordX());
+    }
+
+    // |___ [4] [5]
+    // |___ <1> [2] [3]
+    public void testLayout5KeyMax4L1() {
+        MoreKeysKeyboardParams params = createParams(5, 4, XPOS_L1);
+        assertEquals("5 key max 4 L1 columns", 3, params.mNumColumns);
+        assertEquals("5 key max 4 L1 rows", 2, params.mNumRows);
+        assertEquals("5 key max 4 L1 left", 0, params.mLeftKeys);
+        assertEquals("5 key max 4 L1 right", 3, params.mRightKeys);
+        assertEquals("5 key max 4 L1 <1>", 0, params.getColumnPos(0));
+        assertEquals("5 key max 4 L1 [2]", 1, params.getColumnPos(1));
+        assertEquals("5 key max 4 L1 [3]", 2, params.getColumnPos(2));
+        assertEquals("5 key max 4 L1 [4]", 0, params.getColumnPos(3));
+        assertEquals("5 key max 4 L1 [5]", 1, params.getColumnPos(4));
+        assertEquals("5 key max 4 L1 adjust", 0, params.mTopRowAdjustment);
+        assertEquals("5 key max 4 L1 default", WIDTH * 0, params.getDefaultKeyCoordX());
+    }
+
+    // |___   [4] [5]
+    // |___ [3] <1> [2]
+    public void testLayout5KeyMax4L2() {
+        MoreKeysKeyboardParams params = createParams(5, 4, XPOS_L2);
+        assertEquals("5 key max 4 L2 columns", 3, params.mNumColumns);
+        assertEquals("5 key max 4 L2 rows", 2, params.mNumRows);
+        assertEquals("5 key max 4 L2 left", 1, params.mLeftKeys);
+        assertEquals("5 key max 4 L2 right", 2, params.mRightKeys);
+        assertEquals("5 key max 4 L2 <1>", 0, params.getColumnPos(0));
+        assertEquals("5 key max 4 L2 [2]", 1, params.getColumnPos(1));
+        assertEquals("5 key max 4 L2 [3]", -1, params.getColumnPos(2));
+        assertEquals("5 key max 4 L2 [4]", 0, params.getColumnPos(3));
+        assertEquals("5 key max 4 L2 [5]", 1, params.getColumnPos(4));
+        assertEquals("5 key max 4 L2 adjust", -1, params.mTopRowAdjustment);
+        assertEquals("5 key max 4 L2 default", WIDTH * 1, params.getDefaultKeyCoordX());
+    }
+
+    //     [5] [4]|
+    // [3] [2] <1>|
+    public void testLayout5KeyMax4R0() {
+        MoreKeysKeyboardParams params = createParams(5, 4, XPOS_R0);
+        assertEquals("5 key max 4 R0 columns", 3, params.mNumColumns);
+        assertEquals("5 key max 4 R0 rows", 2, params.mNumRows);
+        assertEquals("5 key max 4 R0 left", 2, params.mLeftKeys);
+        assertEquals("5 key max 4 R0 right", 1, params.mRightKeys);
+        assertEquals("5 key max 4 R0 <1>", 0, params.getColumnPos(0));
+        assertEquals("5 key max 4 R0 [2]", -1, params.getColumnPos(1));
+        assertEquals("5 key max 4 R0 [3]", -2, params.getColumnPos(2));
+        assertEquals("5 key max 4 R0 [4]", 0, params.getColumnPos(3));
+        assertEquals("5 key max 4 R0 [5]", -1, params.getColumnPos(4));
+        assertEquals("5 key max 4 R0 adjust", 0, params.mTopRowAdjustment);
+        assertEquals("5 key max 4 R0 default", WIDTH * 2, params.getDefaultKeyCoordX());
+    }
+
+    //     [5] [4] ___|
+    // [3] [2] <1> ___|
+    public void testLayout5KeyMax4R1() {
+        MoreKeysKeyboardParams params = createParams(5, 4, XPOS_R1);
+        assertEquals("5 key max 4 R1 columns", 3, params.mNumColumns);
+        assertEquals("5 key max 4 R1 rows", 2, params.mNumRows);
+        assertEquals("5 key max 4 R1 left", 2, params.mLeftKeys);
+        assertEquals("5 key max 4 R1 right", 1, params.mRightKeys);
+        assertEquals("5 key max 4 R1 <1>", 0, params.getColumnPos(0));
+        assertEquals("5 key max 4 R1 [2]", -1, params.getColumnPos(1));
+        assertEquals("5 key max 4 R1 [3]", -2, params.getColumnPos(2));
+        assertEquals("5 key max 4 R1 [4]", 0, params.getColumnPos(3));
+        assertEquals("5 key max 4 R1 [5]", -1, params.getColumnPos(4));
+        assertEquals("5 key max 4 R1 adjust", 0, params.mTopRowAdjustment);
+        assertEquals("5 key max 4 R1 default", WIDTH * 2, params.getDefaultKeyCoordX());
+    }
+
+    //   [4] [5]   ___|
+    // [3] <1> [2] ___|
+    public void testLayout5KeyMax4R2() {
+        MoreKeysKeyboardParams params = createParams(5, 4, XPOS_R2);
+        assertEquals("5 key max 4 R2 columns", 3, params.mNumColumns);
+        assertEquals("5 key max 4 R2 rows", 2, params.mNumRows);
+        assertEquals("5 key max 4 R2 left", 1, params.mLeftKeys);
+        assertEquals("5 key max 4 R2 right", 2, params.mRightKeys);
+        assertEquals("5 key max 4 R2 <1>", 0, params.getColumnPos(0));
+        assertEquals("5 key max 4 R2 [2]", 1, params.getColumnPos(1));
+        assertEquals("5 key max 4 R2 [3]", -1, params.getColumnPos(2));
+        assertEquals("5 key max 4 R2 [4]", 0, params.getColumnPos(3));
+        assertEquals("5 key max 4 R2 [5]", 1, params.getColumnPos(4));
+        assertEquals("5 key max 4 R2 adjust", -1, params.mTopRowAdjustment);
+        assertEquals("5 key max 4 R2 default", WIDTH * 1, params.getDefaultKeyCoordX());
+    }
+
+    // [5] [3] <1> [2] [4]
+    public void testLayout5KeyMax5M0() {
+        MoreKeysKeyboardParams params = createParams(5, 5, XPOS_M0);
+        assertEquals("5 key max 5 M0 columns", 5, params.mNumColumns);
+        assertEquals("5 key max 5 M0 rows", 1, params.mNumRows);
+        assertEquals("5 key max 5 M0 left", 2, params.mLeftKeys);
+        assertEquals("5 key max 5 M0 right", 3, params.mRightKeys);
+        assertEquals("5 key max 5 M0 <1>", 0, params.getColumnPos(0));
+        assertEquals("5 key max 5 M0 [2]", 1, params.getColumnPos(1));
+        assertEquals("5 key max 5 M0 [3]", -1, params.getColumnPos(2));
+        assertEquals("5 key max 5 M0 [4]", 2, params.getColumnPos(3));
+        assertEquals("5 key max 5 M0 [5]", -2, params.getColumnPos(4));
+        assertEquals("5 key max 5 M0 adjust", 0, params.mTopRowAdjustment);
+        assertEquals("5 key max 5 M0 default", WIDTH * 2, params.getDefaultKeyCoordX());
+    }
+
+    // |<1> [2] [3] [4] [5]
     public void testLayout5KeyMax5L0() {
         MoreKeysKeyboardParams params = createParams(5, 5, XPOS_L0);
         assertEquals("5 key max 5 L0 columns", 5, params.mNumColumns);
         assertEquals("5 key max 5 L0 rows", 1, params.mNumRows);
         assertEquals("5 key max 5 L0 left", 0, params.mLeftKeys);
         assertEquals("5 key max 5 L0 right", 5, params.mRightKeys);
-        assertEquals("5 key max 5 L0 [1]", 0, params.getColumnPos(0));
+        assertEquals("5 key max 5 L0 <1>", 0, params.getColumnPos(0));
         assertEquals("5 key max 5 L0 [2]", 1, params.getColumnPos(1));
         assertEquals("5 key max 5 L0 [3]", 2, params.getColumnPos(2));
         assertEquals("5 key max 5 L0 [4]", 3, params.getColumnPos(3));
@@ -578,14 +1033,14 @@
         assertEquals("5 key max 5 L0 default", WIDTH * 0, params.getDefaultKeyCoordX());
     }
 
-    // |___ [1] [2] [3] [4] [5]
+    // |___ <1> [2] [3] [4] [5]
     public void testLayout5KeyMax5L1() {
         MoreKeysKeyboardParams params = createParams(5, 5, XPOS_L1);
         assertEquals("5 key max 5 L1 columns", 5, params.mNumColumns);
         assertEquals("5 key max 5 L1 rows", 1, params.mNumRows);
         assertEquals("5 key max 5 L1 left", 0, params.mLeftKeys);
         assertEquals("5 key max 5 L1 right", 5, params.mRightKeys);
-        assertEquals("5 key max 5 L1 [1]", 0, params.getColumnPos(0));
+        assertEquals("5 key max 5 L1 <1>", 0, params.getColumnPos(0));
         assertEquals("5 key max 5 L1 [2]", 1, params.getColumnPos(1));
         assertEquals("5 key max 5 L1 [3]", 2, params.getColumnPos(2));
         assertEquals("5 key max 5 L1 [4]", 3, params.getColumnPos(3));
@@ -594,14 +1049,14 @@
         assertEquals("5 key max 5 L1 default", WIDTH * 0, params.getDefaultKeyCoordX());
     }
 
-    // |___ [3] [1] [2] [4] [5]
+    // |___ [3] <1> [2] [4] [5]
     public void testLayout5KeyMax5L2() {
         MoreKeysKeyboardParams params = createParams(5, 5, XPOS_L2);
         assertEquals("5 key max 5 L2 columns", 5, params.mNumColumns);
         assertEquals("5 key max 5 L2 rows", 1, params.mNumRows);
         assertEquals("5 key max 5 L2 left", 1, params.mLeftKeys);
         assertEquals("5 key max 5 L2 right", 4, params.mRightKeys);
-        assertEquals("5 key max 5 L2 [1]", 0, params.getColumnPos(0));
+        assertEquals("5 key max 5 L2 <1>", 0, params.getColumnPos(0));
         assertEquals("5 key max 5 L2 [2]", 1, params.getColumnPos(1));
         assertEquals("5 key max 5 L2 [3]", -1, params.getColumnPos(2));
         assertEquals("5 key max 5 L2 [4]", 2, params.getColumnPos(3));
@@ -610,14 +1065,14 @@
         assertEquals("5 key max 5 L2 default", WIDTH * 1, params.getDefaultKeyCoordX());
     }
 
-    // [5] [4] [3] [2] [1]|
+    // [5] [4] [3] [2] <1>|
     public void testLayout5KeyMax5R0() {
         MoreKeysKeyboardParams params = createParams(5, 5, XPOS_R0);
         assertEquals("5 key max 5 R0 columns", 5, params.mNumColumns);
         assertEquals("5 key max 5 R0 rows", 1, params.mNumRows);
         assertEquals("5 key max 5 R0 left", 4, params.mLeftKeys);
         assertEquals("5 key max 5 R0 right", 1, params.mRightKeys);
-        assertEquals("5 key max 5 R0 [1]", 0, params.getColumnPos(0));
+        assertEquals("5 key max 5 R0 <1>", 0, params.getColumnPos(0));
         assertEquals("5 key max 5 R0 [2]", -1, params.getColumnPos(1));
         assertEquals("5 key max 5 R0 [3]", -2, params.getColumnPos(2));
         assertEquals("5 key max 5 R0 [4]", -3, params.getColumnPos(3));
@@ -626,14 +1081,14 @@
         assertEquals("5 key max 5 R0 default", WIDTH * 4, params.getDefaultKeyCoordX());
     }
 
-    // [5] [4] [3] [2] [1] ___|
+    // [5] [4] [3] [2] <1> ___|
     public void testLayout5KeyMax5R1() {
         MoreKeysKeyboardParams params = createParams(5, 5, XPOS_R1);
         assertEquals("5 key max 5 R1 columns", 5, params.mNumColumns);
         assertEquals("5 key max 5 R1 rows", 1, params.mNumRows);
         assertEquals("5 key max 5 R1 left", 4, params.mLeftKeys);
         assertEquals("5 key max 5 R1 right", 1, params.mRightKeys);
-        assertEquals("5 key max 5 R1 [1]", 0, params.getColumnPos(0));
+        assertEquals("5 key max 5 R1 <1>", 0, params.getColumnPos(0));
         assertEquals("5 key max 5 R1 [2]", -1, params.getColumnPos(1));
         assertEquals("5 key max 5 R1 [3]", -2, params.getColumnPos(2));
         assertEquals("5 key max 5 R1 [4]", -3, params.getColumnPos(3));
@@ -642,14 +1097,14 @@
         assertEquals("5 key max 5 R1 default", WIDTH * 4, params.getDefaultKeyCoordX());
     }
 
-    // [5] [4] [3] [1] [2] ___|
+    // [5] [4] [3] <1> [2] ___|
     public void testLayout5KeyMax5R2() {
         MoreKeysKeyboardParams params = createParams(5, 5, XPOS_R2);
         assertEquals("5 key max 5 R2 columns", 5, params.mNumColumns);
         assertEquals("5 key max 5 R2 rows", 1, params.mNumRows);
         assertEquals("5 key max 5 R2 left", 3, params.mLeftKeys);
         assertEquals("5 key max 5 R2 right", 2, params.mRightKeys);
-        assertEquals("5 key max 5 R2 [1]", 0, params.getColumnPos(0));
+        assertEquals("5 key max 5 R2 <1>", 0, params.getColumnPos(0));
         assertEquals("5 key max 5 R2 [2]", 1, params.getColumnPos(1));
         assertEquals("5 key max 5 R2 [3]", -1, params.getColumnPos(2));
         assertEquals("5 key max 5 R2 [4]", -2, params.getColumnPos(3));
@@ -659,32 +1114,158 @@
     }
 
     // [6] [4] [5]
-    // [3] [1] [2]
-    public void testLayout6KeyMax5M0() {
-        MoreKeysKeyboardParams params = createParams(6, 5, XPOS_M0);
-        assertEquals("6 key columns", 3, params.mNumColumns);
-        assertEquals("6 key rows", 2, params.mNumRows);
-        assertEquals("6 key left", 1, params.mLeftKeys);
-        assertEquals("6 key right", 2, 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]", 0, params.getColumnPos(3));
-        assertEquals("6 key [5]", 1, params.getColumnPos(4));
-        assertEquals("6 key [6]", -1, params.getColumnPos(5));
-        assertEquals("6 key adjust", 0, params.mTopRowAdjustment);
-        assertEquals("6 key default", WIDTH * 1, params.getDefaultKeyCoordX());
+    // [3] <1> [2]
+    public void testLayout6KeyMax4M0() {
+        MoreKeysKeyboardParams params = createParams(6, 4, XPOS_M0);
+        assertEquals("6 key max 4 M0 columns", 3, params.mNumColumns);
+        assertEquals("6 key max 4 M0 rows", 2, params.mNumRows);
+        assertEquals("6 key max 4 M0 left", 1, params.mLeftKeys);
+        assertEquals("6 key max 4 M0 right", 2, params.mRightKeys);
+        assertEquals("6 key max 4 M0 <1>", 0, params.getColumnPos(0));
+        assertEquals("6 key max 4 M0 [2]", 1, params.getColumnPos(1));
+        assertEquals("6 key max 4 M0 [3]", -1, params.getColumnPos(2));
+        assertEquals("6 key max 4 M0 [4]", 0, params.getColumnPos(3));
+        assertEquals("6 key max 4 M0 [5]", 1, params.getColumnPos(4));
+        assertEquals("6 key max 4 M0 [6]", -1, params.getColumnPos(5));
+        assertEquals("6 key max 4 M0 adjust", 0, params.mTopRowAdjustment);
+        assertEquals("6 key max 4 M0 default", WIDTH * 1, params.getDefaultKeyCoordX());
     }
 
     // |[4] [5] [6]
-    // |[1] [2] [3]
+    // |<1> [2] [3]
+    public void testLayout6KeyMax4L0() {
+        MoreKeysKeyboardParams params = createParams(6, 4, XPOS_L0);
+        assertEquals("6 key max 4 L0 columns", 3, params.mNumColumns);
+        assertEquals("6 key max 4 L0 rows", 2, params.mNumRows);
+        assertEquals("6 key max 4 L0 left", 0, params.mLeftKeys);
+        assertEquals("6 key max 4 L0 right", 3, params.mRightKeys);
+        assertEquals("6 key max 4 L0 <1>", 0, params.getColumnPos(0));
+        assertEquals("6 key max 4 L0 [2]", 1, params.getColumnPos(1));
+        assertEquals("6 key max 4 L0 [3]", 2, params.getColumnPos(2));
+        assertEquals("6 key max 4 L0 [4]", 0, params.getColumnPos(3));
+        assertEquals("6 key max 4 L0 [5]", 1, params.getColumnPos(4));
+        assertEquals("6 key max 4 L0 [6]", 2, params.getColumnPos(5));
+        assertEquals("6 key max 4 L0 adjust", 0, params.mTopRowAdjustment);
+        assertEquals("6 key max 4 L0 default", WIDTH * 0, params.getDefaultKeyCoordX());
+    }
+
+    // |___ [4] [5] [6]
+    // |___ <1> [2] [3]
+    public void testLayout6KeyMax4L1() {
+        MoreKeysKeyboardParams params = createParams(6, 4, XPOS_L1);
+        assertEquals("6 key max 4 L1 columns", 3, params.mNumColumns);
+        assertEquals("6 key max 4 L1 rows", 2, params.mNumRows);
+        assertEquals("6 key max 4 L1 left", 0, params.mLeftKeys);
+        assertEquals("6 key max 4 L1 right", 3, params.mRightKeys);
+        assertEquals("6 key max 4 L1 <1>", 0, params.getColumnPos(0));
+        assertEquals("6 key max 4 L1 [2]", 1, params.getColumnPos(1));
+        assertEquals("6 key max 4 L1 [3]", 2, params.getColumnPos(2));
+        assertEquals("6 key max 4 L1 [4]", 0, params.getColumnPos(3));
+        assertEquals("6 key max 4 L1 [5]", 1, params.getColumnPos(4));
+        assertEquals("6 key max 4 L1 [6]", 2, params.getColumnPos(5));
+        assertEquals("6 key max 4 L1 adjust", 0, params.mTopRowAdjustment);
+        assertEquals("6 key max 4 L1 default", WIDTH * 0, params.getDefaultKeyCoordX());
+    }
+
+    // |___ [6] [4] [5]
+    // |___ [3] <1> [2]
+    public void testLayout6KeyMax4L2() {
+        MoreKeysKeyboardParams params = createParams(6, 4, XPOS_L2);
+        assertEquals("6 key max 4 L2 columns", 3, params.mNumColumns);
+        assertEquals("6 key max 4 L2 rows", 2, params.mNumRows);
+        assertEquals("6 key max 4 L2 left", 1, params.mLeftKeys);
+        assertEquals("6 key max 4 L2 right", 2, params.mRightKeys);
+        assertEquals("6 key max 4 L2 <1>", 0, params.getColumnPos(0));
+        assertEquals("6 key max 4 L2 [2]", 1, params.getColumnPos(1));
+        assertEquals("6 key max 4 L2 [3]", -1, params.getColumnPos(2));
+        assertEquals("6 key max 4 L2 [4]", 0, params.getColumnPos(3));
+        assertEquals("6 key max 4 L2 [5]", 1, params.getColumnPos(4));
+        assertEquals("6 key max 4 L2 [6]", -1, params.getColumnPos(5));
+        assertEquals("6 key max 4 L2 adjust", 0, params.mTopRowAdjustment);
+        assertEquals("6 key max 4 L2 default", WIDTH * 1, params.getDefaultKeyCoordX());
+    }
+
+    // [6] [5] [4]|
+    // [3] [2] <1>|
+    public void testLayout6KeyMax4R0() {
+        MoreKeysKeyboardParams params = createParams(6, 4, XPOS_R0);
+        assertEquals("6 key max 4 R0 columns", 3, params.mNumColumns);
+        assertEquals("6 key max 4 R0 rows", 2, params.mNumRows);
+        assertEquals("6 key max 4 R0 left", 2, params.mLeftKeys);
+        assertEquals("6 key max 4 R0 right", 1, params.mRightKeys);
+        assertEquals("6 key max 4 R0 <1>", 0, params.getColumnPos(0));
+        assertEquals("6 key max 4 R0 [2]", -1, params.getColumnPos(1));
+        assertEquals("6 key max 4 R0 [3]", -2, params.getColumnPos(2));
+        assertEquals("6 key max 4 R0 [4]", 0, params.getColumnPos(3));
+        assertEquals("6 key max 4 R0 [5]", -1, params.getColumnPos(4));
+        assertEquals("6 key max 4 R0 [6]", -2, params.getColumnPos(5));
+        assertEquals("6 key max 4 R0 adjust", 0, params.mTopRowAdjustment);
+        assertEquals("6 key max 4 R0 default", WIDTH * 2, params.getDefaultKeyCoordX());
+    }
+
+    // [6] [5] [4] ___|
+    // [3] [2] <1> ___|
+    public void testLayout6KeyMax4R1() {
+        MoreKeysKeyboardParams params = createParams(6, 4, XPOS_R1);
+        assertEquals("6 key max 4 R1 columns", 3, params.mNumColumns);
+        assertEquals("6 key max 4 R1 rows", 2, params.mNumRows);
+        assertEquals("6 key max 4 R1 left", 2, params.mLeftKeys);
+        assertEquals("6 key max 4 R1 right", 1, params.mRightKeys);
+        assertEquals("6 key max 4 R1 <1>", 0, params.getColumnPos(0));
+        assertEquals("6 key max 4 R1 [2]", -1, params.getColumnPos(1));
+        assertEquals("6 key max 4 R1 [3]", -2, params.getColumnPos(2));
+        assertEquals("6 key max 4 R1 [4]", 0, params.getColumnPos(3));
+        assertEquals("6 key max 4 R1 [5]", -1, params.getColumnPos(4));
+        assertEquals("6 key max 4 R1 [6]", -2, params.getColumnPos(5));
+        assertEquals("6 key max 4 R1 adjust", 0, params.mTopRowAdjustment);
+        assertEquals("6 key max 4 R1 default", WIDTH * 2, params.getDefaultKeyCoordX());
+    }
+
+    // [6] [4] [5] ___|
+    // [3] <1> [2] ___|
+    public void testLayout6KeyMax4R2() {
+        MoreKeysKeyboardParams params = createParams(6, 4, XPOS_R2);
+        assertEquals("6 key max 4 R2 columns", 3, params.mNumColumns);
+        assertEquals("6 key max 4 R2 rows", 2, params.mNumRows);
+        assertEquals("6 key max 4 R2 left", 1, params.mLeftKeys);
+        assertEquals("6 key max 4 R2 right", 2, params.mRightKeys);
+        assertEquals("6 key max 4 R2 <1>", 0, params.getColumnPos(0));
+        assertEquals("6 key max 4 R2 [2]", 1, params.getColumnPos(1));
+        assertEquals("6 key max 4 R2 [3]", -1, params.getColumnPos(2));
+        assertEquals("6 key max 4 R2 [4]", 0, params.getColumnPos(3));
+        assertEquals("6 key max 4 R2 [5]", 1, params.getColumnPos(4));
+        assertEquals("6 key max 4 R2 [6]", -1, params.getColumnPos(5));
+        assertEquals("6 key max 4 R2 adjust", 0, params.mTopRowAdjustment);
+        assertEquals("6 key max 4 R2 default", WIDTH * 1, params.getDefaultKeyCoordX());
+    }
+
+    // [6] [4] [5]
+    // [3] <1> [2]
+    public void testLayout6KeyMax5M0() {
+        MoreKeysKeyboardParams params = createParams(6, 5, XPOS_M0);
+        assertEquals("6 key max 5 M0 columns", 3, params.mNumColumns);
+        assertEquals("6 key max 5 M0 rows", 2, params.mNumRows);
+        assertEquals("6 key max 5 M0 left", 1, params.mLeftKeys);
+        assertEquals("6 key max 5 M0 right", 2, params.mRightKeys);
+        assertEquals("6 key max 5 M0 <1>", 0, params.getColumnPos(0));
+        assertEquals("6 key max 5 M0 [2]", 1, params.getColumnPos(1));
+        assertEquals("6 key max 5 M0 [3]", -1, params.getColumnPos(2));
+        assertEquals("6 key max 5 M0 [4]", 0, params.getColumnPos(3));
+        assertEquals("6 key max 5 M0 [5]", 1, params.getColumnPos(4));
+        assertEquals("6 key max 5 M0 [6]", -1, params.getColumnPos(5));
+        assertEquals("6 key max 5 M0 adjust", 0, params.mTopRowAdjustment);
+        assertEquals("6 key max 5 M0 default", WIDTH * 1, params.getDefaultKeyCoordX());
+    }
+
+    // |[4] [5] [6]
+    // |<1> [2] [3]
     public void testLayout6KeyMax5L0() {
         MoreKeysKeyboardParams params = createParams(6, 5, XPOS_L0);
         assertEquals("6 key max 5 L0 columns", 3, params.mNumColumns);
         assertEquals("6 key max 5 L0 rows", 2, params.mNumRows);
         assertEquals("6 key max 5 L0 left", 0, params.mLeftKeys);
         assertEquals("6 key max 5 L0 right", 3, params.mRightKeys);
-        assertEquals("6 key max 5 L0 [1]", 0, params.getColumnPos(0));
+        assertEquals("6 key max 5 L0 <1>", 0, params.getColumnPos(0));
         assertEquals("6 key max 5 L0 [2]", 1, params.getColumnPos(1));
         assertEquals("6 key max 5 L0 [3]", 2, params.getColumnPos(2));
         assertEquals("6 key max 5 L0 [4]", 0, params.getColumnPos(3));
@@ -695,14 +1276,14 @@
     }
 
     // |___ [4] [5] [6]
-    // |___ [1] [2] [3]
+    // |___ <1> [2] [3]
     public void testLayout6KeyMax5L1() {
         MoreKeysKeyboardParams params = createParams(6, 5, XPOS_L1);
         assertEquals("6 key max 5 L1 columns", 3, params.mNumColumns);
         assertEquals("6 key max 5 L1 rows", 2, params.mNumRows);
         assertEquals("6 key max 5 L1 left", 0, params.mLeftKeys);
         assertEquals("6 key max 5 L1 right", 3, params.mRightKeys);
-        assertEquals("6 key max 5 L1 [1]", 0, params.getColumnPos(0));
+        assertEquals("6 key max 5 L1 <1>", 0, params.getColumnPos(0));
         assertEquals("6 key max 5 L1 [2]", 1, params.getColumnPos(1));
         assertEquals("6 key max 5 L1 [3]", 2, params.getColumnPos(2));
         assertEquals("6 key max 5 L1 [4]", 0, params.getColumnPos(3));
@@ -713,14 +1294,14 @@
     }
 
     // |___ [6] [4] [5]
-    // |___ [3] [1] [2]
+    // |___ [3] <1> [2]
     public void testLayout6KeyMax5L2() {
         MoreKeysKeyboardParams params = createParams(6, 5, XPOS_L2);
         assertEquals("6 key max 5 L2 columns", 3, params.mNumColumns);
         assertEquals("6 key max 5 L2 rows", 2, params.mNumRows);
         assertEquals("6 key max 5 L2 left", 1, params.mLeftKeys);
         assertEquals("6 key max 5 L2 right", 2, params.mRightKeys);
-        assertEquals("6 key max 5 L2 [1]", 0, params.getColumnPos(0));
+        assertEquals("6 key max 5 L2 <1>", 0, params.getColumnPos(0));
         assertEquals("6 key max 5 L2 [2]", 1, params.getColumnPos(1));
         assertEquals("6 key max 5 L2 [3]", -1, params.getColumnPos(2));
         assertEquals("6 key max 5 L2 [4]", 0, params.getColumnPos(3));
@@ -731,14 +1312,14 @@
     }
 
     // [6] [5] [4]|
-    // [3] [2] [1]|
+    // [3] [2] <1>|
     public void testLayout6KeyMax5R0() {
         MoreKeysKeyboardParams params = createParams(6, 5, XPOS_R0);
         assertEquals("6 key max 5 R0 columns", 3, params.mNumColumns);
         assertEquals("6 key max 5 R0 rows", 2, params.mNumRows);
         assertEquals("6 key max 5 R0 left", 2, params.mLeftKeys);
         assertEquals("6 key max 5 R0 right", 1, params.mRightKeys);
-        assertEquals("6 key max 5 R0 [1]", 0, params.getColumnPos(0));
+        assertEquals("6 key max 5 R0 <1>", 0, params.getColumnPos(0));
         assertEquals("6 key max 5 R0 [2]", -1, params.getColumnPos(1));
         assertEquals("6 key max 5 R0 [3]", -2, params.getColumnPos(2));
         assertEquals("6 key max 5 R0 [4]", 0, params.getColumnPos(3));
@@ -749,14 +1330,14 @@
     }
 
     // [6] [5] [4] ___|
-    // [3] [2] [1] ___|
+    // [3] [2] <1> ___|
     public void testLayout6KeyMax5R1() {
         MoreKeysKeyboardParams params = createParams(6, 5, XPOS_R1);
         assertEquals("6 key max 5 R1 columns", 3, params.mNumColumns);
         assertEquals("6 key max 5 R1 rows", 2, params.mNumRows);
         assertEquals("6 key max 5 R1 left", 2, params.mLeftKeys);
         assertEquals("6 key max 5 R1 right", 1, params.mRightKeys);
-        assertEquals("6 key max 5 R1 [1]", 0, params.getColumnPos(0));
+        assertEquals("6 key max 5 R1 <1>", 0, params.getColumnPos(0));
         assertEquals("6 key max 5 R1 [2]", -1, params.getColumnPos(1));
         assertEquals("6 key max 5 R1 [3]", -2, params.getColumnPos(2));
         assertEquals("6 key max 5 R1 [4]", 0, params.getColumnPos(3));
@@ -767,14 +1348,14 @@
     }
 
     // [6] [4] [5] ___|
-    // [3] [1] [2] ___|
+    // [3] <1> [2] ___|
     public void testLayout6KeyMax5R2() {
         MoreKeysKeyboardParams params = createParams(6, 5, XPOS_R2);
         assertEquals("6 key max 5 R2 columns", 3, params.mNumColumns);
         assertEquals("6 key max 5 R2 rows", 2, params.mNumRows);
         assertEquals("6 key max 5 R2 left", 1, params.mLeftKeys);
         assertEquals("6 key max 5 R2 right", 2, params.mRightKeys);
-        assertEquals("6 key max 5 R2 [1]", 0, params.getColumnPos(0));
+        assertEquals("6 key max 5 R2 <1>", 0, params.getColumnPos(0));
         assertEquals("6 key max 5 R2 [2]", 1, params.getColumnPos(1));
         assertEquals("6 key max 5 R2 [3]", -1, params.getColumnPos(2));
         assertEquals("6 key max 5 R2 [4]", 0, params.getColumnPos(3));
@@ -784,147 +1365,14 @@
         assertEquals("6 key max 5 R2 default", WIDTH * 1, params.getDefaultKeyCoordX());
     }
 
-    //   [7] [5] [6]
-    // [3] [1] [2] [4]
-    public void testLayout7KeyMax5M0() {
-        MoreKeysKeyboardParams params = createParams(7, 5, XPOS_M0);
-        assertEquals("7 key columns", 4, params.mNumColumns);
-        assertEquals("7 key rows", 2, params.mNumRows);
-        assertEquals("7 key left", 1, 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]", 0, params.getColumnPos(4));
-        assertEquals("7 key [6]", 1, params.getColumnPos(5));
-        assertEquals("7 key [7]", -1, params.getColumnPos(6));
-        assertEquals("7 key adjust", 1, params.mTopRowAdjustment);
-        assertEquals("7 key default", WIDTH * 1, params.getDefaultKeyCoordX());
-    }
-
-    // |  [5] [6] [7]
-    // |[1] [2] [3] [4]
-    public void testLayout7KeyMax5L0() {
-        MoreKeysKeyboardParams params = createParams(7, 5, XPOS_L0);
-        assertEquals("7 key max 5 L0 columns", 4, params.mNumColumns);
-        assertEquals("7 key max 5 L0 rows", 2, params.mNumRows);
-        assertEquals("7 key max 5 L0 left", 0, params.mLeftKeys);
-        assertEquals("7 key max 5 L0 right", 4, params.mRightKeys);
-        assertEquals("7 key max 5 L0 [1]", 0, params.getColumnPos(0));
-        assertEquals("7 key max 5 L0 [2]", 1, params.getColumnPos(1));
-        assertEquals("7 key max 5 L0 [3]", 2, params.getColumnPos(2));
-        assertEquals("7 key max 5 L0 [4]", 3, params.getColumnPos(3));
-        assertEquals("7 key max 5 L0 [5]", 0, params.getColumnPos(4));
-        assertEquals("7 key max 5 L0 [6]", 1, params.getColumnPos(5));
-        assertEquals("7 key max 5 L0 [7]", 2, params.getColumnPos(6));
-        assertEquals("7 key max 5 L0 adjust", 1, params.mTopRowAdjustment);
-        assertEquals("7 key max 5 L0 default", WIDTH * 0, params.getDefaultKeyCoordX());
-    }
-
-    // |___   [5] [6] [7]
-    // |___ [1] [2] [3] [4]
-    public void testLayout7KeyMax5L1() {
-        MoreKeysKeyboardParams params = createParams(7, 5, XPOS_L1);
-        assertEquals("7 key max 5 L1 columns", 4, params.mNumColumns);
-        assertEquals("7 key max 5 L1 rows", 2, params.mNumRows);
-        assertEquals("7 key max 5 L1 left", 0, params.mLeftKeys);
-        assertEquals("7 key max 5 L1 right", 4, params.mRightKeys);
-        assertEquals("7 key max 5 L1 [1]", 0, params.getColumnPos(0));
-        assertEquals("7 key max 5 L1 [2]", 1, params.getColumnPos(1));
-        assertEquals("7 key max 5 L1 [3]", 2, params.getColumnPos(2));
-        assertEquals("7 key max 5 L1 [4]", 3, params.getColumnPos(3));
-        assertEquals("7 key max 5 L1 [5]", 0, params.getColumnPos(4));
-        assertEquals("7 key max 5 L1 [6]", 1, params.getColumnPos(5));
-        assertEquals("7 key max 5 L1 [7]", 2, params.getColumnPos(6));
-        assertEquals("7 key max 5 L1 adjust", 1, params.mTopRowAdjustment);
-        assertEquals("7 key max 5 L1 default", WIDTH * 0, params.getDefaultKeyCoordX());
-    }
-
-    // |___   [7] [5] [6]
-    // |___ [3] [1] [2] [4]
-    public void testLayout7KeyMax5L2() {
-        MoreKeysKeyboardParams params = createParams(7, 5, XPOS_L2);
-        assertEquals("7 key max 5 L2 columns", 4, params.mNumColumns);
-        assertEquals("7 key max 5 L2 rows", 2, params.mNumRows);
-        assertEquals("7 key max 5 L2 left", 1, params.mLeftKeys);
-        assertEquals("7 key max 5 L2 right", 3, params.mRightKeys);
-        assertEquals("7 key max 5 L2 [1]", 0, params.getColumnPos(0));
-        assertEquals("7 key max 5 L2 [2]", 1, params.getColumnPos(1));
-        assertEquals("7 key max 5 L2 [3]", -1, params.getColumnPos(2));
-        assertEquals("7 key max 5 L2 [4]", 2, params.getColumnPos(3));
-        assertEquals("7 key max 5 L2 [5]", 0, params.getColumnPos(4));
-        assertEquals("7 key max 5 L2 [6]", 1, params.getColumnPos(5));
-        assertEquals("7 key max 5 L2 [7]", -1, params.getColumnPos(6));
-        assertEquals("7 key max 5 L2 adjust", 1, params.mTopRowAdjustment);
-        assertEquals("7 key max 5 L2 default", WIDTH * 1, params.getDefaultKeyCoordX());
-    }
-
-    //   [7] [6] [5]  |
-    // [4] [3] [2] [1]|
-    public void testLayout7KeyMax5R0() {
-        MoreKeysKeyboardParams params = createParams(7, 5, XPOS_R0);
-        assertEquals("7 key max 5 R0 columns", 4, params.mNumColumns);
-        assertEquals("7 key max 5 R0 rows", 2, params.mNumRows);
-        assertEquals("7 key max 5 R0 left", 3, params.mLeftKeys);
-        assertEquals("7 key max 5 R0 right", 1, params.mRightKeys);
-        assertEquals("7 key max 5 R0 [1]", 0, params.getColumnPos(0));
-        assertEquals("7 key max 5 R0 [2]", -1, params.getColumnPos(1));
-        assertEquals("7 key max 5 R0 [3]", -2, params.getColumnPos(2));
-        assertEquals("7 key max 5 R0 [4]", -3, params.getColumnPos(3));
-        assertEquals("7 key max 5 R0 [5]", 0, params.getColumnPos(4));
-        assertEquals("7 key max 5 R0 [6]", -1, params.getColumnPos(5));
-        assertEquals("7 key max 5 R0 [7]", -2, params.getColumnPos(6));
-        assertEquals("7 key max 5 R0 adjust", -1, params.mTopRowAdjustment);
-        assertEquals("7 key max 5 R0 default", WIDTH * 3, params.getDefaultKeyCoordX());
-    }
-
-    //   [7] [6] [5]   ___|
-    // [4] [3] [2] [1] ___|
-    public void testLayout7KeyMax5R1() {
-        MoreKeysKeyboardParams params = createParams(7, 5, XPOS_R1);
-        assertEquals("7 key max 5 R1 columns", 4, params.mNumColumns);
-        assertEquals("7 key max 5 R1 rows", 2, params.mNumRows);
-        assertEquals("7 key max 5 R1 left", 3, params.mLeftKeys);
-        assertEquals("7 key max 5 R1 right", 1, params.mRightKeys);
-        assertEquals("7 key max 5 R1 [1]", 0, params.getColumnPos(0));
-        assertEquals("7 key max 5 R1 [2]", -1, params.getColumnPos(1));
-        assertEquals("7 key max 5 R1 [3]", -2, params.getColumnPos(2));
-        assertEquals("7 key max 5 R1 [4]", -3, params.getColumnPos(3));
-        assertEquals("7 key max 5 R1 [5]", 0, params.getColumnPos(4));
-        assertEquals("7 key max 5 R1 [6]", -1, params.getColumnPos(5));
-        assertEquals("7 key max 5 R1 [7]", -2, params.getColumnPos(6));
-        assertEquals("7 key max 5 R1 adjust", -1, params.mTopRowAdjustment);
-        assertEquals("7 key max 5 R1 default", WIDTH * 3, params.getDefaultKeyCoordX());
-    }
-
-    //   [7] [5] [6]   ___|
-    // [4] [3] [1] [2] ___|
-    public void testLayout7KeyMax5R2() {
-        MoreKeysKeyboardParams params = createParams(7, 5, XPOS_R2);
-        assertEquals("7 key max 5 R2 columns", 4, params.mNumColumns);
-        assertEquals("7 key max 5 R2 rows", 2, params.mNumRows);
-        assertEquals("7 key max 5 R2 left", 2, params.mLeftKeys);
-        assertEquals("7 key max 5 R2 right", 2, params.mRightKeys);
-        assertEquals("7 key max 5 R2 [1]", 0, params.getColumnPos(0));
-        assertEquals("7 key max 5 R2 [2]", 1, params.getColumnPos(1));
-        assertEquals("7 key max 5 R2 [3]", -1, params.getColumnPos(2));
-        assertEquals("7 key max 5 R2 [4]", -2, params.getColumnPos(3));
-        assertEquals("7 key max 5 R2 [5]", 0, params.getColumnPos(4));
-        assertEquals("7 key max 5 R2 [6]", 1, params.getColumnPos(5));
-        assertEquals("7 key max 5 R2 [7]", -1, params.getColumnPos(6));
-        assertEquals("7 key max 5 R2 adjust", -1, params.mTopRowAdjustment);
-        assertEquals("7 key max 5 R2 default", WIDTH * 2, params.getDefaultKeyCoordX());
-    }
-
-    // |[1] [2] [3] [4] [5] [6] [7] ___ ___ ___|
+    // |<1> [2] [3] [4] [5] [6] [7] ___ ___ ___|
     public void testLayout7KeyMax7L0() {
         MoreKeysKeyboardParams params = createParams(7, 7, XPOS_L0);
         assertEquals("7 key max 7 L0 columns", 7, params.mNumColumns);
         assertEquals("7 key max 7 L0 rows", 1, params.mNumRows);
         assertEquals("7 key max 7 L0 left", 0, params.mLeftKeys);
         assertEquals("7 key max 7 L0 right", 7, params.mRightKeys);
-        assertEquals("7 key max 7 L0 [1]", 0, params.getColumnPos(0));
+        assertEquals("7 key max 7 L0 <1>", 0, params.getColumnPos(0));
         assertEquals("7 key max 7 L0 [2]", 1, params.getColumnPos(1));
         assertEquals("7 key max 7 L0 [3]", 2, params.getColumnPos(2));
         assertEquals("7 key max 7 L0 [4]", 3, params.getColumnPos(3));
@@ -935,14 +1383,14 @@
         assertEquals("7 key max 7 L0 default", WIDTH * 0, params.getDefaultKeyCoordX());
     }
 
-    // |___ [1] [2] [3] [4] [5] [6] [7] ___ ___|
+    // |___ <1> [2] [3] [4] [5] [6] [7] ___ ___|
     public void testLayout7KeyMax7L1() {
         MoreKeysKeyboardParams params = createParams(7, 7, XPOS_L1);
         assertEquals("7 key max 7 L1 columns", 7, params.mNumColumns);
         assertEquals("7 key max 7 L1 rows", 1, params.mNumRows);
         assertEquals("7 key max 7 L1 left", 0, params.mLeftKeys);
         assertEquals("7 key max 7 L1 right", 7, params.mRightKeys);
-        assertEquals("7 key max 7 L1 [1]", 0, params.getColumnPos(0));
+        assertEquals("7 key max 7 L1 <1>", 0, params.getColumnPos(0));
         assertEquals("7 key max 7 L1 [2]", 1, params.getColumnPos(1));
         assertEquals("7 key max 7 L1 [3]", 2, params.getColumnPos(2));
         assertEquals("7 key max 7 L1 [4]", 3, params.getColumnPos(3));
@@ -953,14 +1401,14 @@
         assertEquals("7 key max 7 L1 default", WIDTH * 0, params.getDefaultKeyCoordX());
     }
 
-    // |___ [3] [1] [2] [4] [5] [6] [7] ___ ___|
+    // |___ [3] <1> [2] [4] [5] [6] [7] ___ ___|
     public void testLayout7KeyMax7L2() {
         MoreKeysKeyboardParams params = createParams(7, 7, XPOS_L2);
         assertEquals("7 key max 7 L2 columns", 7, params.mNumColumns);
         assertEquals("7 key max 7 L2 rows", 1, params.mNumRows);
         assertEquals("7 key max 7 L2 left", 1, params.mLeftKeys);
         assertEquals("7 key max 7 L2 right", 6, params.mRightKeys);
-        assertEquals("7 key max 7 L2 [1]", 0, params.getColumnPos(0));
+        assertEquals("7 key max 7 L2 <1>", 0, params.getColumnPos(0));
         assertEquals("7 key max 7 L2 [2]", 1, params.getColumnPos(1));
         assertEquals("7 key max 7 L2 [3]", -1, params.getColumnPos(2));
         assertEquals("7 key max 7 L2 [4]", 2, params.getColumnPos(3));
@@ -971,14 +1419,14 @@
         assertEquals("7 key max 7 L2 default", WIDTH * 1, params.getDefaultKeyCoordX());
     }
 
-    // |___ [5] [3] [1] [2] [4] [6] [7] ___ ___|
+    // |___ [5] [3] <1> [2] [4] [6] [7] ___ ___|
     public void testLayout7KeyMax7L3() {
         MoreKeysKeyboardParams params = createParams(7, 7, XPOS_L3);
         assertEquals("7 key max 7 L3 columns", 7, params.mNumColumns);
         assertEquals("7 key max 7 L3 rows", 1, params.mNumRows);
         assertEquals("7 key max 7 L3 left", 2, params.mLeftKeys);
         assertEquals("7 key max 7 L3 right", 5, params.mRightKeys);
-        assertEquals("7 key max 7 L3 [1]", 0, params.getColumnPos(0));
+        assertEquals("7 key max 7 L3 <1>", 0, params.getColumnPos(0));
         assertEquals("7 key max 7 L3 [2]", 1, params.getColumnPos(1));
         assertEquals("7 key max 7 L3 [3]", -1, params.getColumnPos(2));
         assertEquals("7 key max 7 L3 [4]", 2, params.getColumnPos(3));
@@ -989,14 +1437,14 @@
         assertEquals("7 key max 7 L3 default", WIDTH * 2, params.getDefaultKeyCoordX());
     }
 
-    // |___ [7] [5] [3] [1] [2] [4] [6] ___ ___|
+    // |___ [7] [5] [3] <1> [2] [4] [6] ___ ___|
     public void testLayout7KeyMax7M0() {
         MoreKeysKeyboardParams params = createParams(7, 7, XPOS_M0);
         assertEquals("7 key max 7 M0 columns", 7, params.mNumColumns);
         assertEquals("7 key max 7 M0 rows", 1, params.mNumRows);
         assertEquals("7 key max 7 M0 left", 3, params.mLeftKeys);
         assertEquals("7 key max 7 M0 right", 4, params.mRightKeys);
-        assertEquals("7 key max 7 M0 [1]", 0, params.getColumnPos(0));
+        assertEquals("7 key max 7 M0 <1>", 0, params.getColumnPos(0));
         assertEquals("7 key max 7 M0 [2]", 1, params.getColumnPos(1));
         assertEquals("7 key max 7 M0 [3]", -1, params.getColumnPos(2));
         assertEquals("7 key max 7 M0 [4]", 2, params.getColumnPos(3));
@@ -1007,14 +1455,14 @@
         assertEquals("7 key max 7 M0 default", WIDTH * 3, params.getDefaultKeyCoordX());
     }
 
-    // |___ ___ [7] [5] [3] [1] [2] [4] [6] ___|
+    // |___ ___ [7] [5] [3] <1> [2] [4] [6] ___|
     public void testLayout7KeyMax7M1() {
         MoreKeysKeyboardParams params = createParams(7, 7, XPOS_M1);
         assertEquals("7 key max 7 M1 columns", 7, params.mNumColumns);
         assertEquals("7 key max 7 M1 rows", 1, params.mNumRows);
         assertEquals("7 key max 7 M1 left", 3, params.mLeftKeys);
         assertEquals("7 key max 7 M1 right", 4, params.mRightKeys);
-        assertEquals("7 key max 7 M1 [1]", 0, params.getColumnPos(0));
+        assertEquals("7 key max 7 M1 <1>", 0, params.getColumnPos(0));
         assertEquals("7 key max 7 M1 [2]", 1, params.getColumnPos(1));
         assertEquals("7 key max 7 M1 [3]", -1, params.getColumnPos(2));
         assertEquals("7 key max 7 M1 [4]", 2, params.getColumnPos(3));
@@ -1025,14 +1473,14 @@
         assertEquals("7 key max 7 M1 default", WIDTH * 3, params.getDefaultKeyCoordX());
     }
 
-    // |___ ___ [7] [6] [5] [3] [1] [2] [4] ___|
+    // |___ ___ [7] [6] [5] [3] <1> [2] [4] ___|
     public void testLayout7KeyMax7R3() {
         MoreKeysKeyboardParams params = createParams(7, 7, XPOS_R3);
         assertEquals("7 key max 7 R3 columns", 7, params.mNumColumns);
         assertEquals("7 key max 7 R3 rows", 1, params.mNumRows);
         assertEquals("7 key max 7 R3 left", 4, params.mLeftKeys);
         assertEquals("7 key max 7 R3 right", 3, params.mRightKeys);
-        assertEquals("7 key max 7 R3 [1]", 0, params.getColumnPos(0));
+        assertEquals("7 key max 7 R3 <1>", 0, params.getColumnPos(0));
         assertEquals("7 key max 7 R3 [2]", 1, params.getColumnPos(1));
         assertEquals("7 key max 7 R3 [3]", -1, params.getColumnPos(2));
         assertEquals("7 key max 7 R3 [4]", 2, params.getColumnPos(3));
@@ -1043,14 +1491,14 @@
         assertEquals("7 key max 7 R3 default", WIDTH * 4, params.getDefaultKeyCoordX());
     }
 
-    // |___ ___ [7] [6] [5] [4] [3] [1] [2] ___|
+    // |___ ___ [7] [6] [5] [4] [3] <1> [2] ___|
     public void testLayout7KeyMax7R2() {
         MoreKeysKeyboardParams params = createParams(7, 7, XPOS_R2);
         assertEquals("7 key max 7 R2 columns", 7, params.mNumColumns);
         assertEquals("7 key max 7 R2 rows", 1, params.mNumRows);
         assertEquals("7 key max 7 R2 left", 5, params.mLeftKeys);
         assertEquals("7 key max 7 R2 right", 2, params.mRightKeys);
-        assertEquals("7 key max 7 R2 [1]", 0, params.getColumnPos(0));
+        assertEquals("7 key max 7 R2 <1>", 0, params.getColumnPos(0));
         assertEquals("7 key max 7 R2 [2]", 1, params.getColumnPos(1));
         assertEquals("7 key max 7 R2 [3]", -1, params.getColumnPos(2));
         assertEquals("7 key max 7 R2 [4]", -2, params.getColumnPos(3));
@@ -1061,14 +1509,14 @@
         assertEquals("7 key max 7 R2 default", WIDTH * 5, params.getDefaultKeyCoordX());
     }
 
-    // |___ ___ [7] [6] [5] [4] [3] [2] [1] ___|
+    // |___ ___ [7] [6] [5] [4] [3] [2] <1> ___|
     public void testLayout7KeyMax7R1() {
         MoreKeysKeyboardParams params = createParams(7, 7, XPOS_R1);
         assertEquals("7 key max 7 R1 columns", 7, params.mNumColumns);
         assertEquals("7 key max 7 R1 rows", 1, params.mNumRows);
         assertEquals("7 key max 7 R1 left", 6, params.mLeftKeys);
         assertEquals("7 key max 7 R1 right", 1, params.mRightKeys);
-        assertEquals("7 key max 7 R1 [1]", 0, params.getColumnPos(0));
+        assertEquals("7 key max 7 R1 <1>", 0, params.getColumnPos(0));
         assertEquals("7 key max 7 R1 [2]", -1, params.getColumnPos(1));
         assertEquals("7 key max 7 R1 [3]", -2, params.getColumnPos(2));
         assertEquals("7 key max 7 R1 [4]", -3, params.getColumnPos(3));
@@ -1079,14 +1527,14 @@
         assertEquals("7 key max 7 R1 default", WIDTH * 6, params.getDefaultKeyCoordX());
     }
 
-    // |___ ___ [7] [6] [5] [4] [3] [2] [1]|
+    // |___ ___ [7] [6] [5] [4] [3] [2] <1>|
     public void testLayout7KeyMax7R0() {
         MoreKeysKeyboardParams params = createParams(7, 7, XPOS_R0);
         assertEquals("7 key max 7 R0 columns", 7, params.mNumColumns);
         assertEquals("7 key max 7 R0 rows", 1, params.mNumRows);
         assertEquals("7 key max 7 R0 left", 6, params.mLeftKeys);
         assertEquals("7 key max 7 R0 right", 1, params.mRightKeys);
-        assertEquals("7 key max 7 R0 [1]", 0, params.getColumnPos(0));
+        assertEquals("7 key max 7 R0 <1>", 0, params.getColumnPos(0));
         assertEquals("7 key max 7 R0 [2]", -1, params.getColumnPos(1));
         assertEquals("7 key max 7 R0 [3]", -2, params.getColumnPos(2));
         assertEquals("7 key max 7 R0 [4]", -3, params.getColumnPos(3));
@@ -1097,15 +1545,288 @@
         assertEquals("7 key max 7 R0 default", WIDTH * 6, params.getDefaultKeyCoordX());
     }
 
+    //   [5] [6] [7]
+    // [3] <1> [2] [4]
+    public void testLayout7KeyMax5M0() {
+        MoreKeysKeyboardParams params = createParams(7, 5, XPOS_M0);
+        assertEquals("7 key max 5 M0 columns", 4, params.mNumColumns);
+        assertEquals("7 key max 5 M0 rows", 2, params.mNumRows);
+        assertEquals("7 key max 5 M0 left", 1, params.mLeftKeys);
+        assertEquals("7 key max 5 M0 right", 3, params.mRightKeys);
+        assertEquals("7 key max 5 M0 <1>", 0, params.getColumnPos(0));
+        assertEquals("7 key max 5 M0 [2]", 1, params.getColumnPos(1));
+        assertEquals("7 key max 5 M0 [3]", -1, params.getColumnPos(2));
+        assertEquals("7 key max 5 M0 [4]", 2, params.getColumnPos(3));
+        assertEquals("7 key max 5 M0 [5]", 0, params.getColumnPos(4));
+        assertEquals("7 key max 5 M0 [6]", 1, params.getColumnPos(5));
+        assertEquals("7 key max 5 M0 [7]", 2, params.getColumnPos(6));
+        assertEquals("7 key max 5 M0 adjust", -1, params.mTopRowAdjustment);
+        assertEquals("7 key max 5 M0 default", WIDTH * 1, params.getDefaultKeyCoordX());
+    }
+
+    // |[5] [6] [7]
+    // |<1> [2] [3] [4]
+    public void testLayout7KeyMax5L0() {
+        MoreKeysKeyboardParams params = createParams(7, 5, XPOS_L0);
+        assertEquals("7 key max 5 L0 columns", 4, params.mNumColumns);
+        assertEquals("7 key max 5 L0 rows", 2, params.mNumRows);
+        assertEquals("7 key max 5 L0 left", 0, params.mLeftKeys);
+        assertEquals("7 key max 5 L0 right", 4, params.mRightKeys);
+        assertEquals("7 key max 5 L0 <1>", 0, params.getColumnPos(0));
+        assertEquals("7 key max 5 L0 [2]", 1, params.getColumnPos(1));
+        assertEquals("7 key max 5 L0 [3]", 2, params.getColumnPos(2));
+        assertEquals("7 key max 5 L0 [4]", 3, params.getColumnPos(3));
+        assertEquals("7 key max 5 L0 [5]", 0, params.getColumnPos(4));
+        assertEquals("7 key max 5 L0 [6]", 1, params.getColumnPos(5));
+        assertEquals("7 key max 5 L0 [7]", 2, params.getColumnPos(6));
+        assertEquals("7 key max 5 L0 adjust", 0, params.mTopRowAdjustment);
+        assertEquals("7 key max 5 L0 default", WIDTH * 0, params.getDefaultKeyCoordX());
+    }
+
+    // |___ [5] [6] [7]
+    // |___ <1> [2] [3] [4]
+    public void testLayout7KeyMax5L1() {
+        MoreKeysKeyboardParams params = createParams(7, 5, XPOS_L1);
+        assertEquals("7 key max 5 L1 columns", 4, params.mNumColumns);
+        assertEquals("7 key max 5 L1 rows", 2, params.mNumRows);
+        assertEquals("7 key max 5 L1 left", 0, params.mLeftKeys);
+        assertEquals("7 key max 5 L1 right", 4, params.mRightKeys);
+        assertEquals("7 key max 5 L1 <1>", 0, params.getColumnPos(0));
+        assertEquals("7 key max 5 L1 [2]", 1, params.getColumnPos(1));
+        assertEquals("7 key max 5 L1 [3]", 2, params.getColumnPos(2));
+        assertEquals("7 key max 5 L1 [4]", 3, params.getColumnPos(3));
+        assertEquals("7 key max 5 L1 [5]", 0, params.getColumnPos(4));
+        assertEquals("7 key max 5 L1 [6]", 1, params.getColumnPos(5));
+        assertEquals("7 key max 5 L1 [7]", 2, params.getColumnPos(6));
+        assertEquals("7 key max 5 L1 adjust", 0, params.mTopRowAdjustment);
+        assertEquals("7 key max 5 L1 default", WIDTH * 0, params.getDefaultKeyCoordX());
+    }
+
+    // |___   [5] [6] [7]
+    // |___ [3] <1> [2] [4]
+    public void testLayout7KeyMax5L2() {
+        MoreKeysKeyboardParams params = createParams(7, 5, XPOS_L2);
+        assertEquals("7 key max 5 L2 columns", 4, params.mNumColumns);
+        assertEquals("7 key max 5 L2 rows", 2, params.mNumRows);
+        assertEquals("7 key max 5 L2 left", 1, params.mLeftKeys);
+        assertEquals("7 key max 5 L2 right", 3, params.mRightKeys);
+        assertEquals("7 key max 5 L2 <1>", 0, params.getColumnPos(0));
+        assertEquals("7 key max 5 L2 [2]", 1, params.getColumnPos(1));
+        assertEquals("7 key max 5 L2 [3]", -1, params.getColumnPos(2));
+        assertEquals("7 key max 5 L2 [4]", 2, params.getColumnPos(3));
+        assertEquals("7 key max 5 L2 [5]", 0, params.getColumnPos(4));
+        assertEquals("7 key max 5 L2 [6]", 1, params.getColumnPos(5));
+        assertEquals("7 key max 5 L2 [7]", 2, params.getColumnPos(6));
+        assertEquals("7 key max 5 L2 adjust", -1, params.mTopRowAdjustment);
+        assertEquals("7 key max 5 L2 default", WIDTH * 1, params.getDefaultKeyCoordX());
+    }
+
+    //     [7] [6] [5]|
+    // [4] [3] [2] <1>|
+    public void testLayout7KeyMax5R0() {
+        MoreKeysKeyboardParams params = createParams(7, 5, XPOS_R0);
+        assertEquals("7 key max 5 R0 columns", 4, params.mNumColumns);
+        assertEquals("7 key max 5 R0 rows", 2, params.mNumRows);
+        assertEquals("7 key max 5 R0 left", 3, params.mLeftKeys);
+        assertEquals("7 key max 5 R0 right", 1, params.mRightKeys);
+        assertEquals("7 key max 5 R0 <1>", 0, params.getColumnPos(0));
+        assertEquals("7 key max 5 R0 [2]", -1, params.getColumnPos(1));
+        assertEquals("7 key max 5 R0 [3]", -2, params.getColumnPos(2));
+        assertEquals("7 key max 5 R0 [4]", -3, params.getColumnPos(3));
+        assertEquals("7 key max 5 R0 [5]", 0, params.getColumnPos(4));
+        assertEquals("7 key max 5 R0 [6]", -1, params.getColumnPos(5));
+        assertEquals("7 key max 5 R0 [7]", -2, params.getColumnPos(6));
+        assertEquals("7 key max 5 R0 adjust", 0, params.mTopRowAdjustment);
+        assertEquals("7 key max 5 R0 default", WIDTH * 3, params.getDefaultKeyCoordX());
+    }
+
+    //     [7] [6] [5] ___|
+    // [4] [3] [2] <1> ___|
+    public void testLayout7KeyMax5R1() {
+        MoreKeysKeyboardParams params = createParams(7, 5, XPOS_R1);
+        assertEquals("7 key max 5 R1 columns", 4, params.mNumColumns);
+        assertEquals("7 key max 5 R1 rows", 2, params.mNumRows);
+        assertEquals("7 key max 5 R1 left", 3, params.mLeftKeys);
+        assertEquals("7 key max 5 R1 right", 1, params.mRightKeys);
+        assertEquals("7 key max 5 R1 <1>", 0, params.getColumnPos(0));
+        assertEquals("7 key max 5 R1 [2]", -1, params.getColumnPos(1));
+        assertEquals("7 key max 5 R1 [3]", -2, params.getColumnPos(2));
+        assertEquals("7 key max 5 R1 [4]", -3, params.getColumnPos(3));
+        assertEquals("7 key max 5 R1 [5]", 0, params.getColumnPos(4));
+        assertEquals("7 key max 5 R1 [6]", -1, params.getColumnPos(5));
+        assertEquals("7 key max 5 R1 [7]", -2, params.getColumnPos(6));
+        assertEquals("7 key max 5 R1 adjust", 0, params.mTopRowAdjustment);
+        assertEquals("7 key max 5 R1 default", WIDTH * 3, params.getDefaultKeyCoordX());
+    }
+
+    //   [7] [5] [6]   ___|
+    // [4] [3] <1> [2] ___|
+    public void testLayout7KeyMax5R2() {
+        MoreKeysKeyboardParams params = createParams(7, 5, XPOS_R2);
+        assertEquals("7 key max 5 R2 columns", 4, params.mNumColumns);
+        assertEquals("7 key max 5 R2 rows", 2, params.mNumRows);
+        assertEquals("7 key max 5 R2 left", 2, params.mLeftKeys);
+        assertEquals("7 key max 5 R2 right", 2, params.mRightKeys);
+        assertEquals("7 key max 5 R2 <1>", 0, params.getColumnPos(0));
+        assertEquals("7 key max 5 R2 [2]", 1, params.getColumnPos(1));
+        assertEquals("7 key max 5 R2 [3]", -1, params.getColumnPos(2));
+        assertEquals("7 key max 5 R2 [4]", -2, params.getColumnPos(3));
+        assertEquals("7 key max 5 R2 [5]", 0, params.getColumnPos(4));
+        assertEquals("7 key max 5 R2 [6]", 1, params.getColumnPos(5));
+        assertEquals("7 key max 5 R2 [7]", -1, params.getColumnPos(6));
+        assertEquals("7 key max 5 R2 adjust", -1, params.mTopRowAdjustment);
+        assertEquals("7 key max 5 R2 default", WIDTH * 2, params.getDefaultKeyCoordX());
+    }
+
+    //     [7]
+    // [6] [4] [5]
+    // [3] <1> [2]
+    public void testLayout7KeyMax3M0() {
+        MoreKeysKeyboardParams params = createParams(7, 3, XPOS_M0);
+        assertEquals("7 key max 3 M0 columns", 3, params.mNumColumns);
+        assertEquals("7 key max 3 M0 rows", 3, params.mNumRows);
+        assertEquals("7 key max 3 M0 left", 1, params.mLeftKeys);
+        assertEquals("7 key max 3 M0 right", 2, params.mRightKeys);
+        assertEquals("7 key max 3 M0 <1>", 0, params.getColumnPos(0));
+        assertEquals("7 key max 3 M0 [2]", 1, params.getColumnPos(1));
+        assertEquals("7 key max 3 M0 [3]", -1, params.getColumnPos(2));
+        assertEquals("7 key max 3 M0 [4]", 0, params.getColumnPos(3));
+        assertEquals("7 key max 3 M0 [5]", 1, params.getColumnPos(4));
+        assertEquals("7 key max 3 M0 [6]", -1, params.getColumnPos(5));
+        assertEquals("7 key max 3 M0 [7]", 0, params.getColumnPos(6));
+        assertEquals("7 key max 3 M0 adjust", 0, params.mTopRowAdjustment);
+        assertEquals("7 key max 3 M0 default", WIDTH * 1, params.getDefaultKeyCoordX());
+    }
+
+    // |[7]
+    // |[4] [5] [6]
+    // |<1> [2] [3]
+    public void testLayout7KeyMax3L0() {
+        MoreKeysKeyboardParams params = createParams(7, 3, XPOS_L0);
+        assertEquals("7 key max 3 L0 columns", 3, params.mNumColumns);
+        assertEquals("7 key max 3 L0 rows", 3, params.mNumRows);
+        assertEquals("7 key max 3 L0 left", 0, params.mLeftKeys);
+        assertEquals("7 key max 3 L0 right", 3, params.mRightKeys);
+        assertEquals("7 key max 3 L0 <1>", 0, params.getColumnPos(0));
+        assertEquals("7 key max 3 L0 [2]", 1, params.getColumnPos(1));
+        assertEquals("7 key max 3 L0 [3]", 2, params.getColumnPos(2));
+        assertEquals("7 key max 3 L0 [4]", 0, params.getColumnPos(3));
+        assertEquals("7 key max 3 L0 [5]", 1, params.getColumnPos(4));
+        assertEquals("7 key max 3 L0 [6]", 2, params.getColumnPos(5));
+        assertEquals("7 key max 3 L0 [7]", 0, params.getColumnPos(6));
+        assertEquals("7 key max 3 L0 adjust", 0, params.mTopRowAdjustment);
+        assertEquals("7 key max 3 L0 default", WIDTH * 0, params.getDefaultKeyCoordX());
+    }
+
+    // |___ [7]
+    // |___ [4] [5] [6]
+    // |___ <1> [2] [3]
+    public void testLayout7KeyMax3L1() {
+        MoreKeysKeyboardParams params = createParams(7, 3, XPOS_L1);
+        assertEquals("7 key max 3 L1 columns", 3, params.mNumColumns);
+        assertEquals("7 key max 3 L1 rows", 3, params.mNumRows);
+        assertEquals("7 key max 3 L1 left", 0, params.mLeftKeys);
+        assertEquals("7 key max 3 L1 right", 3, params.mRightKeys);
+        assertEquals("7 key max 3 L1 <1>", 0, params.getColumnPos(0));
+        assertEquals("7 key max 3 L1 [2]", 1, params.getColumnPos(1));
+        assertEquals("7 key max 3 L1 [3]", 2, params.getColumnPos(2));
+        assertEquals("7 key max 3 L1 [4]", 0, params.getColumnPos(3));
+        assertEquals("7 key max 3 L1 [5]", 1, params.getColumnPos(4));
+        assertEquals("7 key max 3 L1 [6]", 2, params.getColumnPos(5));
+        assertEquals("7 key max 3 L1 [7]", 0, params.getColumnPos(6));
+        assertEquals("7 key max 3 L1 adjust", 0, params.mTopRowAdjustment);
+        assertEquals("7 key max 3 L1 default", WIDTH * 0, params.getDefaultKeyCoordX());
+    }
+
+    // |___     [7]
+    // |___ [6] [4] [5]
+    // |___ [3] <1> [2]
+    public void testLayout7KeyMax3L2() {
+        MoreKeysKeyboardParams params = createParams(7, 3, XPOS_L2);
+        assertEquals("7 key max 3 L2 columns", 3, params.mNumColumns);
+        assertEquals("7 key max 3 L2 rows", 3, params.mNumRows);
+        assertEquals("7 key max 3 L2 left", 1, params.mLeftKeys);
+        assertEquals("7 key max 3 L2 right", 2, params.mRightKeys);
+        assertEquals("7 key max 3 L2 <1>", 0, params.getColumnPos(0));
+        assertEquals("7 key max 3 L2 [2]", 1, params.getColumnPos(1));
+        assertEquals("7 key max 3 L2 [3]", -1, params.getColumnPos(2));
+        assertEquals("7 key max 3 L2 [4]", 0, params.getColumnPos(3));
+        assertEquals("7 key max 3 L2 [5]", 1, params.getColumnPos(4));
+        assertEquals("7 key max 3 L2 [6]", -1, params.getColumnPos(5));
+        assertEquals("7 key max 3 L2 [7]", 0, params.getColumnPos(6));
+        assertEquals("7 key max 3 L2 adjust", 0, params.mTopRowAdjustment);
+        assertEquals("7 key max 3 L2 default", WIDTH * 1, params.getDefaultKeyCoordX());
+    }
+
+    //         [7]|
+    // [6] [5] [4]|
+    // [3] [2] <1>|
+    public void testLayout7KeyMax3R0() {
+        MoreKeysKeyboardParams params = createParams(7, 3, XPOS_R0);
+        assertEquals("7 key max 3 R0 columns", 3, params.mNumColumns);
+        assertEquals("7 key max 3 R0 rows", 3, params.mNumRows);
+        assertEquals("7 key max 3 R0 left", 2, params.mLeftKeys);
+        assertEquals("7 key max 3 R0 right", 1, params.mRightKeys);
+        assertEquals("7 key max 3 R0 <1>", 0, params.getColumnPos(0));
+        assertEquals("7 key max 3 R0 [2]", -1, params.getColumnPos(1));
+        assertEquals("7 key max 3 R0 [3]", -2, params.getColumnPos(2));
+        assertEquals("7 key max 3 R0 [4]", 0, params.getColumnPos(3));
+        assertEquals("7 key max 3 R0 [5]", -1, params.getColumnPos(4));
+        assertEquals("7 key max 3 R0 [6]", -2, params.getColumnPos(5));
+        assertEquals("7 key max 3 R0 [7]", 0, params.getColumnPos(6));
+        assertEquals("7 key max 3 R0 adjust", 0, params.mTopRowAdjustment);
+        assertEquals("7 key max 3 R0 default", WIDTH * 2, params.getDefaultKeyCoordX());
+    }
+
+    //         [7] ___|
+    // [6] [5] [4] ___|
+    // [3] [2] <1> ___|
+    public void testLayout7KeyMax3R1() {
+        MoreKeysKeyboardParams params = createParams(7, 3, XPOS_R1);
+        assertEquals("7 key max 3 R1 columns", 3, params.mNumColumns);
+        assertEquals("7 key max 3 R1 rows", 3, params.mNumRows);
+        assertEquals("7 key max 3 R1 left", 2, params.mLeftKeys);
+        assertEquals("7 key max 3 R1 right", 1, params.mRightKeys);
+        assertEquals("7 key max 3 R1 <1>", 0, params.getColumnPos(0));
+        assertEquals("7 key max 3 R1 [2]", -1, params.getColumnPos(1));
+        assertEquals("7 key max 3 R1 [3]", -2, params.getColumnPos(2));
+        assertEquals("7 key max 3 R1 [4]", 0, params.getColumnPos(3));
+        assertEquals("7 key max 3 R1 [5]", -1, params.getColumnPos(4));
+        assertEquals("7 key max 3 R1 [6]", -2, params.getColumnPos(5));
+        assertEquals("7 key max 3 R1 [7]", 0, params.getColumnPos(6));
+        assertEquals("7 key max 3 R1 adjust", 0, params.mTopRowAdjustment);
+        assertEquals("7 key max 3 R1 default", WIDTH * 2, params.getDefaultKeyCoordX());
+    }
+
+    //     [7]     ___|
+    // [6] [4] [5] ___|
+    // [3] <1> [2] ___|
+    public void testLayout7KeyMax3R2() {
+        MoreKeysKeyboardParams params = createParams(7, 3, XPOS_R2);
+        assertEquals("7 key max 3 R2 columns", 3, params.mNumColumns);
+        assertEquals("7 key max 3 R2 rows", 3, params.mNumRows);
+        assertEquals("7 key max 3 R2 left", 1, params.mLeftKeys);
+        assertEquals("7 key max 3 R2 right", 2, params.mRightKeys);
+        assertEquals("7 key max 3 R2 <1>", 0, params.getColumnPos(0));
+        assertEquals("7 key max 3 R2 [2]", 1, params.getColumnPos(1));
+        assertEquals("7 key max 3 R2 [3]", -1, params.getColumnPos(2));
+        assertEquals("7 key max 3 R2 [4]", 0, params.getColumnPos(3));
+        assertEquals("7 key max 3 R2 [5]", 1, params.getColumnPos(4));
+        assertEquals("7 key max 3 R2 [6]", -1, params.getColumnPos(5));
+        assertEquals("7 key max 3 R2 [7]", 0, params.getColumnPos(6));
+        assertEquals("7 key max 3 R2 adjust", 0, params.mTopRowAdjustment);
+        assertEquals("7 key max 3 R2 default", WIDTH * 1, params.getDefaultKeyCoordX());
+    }
+
     // [7] [5] [6] [8]
-    // [3] [1] [2] [4]
+    // [3] <1> [2] [4]
     public void testLayout8KeyMax5M0() {
         MoreKeysKeyboardParams params = createParams(8, 5, XPOS_M0);
         assertEquals("8 key max 5 M0 columns", 4, params.mNumColumns);
         assertEquals("8 key max 5 M0 rows", 2, params.mNumRows);
         assertEquals("8 key max 5 M0 left", 1, params.mLeftKeys);
         assertEquals("8 key max 5 M0 right", 3, params.mRightKeys);
-        assertEquals("8 key max 5 M0 [1]", 0, params.getColumnPos(0));
+        assertEquals("8 key max 5 M0 <1>", 0, params.getColumnPos(0));
         assertEquals("8 key max 5 M0 [2]", 1, params.getColumnPos(1));
         assertEquals("8 key max 5 M0 [3]", -1, params.getColumnPos(2));
         assertEquals("8 key max 5 M0 [4]", 2, params.getColumnPos(3));
@@ -1118,14 +1839,14 @@
     }
 
     // |[5] [6] [7] [8]
-    // |[1] [2] [3] [4]
+    // |<1> [2] [3] [4]
     public void testLayout8KeyMax5L0() {
         MoreKeysKeyboardParams params = createParams(8, 5, XPOS_L0);
         assertEquals("8 key max 5 L0 columns", 4, params.mNumColumns);
         assertEquals("8 key max 5 L0 rows", 2, params.mNumRows);
         assertEquals("8 key max 5 L0 left", 0, params.mLeftKeys);
         assertEquals("8 key max 5 L0 right", 4, params.mRightKeys);
-        assertEquals("8 key max 5 L0 [1]", 0, params.getColumnPos(0));
+        assertEquals("8 key max 5 L0 <1>", 0, params.getColumnPos(0));
         assertEquals("8 key max 5 L0 [2]", 1, params.getColumnPos(1));
         assertEquals("8 key max 5 L0 [3]", 2, params.getColumnPos(2));
         assertEquals("8 key max 5 L0 [4]", 3, params.getColumnPos(3));
@@ -1138,14 +1859,14 @@
     }
 
     // |___ [5] [6] [7] [8]
-    // |___ [1] [2] [3] [4]
+    // |___ <1> [2] [3] [4]
     public void testLayout8KeyMax5L1() {
         MoreKeysKeyboardParams params = createParams(8, 5, XPOS_L1);
         assertEquals("8 key max 5 L1 columns", 4, params.mNumColumns);
         assertEquals("8 key max 5 L1 rows", 2, params.mNumRows);
         assertEquals("8 key max 5 L1 left", 0, params.mLeftKeys);
         assertEquals("8 key max 5 L1 right", 4, params.mRightKeys);
-        assertEquals("8 key max 5 L1 [1]", 0, params.getColumnPos(0));
+        assertEquals("8 key max 5 L1 <1>", 0, params.getColumnPos(0));
         assertEquals("8 key max 5 L1 [2]", 1, params.getColumnPos(1));
         assertEquals("8 key max 5 L1 [3]", 2, params.getColumnPos(2));
         assertEquals("8 key max 5 L1 [4]", 3, params.getColumnPos(3));
@@ -1158,14 +1879,14 @@
     }
 
     // |___ [7] [5] [6] [8]
-    // |___ [3] [1] [2] [4]
+    // |___ [3] <1> [2] [4]
     public void testLayout8KeyMax5L2() {
         MoreKeysKeyboardParams params = createParams(8, 5, XPOS_L2);
         assertEquals("8 key max 5 L2 columns", 4, params.mNumColumns);
         assertEquals("8 key max 5 L2 rows", 2, params.mNumRows);
         assertEquals("8 key max 5 L2 left", 1, params.mLeftKeys);
         assertEquals("8 key max 5 L2 right", 3, params.mRightKeys);
-        assertEquals("8 key max 5 L2 [1]", 0, params.getColumnPos(0));
+        assertEquals("8 key max 5 L2 <1>", 0, params.getColumnPos(0));
         assertEquals("8 key max 5 L2 [2]", 1, params.getColumnPos(1));
         assertEquals("8 key max 5 L2 [3]", -1, params.getColumnPos(2));
         assertEquals("8 key max 5 L2 [4]", 2, params.getColumnPos(3));
@@ -1178,14 +1899,14 @@
     }
 
     // [8] [7] [6] [5]|
-    // [4] [3] [2] [1]|
+    // [4] [3] [2] <1>|
     public void testLayout8KeyMax5R0() {
         MoreKeysKeyboardParams params = createParams(8, 5, XPOS_R0);
         assertEquals("8 key max 5 R0 columns", 4, params.mNumColumns);
         assertEquals("8 key max 5 R0 rows", 2, params.mNumRows);
         assertEquals("8 key max 5 R0 left", 3, params.mLeftKeys);
         assertEquals("8 key max 5 R0 right", 1, params.mRightKeys);
-        assertEquals("8 key max 5 R0 [1]", 0, params.getColumnPos(0));
+        assertEquals("8 key max 5 R0 <1>", 0, params.getColumnPos(0));
         assertEquals("8 key max 5 R0 [2]", -1, params.getColumnPos(1));
         assertEquals("8 key max 5 R0 [3]", -2, params.getColumnPos(2));
         assertEquals("8 key max 5 R0 [4]", -3, params.getColumnPos(3));
@@ -1198,14 +1919,14 @@
     }
 
     // [8] [7] [6] [5] ___|
-    // [4] [3] [2] [1] ___|
+    // [4] [3] [2] <1> ___|
     public void testLayout8KeyMax5R1() {
         MoreKeysKeyboardParams params = createParams(8, 5, XPOS_R1);
         assertEquals("8 key max 5 R1 columns", 4, params.mNumColumns);
         assertEquals("8 key max 5 R1 rows", 2, params.mNumRows);
         assertEquals("8 key max 5 R1 left", 3, params.mLeftKeys);
         assertEquals("8 key max 5 R1 right", 1, params.mRightKeys);
-        assertEquals("8 key max 5 R1 [1]", 0, params.getColumnPos(0));
+        assertEquals("8 key max 5 R1 <1>", 0, params.getColumnPos(0));
         assertEquals("8 key max 5 R1 [2]", -1, params.getColumnPos(1));
         assertEquals("8 key max 5 R1 [3]", -2, params.getColumnPos(2));
         assertEquals("8 key max 5 R1 [4]", -3, params.getColumnPos(3));
@@ -1218,14 +1939,14 @@
     }
 
     // [8] [7] [5] [6] ___|
-    // [4] [3] [1] [2] ___|
+    // [4] [3] <1> [2] ___|
     public void testLayout8KeyMax5R2() {
         MoreKeysKeyboardParams params = createParams(8, 5, XPOS_R2);
         assertEquals("8 key max 5 R2 columns", 4, params.mNumColumns);
         assertEquals("8 key max 5 R2 rows", 2, params.mNumRows);
         assertEquals("8 key max 5 R2 left", 2, params.mLeftKeys);
         assertEquals("8 key max 5 R2 right", 2, params.mRightKeys);
-        assertEquals("8 key max 5 R2 [1]", 0, params.getColumnPos(0));
+        assertEquals("8 key max 5 R2 <1>", 0, params.getColumnPos(0));
         assertEquals("8 key max 5 R2 [2]", 1, params.getColumnPos(1));
         assertEquals("8 key max 5 R2 [3]", -1, params.getColumnPos(2));
         assertEquals("8 key max 5 R2 [4]", -2, params.getColumnPos(3));
@@ -1238,14 +1959,14 @@
     }
 
     //   [8] [6] [7] [9]
-    // [5] [3] [1] [2] [4]
+    // [5] [3] <1> [2] [4]
     public void testLayout9KeyMax5M0() {
         MoreKeysKeyboardParams params = createParams(9, 5, XPOS_M0);
         assertEquals("9 key max 5 M0 columns", 5, params.mNumColumns);
         assertEquals("9 key max 5 M0 rows", 2, params.mNumRows);
         assertEquals("9 key max 5 M0 left", 2, params.mLeftKeys);
         assertEquals("9 key max 5 M0 right", 3, params.mRightKeys);
-        assertEquals("9 key max 5 M0 [1]", 0, params.getColumnPos(0));
+        assertEquals("9 key max 5 M0 <1>", 0, params.getColumnPos(0));
         assertEquals("9 key max 5 M0 [2]", 1, params.getColumnPos(1));
         assertEquals("9 key max 5 M0 [3]", -1, params.getColumnPos(2));
         assertEquals("9 key max 5 M0 [4]", 2, params.getColumnPos(3));
@@ -1258,15 +1979,15 @@
         assertEquals("9 key max 5 M0 default", WIDTH * 2, params.getDefaultKeyCoordX());
     }
 
-    // |  [6] [7] [8] [9]
-    // |[1] [2] [3] [4] [5]
+    // |[6] [7] [8] [9]
+    // |<1> [2] [3] [4] [5]
     public void testLayout9KeyMax5L0() {
         MoreKeysKeyboardParams params = createParams(9, 5, XPOS_L0);
         assertEquals("9 key max 5 L0 columns", 5, params.mNumColumns);
         assertEquals("9 key max 5 L0 rows", 2, params.mNumRows);
         assertEquals("9 key max 5 L0 left", 0, params.mLeftKeys);
         assertEquals("9 key max 5 L0 right", 5, params.mRightKeys);
-        assertEquals("9 key max 5 L0 [1]", 0, params.getColumnPos(0));
+        assertEquals("9 key max 5 L0 <1>", 0, params.getColumnPos(0));
         assertEquals("9 key max 5 L0 [2]", 1, params.getColumnPos(1));
         assertEquals("9 key max 5 L0 [3]", 2, params.getColumnPos(2));
         assertEquals("9 key max 5 L0 [4]", 3, params.getColumnPos(3));
@@ -1275,19 +1996,19 @@
         assertEquals("9 key max 5 L0 [7]", 1, params.getColumnPos(6));
         assertEquals("9 key max 5 L0 [8]", 2, params.getColumnPos(7));
         assertEquals("9 key max 5 L0 [9]", 3, params.getColumnPos(8));
-        assertEquals("9 key max 5 L0 adjust", 1, params.mTopRowAdjustment);
+        assertEquals("9 key max 5 L0 adjust", 0, params.mTopRowAdjustment);
         assertEquals("9 key max 5 L0 default", WIDTH * 0, params.getDefaultKeyCoordX());
     }
 
-    // |___   [6] [7] [8] [9]
-    // |___ [1] [2] [3] [4] [5]
+    // |___ [6] [7] [8] [9]
+    // |___ <1> [2] [3] [4] [5]
     public void testLayout9KeyMax5L1() {
         MoreKeysKeyboardParams params = createParams(9, 5, XPOS_L1);
         assertEquals("9 key max 5 L1 columns", 5, params.mNumColumns);
         assertEquals("9 key max 5 L1 rows", 2, params.mNumRows);
         assertEquals("9 key max 5 L1 left", 0, params.mLeftKeys);
         assertEquals("9 key max 5 L1 right", 5, params.mRightKeys);
-        assertEquals("9 key max 5 L1 [1]", 0, params.getColumnPos(0));
+        assertEquals("9 key max 5 L1 <1>", 0, params.getColumnPos(0));
         assertEquals("9 key max 5 L1 [2]", 1, params.getColumnPos(1));
         assertEquals("9 key max 5 L1 [3]", 2, params.getColumnPos(2));
         assertEquals("9 key max 5 L1 [4]", 3, params.getColumnPos(3));
@@ -1296,40 +2017,40 @@
         assertEquals("9 key max 5 L1 [7]", 1, params.getColumnPos(6));
         assertEquals("9 key max 5 L1 [8]", 2, params.getColumnPos(7));
         assertEquals("9 key max 5 L1 [9]", 3, params.getColumnPos(8));
-        assertEquals("9 key max 5 L1 adjust",1, params.mTopRowAdjustment);
+        assertEquals("9 key max 5 L1 adjust",0, params.mTopRowAdjustment);
         assertEquals("9 key max 5 L1 default", WIDTH * 0, params.getDefaultKeyCoordX());
     }
 
-    // |___   [8] [6] [7] [9]
-    // |___ [3] [1] [2] [4] [5]
+    // |___   [6] [7] [8] [9]
+    // |___ [3] <1> [2] [4] [5]
     public void testLayout9KeyMax5L2() {
         MoreKeysKeyboardParams params = createParams(9, 5, XPOS_L2);
         assertEquals("9 key max 5 L2 columns", 5, params.mNumColumns);
         assertEquals("9 key max 5 L2 rows", 2, params.mNumRows);
         assertEquals("9 key max 5 L2 left", 1, params.mLeftKeys);
         assertEquals("9 key max 5 L2 right", 4, params.mRightKeys);
-        assertEquals("9 key max 5 L2 [1]", 0, params.getColumnPos(0));
+        assertEquals("9 key max 5 L2 <1>", 0, params.getColumnPos(0));
         assertEquals("9 key max 5 L2 [2]", 1, params.getColumnPos(1));
         assertEquals("9 key max 5 L2 [3]", -1, params.getColumnPos(2));
         assertEquals("9 key max 5 L2 [4]", 2, params.getColumnPos(3));
         assertEquals("9 key max 5 L2 [5]", 3, params.getColumnPos(4));
         assertEquals("9 key max 5 L2 [6]", 0, params.getColumnPos(5));
         assertEquals("9 key max 5 L2 [7]", 1, params.getColumnPos(6));
-        assertEquals("9 key max 5 L2 [8]", -1, params.getColumnPos(7));
-        assertEquals("9 key max 5 L2 [9]", 2, params.getColumnPos(8));
-        assertEquals("9 key max 5 L2 adjust", 1, params.mTopRowAdjustment);
+        assertEquals("9 key max 5 L2 [8]", 2, params.getColumnPos(7));
+        assertEquals("9 key max 5 L2 [9]", 3, params.getColumnPos(8));
+        assertEquals("9 key max 5 L2 adjust", -1, params.mTopRowAdjustment);
         assertEquals("9 key max 5 L2 default", WIDTH * 1, params.getDefaultKeyCoordX());
     }
 
-    //   [9] [8] [7] [6]  |
-    // [5] [4] [3] [2] [1]|
+    //     [9] [8] [7] [6]|
+    // [5] [4] [3] [2] <1>|
     public void testLayout9KeyMax5R0() {
         MoreKeysKeyboardParams params = createParams(9, 5, XPOS_R0);
         assertEquals("9 key max 5 R0 columns", 5, params.mNumColumns);
         assertEquals("9 key max 5 R0 rows", 2, params.mNumRows);
         assertEquals("9 key max 5 R0 left", 4, params.mLeftKeys);
         assertEquals("9 key max 5 R0 right", 1, params.mRightKeys);
-        assertEquals("9 key max 5 R0 [1]", 0, params.getColumnPos(0));
+        assertEquals("9 key max 5 R0 <1>", 0, params.getColumnPos(0));
         assertEquals("9 key max 5 R0 [2]", -1, params.getColumnPos(1));
         assertEquals("9 key max 5 R0 [3]", -2, params.getColumnPos(2));
         assertEquals("9 key max 5 R0 [4]", -3, params.getColumnPos(3));
@@ -1338,19 +2059,19 @@
         assertEquals("9 key max 5 R0 [7]", -1, params.getColumnPos(6));
         assertEquals("9 key max 5 R0 [8]", -2, params.getColumnPos(7));
         assertEquals("9 key max 5 R0 [9]", -3, params.getColumnPos(8));
-        assertEquals("9 key max 5 R0 adjust", -1, params.mTopRowAdjustment);
+        assertEquals("9 key max 5 R0 adjust", 0, params.mTopRowAdjustment);
         assertEquals("9 key max 5 R0 default", WIDTH * 4, params.getDefaultKeyCoordX());
     }
 
-    //   [9] [8] [7] [6]   ___|
-    // [5] [4] [3] [2] [1] ___|
+    //     [9] [8] [7] [6] ___|
+    // [5] [4] [3] [2] <1> ___|
     public void testLayout9KeyMax5R1() {
         MoreKeysKeyboardParams params = createParams(9, 5, XPOS_R1);
         assertEquals("9 key max 5 R1 columns", 5, params.mNumColumns);
         assertEquals("9 key max 5 R1 rows", 2, params.mNumRows);
         assertEquals("9 key max 5 R1 left", 4, params.mLeftKeys);
         assertEquals("9 key max 5 R1 right", 1, params.mRightKeys);
-        assertEquals("9 key max 5 R1 [1]", 0, params.getColumnPos(0));
+        assertEquals("9 key max 5 R1 <1>", 0, params.getColumnPos(0));
         assertEquals("9 key max 5 R1 [2]", -1, params.getColumnPos(1));
         assertEquals("9 key max 5 R1 [3]", -2, params.getColumnPos(2));
         assertEquals("9 key max 5 R1 [4]", -3, params.getColumnPos(3));
@@ -1359,19 +2080,19 @@
         assertEquals("9 key max 5 R1 [7]", -1, params.getColumnPos(6));
         assertEquals("9 key max 5 R1 [8]", -2, params.getColumnPos(7));
         assertEquals("9 key max 5 R1 [9]", -3, params.getColumnPos(8));
-        assertEquals("9 key max 5 R1 adjust", -1, params.mTopRowAdjustment);
+        assertEquals("9 key max 5 R1 adjust", 0, params.mTopRowAdjustment);
         assertEquals("9 key max 5 R1 default", WIDTH * 4, params.getDefaultKeyCoordX());
     }
 
     //   [9] [8] [6] [7]   ___|
-    // [5] [4] [3] [1] [2] ___|
+    // [5] [4] [3] <1> [2] ___|
     public void testLayout9KeyMax5R2() {
         MoreKeysKeyboardParams params = createParams(9, 5, XPOS_R2);
         assertEquals("9 key max 5 R2 columns", 5, params.mNumColumns);
         assertEquals("9 key max 5 R2 rows", 2, params.mNumRows);
         assertEquals("9 key max 5 R2 left", 3, params.mLeftKeys);
         assertEquals("9 key max 5 R2 right", 2, params.mRightKeys);
-        assertEquals("9 key max 5 R2 [1]", 0, params.getColumnPos(0));
+        assertEquals("9 key max 5 R2 <1>", 0, params.getColumnPos(0));
         assertEquals("9 key max 5 R2 [2]", 1, params.getColumnPos(1));
         assertEquals("9 key max 5 R2 [3]", -1, params.getColumnPos(2));
         assertEquals("9 key max 5 R2 [4]", -2, params.getColumnPos(3));
@@ -1385,14 +2106,14 @@
     }
 
     // [A] [8] [6] [7] [9]
-    // [5] [3] [1] [2] [4]
+    // [5] [3] <1> [2] [4]
     public void testLayout10KeyMax5M0() {
         MoreKeysKeyboardParams params = createParams(10, 5, XPOS_M0);
         assertEquals("10 key max 5 M0 columns", 5, params.mNumColumns);
         assertEquals("10 key max 5 M0 rows", 2, params.mNumRows);
         assertEquals("10 key max 5 M0 left", 2, params.mLeftKeys);
         assertEquals("10 key max 5 M0 right", 3, params.mRightKeys);
-        assertEquals("10 key max 5 M0 [1]", 0, params.getColumnPos(0));
+        assertEquals("10 key max 5 M0 <1>", 0, params.getColumnPos(0));
         assertEquals("10 key max 5 M0 [2]", 1, params.getColumnPos(1));
         assertEquals("10 key max 5 M0 [3]", -1, params.getColumnPos(2));
         assertEquals("10 key max 5 M0 [4]", 2, params.getColumnPos(3));
@@ -1407,14 +2128,14 @@
     }
 
     // |[6] [7] [8] [9] [A]
-    // |[1] [2] [3] [4] [5]
+    // |<1> [2] [3] [4] [5]
     public void testLayout10KeyMax5L0() {
         MoreKeysKeyboardParams params = createParams(10, 5, XPOS_L0);
         assertEquals("10 key max 5 L0 columns", 5, params.mNumColumns);
         assertEquals("10 key max 5 L0 rows", 2, params.mNumRows);
         assertEquals("10 key max 5 L0 left", 0, params.mLeftKeys);
         assertEquals("10 key max 5 L0 right", 5, params.mRightKeys);
-        assertEquals("10 key max 5 L0 [1]", 0, params.getColumnPos(0));
+        assertEquals("10 key max 5 L0 <1>", 0, params.getColumnPos(0));
         assertEquals("10 key max 5 L0 [2]", 1, params.getColumnPos(1));
         assertEquals("10 key max 5 L0 [3]", 2, params.getColumnPos(2));
         assertEquals("10 key max 5 L0 [4]", 3, params.getColumnPos(3));
@@ -1429,14 +2150,14 @@
     }
 
     // |___ [6] [7] [8] [9] [A]
-    // |___ [1] [2] [3] [4] [5]
+    // |___ <1> [2] [3] [4] [5]
     public void testLayout10KeyMax5L1() {
         MoreKeysKeyboardParams params = createParams(10, 5, XPOS_L1);
         assertEquals("10 key max 5 L1 columns", 5, params.mNumColumns);
         assertEquals("10 key max 5 L1 rows", 2, params.mNumRows);
         assertEquals("10 key max 5 L1 left", 0, params.mLeftKeys);
         assertEquals("10 key max 5 L1 right", 5, params.mRightKeys);
-        assertEquals("10 key max 5 L1 [1]", 0, params.getColumnPos(0));
+        assertEquals("10 key max 5 L1 <1>", 0, params.getColumnPos(0));
         assertEquals("10 key max 5 L1 [2]", 1, params.getColumnPos(1));
         assertEquals("10 key max 5 L1 [3]", 2, params.getColumnPos(2));
         assertEquals("10 key max 5 L1 [4]", 3, params.getColumnPos(3));
@@ -1451,14 +2172,14 @@
     }
 
     // |___ [8] [6] [7] [9] [A]
-    // |___ [3] [1] [2] [4] [5]
+    // |___ [3] <1> [2] [4] [5]
     public void testLayout10KeyMax5L2() {
         MoreKeysKeyboardParams params = createParams(10, 5, XPOS_L2);
         assertEquals("10 key max 5 L2 columns", 5, params.mNumColumns);
         assertEquals("10 key max 5 L2 rows", 2, params.mNumRows);
         assertEquals("10 key max 5 L2 left", 1, params.mLeftKeys);
         assertEquals("10 key max 5 L2 right", 4, params.mRightKeys);
-        assertEquals("10 key max 5 L2 [1]", 0, params.getColumnPos(0));
+        assertEquals("10 key max 5 L2 <1>", 0, params.getColumnPos(0));
         assertEquals("10 key max 5 L2 [2]", 1, params.getColumnPos(1));
         assertEquals("10 key max 5 L2 [3]", -1, params.getColumnPos(2));
         assertEquals("10 key max 5 L2 [4]", 2, params.getColumnPos(3));
@@ -1473,14 +2194,14 @@
     }
 
     // [A] [9] [8] [7] [6]|
-    // [5] [4] [3] [2] [1]|
+    // [5] [4] [3] [2] <1>|
     public void testLayout10KeyMax5R0() {
         MoreKeysKeyboardParams params = createParams(10, 5, XPOS_R0);
         assertEquals("10 key max 5 R0 columns", 5, params.mNumColumns);
         assertEquals("10 key max 5 R0 rows", 2, params.mNumRows);
         assertEquals("10 key max 5 R0 left", 4, params.mLeftKeys);
         assertEquals("10 key max 5 R0 right", 1, params.mRightKeys);
-        assertEquals("10 key max 5 R0 [1]", 0, params.getColumnPos(0));
+        assertEquals("10 key max 5 R0 <1>", 0, params.getColumnPos(0));
         assertEquals("10 key max 5 R0 [2]", -1, params.getColumnPos(1));
         assertEquals("10 key max 5 R0 [3]", -2, params.getColumnPos(2));
         assertEquals("10 key max 5 R0 [4]", -3, params.getColumnPos(3));
@@ -1495,14 +2216,14 @@
     }
 
     // [A] [9] [8] [7] [6] ___|
-    // [5] [4] [3] [2] [1] ___|
+    // [5] [4] [3] [2] <1> ___|
     public void testLayout10KeyMax5R1() {
         MoreKeysKeyboardParams params = createParams(10, 5, XPOS_R1);
         assertEquals("10 key max 5 R1 columns", 5, params.mNumColumns);
         assertEquals("10 key max 5 R1 rows", 2, params.mNumRows);
         assertEquals("10 key max 5 R1 left", 4, params.mLeftKeys);
         assertEquals("10 key max 5 R1 right", 1, params.mRightKeys);
-        assertEquals("10 key max 5 R1 [1]", 0, params.getColumnPos(0));
+        assertEquals("10 key max 5 R1 <1>", 0, params.getColumnPos(0));
         assertEquals("10 key max 5 R1 [2]", -1, params.getColumnPos(1));
         assertEquals("10 key max 5 R1 [3]", -2, params.getColumnPos(2));
         assertEquals("10 key max 5 R1 [4]", -3, params.getColumnPos(3));
@@ -1517,14 +2238,14 @@
     }
 
     // [A] [9] [8] [6] [7] ___|
-    // [5] [4] [3] [1] [2] ___|
+    // [5] [4] [3] <1> [2] ___|
     public void testLayout10KeyMax5R2() {
         MoreKeysKeyboardParams params = createParams(10, 5, XPOS_R2);
         assertEquals("10 key max 5 R2 columns", 5, params.mNumColumns);
         assertEquals("10 key max 5 R2 rows", 2, params.mNumRows);
         assertEquals("10 key max 5 R2 left", 3, params.mLeftKeys);
         assertEquals("10 key max 5 R2 right", 2, params.mRightKeys);
-        assertEquals("10 key max 5 R2 [1]", 0, params.getColumnPos(0));
+        assertEquals("10 key max 5 R2 <1>", 0, params.getColumnPos(0));
         assertEquals("10 key max 5 R2 [2]", 1, params.getColumnPos(1));
         assertEquals("10 key max 5 R2 [3]", -1, params.getColumnPos(2));
         assertEquals("10 key max 5 R2 [4]", -2, params.getColumnPos(3));
@@ -1538,16 +2259,16 @@
         assertEquals("10 key max 5 R2 default", WIDTH * 3, params.getDefaultKeyCoordX());
     }
 
-    //   [B] [9] [A]
+    //   [9] [A] [B]
     // [7] [5] [6] [8]
-    // [3] [1] [2] [4]
+    // [3] <1> [2] [4]
     public void testLayout11KeyMax5M0() {
         MoreKeysKeyboardParams params = createParams(11, 5, XPOS_M0);
         assertEquals("11 key max 5 M0 columns", 4, params.mNumColumns);
         assertEquals("11 key max 5 M0 rows", 3, params.mNumRows);
         assertEquals("11 key max 5 M0 left", 1, params.mLeftKeys);
         assertEquals("11 key max 5 M0 right", 3, params.mRightKeys);
-        assertEquals("11 key max 5 M0 [1]", 0, params.getColumnPos(0));
+        assertEquals("11 key max 5 M0 <1>", 0, params.getColumnPos(0));
         assertEquals("11 key max 5 M0 [2]", 1, params.getColumnPos(1));
         assertEquals("11 key max 5 M0 [3]", -1, params.getColumnPos(2));
         assertEquals("11 key max 5 M0 [4]", 2, params.getColumnPos(3));
@@ -1557,21 +2278,21 @@
         assertEquals("11 key max 5 M0 [8]", 2, params.getColumnPos(7));
         assertEquals("11 key max 5 M0 [9]", 0, params.getColumnPos(8));
         assertEquals("11 key max 5 M0 [A]", 1, params.getColumnPos(9));
-        assertEquals("11 key max 5 M0 [B]", -1, params.getColumnPos(10));
-        assertEquals("11 key max 5 M0 adjust", 1, params.mTopRowAdjustment);
+        assertEquals("11 key max 5 M0 [B]", 2, params.getColumnPos(10));
+        assertEquals("11 key max 5 M0 adjust", -1, params.mTopRowAdjustment);
         assertEquals("11 key max 5 M0 default", WIDTH * 1, params.getDefaultKeyCoordX());
     }
 
     // [B] [9] [A] [C]
     // [7] [5] [6] [8]
-    // [3] [1] [2] [4]
+    // [3] <1> [2] [4]
     public void testLayout12KeyMax5M0() {
         MoreKeysKeyboardParams params = createParams(12, 5, XPOS_M0);
         assertEquals("12 key max 5 M0 columns", 4, params.mNumColumns);
         assertEquals("12 key max 5 M0 rows", 3, params.mNumRows);
         assertEquals("12 key max 5 M0 left", 1, params.mLeftKeys);
         assertEquals("12 key max 5 M0 right", 3, params.mRightKeys);
-        assertEquals("12 key max 5 M0 [1]", 0, params.getColumnPos(0));
+        assertEquals("12 key max 5 M0 <1>", 0, params.getColumnPos(0));
         assertEquals("12 key max 5 M0 [2]", 1, params.getColumnPos(1));
         assertEquals("12 key max 5 M0 [3]", -1, params.getColumnPos(2));
         assertEquals("12 key max 5 M0 [4]", 2, params.getColumnPos(3));
@@ -1587,17 +2308,16 @@
         assertEquals("12 key max 5 M0 default", WIDTH * 1, params.getDefaultKeyCoordX());
     }
 
-
     //     [D] [B] [C]
     // [A] [8] [6] [7] [9]
-    // [5] [3] [1] [2] [4]
+    // [5] [3] <1> [2] [4]
     public void testLayout13KeyMax5M0() {
         MoreKeysKeyboardParams params = createParams(13, 5, XPOS_M0);
         assertEquals("13 key max 5 M0 columns", 5, params.mNumColumns);
         assertEquals("13 key max 5 M0 rows", 3, params.mNumRows);
         assertEquals("13 key max 5 M0 left", 2, params.mLeftKeys);
         assertEquals("13 key max 5 M0 right", 3, params.mRightKeys);
-        assertEquals("13 key max 5 M0 [1]", 0, params.getColumnPos(0));
+        assertEquals("13 key max 5 M0 <1>", 0, params.getColumnPos(0));
         assertEquals("13 key max 5 M0 [2]", 1, params.getColumnPos(1));
         assertEquals("13 key max 5 M0 [3]", -1, params.getColumnPos(2));
         assertEquals("13 key max 5 M0 [4]", 2, params.getColumnPos(3));
@@ -1613,4 +2333,31 @@
         assertEquals("13 key max 5 M0 adjust", 0, params.mTopRowAdjustment);
         assertEquals("13 key max 5 M0 default", WIDTH * 2, params.getDefaultKeyCoordX());
     }
+
+    //   [D] [B] [C] [E]
+    // [A] [8] [6] [7] [9]
+    // [5] [3] <1> [2] [4]
+    public void testLayout14KeyMax5M0() {
+        MoreKeysKeyboardParams params = createParams(14, 5, XPOS_M0);
+        assertEquals("13 key max 5 M0 columns", 5, params.mNumColumns);
+        assertEquals("13 key max 5 M0 rows", 3, params.mNumRows);
+        assertEquals("13 key max 5 M0 left", 2, params.mLeftKeys);
+        assertEquals("13 key max 5 M0 right", 3, params.mRightKeys);
+        assertEquals("13 key max 5 M0 <1>", 0, params.getColumnPos(0));
+        assertEquals("13 key max 5 M0 [2]", 1, params.getColumnPos(1));
+        assertEquals("13 key max 5 M0 [3]", -1, params.getColumnPos(2));
+        assertEquals("13 key max 5 M0 [4]", 2, params.getColumnPos(3));
+        assertEquals("13 key max 5 M0 [5]", -2, params.getColumnPos(4));
+        assertEquals("13 key max 5 M0 [6]", 0, params.getColumnPos(5));
+        assertEquals("13 key max 5 M0 [7]", 1, params.getColumnPos(6));
+        assertEquals("13 key max 5 M0 [8]", -1, params.getColumnPos(7));
+        assertEquals("13 key max 5 M0 [9]", 2, params.getColumnPos(8));
+        assertEquals("13 key max 5 M0 [A]", -2, params.getColumnPos(9));
+        assertEquals("13 key max 5 M0 [B]", 0, params.getColumnPos(10));
+        assertEquals("13 key max 5 M0 [C]", 1, params.getColumnPos(11));
+        assertEquals("13 key max 5 M0 [D]", -1, params.getColumnPos(12));
+        assertEquals("13 key max 5 M0 [E]", 2, params.getColumnPos(13));
+        assertEquals("13 key max 5 M0 adjust", -1, params.mTopRowAdjustment);
+        assertEquals("13 key max 5 M0 default", WIDTH * 2, params.getDefaultKeyCoordX());
+    }
 }