1f8057104af9cae031b544e971a52adafa7c0d9eThe Android Open Source Project/*
2f8057104af9cae031b544e971a52adafa7c0d9eThe Android Open Source Project * Copyright (C) 2008 The Android Open Source Project
3f8057104af9cae031b544e971a52adafa7c0d9eThe Android Open Source Project *
4f8057104af9cae031b544e971a52adafa7c0d9eThe Android Open Source Project * Licensed under the Apache License, Version 2.0 (the "License");
5f8057104af9cae031b544e971a52adafa7c0d9eThe Android Open Source Project * you may not use this file except in compliance with the License.
6f8057104af9cae031b544e971a52adafa7c0d9eThe Android Open Source Project * You may obtain a copy of the License at
7f8057104af9cae031b544e971a52adafa7c0d9eThe Android Open Source Project *
8f8057104af9cae031b544e971a52adafa7c0d9eThe Android Open Source Project *      http://www.apache.org/licenses/LICENSE-2.0
9f8057104af9cae031b544e971a52adafa7c0d9eThe Android Open Source Project *
10f8057104af9cae031b544e971a52adafa7c0d9eThe Android Open Source Project * Unless required by applicable law or agreed to in writing, software
11f8057104af9cae031b544e971a52adafa7c0d9eThe Android Open Source Project * distributed under the License is distributed on an "AS IS" BASIS,
12f8057104af9cae031b544e971a52adafa7c0d9eThe Android Open Source Project * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13f8057104af9cae031b544e971a52adafa7c0d9eThe Android Open Source Project * See the License for the specific language governing permissions and
14f8057104af9cae031b544e971a52adafa7c0d9eThe Android Open Source Project * limitations under the License.
15f8057104af9cae031b544e971a52adafa7c0d9eThe Android Open Source Project */
16f8057104af9cae031b544e971a52adafa7c0d9eThe Android Open Source Project
17f8057104af9cae031b544e971a52adafa7c0d9eThe Android Open Source Projectpackage android.text.method.cts;
18f8057104af9cae031b544e971a52adafa7c0d9eThe Android Open Source Project
198ce9f296cac94572c4cf16b5693a54c41258018fPhil Dubach
20f8057104af9cae031b544e971a52adafa7c0d9eThe Android Open Source Projectimport android.test.AndroidTestCase;
21f8057104af9cae031b544e971a52adafa7c0d9eThe Android Open Source Projectimport android.text.Editable;
22f8057104af9cae031b544e971a52adafa7c0d9eThe Android Open Source Projectimport android.text.Selection;
23f8057104af9cae031b544e971a52adafa7c0d9eThe Android Open Source Projectimport android.text.Spannable;
24f8057104af9cae031b544e971a52adafa7c0d9eThe Android Open Source Projectimport android.text.Spanned;
25f8057104af9cae031b544e971a52adafa7c0d9eThe Android Open Source Projectimport android.text.method.DateKeyListener;
26f8057104af9cae031b544e971a52adafa7c0d9eThe Android Open Source Projectimport android.text.method.MetaKeyKeyListener;
27082804b2ef53e533e965f39e68175ed6ad1b4593Brian Muramatsuimport android.view.KeyCharacterMap;
28f8057104af9cae031b544e971a52adafa7c0d9eThe Android Open Source Projectimport android.view.KeyEvent;
29f8057104af9cae031b544e971a52adafa7c0d9eThe Android Open Source Projectimport android.view.View;
30f8057104af9cae031b544e971a52adafa7c0d9eThe Android Open Source Projectimport android.widget.ImageView;
31f8057104af9cae031b544e971a52adafa7c0d9eThe Android Open Source Project
32f8057104af9cae031b544e971a52adafa7c0d9eThe Android Open Source Project/**
33f8057104af9cae031b544e971a52adafa7c0d9eThe Android Open Source Project * Test {@link MetaKeyKeyListener}.
34f8057104af9cae031b544e971a52adafa7c0d9eThe Android Open Source Project */
35f8057104af9cae031b544e971a52adafa7c0d9eThe Android Open Source Projectpublic class MetaKeyKeyListenerTest extends AndroidTestCase {
36f8057104af9cae031b544e971a52adafa7c0d9eThe Android Open Source Project    public void testPressKey() {
37f8057104af9cae031b544e971a52adafa7c0d9eThe Android Open Source Project        final CharSequence str = "123456";
38f8057104af9cae031b544e971a52adafa7c0d9eThe Android Open Source Project        final MetaKeyKeyListener numberKeyListener = new DateKeyListener();
39f8057104af9cae031b544e971a52adafa7c0d9eThe Android Open Source Project        final View view = new ImageView(getContext());
40f8057104af9cae031b544e971a52adafa7c0d9eThe Android Open Source Project        final Editable content = Editable.Factory.getInstance().newEditable(str);
41f8057104af9cae031b544e971a52adafa7c0d9eThe Android Open Source Project
42f8057104af9cae031b544e971a52adafa7c0d9eThe Android Open Source Project        content.setSpan(Selection.SELECTION_START, 0, 0, Spanned.SPAN_POINT_POINT);
43f8057104af9cae031b544e971a52adafa7c0d9eThe Android Open Source Project        content.setSpan(Selection.SELECTION_END, 0, 0, Spanned.SPAN_POINT_POINT);
448ce9f296cac94572c4cf16b5693a54c41258018fPhil Dubach        numberKeyListener.onKeyDown(view, content, KeyEvent.KEYCODE_0,
458ce9f296cac94572c4cf16b5693a54c41258018fPhil Dubach                new KeyEvent(KeyEvent.ACTION_DOWN, KeyEvent.KEYCODE_0));
46f8057104af9cae031b544e971a52adafa7c0d9eThe Android Open Source Project        assertEquals('0', content.charAt(0));
47f8057104af9cae031b544e971a52adafa7c0d9eThe Android Open Source Project
48f8057104af9cae031b544e971a52adafa7c0d9eThe Android Open Source Project        content.setSpan(Selection.SELECTION_START, 1, 1, Spanned.SPAN_POINT_POINT);
49f8057104af9cae031b544e971a52adafa7c0d9eThe Android Open Source Project        content.setSpan(Selection.SELECTION_END, 1, 1, Spanned.SPAN_POINT_POINT);
508ce9f296cac94572c4cf16b5693a54c41258018fPhil Dubach        numberKeyListener.onKeyDown(view, content, KeyEvent.KEYCODE_2,
518ce9f296cac94572c4cf16b5693a54c41258018fPhil Dubach                new KeyEvent(KeyEvent.ACTION_DOWN, KeyEvent.KEYCODE_2));
52f8057104af9cae031b544e971a52adafa7c0d9eThe Android Open Source Project        assertEquals('2', content.charAt(1));
53f8057104af9cae031b544e971a52adafa7c0d9eThe Android Open Source Project
54f8057104af9cae031b544e971a52adafa7c0d9eThe Android Open Source Project        content.setSpan(Selection.SELECTION_START, 3, 3, Spanned.SPAN_POINT_POINT);
55f8057104af9cae031b544e971a52adafa7c0d9eThe Android Open Source Project        content.setSpan(Selection.SELECTION_END, 3, 3, Spanned.SPAN_POINT_POINT);
568ce9f296cac94572c4cf16b5693a54c41258018fPhil Dubach        numberKeyListener.onKeyDown(view, content, KeyEvent.KEYCODE_3,
578ce9f296cac94572c4cf16b5693a54c41258018fPhil Dubach                new KeyEvent(KeyEvent.ACTION_DOWN, KeyEvent.KEYCODE_3));
58f8057104af9cae031b544e971a52adafa7c0d9eThe Android Open Source Project        assertEquals('3', content.charAt(3));
59f8057104af9cae031b544e971a52adafa7c0d9eThe Android Open Source Project    }
60f8057104af9cae031b544e971a52adafa7c0d9eThe Android Open Source Project
61f8057104af9cae031b544e971a52adafa7c0d9eThe Android Open Source Project    public void testReleaseKey() {
62f8057104af9cae031b544e971a52adafa7c0d9eThe Android Open Source Project        final CharSequence str = "123456";
63f8057104af9cae031b544e971a52adafa7c0d9eThe Android Open Source Project        final MetaKeyKeyListener numberKeyListener = new DateKeyListener();
64f8057104af9cae031b544e971a52adafa7c0d9eThe Android Open Source Project        final View view = new ImageView(getContext());
65f8057104af9cae031b544e971a52adafa7c0d9eThe Android Open Source Project        final Editable content = Editable.Factory.getInstance().newEditable(str);
66f8057104af9cae031b544e971a52adafa7c0d9eThe Android Open Source Project
67f8057104af9cae031b544e971a52adafa7c0d9eThe Android Open Source Project        content.setSpan(Selection.SELECTION_START, 0, 0, Spanned.SPAN_POINT_POINT);
68f8057104af9cae031b544e971a52adafa7c0d9eThe Android Open Source Project        content.setSpan(Selection.SELECTION_END, 0, 0, Spanned.SPAN_POINT_POINT);
698ce9f296cac94572c4cf16b5693a54c41258018fPhil Dubach        numberKeyListener.onKeyUp(view, content, KeyEvent.KEYCODE_0,
708ce9f296cac94572c4cf16b5693a54c41258018fPhil Dubach                new KeyEvent(KeyEvent.ACTION_DOWN, KeyEvent.KEYCODE_0));
71f8057104af9cae031b544e971a52adafa7c0d9eThe Android Open Source Project        assertEquals(str.charAt(0), content.charAt(0));
72f8057104af9cae031b544e971a52adafa7c0d9eThe Android Open Source Project
73f8057104af9cae031b544e971a52adafa7c0d9eThe Android Open Source Project        content.setSpan(Selection.SELECTION_START, 1, 1, Spanned.SPAN_POINT_POINT);
74f8057104af9cae031b544e971a52adafa7c0d9eThe Android Open Source Project        content.setSpan(Selection.SELECTION_END, 1, 1, Spanned.SPAN_POINT_POINT);
758ce9f296cac94572c4cf16b5693a54c41258018fPhil Dubach        numberKeyListener.onKeyUp(view, content, KeyEvent.KEYCODE_2,
768ce9f296cac94572c4cf16b5693a54c41258018fPhil Dubach                new KeyEvent(KeyEvent.ACTION_DOWN, KeyEvent.KEYCODE_2));
77f8057104af9cae031b544e971a52adafa7c0d9eThe Android Open Source Project        assertEquals(str.charAt(1), content.charAt(1));
78f8057104af9cae031b544e971a52adafa7c0d9eThe Android Open Source Project
79f8057104af9cae031b544e971a52adafa7c0d9eThe Android Open Source Project        content.setSpan(Selection.SELECTION_START, 3, 3, Spanned.SPAN_POINT_POINT);
80f8057104af9cae031b544e971a52adafa7c0d9eThe Android Open Source Project        content.setSpan(Selection.SELECTION_END, 3, 3, Spanned.SPAN_POINT_POINT);
818ce9f296cac94572c4cf16b5693a54c41258018fPhil Dubach        numberKeyListener.onKeyUp(view, content, KeyEvent.KEYCODE_3,
828ce9f296cac94572c4cf16b5693a54c41258018fPhil Dubach                new KeyEvent(KeyEvent.ACTION_DOWN, KeyEvent.KEYCODE_3));
83f8057104af9cae031b544e971a52adafa7c0d9eThe Android Open Source Project        assertEquals(str.charAt(3), content.charAt(3));
84f8057104af9cae031b544e971a52adafa7c0d9eThe Android Open Source Project    }
85f8057104af9cae031b544e971a52adafa7c0d9eThe Android Open Source Project
86f8057104af9cae031b544e971a52adafa7c0d9eThe Android Open Source Project    public void testAdjustMetaAfterKeypress() {
87f8057104af9cae031b544e971a52adafa7c0d9eThe Android Open Source Project        CharSequence str = "123456";
88f8057104af9cae031b544e971a52adafa7c0d9eThe Android Open Source Project        Spannable content = Editable.Factory.getInstance().newEditable(str);
89f8057104af9cae031b544e971a52adafa7c0d9eThe Android Open Source Project        content.setSpan(Selection.SELECTION_START, 0, 0, Spanned.SPAN_POINT_POINT);
90f8057104af9cae031b544e971a52adafa7c0d9eThe Android Open Source Project        int len = str.length(); // for one line less than 100
91f8057104af9cae031b544e971a52adafa7c0d9eThe Android Open Source Project        content.setSpan( Selection.SELECTION_END, len, len, Spanned.SPAN_POINT_POINT);
92f8057104af9cae031b544e971a52adafa7c0d9eThe Android Open Source Project        MetaKeyKeyListener.adjustMetaAfterKeypress(content);
93f8057104af9cae031b544e971a52adafa7c0d9eThe Android Open Source Project        assertEquals(Spanned.SPAN_POINT_POINT, content.getSpanFlags(Selection.SELECTION_START));
94f8057104af9cae031b544e971a52adafa7c0d9eThe Android Open Source Project        assertEquals(Spanned.SPAN_POINT_POINT, content.getSpanFlags(Selection.SELECTION_END));
95f8057104af9cae031b544e971a52adafa7c0d9eThe Android Open Source Project
96f8057104af9cae031b544e971a52adafa7c0d9eThe Android Open Source Project        str = "abc";
97f8057104af9cae031b544e971a52adafa7c0d9eThe Android Open Source Project        content = Editable.Factory.getInstance().newEditable(str);
98f8057104af9cae031b544e971a52adafa7c0d9eThe Android Open Source Project        content.setSpan(Selection.SELECTION_START, 0, 0, Spanned.SPAN_POINT_POINT);
99f8057104af9cae031b544e971a52adafa7c0d9eThe Android Open Source Project        len = str.length(); // for one line less than 100
100f8057104af9cae031b544e971a52adafa7c0d9eThe Android Open Source Project        content.setSpan( Selection.SELECTION_END, len, len, Spanned.SPAN_POINT_POINT);
101f8057104af9cae031b544e971a52adafa7c0d9eThe Android Open Source Project        MetaKeyKeyListener.adjustMetaAfterKeypress(content);
102f8057104af9cae031b544e971a52adafa7c0d9eThe Android Open Source Project        assertEquals(Spanned.SPAN_POINT_POINT, content.getSpanFlags(Selection.SELECTION_START));
103f8057104af9cae031b544e971a52adafa7c0d9eThe Android Open Source Project        assertEquals(Spanned.SPAN_POINT_POINT, content.getSpanFlags(Selection.SELECTION_END));
104f8057104af9cae031b544e971a52adafa7c0d9eThe Android Open Source Project
105f8057104af9cae031b544e971a52adafa7c0d9eThe Android Open Source Project        str = "#@%#$^%^";
106f8057104af9cae031b544e971a52adafa7c0d9eThe Android Open Source Project        content = Editable.Factory.getInstance().newEditable(str);
107f8057104af9cae031b544e971a52adafa7c0d9eThe Android Open Source Project        content.setSpan(Selection.SELECTION_START, 0, 0, Spanned.SPAN_POINT_POINT);
108f8057104af9cae031b544e971a52adafa7c0d9eThe Android Open Source Project        len = str.length(); // for one line less than 100
109f8057104af9cae031b544e971a52adafa7c0d9eThe Android Open Source Project        content.setSpan( Selection.SELECTION_END, len, len, Spanned.SPAN_POINT_POINT);
110f8057104af9cae031b544e971a52adafa7c0d9eThe Android Open Source Project        MetaKeyKeyListener.adjustMetaAfterKeypress(content);
111f8057104af9cae031b544e971a52adafa7c0d9eThe Android Open Source Project        assertEquals(Spanned.SPAN_POINT_POINT, content.getSpanFlags(Selection.SELECTION_START));
112f8057104af9cae031b544e971a52adafa7c0d9eThe Android Open Source Project        assertEquals(Spanned.SPAN_POINT_POINT, content.getSpanFlags(Selection.SELECTION_END));
113f8057104af9cae031b544e971a52adafa7c0d9eThe Android Open Source Project    }
114f8057104af9cae031b544e971a52adafa7c0d9eThe Android Open Source Project
1158ce9f296cac94572c4cf16b5693a54c41258018fPhil Dubach    public void testAdjustMetaAfterKeypress2() {
1168ce9f296cac94572c4cf16b5693a54c41258018fPhil Dubach        long state = MetaKeyKeyListener.adjustMetaAfterKeypress(MetaKeyKeyListener.META_SHIFT_ON);
1178ce9f296cac94572c4cf16b5693a54c41258018fPhil Dubach        assertEquals(MetaKeyKeyListener.META_SHIFT_ON, state);
1188ce9f296cac94572c4cf16b5693a54c41258018fPhil Dubach
1198ce9f296cac94572c4cf16b5693a54c41258018fPhil Dubach        state = MetaKeyKeyListener.adjustMetaAfterKeypress(MetaKeyKeyListener.META_ALT_ON);
1208ce9f296cac94572c4cf16b5693a54c41258018fPhil Dubach        assertEquals(MetaKeyKeyListener.META_ALT_ON, state);
1218ce9f296cac94572c4cf16b5693a54c41258018fPhil Dubach
1228ce9f296cac94572c4cf16b5693a54c41258018fPhil Dubach        state = MetaKeyKeyListener.adjustMetaAfterKeypress(MetaKeyKeyListener.META_SYM_ON);
1238ce9f296cac94572c4cf16b5693a54c41258018fPhil Dubach        assertEquals(MetaKeyKeyListener.META_SYM_ON, state);
1248ce9f296cac94572c4cf16b5693a54c41258018fPhil Dubach
1258ce9f296cac94572c4cf16b5693a54c41258018fPhil Dubach        state = MetaKeyKeyListener.adjustMetaAfterKeypress(0);
1268ce9f296cac94572c4cf16b5693a54c41258018fPhil Dubach        assertEquals(0, state);
1278ce9f296cac94572c4cf16b5693a54c41258018fPhil Dubach    }
1288ce9f296cac94572c4cf16b5693a54c41258018fPhil Dubach
129f8057104af9cae031b544e971a52adafa7c0d9eThe Android Open Source Project    public void testResetMetaState() {
130f8057104af9cae031b544e971a52adafa7c0d9eThe Android Open Source Project        CharSequence str = "123456";
131f8057104af9cae031b544e971a52adafa7c0d9eThe Android Open Source Project        Spannable text = Editable.Factory.getInstance().newEditable(str);
132f8057104af9cae031b544e971a52adafa7c0d9eThe Android Open Source Project        text.setSpan(Selection.SELECTION_START, 0, 0, Spanned.SPAN_POINT_POINT);
133f8057104af9cae031b544e971a52adafa7c0d9eThe Android Open Source Project        text.setSpan(Selection.SELECTION_END, str.length(), str.length(), Spanned.SPAN_POINT_POINT);
134f8057104af9cae031b544e971a52adafa7c0d9eThe Android Open Source Project        MetaKeyKeyListener.resetMetaState(text);
135f8057104af9cae031b544e971a52adafa7c0d9eThe Android Open Source Project        assertEquals(Spanned.SPAN_POINT_POINT, text.getSpanFlags(Selection.SELECTION_START));
136f8057104af9cae031b544e971a52adafa7c0d9eThe Android Open Source Project        assertEquals(Spanned.SPAN_POINT_POINT, text.getSpanFlags(Selection.SELECTION_END));
137f8057104af9cae031b544e971a52adafa7c0d9eThe Android Open Source Project
138f8057104af9cae031b544e971a52adafa7c0d9eThe Android Open Source Project        str = "abc";
139f8057104af9cae031b544e971a52adafa7c0d9eThe Android Open Source Project        text = Editable.Factory.getInstance().newEditable(str);
140f8057104af9cae031b544e971a52adafa7c0d9eThe Android Open Source Project        text.setSpan(Selection.SELECTION_START, 0, 0, Spanned.SPAN_POINT_POINT);
141f8057104af9cae031b544e971a52adafa7c0d9eThe Android Open Source Project        text.setSpan(Selection.SELECTION_END, str.length(), str.length(), Spanned.SPAN_POINT_POINT);
142f8057104af9cae031b544e971a52adafa7c0d9eThe Android Open Source Project        MetaKeyKeyListener.resetMetaState(text);
143f8057104af9cae031b544e971a52adafa7c0d9eThe Android Open Source Project        assertEquals(Spanned.SPAN_POINT_POINT, text.getSpanFlags(Selection.SELECTION_START));
144f8057104af9cae031b544e971a52adafa7c0d9eThe Android Open Source Project        assertEquals(Spanned.SPAN_POINT_POINT, text.getSpanFlags(Selection.SELECTION_END));
145f8057104af9cae031b544e971a52adafa7c0d9eThe Android Open Source Project
146f8057104af9cae031b544e971a52adafa7c0d9eThe Android Open Source Project        str = "#@%#$^%^";
147f8057104af9cae031b544e971a52adafa7c0d9eThe Android Open Source Project        text = Editable.Factory.getInstance().newEditable(str);
148f8057104af9cae031b544e971a52adafa7c0d9eThe Android Open Source Project        text.setSpan(Selection.SELECTION_START, 0, 0, Spanned.SPAN_POINT_POINT);
149f8057104af9cae031b544e971a52adafa7c0d9eThe Android Open Source Project        text.setSpan(Selection.SELECTION_END, str.length(), str.length(), Spanned.SPAN_POINT_POINT);
150f8057104af9cae031b544e971a52adafa7c0d9eThe Android Open Source Project        MetaKeyKeyListener.resetMetaState(text);
151f8057104af9cae031b544e971a52adafa7c0d9eThe Android Open Source Project        assertEquals(Spanned.SPAN_POINT_POINT, text.getSpanFlags(Selection.SELECTION_START));
152f8057104af9cae031b544e971a52adafa7c0d9eThe Android Open Source Project        assertEquals(Spanned.SPAN_POINT_POINT, text.getSpanFlags(Selection.SELECTION_END));
153f8057104af9cae031b544e971a52adafa7c0d9eThe Android Open Source Project    }
154f8057104af9cae031b544e971a52adafa7c0d9eThe Android Open Source Project
155f8057104af9cae031b544e971a52adafa7c0d9eThe Android Open Source Project    public void testGetMetaState() {
156f8057104af9cae031b544e971a52adafa7c0d9eThe Android Open Source Project        assertEquals(0, MetaKeyKeyListener.getMetaState("123456"));
157f8057104af9cae031b544e971a52adafa7c0d9eThe Android Open Source Project        assertEquals(0, MetaKeyKeyListener.getMetaState("abc"));
158f8057104af9cae031b544e971a52adafa7c0d9eThe Android Open Source Project        assertEquals(0, MetaKeyKeyListener.getMetaState("@#$$#^$^"));
159f8057104af9cae031b544e971a52adafa7c0d9eThe Android Open Source Project
1608ce9f296cac94572c4cf16b5693a54c41258018fPhil Dubach        assertEquals(0,
1618ce9f296cac94572c4cf16b5693a54c41258018fPhil Dubach                     MetaKeyKeyListener.getMetaState("123456"),
1628ce9f296cac94572c4cf16b5693a54c41258018fPhil Dubach                     MetaKeyKeyListener.META_SHIFT_ON);
1638ce9f296cac94572c4cf16b5693a54c41258018fPhil Dubach        assertEquals(0,
1648ce9f296cac94572c4cf16b5693a54c41258018fPhil Dubach                     MetaKeyKeyListener.getMetaState("abc"),
1658ce9f296cac94572c4cf16b5693a54c41258018fPhil Dubach                     MetaKeyKeyListener.META_ALT_ON);
1668ce9f296cac94572c4cf16b5693a54c41258018fPhil Dubach        assertEquals(0,
1678ce9f296cac94572c4cf16b5693a54c41258018fPhil Dubach                     MetaKeyKeyListener.getMetaState("@#$$#^$^"),
1688ce9f296cac94572c4cf16b5693a54c41258018fPhil Dubach                     MetaKeyKeyListener.META_SYM_ON);
169f8057104af9cae031b544e971a52adafa7c0d9eThe Android Open Source Project
170f8057104af9cae031b544e971a52adafa7c0d9eThe Android Open Source Project        assertEquals(0, MetaKeyKeyListener.getMetaState("123456", 0));
171f8057104af9cae031b544e971a52adafa7c0d9eThe Android Open Source Project        assertEquals(0, MetaKeyKeyListener.getMetaState("abc", -1));
172f8057104af9cae031b544e971a52adafa7c0d9eThe Android Open Source Project        assertEquals(0, MetaKeyKeyListener.getMetaState("@#$$#^$^", Integer.MAX_VALUE));
173f8057104af9cae031b544e971a52adafa7c0d9eThe Android Open Source Project
174f8057104af9cae031b544e971a52adafa7c0d9eThe Android Open Source Project        assertEquals(0,
175f8057104af9cae031b544e971a52adafa7c0d9eThe Android Open Source Project                MetaKeyKeyListener.getMetaState("123456", MetaKeyKeyListener.META_SHIFT_ON));
176f8057104af9cae031b544e971a52adafa7c0d9eThe Android Open Source Project        assertEquals(0, MetaKeyKeyListener.getMetaState("abc", MetaKeyKeyListener.META_ALT_ON));
177f8057104af9cae031b544e971a52adafa7c0d9eThe Android Open Source Project        assertEquals(0,
178f8057104af9cae031b544e971a52adafa7c0d9eThe Android Open Source Project                MetaKeyKeyListener.getMetaState("@#$$#^$^", MetaKeyKeyListener.META_SYM_ON));
179f8057104af9cae031b544e971a52adafa7c0d9eThe Android Open Source Project    }
180f8057104af9cae031b544e971a52adafa7c0d9eThe Android Open Source Project
1818ce9f296cac94572c4cf16b5693a54c41258018fPhil Dubach    public void testGetMetaState2() {
1828ce9f296cac94572c4cf16b5693a54c41258018fPhil Dubach        assertEquals(0, MetaKeyKeyListener.getMetaState(0));
1838ce9f296cac94572c4cf16b5693a54c41258018fPhil Dubach        assertEquals(MetaKeyKeyListener.META_SHIFT_ON,
1848ce9f296cac94572c4cf16b5693a54c41258018fPhil Dubach                MetaKeyKeyListener.getMetaState(MetaKeyKeyListener.META_SHIFT_ON));
1858ce9f296cac94572c4cf16b5693a54c41258018fPhil Dubach        assertEquals(MetaKeyKeyListener.META_CAP_LOCKED,
1868ce9f296cac94572c4cf16b5693a54c41258018fPhil Dubach                MetaKeyKeyListener.getMetaState(MetaKeyKeyListener.META_CAP_LOCKED));
1878ce9f296cac94572c4cf16b5693a54c41258018fPhil Dubach
1888ce9f296cac94572c4cf16b5693a54c41258018fPhil Dubach        assertEquals(0, MetaKeyKeyListener.getMetaState(0, MetaKeyKeyListener.META_SYM_ON));
1898ce9f296cac94572c4cf16b5693a54c41258018fPhil Dubach        assertEquals(1, MetaKeyKeyListener.getMetaState(MetaKeyKeyListener.META_SYM_ON,
1908ce9f296cac94572c4cf16b5693a54c41258018fPhil Dubach                MetaKeyKeyListener.META_SYM_ON));
1918ce9f296cac94572c4cf16b5693a54c41258018fPhil Dubach        assertEquals(2, MetaKeyKeyListener.getMetaState(MetaKeyKeyListener.META_SYM_LOCKED,
1928ce9f296cac94572c4cf16b5693a54c41258018fPhil Dubach                MetaKeyKeyListener.META_SYM_ON));
1938ce9f296cac94572c4cf16b5693a54c41258018fPhil Dubach    }
1948ce9f296cac94572c4cf16b5693a54c41258018fPhil Dubach
195f8057104af9cae031b544e971a52adafa7c0d9eThe Android Open Source Project    public void testIsMetaTracker() {
196f8057104af9cae031b544e971a52adafa7c0d9eThe Android Open Source Project        assertFalse(MetaKeyKeyListener.isMetaTracker("123456", new Object()));
197f8057104af9cae031b544e971a52adafa7c0d9eThe Android Open Source Project        assertFalse(MetaKeyKeyListener.isMetaTracker("abc", new Object()));
198f8057104af9cae031b544e971a52adafa7c0d9eThe Android Open Source Project        assertFalse(MetaKeyKeyListener.isMetaTracker("@#$$#^$^", new Object()));
199f8057104af9cae031b544e971a52adafa7c0d9eThe Android Open Source Project    }
200f8057104af9cae031b544e971a52adafa7c0d9eThe Android Open Source Project
2018ce9f296cac94572c4cf16b5693a54c41258018fPhil Dubach    public void testIsSelectingMetaTracker() {
2028ce9f296cac94572c4cf16b5693a54c41258018fPhil Dubach        assertFalse(MetaKeyKeyListener.isSelectingMetaTracker("123456", new Object()));
2038ce9f296cac94572c4cf16b5693a54c41258018fPhil Dubach        assertFalse(MetaKeyKeyListener.isSelectingMetaTracker("abc", new Object()));
2048ce9f296cac94572c4cf16b5693a54c41258018fPhil Dubach        assertFalse(MetaKeyKeyListener.isSelectingMetaTracker("@#$$#^$^", new Object()));
2058ce9f296cac94572c4cf16b5693a54c41258018fPhil Dubach    }
2068ce9f296cac94572c4cf16b5693a54c41258018fPhil Dubach
207f8057104af9cae031b544e971a52adafa7c0d9eThe Android Open Source Project    public void testResetLockedMeta() {
208f8057104af9cae031b544e971a52adafa7c0d9eThe Android Open Source Project        MockMetaKeyKeyListener mockMetaKeyKeyListener = new MockMetaKeyKeyListener();
209f8057104af9cae031b544e971a52adafa7c0d9eThe Android Open Source Project
2108ce9f296cac94572c4cf16b5693a54c41258018fPhil Dubach        MockSpannable str = new MockSpannable();
2118ce9f296cac94572c4cf16b5693a54c41258018fPhil Dubach        str.setSpan(new Object(), 0, 0, Spannable.SPAN_MARK_MARK
2128ce9f296cac94572c4cf16b5693a54c41258018fPhil Dubach                | (4 << Spannable.SPAN_USER_SHIFT));
2138ce9f296cac94572c4cf16b5693a54c41258018fPhil Dubach        assertFalse(str.hasCalledRemoveSpan());
2148ce9f296cac94572c4cf16b5693a54c41258018fPhil Dubach        mockMetaKeyKeyListener.callResetLockedMeta(str);
2158ce9f296cac94572c4cf16b5693a54c41258018fPhil Dubach        assertTrue(str.hasCalledRemoveSpan());
2168ce9f296cac94572c4cf16b5693a54c41258018fPhil Dubach
2178ce9f296cac94572c4cf16b5693a54c41258018fPhil Dubach        str = new MockSpannable();
2188ce9f296cac94572c4cf16b5693a54c41258018fPhil Dubach        str.setSpan(new Object(), 0, 0, Spannable.SPAN_MARK_POINT);
2198ce9f296cac94572c4cf16b5693a54c41258018fPhil Dubach        assertFalse(str.hasCalledRemoveSpan());
2208ce9f296cac94572c4cf16b5693a54c41258018fPhil Dubach        mockMetaKeyKeyListener.callResetLockedMeta(str);
2218ce9f296cac94572c4cf16b5693a54c41258018fPhil Dubach        assertFalse(str.hasCalledRemoveSpan());
222f8057104af9cae031b544e971a52adafa7c0d9eThe Android Open Source Project
223f8057104af9cae031b544e971a52adafa7c0d9eThe Android Open Source Project        try {
224f8057104af9cae031b544e971a52adafa7c0d9eThe Android Open Source Project            mockMetaKeyKeyListener.callResetLockedMeta(null);
225f8057104af9cae031b544e971a52adafa7c0d9eThe Android Open Source Project            fail("should throw NullPointerException.");
226f8057104af9cae031b544e971a52adafa7c0d9eThe Android Open Source Project        } catch (NullPointerException e) {
227f8057104af9cae031b544e971a52adafa7c0d9eThe Android Open Source Project        }
228f8057104af9cae031b544e971a52adafa7c0d9eThe Android Open Source Project    }
229f8057104af9cae031b544e971a52adafa7c0d9eThe Android Open Source Project
2308ce9f296cac94572c4cf16b5693a54c41258018fPhil Dubach    public void testResetLockedMeta2() {
2318ce9f296cac94572c4cf16b5693a54c41258018fPhil Dubach        long state = MetaKeyKeyListener.resetLockedMeta(MetaKeyKeyListener.META_CAP_LOCKED);
2328ce9f296cac94572c4cf16b5693a54c41258018fPhil Dubach        assertEquals(0, state);
2338ce9f296cac94572c4cf16b5693a54c41258018fPhil Dubach
2348ce9f296cac94572c4cf16b5693a54c41258018fPhil Dubach        state = MetaKeyKeyListener.resetLockedMeta(MetaKeyKeyListener.META_SHIFT_ON);
2358ce9f296cac94572c4cf16b5693a54c41258018fPhil Dubach        assertEquals(MetaKeyKeyListener.META_SHIFT_ON, state);
2368ce9f296cac94572c4cf16b5693a54c41258018fPhil Dubach
2378ce9f296cac94572c4cf16b5693a54c41258018fPhil Dubach        state = MetaKeyKeyListener.resetLockedMeta(MetaKeyKeyListener.META_ALT_LOCKED);
2388ce9f296cac94572c4cf16b5693a54c41258018fPhil Dubach        assertEquals(0, state);
2398ce9f296cac94572c4cf16b5693a54c41258018fPhil Dubach
2408ce9f296cac94572c4cf16b5693a54c41258018fPhil Dubach        state = MetaKeyKeyListener.resetLockedMeta(MetaKeyKeyListener.META_ALT_ON);
2418ce9f296cac94572c4cf16b5693a54c41258018fPhil Dubach        assertEquals(MetaKeyKeyListener.META_ALT_ON, state);
2428ce9f296cac94572c4cf16b5693a54c41258018fPhil Dubach
2438ce9f296cac94572c4cf16b5693a54c41258018fPhil Dubach        state = MetaKeyKeyListener.resetLockedMeta(MetaKeyKeyListener.META_SYM_LOCKED);
2448ce9f296cac94572c4cf16b5693a54c41258018fPhil Dubach        assertEquals(0, state);
2458ce9f296cac94572c4cf16b5693a54c41258018fPhil Dubach
2468ce9f296cac94572c4cf16b5693a54c41258018fPhil Dubach        state = MetaKeyKeyListener.resetLockedMeta(MetaKeyKeyListener.META_SYM_ON);
2478ce9f296cac94572c4cf16b5693a54c41258018fPhil Dubach        assertEquals(MetaKeyKeyListener.META_SYM_ON, state);
2488ce9f296cac94572c4cf16b5693a54c41258018fPhil Dubach    }
2498ce9f296cac94572c4cf16b5693a54c41258018fPhil Dubach
250f8057104af9cae031b544e971a52adafa7c0d9eThe Android Open Source Project    public void testClearMetaKeyState() {
251f8057104af9cae031b544e971a52adafa7c0d9eThe Android Open Source Project        final MetaKeyKeyListener numberKeyListener = new DateKeyListener();
252f8057104af9cae031b544e971a52adafa7c0d9eThe Android Open Source Project        CharSequence str = "123456";
253f8057104af9cae031b544e971a52adafa7c0d9eThe Android Open Source Project        Editable text = Editable.Factory.getInstance().newEditable(str);
254f8057104af9cae031b544e971a52adafa7c0d9eThe Android Open Source Project        text.setSpan(Selection.SELECTION_START, 0, 0, Spanned.SPAN_POINT_POINT);
255f8057104af9cae031b544e971a52adafa7c0d9eThe Android Open Source Project        text.setSpan(Selection.SELECTION_END, str.length(), str.length(), Spanned.SPAN_POINT_POINT);
256f8057104af9cae031b544e971a52adafa7c0d9eThe Android Open Source Project        numberKeyListener.clearMetaKeyState(null, text, MetaKeyKeyListener.META_SHIFT_ON);
257f8057104af9cae031b544e971a52adafa7c0d9eThe Android Open Source Project        assertEquals(Spanned.SPAN_POINT_POINT, text.getSpanFlags(Selection.SELECTION_START));
258f8057104af9cae031b544e971a52adafa7c0d9eThe Android Open Source Project        assertEquals(Spanned.SPAN_POINT_POINT, text.getSpanFlags(Selection.SELECTION_END));
259f8057104af9cae031b544e971a52adafa7c0d9eThe Android Open Source Project
260f8057104af9cae031b544e971a52adafa7c0d9eThe Android Open Source Project        str = "abc";
261f8057104af9cae031b544e971a52adafa7c0d9eThe Android Open Source Project        text = Editable.Factory.getInstance().newEditable(str);
262f8057104af9cae031b544e971a52adafa7c0d9eThe Android Open Source Project        text.setSpan(Selection.SELECTION_START, 0, 0, Spanned.SPAN_POINT_POINT);
263f8057104af9cae031b544e971a52adafa7c0d9eThe Android Open Source Project        text.setSpan(Selection.SELECTION_END, str.length(), str.length(), Spanned.SPAN_POINT_POINT);
264f8057104af9cae031b544e971a52adafa7c0d9eThe Android Open Source Project        numberKeyListener.clearMetaKeyState(null, text, MetaKeyKeyListener.META_ALT_ON);
265f8057104af9cae031b544e971a52adafa7c0d9eThe Android Open Source Project        assertEquals(Spanned.SPAN_POINT_POINT, text.getSpanFlags(Selection.SELECTION_START));
266f8057104af9cae031b544e971a52adafa7c0d9eThe Android Open Source Project        assertEquals(Spanned.SPAN_POINT_POINT, text.getSpanFlags(Selection.SELECTION_END));
267f8057104af9cae031b544e971a52adafa7c0d9eThe Android Open Source Project
268f8057104af9cae031b544e971a52adafa7c0d9eThe Android Open Source Project        str = "#@%#$^%^";
269f8057104af9cae031b544e971a52adafa7c0d9eThe Android Open Source Project        text = Editable.Factory.getInstance().newEditable(str);
270f8057104af9cae031b544e971a52adafa7c0d9eThe Android Open Source Project        text.setSpan(Selection.SELECTION_START, 0, 0, Spanned.SPAN_POINT_POINT);
271f8057104af9cae031b544e971a52adafa7c0d9eThe Android Open Source Project        text.setSpan(Selection.SELECTION_END, str.length(), str.length(), Spanned.SPAN_POINT_POINT);
272f8057104af9cae031b544e971a52adafa7c0d9eThe Android Open Source Project        numberKeyListener.clearMetaKeyState(null, text, MetaKeyKeyListener.META_SYM_ON);
273f8057104af9cae031b544e971a52adafa7c0d9eThe Android Open Source Project        assertEquals(Spanned.SPAN_POINT_POINT, text.getSpanFlags(Selection.SELECTION_START));
274f8057104af9cae031b544e971a52adafa7c0d9eThe Android Open Source Project        assertEquals(Spanned.SPAN_POINT_POINT, text.getSpanFlags(Selection.SELECTION_END));
275f8057104af9cae031b544e971a52adafa7c0d9eThe Android Open Source Project    }
276f8057104af9cae031b544e971a52adafa7c0d9eThe Android Open Source Project
2778ce9f296cac94572c4cf16b5693a54c41258018fPhil Dubach    public void testClearMetaKeyState2() {
2788ce9f296cac94572c4cf16b5693a54c41258018fPhil Dubach        CharSequence str = "123456";
2798ce9f296cac94572c4cf16b5693a54c41258018fPhil Dubach        Editable text = Editable.Factory.getInstance().newEditable(str);
2808ce9f296cac94572c4cf16b5693a54c41258018fPhil Dubach        text.setSpan(Selection.SELECTION_START, 0, 0, Spanned.SPAN_POINT_POINT);
2818ce9f296cac94572c4cf16b5693a54c41258018fPhil Dubach        text.setSpan(Selection.SELECTION_END, str.length(), str.length(), Spanned.SPAN_POINT_POINT);
2828ce9f296cac94572c4cf16b5693a54c41258018fPhil Dubach        MetaKeyKeyListener.clearMetaKeyState(text, MetaKeyKeyListener.META_SHIFT_ON);
2838ce9f296cac94572c4cf16b5693a54c41258018fPhil Dubach        assertEquals(Spanned.SPAN_POINT_POINT, text.getSpanFlags(Selection.SELECTION_START));
2848ce9f296cac94572c4cf16b5693a54c41258018fPhil Dubach        assertEquals(Spanned.SPAN_POINT_POINT, text.getSpanFlags(Selection.SELECTION_END));
2858ce9f296cac94572c4cf16b5693a54c41258018fPhil Dubach
2868ce9f296cac94572c4cf16b5693a54c41258018fPhil Dubach        str = "abc";
2878ce9f296cac94572c4cf16b5693a54c41258018fPhil Dubach        text = Editable.Factory.getInstance().newEditable(str);
2888ce9f296cac94572c4cf16b5693a54c41258018fPhil Dubach        text.setSpan(Selection.SELECTION_START, 0, 0, Spanned.SPAN_POINT_POINT);
2898ce9f296cac94572c4cf16b5693a54c41258018fPhil Dubach        text.setSpan(Selection.SELECTION_END, str.length(), str.length(), Spanned.SPAN_POINT_POINT);
2908ce9f296cac94572c4cf16b5693a54c41258018fPhil Dubach        MetaKeyKeyListener.clearMetaKeyState(text, MetaKeyKeyListener.META_ALT_ON);
2918ce9f296cac94572c4cf16b5693a54c41258018fPhil Dubach        assertEquals(Spanned.SPAN_POINT_POINT, text.getSpanFlags(Selection.SELECTION_START));
2928ce9f296cac94572c4cf16b5693a54c41258018fPhil Dubach        assertEquals(Spanned.SPAN_POINT_POINT, text.getSpanFlags(Selection.SELECTION_END));
2938ce9f296cac94572c4cf16b5693a54c41258018fPhil Dubach
2948ce9f296cac94572c4cf16b5693a54c41258018fPhil Dubach        str = "#@%#$^%^";
2958ce9f296cac94572c4cf16b5693a54c41258018fPhil Dubach        text = Editable.Factory.getInstance().newEditable(str);
2968ce9f296cac94572c4cf16b5693a54c41258018fPhil Dubach        text.setSpan(Selection.SELECTION_START, 0, 0, Spanned.SPAN_POINT_POINT);
2978ce9f296cac94572c4cf16b5693a54c41258018fPhil Dubach        text.setSpan(Selection.SELECTION_END, str.length(), str.length(), Spanned.SPAN_POINT_POINT);
2988ce9f296cac94572c4cf16b5693a54c41258018fPhil Dubach        MetaKeyKeyListener.clearMetaKeyState(text, MetaKeyKeyListener.META_SYM_ON);
2998ce9f296cac94572c4cf16b5693a54c41258018fPhil Dubach        assertEquals(Spanned.SPAN_POINT_POINT, text.getSpanFlags(Selection.SELECTION_START));
3008ce9f296cac94572c4cf16b5693a54c41258018fPhil Dubach        assertEquals(Spanned.SPAN_POINT_POINT, text.getSpanFlags(Selection.SELECTION_END));
3018ce9f296cac94572c4cf16b5693a54c41258018fPhil Dubach    }
3028ce9f296cac94572c4cf16b5693a54c41258018fPhil Dubach
3038ce9f296cac94572c4cf16b5693a54c41258018fPhil Dubach    public void testClearMetaKeyState3() {
3048ce9f296cac94572c4cf16b5693a54c41258018fPhil Dubach        final MetaKeyKeyListener metaKeyKeyListener = new MetaKeyKeyListener() {};
3058ce9f296cac94572c4cf16b5693a54c41258018fPhil Dubach        long state = metaKeyKeyListener.clearMetaKeyState(MetaKeyKeyListener.META_CAP_LOCKED,
3068ce9f296cac94572c4cf16b5693a54c41258018fPhil Dubach                MetaKeyKeyListener.META_SHIFT_ON);
3078ce9f296cac94572c4cf16b5693a54c41258018fPhil Dubach        assertEquals(0, state);
3088ce9f296cac94572c4cf16b5693a54c41258018fPhil Dubach
3098ce9f296cac94572c4cf16b5693a54c41258018fPhil Dubach        state = metaKeyKeyListener.clearMetaKeyState(MetaKeyKeyListener.META_SHIFT_ON,
3108ce9f296cac94572c4cf16b5693a54c41258018fPhil Dubach                MetaKeyKeyListener.META_SHIFT_ON);
3118ce9f296cac94572c4cf16b5693a54c41258018fPhil Dubach        assertEquals(MetaKeyKeyListener.META_SHIFT_ON, state);
3128ce9f296cac94572c4cf16b5693a54c41258018fPhil Dubach
3138ce9f296cac94572c4cf16b5693a54c41258018fPhil Dubach        state = metaKeyKeyListener.clearMetaKeyState(MetaKeyKeyListener.META_ALT_LOCKED,
3148ce9f296cac94572c4cf16b5693a54c41258018fPhil Dubach                MetaKeyKeyListener.META_ALT_ON);
3158ce9f296cac94572c4cf16b5693a54c41258018fPhil Dubach        assertEquals(0, state);
3168ce9f296cac94572c4cf16b5693a54c41258018fPhil Dubach
3178ce9f296cac94572c4cf16b5693a54c41258018fPhil Dubach        state = metaKeyKeyListener.clearMetaKeyState(MetaKeyKeyListener.META_ALT_ON,
3188ce9f296cac94572c4cf16b5693a54c41258018fPhil Dubach                MetaKeyKeyListener.META_ALT_ON);
3198ce9f296cac94572c4cf16b5693a54c41258018fPhil Dubach        assertEquals(MetaKeyKeyListener.META_ALT_ON, state);
3208ce9f296cac94572c4cf16b5693a54c41258018fPhil Dubach
3218ce9f296cac94572c4cf16b5693a54c41258018fPhil Dubach        state = metaKeyKeyListener.clearMetaKeyState(MetaKeyKeyListener.META_SYM_LOCKED,
3228ce9f296cac94572c4cf16b5693a54c41258018fPhil Dubach                MetaKeyKeyListener.META_SYM_ON);
3238ce9f296cac94572c4cf16b5693a54c41258018fPhil Dubach        assertEquals(0, state);
3248ce9f296cac94572c4cf16b5693a54c41258018fPhil Dubach
3258ce9f296cac94572c4cf16b5693a54c41258018fPhil Dubach        state = metaKeyKeyListener.clearMetaKeyState(MetaKeyKeyListener.META_SYM_ON,
3268ce9f296cac94572c4cf16b5693a54c41258018fPhil Dubach                MetaKeyKeyListener.META_SYM_ON);
3278ce9f296cac94572c4cf16b5693a54c41258018fPhil Dubach        assertEquals(MetaKeyKeyListener.META_SYM_ON, state);
3288ce9f296cac94572c4cf16b5693a54c41258018fPhil Dubach    }
3298ce9f296cac94572c4cf16b5693a54c41258018fPhil Dubach
3308ce9f296cac94572c4cf16b5693a54c41258018fPhil Dubach    public void testHandleKeyDown() {
331082804b2ef53e533e965f39e68175ed6ad1b4593Brian Muramatsu        KeyEvent fullEvent = new KeyEvent(0, 0, KeyEvent.ACTION_DOWN, KeyEvent.KEYCODE_SHIFT_LEFT,
332082804b2ef53e533e965f39e68175ed6ad1b4593Brian Muramatsu                0, 0, KeyCharacterMap.VIRTUAL_KEYBOARD, 0);
3338ce9f296cac94572c4cf16b5693a54c41258018fPhil Dubach        long state = MetaKeyKeyListener.handleKeyDown(MetaKeyKeyListener.META_CAP_LOCKED,
334082804b2ef53e533e965f39e68175ed6ad1b4593Brian Muramatsu                KeyEvent.KEYCODE_SHIFT_LEFT, fullEvent);
3358ce9f296cac94572c4cf16b5693a54c41258018fPhil Dubach        assertEquals(0, state);
3368ce9f296cac94572c4cf16b5693a54c41258018fPhil Dubach    }
3378ce9f296cac94572c4cf16b5693a54c41258018fPhil Dubach
3388ce9f296cac94572c4cf16b5693a54c41258018fPhil Dubach    public void testHandleKeyUp() {
339082804b2ef53e533e965f39e68175ed6ad1b4593Brian Muramatsu        KeyEvent fullEvent = new KeyEvent(0, 0, KeyEvent.ACTION_UP, KeyEvent.KEYCODE_SHIFT_LEFT,
340082804b2ef53e533e965f39e68175ed6ad1b4593Brian Muramatsu                0, 0, KeyCharacterMap.VIRTUAL_KEYBOARD, 0);
3418ce9f296cac94572c4cf16b5693a54c41258018fPhil Dubach        long state = MetaKeyKeyListener.handleKeyUp(MetaKeyKeyListener.META_CAP_LOCKED,
342082804b2ef53e533e965f39e68175ed6ad1b4593Brian Muramatsu                KeyEvent.KEYCODE_SHIFT_LEFT, fullEvent);
343082804b2ef53e533e965f39e68175ed6ad1b4593Brian Muramatsu        assertEquals(0, state);
3448ce9f296cac94572c4cf16b5693a54c41258018fPhil Dubach    }
3458ce9f296cac94572c4cf16b5693a54c41258018fPhil Dubach
346f8057104af9cae031b544e971a52adafa7c0d9eThe Android Open Source Project    private class MockMetaKeyKeyListener extends MetaKeyKeyListener {
347f8057104af9cae031b544e971a52adafa7c0d9eThe Android Open Source Project        public void callResetLockedMeta(Spannable content) {
348f8057104af9cae031b544e971a52adafa7c0d9eThe Android Open Source Project            MetaKeyKeyListener.resetLockedMeta(content);
349f8057104af9cae031b544e971a52adafa7c0d9eThe Android Open Source Project        }
350f8057104af9cae031b544e971a52adafa7c0d9eThe Android Open Source Project    }
351f8057104af9cae031b544e971a52adafa7c0d9eThe Android Open Source Project
352f8057104af9cae031b544e971a52adafa7c0d9eThe Android Open Source Project    private class MockSpannable implements Spannable {
353f8057104af9cae031b544e971a52adafa7c0d9eThe Android Open Source Project        private int mFlags;
354f8057104af9cae031b544e971a52adafa7c0d9eThe Android Open Source Project        private boolean mCalledRemoveSpan = false;
355f8057104af9cae031b544e971a52adafa7c0d9eThe Android Open Source Project
356f8057104af9cae031b544e971a52adafa7c0d9eThe Android Open Source Project        public boolean hasCalledRemoveSpan() {
357f8057104af9cae031b544e971a52adafa7c0d9eThe Android Open Source Project            return mCalledRemoveSpan;
358f8057104af9cae031b544e971a52adafa7c0d9eThe Android Open Source Project        }
359f8057104af9cae031b544e971a52adafa7c0d9eThe Android Open Source Project
360f8057104af9cae031b544e971a52adafa7c0d9eThe Android Open Source Project        public void setSpan(Object what, int start, int end, int flags) {
361f8057104af9cae031b544e971a52adafa7c0d9eThe Android Open Source Project            mFlags = flags;
362f8057104af9cae031b544e971a52adafa7c0d9eThe Android Open Source Project        }
363f8057104af9cae031b544e971a52adafa7c0d9eThe Android Open Source Project
364f8057104af9cae031b544e971a52adafa7c0d9eThe Android Open Source Project        public void removeSpan(Object what) {
365f8057104af9cae031b544e971a52adafa7c0d9eThe Android Open Source Project            mCalledRemoveSpan = true;
366f8057104af9cae031b544e971a52adafa7c0d9eThe Android Open Source Project        }
367f8057104af9cae031b544e971a52adafa7c0d9eThe Android Open Source Project
368f8057104af9cae031b544e971a52adafa7c0d9eThe Android Open Source Project        public <T> T[] getSpans(int start, int end, Class<T> type) {
369f8057104af9cae031b544e971a52adafa7c0d9eThe Android Open Source Project            return null;
370f8057104af9cae031b544e971a52adafa7c0d9eThe Android Open Source Project        }
371f8057104af9cae031b544e971a52adafa7c0d9eThe Android Open Source Project
372f8057104af9cae031b544e971a52adafa7c0d9eThe Android Open Source Project        public int getSpanStart(Object tag) {
373f8057104af9cae031b544e971a52adafa7c0d9eThe Android Open Source Project            return 0;
374f8057104af9cae031b544e971a52adafa7c0d9eThe Android Open Source Project        }
375f8057104af9cae031b544e971a52adafa7c0d9eThe Android Open Source Project
376f8057104af9cae031b544e971a52adafa7c0d9eThe Android Open Source Project        public int getSpanEnd(Object tag) {
377f8057104af9cae031b544e971a52adafa7c0d9eThe Android Open Source Project            return 0;
378f8057104af9cae031b544e971a52adafa7c0d9eThe Android Open Source Project        }
379f8057104af9cae031b544e971a52adafa7c0d9eThe Android Open Source Project
380f8057104af9cae031b544e971a52adafa7c0d9eThe Android Open Source Project        public int getSpanFlags(Object tag) {
381f8057104af9cae031b544e971a52adafa7c0d9eThe Android Open Source Project            return mFlags;
382f8057104af9cae031b544e971a52adafa7c0d9eThe Android Open Source Project        }
383f8057104af9cae031b544e971a52adafa7c0d9eThe Android Open Source Project
384f8057104af9cae031b544e971a52adafa7c0d9eThe Android Open Source Project        @SuppressWarnings("unchecked")
385f8057104af9cae031b544e971a52adafa7c0d9eThe Android Open Source Project        public int nextSpanTransition(int start, int limit, Class type) {
386f8057104af9cae031b544e971a52adafa7c0d9eThe Android Open Source Project            return 0;
387f8057104af9cae031b544e971a52adafa7c0d9eThe Android Open Source Project        }
388f8057104af9cae031b544e971a52adafa7c0d9eThe Android Open Source Project
389f8057104af9cae031b544e971a52adafa7c0d9eThe Android Open Source Project        public char charAt(int index) {
390f8057104af9cae031b544e971a52adafa7c0d9eThe Android Open Source Project            return 0;
391f8057104af9cae031b544e971a52adafa7c0d9eThe Android Open Source Project        }
392f8057104af9cae031b544e971a52adafa7c0d9eThe Android Open Source Project
393f8057104af9cae031b544e971a52adafa7c0d9eThe Android Open Source Project        public int length() {
394f8057104af9cae031b544e971a52adafa7c0d9eThe Android Open Source Project            return 0;
395f8057104af9cae031b544e971a52adafa7c0d9eThe Android Open Source Project        }
396f8057104af9cae031b544e971a52adafa7c0d9eThe Android Open Source Project
397f8057104af9cae031b544e971a52adafa7c0d9eThe Android Open Source Project        public CharSequence subSequence(int start, int end) {
398f8057104af9cae031b544e971a52adafa7c0d9eThe Android Open Source Project            return null;
399f8057104af9cae031b544e971a52adafa7c0d9eThe Android Open Source Project        }
400f8057104af9cae031b544e971a52adafa7c0d9eThe Android Open Source Project    }
401f8057104af9cae031b544e971a52adafa7c0d9eThe Android Open Source Project}
402