19066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project/* 29066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Copyright (C) 2006 The Android Open Source Project 39066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 49066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Licensed under the Apache License, Version 2.0 (the "License"); 59066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * you may not use this file except in compliance with the License. 69066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * You may obtain a copy of the License at 79066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 89066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * http://www.apache.org/licenses/LICENSE-2.0 99066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Unless required by applicable law or agreed to in writing, software 119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * distributed under the License is distributed on an "AS IS" BASIS, 129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * See the License for the specific language governing permissions and 149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * limitations under the License. 159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectpackage android.widget; 189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.content.Context; 209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.view.KeyEvent; 219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.text.Editable; 229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.text.InputFilter; 239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.text.Selection; 249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.text.Spannable; 259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.text.Spanned; 269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.text.TextWatcher; 279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.text.method.DialerKeyListener; 289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.text.method.KeyListener; 299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.text.method.TextKeyListener; 309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.util.AttributeSet; 319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.util.Log; 329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.view.KeyCharacterMap; 339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.view.View; 349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.graphics.Rect; 359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectpublic class DialerFilter extends RelativeLayout 399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{ 409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public DialerFilter(Context context) { 419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project super(context); 429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public DialerFilter(Context context, AttributeSet attrs) { 459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project super(context, attrs); 469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project @Override 499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project protected void onFinishInflate() { 509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project super.onFinishInflate(); 519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // Setup the filter view 539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mInputFilters = new InputFilter[] { new InputFilter.AllCaps() }; 549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mHint = (EditText) findViewById(com.android.internal.R.id.hint); 569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (mHint == null) { 579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project throw new IllegalStateException("DialerFilter must have a child EditText named hint"); 589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mHint.setFilters(mInputFilters); 609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mLetters = mHint; 629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mLetters.setKeyListener(TextKeyListener.getInstance()); 639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mLetters.setMovementMethod(null); 649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mLetters.setFocusable(false); 659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // Setup the digits view 679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mPrimary = (EditText) findViewById(com.android.internal.R.id.primary); 689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (mPrimary == null) { 699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project throw new IllegalStateException("DialerFilter must have a child EditText named primary"); 709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mPrimary.setFilters(mInputFilters); 729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mDigits = mPrimary; 749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mDigits.setKeyListener(DialerKeyListener.getInstance()); 759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mDigits.setMovementMethod(null); 769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mDigits.setFocusable(false); 779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // Look for an icon 799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mIcon = (ImageView) findViewById(com.android.internal.R.id.icon); 809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // Setup focus & highlight for this view 829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project setFocusable(true); 839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // XXX Force the mode to QWERTY for now, since 12-key isn't supported 859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mIsQwerty = true; 869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project setMode(DIGITS_AND_LETTERS); 879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Only show the icon view when focused, if there is one. 919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project @Override 939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project protected void onFocusChanged(boolean focused, int direction, Rect previouslyFocusedRect) { 949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project super.onFocusChanged(focused, direction, previouslyFocusedRect); 959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (mIcon != null) { 979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mIcon.setVisibility(focused ? View.VISIBLE : View.GONE); 989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public boolean isQwertyKeyboard() { 1039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return mIsQwerty; 1049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project @Override 1079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public boolean onKeyDown(int keyCode, KeyEvent event) { 1089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project boolean handled = false; 1099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project switch (keyCode) { 1119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project case KeyEvent.KEYCODE_DPAD_UP: 1129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project case KeyEvent.KEYCODE_DPAD_DOWN: 1139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project case KeyEvent.KEYCODE_DPAD_LEFT: 1149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project case KeyEvent.KEYCODE_DPAD_RIGHT: 1159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project case KeyEvent.KEYCODE_ENTER: 1169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project case KeyEvent.KEYCODE_DPAD_CENTER: 1179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project break; 1189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project case KeyEvent.KEYCODE_DEL: 1209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project switch (mMode) { 1219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project case DIGITS_AND_LETTERS: 1229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project handled = mDigits.onKeyDown(keyCode, event); 1239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project handled &= mLetters.onKeyDown(keyCode, event); 1249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project break; 1259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project case DIGITS_AND_LETTERS_NO_DIGITS: 1279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project handled = mLetters.onKeyDown(keyCode, event); 1289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (mLetters.getText().length() == mDigits.getText().length()) { 1299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project setMode(DIGITS_AND_LETTERS); 1309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project break; 1329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project case DIGITS_AND_LETTERS_NO_LETTERS: 1349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (mDigits.getText().length() == mLetters.getText().length()) { 1359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mLetters.onKeyDown(keyCode, event); 1369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project setMode(DIGITS_AND_LETTERS); 1379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project handled = mDigits.onKeyDown(keyCode, event); 1399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project break; 1409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project case DIGITS_ONLY: 1429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project handled = mDigits.onKeyDown(keyCode, event); 1439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project break; 1449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project case LETTERS_ONLY: 1469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project handled = mLetters.onKeyDown(keyCode, event); 1479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project break; 1489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project break; 1509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project default: 1529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project //mIsQwerty = msg.getKeyIsQwertyKeyboard(); 1539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project switch (mMode) { 1559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project case DIGITS_AND_LETTERS: 1569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project handled = mLetters.onKeyDown(keyCode, event); 1579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // pass this throw so the shift state is correct (for example, 1599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // on a standard QWERTY keyboard, * and 8 are on the same key) 1609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (KeyEvent.isModifierKey(keyCode)) { 1619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mDigits.onKeyDown(keyCode, event); 1629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project handled = true; 1639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project break; 1649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // Only check to see if the digit is valid if the key is a printing key 1679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // in the TextKeyListener. This prevents us from hiding the digits 1689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // line when keys like UP and DOWN are hit. 1699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // XXX note that KEYCODE_TAB is special-cased here for 1709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // devices that share tab and 0 on a single key. 1719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project boolean isPrint = event.isPrintingKey(); 1729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (isPrint || keyCode == KeyEvent.KEYCODE_SPACE 1739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project || keyCode == KeyEvent.KEYCODE_TAB) { 1749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project char c = event.getMatch(DialerKeyListener.CHARACTERS); 1759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (c != 0) { 1769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project handled &= mDigits.onKeyDown(keyCode, event); 1779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } else { 1789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project setMode(DIGITS_AND_LETTERS_NO_DIGITS); 1799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project break; 1829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project case DIGITS_AND_LETTERS_NO_LETTERS: 1849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project case DIGITS_ONLY: 1859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project handled = mDigits.onKeyDown(keyCode, event); 1869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project break; 1879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project case DIGITS_AND_LETTERS_NO_DIGITS: 1899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project case LETTERS_ONLY: 1909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project handled = mLetters.onKeyDown(keyCode, event); 1919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project break; 1929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (!handled) { 1969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return super.onKeyDown(keyCode, event); 1979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } else { 1989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return true; 1999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 2009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 2019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project @Override 2039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public boolean onKeyUp(int keyCode, KeyEvent event) { 2049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project boolean a = mLetters.onKeyUp(keyCode, event); 2059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project boolean b = mDigits.onKeyUp(keyCode, event); 2069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return a || b; 2079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 2089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public int getMode() { 2109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return mMode; 2119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 2129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 2149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Change the mode of the widget. 2159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 2169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param newMode The mode to switch to. 2179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 2189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public void setMode(int newMode) { 2199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project switch (newMode) { 2209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project case DIGITS_AND_LETTERS: 2219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project makeDigitsPrimary(); 2229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mLetters.setVisibility(View.VISIBLE); 2239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mDigits.setVisibility(View.VISIBLE); 2249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project break; 2259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project case DIGITS_ONLY: 2279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project makeDigitsPrimary(); 2289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mLetters.setVisibility(View.GONE); 2299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mDigits.setVisibility(View.VISIBLE); 2309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project break; 2319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project case LETTERS_ONLY: 2339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project makeLettersPrimary(); 2349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mLetters.setVisibility(View.VISIBLE); 2359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mDigits.setVisibility(View.GONE); 2369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project break; 2379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project case DIGITS_AND_LETTERS_NO_LETTERS: 2399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project makeDigitsPrimary(); 2409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mLetters.setVisibility(View.INVISIBLE); 2419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mDigits.setVisibility(View.VISIBLE); 2429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project break; 2439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project case DIGITS_AND_LETTERS_NO_DIGITS: 2459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project makeLettersPrimary(); 2469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mLetters.setVisibility(View.VISIBLE); 2479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mDigits.setVisibility(View.INVISIBLE); 2489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project break; 2499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 2519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project int oldMode = mMode; 2529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mMode = newMode; 2539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project onModeChange(oldMode, newMode); 2549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 2559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private void makeLettersPrimary() { 2579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (mPrimary == mDigits) { 2589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project swapPrimaryAndHint(true); 2599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 2609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 2619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private void makeDigitsPrimary() { 2639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (mPrimary == mLetters) { 2649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project swapPrimaryAndHint(false); 2659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 2669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 2679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private void swapPrimaryAndHint(boolean makeLettersPrimary) { 2699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Editable lettersText = mLetters.getText(); 2709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Editable digitsText = mDigits.getText(); 2719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project KeyListener lettersInput = mLetters.getKeyListener(); 2729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project KeyListener digitsInput = mDigits.getKeyListener(); 2739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (makeLettersPrimary) { 2759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mLetters = mPrimary; 2769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mDigits = mHint; 2779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } else { 2789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mLetters = mHint; 2799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mDigits = mPrimary; 2809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 2819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mLetters.setKeyListener(lettersInput); 2839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mLetters.setText(lettersText); 2849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project lettersText = mLetters.getText(); 2859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Selection.setSelection(lettersText, lettersText.length()); 2869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mDigits.setKeyListener(digitsInput); 2889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mDigits.setText(digitsText); 2899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project digitsText = mDigits.getText(); 2909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Selection.setSelection(digitsText, digitsText.length()); 2919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // Reset the filters 2939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mPrimary.setFilters(mInputFilters); 2949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mHint.setFilters(mInputFilters); 2959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 2969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public CharSequence getLetters() { 2999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (mLetters.getVisibility() == View.VISIBLE) { 3009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return mLetters.getText(); 3019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } else { 3029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return ""; 3039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 3049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 3059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 3069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public CharSequence getDigits() { 3079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (mDigits.getVisibility() == View.VISIBLE) { 3089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return mDigits.getText(); 3099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } else { 3109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return ""; 3119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 3129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 3139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 3149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public CharSequence getFilterText() { 3159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (mMode != DIGITS_ONLY) { 3169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return getLetters(); 3179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } else { 3189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return getDigits(); 3199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 3209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 3219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 3229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public void append(String text) { 3239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project switch (mMode) { 3249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project case DIGITS_AND_LETTERS: 3259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mDigits.getText().append(text); 3269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mLetters.getText().append(text); 3279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project break; 3289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 3299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project case DIGITS_AND_LETTERS_NO_LETTERS: 3309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project case DIGITS_ONLY: 3319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mDigits.getText().append(text); 3329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project break; 3339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 3349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project case DIGITS_AND_LETTERS_NO_DIGITS: 3359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project case LETTERS_ONLY: 3369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mLetters.getText().append(text); 3379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project break; 3389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 3399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 3409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 3419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 3429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Clears both the digits and the filter text. 3439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 3449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public void clearText() { 3459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Editable text; 3469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 3479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project text = mLetters.getText(); 3489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project text.clear(); 3499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 3509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project text = mDigits.getText(); 3519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project text.clear(); 3529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 3539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // Reset the mode based on the hardware type 3549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (mIsQwerty) { 3559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project setMode(DIGITS_AND_LETTERS); 3569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } else { 3579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project setMode(DIGITS_ONLY); 3589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 3599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 3609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 3619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public void setLettersWatcher(TextWatcher watcher) { 3629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project CharSequence text = mLetters.getText(); 3639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Spannable span = (Spannable)text; 3649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project span.setSpan(watcher, 0, text.length(), Spanned.SPAN_INCLUSIVE_INCLUSIVE); 3659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 3669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 3679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public void setDigitsWatcher(TextWatcher watcher) { 3689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project CharSequence text = mDigits.getText(); 3699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Spannable span = (Spannable)text; 3709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project span.setSpan(watcher, 0, text.length(), Spanned.SPAN_INCLUSIVE_INCLUSIVE); 3719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 3729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 3739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public void setFilterWatcher(TextWatcher watcher) { 3749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (mMode != DIGITS_ONLY) { 3759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project setLettersWatcher(watcher); 3769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } else { 3779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project setDigitsWatcher(watcher); 3789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 3799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 3809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 3819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public void removeFilterWatcher(TextWatcher watcher) { 3829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Spannable text; 3839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (mMode != DIGITS_ONLY) { 3849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project text = mLetters.getText(); 3859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } else { 3869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project text = mDigits.getText(); 3879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 3889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project text.removeSpan(watcher); 3899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 3909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 3919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 3929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Called right after the mode changes to give subclasses the option to 3939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * restyle, etc. 3949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 3959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project protected void onModeChange(int oldMode, int newMode) { 3969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 3979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 3989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** This mode has both lines */ 3999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int DIGITS_AND_LETTERS = 1; 4009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** This mode is when after starting in {@link #DIGITS_AND_LETTERS} mode the filter 4019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * has removed all possibility of the digits matching, leaving only the letters line */ 4029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int DIGITS_AND_LETTERS_NO_DIGITS = 2; 4039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** This mode is when after starting in {@link #DIGITS_AND_LETTERS} mode the filter 4049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * has removed all possibility of the letters matching, leaving only the digits line */ 4059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int DIGITS_AND_LETTERS_NO_LETTERS = 3; 4069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** This mode has only the digits line */ 4079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int DIGITS_ONLY = 4; 4089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** This mode has only the letters line */ 4099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int LETTERS_ONLY = 5; 4109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 4119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project EditText mLetters; 4129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project EditText mDigits; 4139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project EditText mPrimary; 4149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project EditText mHint; 4159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project InputFilter mInputFilters[]; 4169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project ImageView mIcon; 4179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project int mMode; 4189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private boolean mIsQwerty; 4199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project} 420