10f7b3f8ba5c2f0b8f96e072bd866c9fb374ebdebJohn Wang/* 20f7b3f8ba5c2f0b8f96e072bd866c9fb374ebdebJohn Wang * Copyright (C) 2008 The Android Open Source Project 30f7b3f8ba5c2f0b8f96e072bd866c9fb374ebdebJohn Wang * 40f7b3f8ba5c2f0b8f96e072bd866c9fb374ebdebJohn Wang * Licensed under the Apache License, Version 2.0 (the "License"); 50f7b3f8ba5c2f0b8f96e072bd866c9fb374ebdebJohn Wang * you may not use this file except in compliance with the License. 60f7b3f8ba5c2f0b8f96e072bd866c9fb374ebdebJohn Wang * You may obtain a copy of the License at 70f7b3f8ba5c2f0b8f96e072bd866c9fb374ebdebJohn Wang * 80f7b3f8ba5c2f0b8f96e072bd866c9fb374ebdebJohn Wang * http://www.apache.org/licenses/LICENSE-2.0 90f7b3f8ba5c2f0b8f96e072bd866c9fb374ebdebJohn Wang * 100f7b3f8ba5c2f0b8f96e072bd866c9fb374ebdebJohn Wang * Unless required by applicable law or agreed to in writing, software 110f7b3f8ba5c2f0b8f96e072bd866c9fb374ebdebJohn Wang * distributed under the License is distributed on an "AS IS" BASIS, 120f7b3f8ba5c2f0b8f96e072bd866c9fb374ebdebJohn Wang * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 130f7b3f8ba5c2f0b8f96e072bd866c9fb374ebdebJohn Wang * See the License for the specific language governing permissions and 140f7b3f8ba5c2f0b8f96e072bd866c9fb374ebdebJohn Wang * limitations under the License. 150f7b3f8ba5c2f0b8f96e072bd866c9fb374ebdebJohn Wang */ 160f7b3f8ba5c2f0b8f96e072bd866c9fb374ebdebJohn Wang 17dcb3d84b82cc2448d04e73359a716581bfb657dbJim Millerpackage com.android.internal.policy.impl.keyguard_obsolete; 180f7b3f8ba5c2f0b8f96e072bd866c9fb374ebdebJohn Wang 190f7b3f8ba5c2f0b8f96e072bd866c9fb374ebdebJohn Wangimport android.app.Dialog; 200f7b3f8ba5c2f0b8f96e072bd866c9fb374ebdebJohn Wangimport android.app.ProgressDialog; 210f7b3f8ba5c2f0b8f96e072bd866c9fb374ebdebJohn Wangimport android.content.Context; 220f7b3f8ba5c2f0b8f96e072bd866c9fb374ebdebJohn Wangimport android.content.res.Configuration; 230f7b3f8ba5c2f0b8f96e072bd866c9fb374ebdebJohn Wangimport android.os.RemoteException; 240f7b3f8ba5c2f0b8f96e072bd866c9fb374ebdebJohn Wangimport android.os.ServiceManager; 250f7b3f8ba5c2f0b8f96e072bd866c9fb374ebdebJohn Wang 260f7b3f8ba5c2f0b8f96e072bd866c9fb374ebdebJohn Wangimport com.android.internal.telephony.ITelephony; 270f7b3f8ba5c2f0b8f96e072bd866c9fb374ebdebJohn Wangimport com.android.internal.widget.LockPatternUtils; 280f7b3f8ba5c2f0b8f96e072bd866c9fb374ebdebJohn Wang 290f7b3f8ba5c2f0b8f96e072bd866c9fb374ebdebJohn Wangimport android.text.Editable; 307f3eb49ad5dc7e4e4e9d354304ec1d43e9330b46John Wangimport android.util.Log; 310f7b3f8ba5c2f0b8f96e072bd866c9fb374ebdebJohn Wangimport android.view.KeyEvent; 320f7b3f8ba5c2f0b8f96e072bd866c9fb374ebdebJohn Wangimport android.view.LayoutInflater; 330f7b3f8ba5c2f0b8f96e072bd866c9fb374ebdebJohn Wangimport android.view.View; 340f7b3f8ba5c2f0b8f96e072bd866c9fb374ebdebJohn Wangimport android.view.WindowManager; 350f7b3f8ba5c2f0b8f96e072bd866c9fb374ebdebJohn Wangimport android.widget.Button; 360f7b3f8ba5c2f0b8f96e072bd866c9fb374ebdebJohn Wangimport android.widget.LinearLayout; 370f7b3f8ba5c2f0b8f96e072bd866c9fb374ebdebJohn Wangimport android.widget.TextView; 380f7b3f8ba5c2f0b8f96e072bd866c9fb374ebdebJohn Wangimport com.android.internal.R; 390f7b3f8ba5c2f0b8f96e072bd866c9fb374ebdebJohn Wang 400f7b3f8ba5c2f0b8f96e072bd866c9fb374ebdebJohn Wang/** 410f7b3f8ba5c2f0b8f96e072bd866c9fb374ebdebJohn Wang * Displays a dialer like interface to unlock the SIM PUK. 420f7b3f8ba5c2f0b8f96e072bd866c9fb374ebdebJohn Wang */ 430f7b3f8ba5c2f0b8f96e072bd866c9fb374ebdebJohn Wangpublic class SimPukUnlockScreen extends LinearLayout implements KeyguardScreen, 447f3eb49ad5dc7e4e4e9d354304ec1d43e9330b46John Wang View.OnClickListener, View.OnFocusChangeListener { 450f7b3f8ba5c2f0b8f96e072bd866c9fb374ebdebJohn Wang 460f7b3f8ba5c2f0b8f96e072bd866c9fb374ebdebJohn Wang private static final int DIGIT_PRESS_WAKE_MILLIS = 5000; 470f7b3f8ba5c2f0b8f96e072bd866c9fb374ebdebJohn Wang 480f7b3f8ba5c2f0b8f96e072bd866c9fb374ebdebJohn Wang private final KeyguardUpdateMonitor mUpdateMonitor; 490f7b3f8ba5c2f0b8f96e072bd866c9fb374ebdebJohn Wang private final KeyguardScreenCallback mCallback; 507f3eb49ad5dc7e4e4e9d354304ec1d43e9330b46John Wang private KeyguardStatusViewManager mKeyguardStatusViewManager; 510f7b3f8ba5c2f0b8f96e072bd866c9fb374ebdebJohn Wang 520f7b3f8ba5c2f0b8f96e072bd866c9fb374ebdebJohn Wang private TextView mHeaderText; 530f7b3f8ba5c2f0b8f96e072bd866c9fb374ebdebJohn Wang private TextView mPukText; 540f7b3f8ba5c2f0b8f96e072bd866c9fb374ebdebJohn Wang private TextView mPinText; 550f7b3f8ba5c2f0b8f96e072bd866c9fb374ebdebJohn Wang private TextView mFocusedEntry; 560f7b3f8ba5c2f0b8f96e072bd866c9fb374ebdebJohn Wang 577f3eb49ad5dc7e4e4e9d354304ec1d43e9330b46John Wang private View mOkButton; 580f7b3f8ba5c2f0b8f96e072bd866c9fb374ebdebJohn Wang private View mDelPukButton; 590f7b3f8ba5c2f0b8f96e072bd866c9fb374ebdebJohn Wang private View mDelPinButton; 600f7b3f8ba5c2f0b8f96e072bd866c9fb374ebdebJohn Wang 610f7b3f8ba5c2f0b8f96e072bd866c9fb374ebdebJohn Wang private ProgressDialog mSimUnlockProgressDialog = null; 620f7b3f8ba5c2f0b8f96e072bd866c9fb374ebdebJohn Wang 630f7b3f8ba5c2f0b8f96e072bd866c9fb374ebdebJohn Wang private LockPatternUtils mLockPatternUtils; 640f7b3f8ba5c2f0b8f96e072bd866c9fb374ebdebJohn Wang 650f7b3f8ba5c2f0b8f96e072bd866c9fb374ebdebJohn Wang private int mCreationOrientation; 660f7b3f8ba5c2f0b8f96e072bd866c9fb374ebdebJohn Wang 670f7b3f8ba5c2f0b8f96e072bd866c9fb374ebdebJohn Wang private int mKeyboardHidden; 680f7b3f8ba5c2f0b8f96e072bd866c9fb374ebdebJohn Wang 690f7b3f8ba5c2f0b8f96e072bd866c9fb374ebdebJohn Wang private static final char[] DIGITS = {'0', '1', '2', '3', '4', '5', '6', '7', '8', '9'}; 700f7b3f8ba5c2f0b8f96e072bd866c9fb374ebdebJohn Wang 710f7b3f8ba5c2f0b8f96e072bd866c9fb374ebdebJohn Wang public SimPukUnlockScreen(Context context, Configuration configuration, 720f7b3f8ba5c2f0b8f96e072bd866c9fb374ebdebJohn Wang KeyguardUpdateMonitor updateMonitor, KeyguardScreenCallback callback, 730f7b3f8ba5c2f0b8f96e072bd866c9fb374ebdebJohn Wang LockPatternUtils lockpatternutils) { 740f7b3f8ba5c2f0b8f96e072bd866c9fb374ebdebJohn Wang super(context); 750f7b3f8ba5c2f0b8f96e072bd866c9fb374ebdebJohn Wang mUpdateMonitor = updateMonitor; 760f7b3f8ba5c2f0b8f96e072bd866c9fb374ebdebJohn Wang mCallback = callback;; 770f7b3f8ba5c2f0b8f96e072bd866c9fb374ebdebJohn Wang 780f7b3f8ba5c2f0b8f96e072bd866c9fb374ebdebJohn Wang mCreationOrientation = configuration.orientation; 790f7b3f8ba5c2f0b8f96e072bd866c9fb374ebdebJohn Wang mKeyboardHidden = configuration.hardKeyboardHidden; 800f7b3f8ba5c2f0b8f96e072bd866c9fb374ebdebJohn Wang mLockPatternUtils = lockpatternutils; 810f7b3f8ba5c2f0b8f96e072bd866c9fb374ebdebJohn Wang 820f7b3f8ba5c2f0b8f96e072bd866c9fb374ebdebJohn Wang LayoutInflater inflater = LayoutInflater.from(context); 830f7b3f8ba5c2f0b8f96e072bd866c9fb374ebdebJohn Wang if (mKeyboardHidden == Configuration.HARDKEYBOARDHIDDEN_NO) { 840f7b3f8ba5c2f0b8f96e072bd866c9fb374ebdebJohn Wang inflater.inflate( 850f7b3f8ba5c2f0b8f96e072bd866c9fb374ebdebJohn Wang R.layout.keyguard_screen_sim_puk_landscape, this, true); 860f7b3f8ba5c2f0b8f96e072bd866c9fb374ebdebJohn Wang } else { 870f7b3f8ba5c2f0b8f96e072bd866c9fb374ebdebJohn Wang inflater.inflate( 880f7b3f8ba5c2f0b8f96e072bd866c9fb374ebdebJohn Wang R.layout.keyguard_screen_sim_puk_portrait, this, true); 890f7b3f8ba5c2f0b8f96e072bd866c9fb374ebdebJohn Wang new TouchInput(); 900f7b3f8ba5c2f0b8f96e072bd866c9fb374ebdebJohn Wang } 910f7b3f8ba5c2f0b8f96e072bd866c9fb374ebdebJohn Wang 920f7b3f8ba5c2f0b8f96e072bd866c9fb374ebdebJohn Wang mHeaderText = (TextView) findViewById(R.id.headerText); 937f3eb49ad5dc7e4e4e9d354304ec1d43e9330b46John Wang 940f7b3f8ba5c2f0b8f96e072bd866c9fb374ebdebJohn Wang mPukText = (TextView) findViewById(R.id.pukDisplay); 950f7b3f8ba5c2f0b8f96e072bd866c9fb374ebdebJohn Wang mPinText = (TextView) findViewById(R.id.pinDisplay); 960f7b3f8ba5c2f0b8f96e072bd866c9fb374ebdebJohn Wang mDelPukButton = findViewById(R.id.pukDel); 970f7b3f8ba5c2f0b8f96e072bd866c9fb374ebdebJohn Wang mDelPinButton = findViewById(R.id.pinDel); 987f3eb49ad5dc7e4e4e9d354304ec1d43e9330b46John Wang mOkButton = findViewById(R.id.ok); 990f7b3f8ba5c2f0b8f96e072bd866c9fb374ebdebJohn Wang 1007f3eb49ad5dc7e4e4e9d354304ec1d43e9330b46John Wang mDelPinButton.setOnClickListener(this); 1017f3eb49ad5dc7e4e4e9d354304ec1d43e9330b46John Wang mDelPukButton.setOnClickListener(this); 1020f7b3f8ba5c2f0b8f96e072bd866c9fb374ebdebJohn Wang mOkButton.setOnClickListener(this); 1030f7b3f8ba5c2f0b8f96e072bd866c9fb374ebdebJohn Wang 1047f3eb49ad5dc7e4e4e9d354304ec1d43e9330b46John Wang mHeaderText.setText(R.string.keyguard_password_enter_puk_code); 1057f3eb49ad5dc7e4e4e9d354304ec1d43e9330b46John Wang // To make marquee work 1067f3eb49ad5dc7e4e4e9d354304ec1d43e9330b46John Wang mHeaderText.setSelected(true); 1070f7b3f8ba5c2f0b8f96e072bd866c9fb374ebdebJohn Wang 1086b05d58018c2806459c121e507c005639b74aee9Jim Miller mKeyguardStatusViewManager = new KeyguardStatusViewManager(this, updateMonitor, 109928d34704b96db9133e28dc77b716518d335b356Jim Miller lockpatternutils, callback, true); 1100f7b3f8ba5c2f0b8f96e072bd866c9fb374ebdebJohn Wang 1117f3eb49ad5dc7e4e4e9d354304ec1d43e9330b46John Wang mPinText.setFocusableInTouchMode(true); 1127f3eb49ad5dc7e4e4e9d354304ec1d43e9330b46John Wang mPinText.setOnFocusChangeListener(this); 1137f3eb49ad5dc7e4e4e9d354304ec1d43e9330b46John Wang mPukText.setFocusableInTouchMode(true); 1147f3eb49ad5dc7e4e4e9d354304ec1d43e9330b46John Wang mPukText.setOnFocusChangeListener(this); 1150f7b3f8ba5c2f0b8f96e072bd866c9fb374ebdebJohn Wang } 1160f7b3f8ba5c2f0b8f96e072bd866c9fb374ebdebJohn Wang 1170f7b3f8ba5c2f0b8f96e072bd866c9fb374ebdebJohn Wang /** {@inheritDoc} */ 1180f7b3f8ba5c2f0b8f96e072bd866c9fb374ebdebJohn Wang public boolean needsInput() { 1197f3eb49ad5dc7e4e4e9d354304ec1d43e9330b46John Wang return false; 1200f7b3f8ba5c2f0b8f96e072bd866c9fb374ebdebJohn Wang } 1210f7b3f8ba5c2f0b8f96e072bd866c9fb374ebdebJohn Wang 1220f7b3f8ba5c2f0b8f96e072bd866c9fb374ebdebJohn Wang /** {@inheritDoc} */ 1230f7b3f8ba5c2f0b8f96e072bd866c9fb374ebdebJohn Wang public void onPause() { 1246b05d58018c2806459c121e507c005639b74aee9Jim Miller mKeyguardStatusViewManager.onPause(); 1250f7b3f8ba5c2f0b8f96e072bd866c9fb374ebdebJohn Wang } 1260f7b3f8ba5c2f0b8f96e072bd866c9fb374ebdebJohn Wang 1270f7b3f8ba5c2f0b8f96e072bd866c9fb374ebdebJohn Wang /** {@inheritDoc} */ 1280f7b3f8ba5c2f0b8f96e072bd866c9fb374ebdebJohn Wang public void onResume() { 1290f7b3f8ba5c2f0b8f96e072bd866c9fb374ebdebJohn Wang // start fresh 1300f7b3f8ba5c2f0b8f96e072bd866c9fb374ebdebJohn Wang mHeaderText.setText(R.string.keyguard_password_enter_puk_code); 1316b05d58018c2806459c121e507c005639b74aee9Jim Miller mKeyguardStatusViewManager.onResume(); 1320f7b3f8ba5c2f0b8f96e072bd866c9fb374ebdebJohn Wang } 1330f7b3f8ba5c2f0b8f96e072bd866c9fb374ebdebJohn Wang 1340f7b3f8ba5c2f0b8f96e072bd866c9fb374ebdebJohn Wang /** {@inheritDoc} */ 1350f7b3f8ba5c2f0b8f96e072bd866c9fb374ebdebJohn Wang public void cleanUp() { 1360f7b3f8ba5c2f0b8f96e072bd866c9fb374ebdebJohn Wang // dismiss the dialog. 1370f7b3f8ba5c2f0b8f96e072bd866c9fb374ebdebJohn Wang if (mSimUnlockProgressDialog != null) { 1380f7b3f8ba5c2f0b8f96e072bd866c9fb374ebdebJohn Wang mSimUnlockProgressDialog.dismiss(); 1390f7b3f8ba5c2f0b8f96e072bd866c9fb374ebdebJohn Wang mSimUnlockProgressDialog = null; 1400f7b3f8ba5c2f0b8f96e072bd866c9fb374ebdebJohn Wang } 1410f7b3f8ba5c2f0b8f96e072bd866c9fb374ebdebJohn Wang mUpdateMonitor.removeCallback(this); 1420f7b3f8ba5c2f0b8f96e072bd866c9fb374ebdebJohn Wang } 1430f7b3f8ba5c2f0b8f96e072bd866c9fb374ebdebJohn Wang 1440f7b3f8ba5c2f0b8f96e072bd866c9fb374ebdebJohn Wang 1450f7b3f8ba5c2f0b8f96e072bd866c9fb374ebdebJohn Wang /** 1460f7b3f8ba5c2f0b8f96e072bd866c9fb374ebdebJohn Wang * Since the IPC can block, we want to run the request in a separate thread 1470f7b3f8ba5c2f0b8f96e072bd866c9fb374ebdebJohn Wang * with a callback. 1480f7b3f8ba5c2f0b8f96e072bd866c9fb374ebdebJohn Wang */ 1490f7b3f8ba5c2f0b8f96e072bd866c9fb374ebdebJohn Wang private abstract class CheckSimPuk extends Thread { 1500f7b3f8ba5c2f0b8f96e072bd866c9fb374ebdebJohn Wang 1510f7b3f8ba5c2f0b8f96e072bd866c9fb374ebdebJohn Wang private final String mPin, mPuk; 1520f7b3f8ba5c2f0b8f96e072bd866c9fb374ebdebJohn Wang 1530f7b3f8ba5c2f0b8f96e072bd866c9fb374ebdebJohn Wang protected CheckSimPuk(String puk, String pin) { 1540f7b3f8ba5c2f0b8f96e072bd866c9fb374ebdebJohn Wang mPuk = puk; 1550f7b3f8ba5c2f0b8f96e072bd866c9fb374ebdebJohn Wang mPin = pin; 1560f7b3f8ba5c2f0b8f96e072bd866c9fb374ebdebJohn Wang } 1570f7b3f8ba5c2f0b8f96e072bd866c9fb374ebdebJohn Wang 1580f7b3f8ba5c2f0b8f96e072bd866c9fb374ebdebJohn Wang abstract void onSimLockChangedResponse(boolean success); 1590f7b3f8ba5c2f0b8f96e072bd866c9fb374ebdebJohn Wang 1600f7b3f8ba5c2f0b8f96e072bd866c9fb374ebdebJohn Wang @Override 1610f7b3f8ba5c2f0b8f96e072bd866c9fb374ebdebJohn Wang public void run() { 1620f7b3f8ba5c2f0b8f96e072bd866c9fb374ebdebJohn Wang try { 1630f7b3f8ba5c2f0b8f96e072bd866c9fb374ebdebJohn Wang final boolean result = ITelephony.Stub.asInterface(ServiceManager 1640f7b3f8ba5c2f0b8f96e072bd866c9fb374ebdebJohn Wang .checkService("phone")).supplyPuk(mPuk, mPin); 1650f7b3f8ba5c2f0b8f96e072bd866c9fb374ebdebJohn Wang 1660f7b3f8ba5c2f0b8f96e072bd866c9fb374ebdebJohn Wang post(new Runnable() { 1670f7b3f8ba5c2f0b8f96e072bd866c9fb374ebdebJohn Wang public void run() { 1680f7b3f8ba5c2f0b8f96e072bd866c9fb374ebdebJohn Wang onSimLockChangedResponse(result); 1690f7b3f8ba5c2f0b8f96e072bd866c9fb374ebdebJohn Wang } 1700f7b3f8ba5c2f0b8f96e072bd866c9fb374ebdebJohn Wang }); 1710f7b3f8ba5c2f0b8f96e072bd866c9fb374ebdebJohn Wang } catch (RemoteException e) { 1720f7b3f8ba5c2f0b8f96e072bd866c9fb374ebdebJohn Wang post(new Runnable() { 1730f7b3f8ba5c2f0b8f96e072bd866c9fb374ebdebJohn Wang public void run() { 1740f7b3f8ba5c2f0b8f96e072bd866c9fb374ebdebJohn Wang onSimLockChangedResponse(false); 1750f7b3f8ba5c2f0b8f96e072bd866c9fb374ebdebJohn Wang } 1760f7b3f8ba5c2f0b8f96e072bd866c9fb374ebdebJohn Wang }); 1770f7b3f8ba5c2f0b8f96e072bd866c9fb374ebdebJohn Wang } 1780f7b3f8ba5c2f0b8f96e072bd866c9fb374ebdebJohn Wang } 1790f7b3f8ba5c2f0b8f96e072bd866c9fb374ebdebJohn Wang } 1800f7b3f8ba5c2f0b8f96e072bd866c9fb374ebdebJohn Wang 1810f7b3f8ba5c2f0b8f96e072bd866c9fb374ebdebJohn Wang public void onClick(View v) { 1820f7b3f8ba5c2f0b8f96e072bd866c9fb374ebdebJohn Wang if (v == mDelPukButton) { 1837f3eb49ad5dc7e4e4e9d354304ec1d43e9330b46John Wang if (mFocusedEntry != mPukText) 1847f3eb49ad5dc7e4e4e9d354304ec1d43e9330b46John Wang mPukText.requestFocus(); 1850f7b3f8ba5c2f0b8f96e072bd866c9fb374ebdebJohn Wang final Editable digits = mPukText.getEditableText(); 1860f7b3f8ba5c2f0b8f96e072bd866c9fb374ebdebJohn Wang final int len = digits.length(); 1870f7b3f8ba5c2f0b8f96e072bd866c9fb374ebdebJohn Wang if (len > 0) { 1880f7b3f8ba5c2f0b8f96e072bd866c9fb374ebdebJohn Wang digits.delete(len-1, len); 1890f7b3f8ba5c2f0b8f96e072bd866c9fb374ebdebJohn Wang } 1900f7b3f8ba5c2f0b8f96e072bd866c9fb374ebdebJohn Wang } else if (v == mDelPinButton) { 1917f3eb49ad5dc7e4e4e9d354304ec1d43e9330b46John Wang if (mFocusedEntry != mPinText) 1927f3eb49ad5dc7e4e4e9d354304ec1d43e9330b46John Wang mPinText.requestFocus(); 1930f7b3f8ba5c2f0b8f96e072bd866c9fb374ebdebJohn Wang final Editable digits = mPinText.getEditableText(); 1940f7b3f8ba5c2f0b8f96e072bd866c9fb374ebdebJohn Wang final int len = digits.length(); 1950f7b3f8ba5c2f0b8f96e072bd866c9fb374ebdebJohn Wang if (len > 0) { 1960f7b3f8ba5c2f0b8f96e072bd866c9fb374ebdebJohn Wang digits.delete(len-1, len); 1970f7b3f8ba5c2f0b8f96e072bd866c9fb374ebdebJohn Wang } 1980f7b3f8ba5c2f0b8f96e072bd866c9fb374ebdebJohn Wang } else if (v == mOkButton) { 1990f7b3f8ba5c2f0b8f96e072bd866c9fb374ebdebJohn Wang checkPuk(); 2000f7b3f8ba5c2f0b8f96e072bd866c9fb374ebdebJohn Wang } 2017f3eb49ad5dc7e4e4e9d354304ec1d43e9330b46John Wang mCallback.pokeWakelock(DIGIT_PRESS_WAKE_MILLIS); 2027f3eb49ad5dc7e4e4e9d354304ec1d43e9330b46John Wang 2037f3eb49ad5dc7e4e4e9d354304ec1d43e9330b46John Wang } 2047f3eb49ad5dc7e4e4e9d354304ec1d43e9330b46John Wang 2057f3eb49ad5dc7e4e4e9d354304ec1d43e9330b46John Wang @Override 2067f3eb49ad5dc7e4e4e9d354304ec1d43e9330b46John Wang public void onFocusChange(View v, boolean hasFocus) { 2077f3eb49ad5dc7e4e4e9d354304ec1d43e9330b46John Wang if (hasFocus) 2087f3eb49ad5dc7e4e4e9d354304ec1d43e9330b46John Wang mFocusedEntry = (TextView)v; 2090f7b3f8ba5c2f0b8f96e072bd866c9fb374ebdebJohn Wang } 2100f7b3f8ba5c2f0b8f96e072bd866c9fb374ebdebJohn Wang 2110f7b3f8ba5c2f0b8f96e072bd866c9fb374ebdebJohn Wang private Dialog getSimUnlockProgressDialog() { 2120f7b3f8ba5c2f0b8f96e072bd866c9fb374ebdebJohn Wang if (mSimUnlockProgressDialog == null) { 2130f7b3f8ba5c2f0b8f96e072bd866c9fb374ebdebJohn Wang mSimUnlockProgressDialog = new ProgressDialog(mContext); 2140f7b3f8ba5c2f0b8f96e072bd866c9fb374ebdebJohn Wang mSimUnlockProgressDialog.setMessage( 2150f7b3f8ba5c2f0b8f96e072bd866c9fb374ebdebJohn Wang mContext.getString(R.string.lockscreen_sim_unlock_progress_dialog_message)); 2160f7b3f8ba5c2f0b8f96e072bd866c9fb374ebdebJohn Wang mSimUnlockProgressDialog.setIndeterminate(true); 2170f7b3f8ba5c2f0b8f96e072bd866c9fb374ebdebJohn Wang mSimUnlockProgressDialog.setCancelable(false); 2180f7b3f8ba5c2f0b8f96e072bd866c9fb374ebdebJohn Wang mSimUnlockProgressDialog.getWindow().setType( 2190f7b3f8ba5c2f0b8f96e072bd866c9fb374ebdebJohn Wang WindowManager.LayoutParams.TYPE_KEYGUARD_DIALOG); 2200f7b3f8ba5c2f0b8f96e072bd866c9fb374ebdebJohn Wang } 2210f7b3f8ba5c2f0b8f96e072bd866c9fb374ebdebJohn Wang return mSimUnlockProgressDialog; 2220f7b3f8ba5c2f0b8f96e072bd866c9fb374ebdebJohn Wang } 2230f7b3f8ba5c2f0b8f96e072bd866c9fb374ebdebJohn Wang 2240f7b3f8ba5c2f0b8f96e072bd866c9fb374ebdebJohn Wang private void checkPuk() { 2250f7b3f8ba5c2f0b8f96e072bd866c9fb374ebdebJohn Wang // make sure that the puk is at least 8 digits long. 2260f7b3f8ba5c2f0b8f96e072bd866c9fb374ebdebJohn Wang if (mPukText.getText().length() < 8) { 2270f7b3f8ba5c2f0b8f96e072bd866c9fb374ebdebJohn Wang // otherwise, display a message to the user, and don't submit. 2280f7b3f8ba5c2f0b8f96e072bd866c9fb374ebdebJohn Wang mHeaderText.setText(R.string.invalidPuk); 2290f7b3f8ba5c2f0b8f96e072bd866c9fb374ebdebJohn Wang mPukText.setText(""); 2300f7b3f8ba5c2f0b8f96e072bd866c9fb374ebdebJohn Wang return; 2310f7b3f8ba5c2f0b8f96e072bd866c9fb374ebdebJohn Wang } 2320f7b3f8ba5c2f0b8f96e072bd866c9fb374ebdebJohn Wang 2330f7b3f8ba5c2f0b8f96e072bd866c9fb374ebdebJohn Wang if (mPinText.getText().length() < 4 2340f7b3f8ba5c2f0b8f96e072bd866c9fb374ebdebJohn Wang || mPinText.getText().length() > 8) { 2350f7b3f8ba5c2f0b8f96e072bd866c9fb374ebdebJohn Wang // otherwise, display a message to the user, and don't submit. 2360f7b3f8ba5c2f0b8f96e072bd866c9fb374ebdebJohn Wang mHeaderText.setText(R.string.invalidPin); 2370f7b3f8ba5c2f0b8f96e072bd866c9fb374ebdebJohn Wang mPinText.setText(""); 2380f7b3f8ba5c2f0b8f96e072bd866c9fb374ebdebJohn Wang return; 2390f7b3f8ba5c2f0b8f96e072bd866c9fb374ebdebJohn Wang } 2400f7b3f8ba5c2f0b8f96e072bd866c9fb374ebdebJohn Wang 2410f7b3f8ba5c2f0b8f96e072bd866c9fb374ebdebJohn Wang getSimUnlockProgressDialog().show(); 2420f7b3f8ba5c2f0b8f96e072bd866c9fb374ebdebJohn Wang 2430f7b3f8ba5c2f0b8f96e072bd866c9fb374ebdebJohn Wang new CheckSimPuk(mPukText.getText().toString(), 2440f7b3f8ba5c2f0b8f96e072bd866c9fb374ebdebJohn Wang mPinText.getText().toString()) { 24590d5d46b9e1bfc2df1a4a16b411eafb43c80eba5Jim Miller void onSimLockChangedResponse(final boolean success) { 24690d5d46b9e1bfc2df1a4a16b411eafb43c80eba5Jim Miller mPinText.post(new Runnable() { 24790d5d46b9e1bfc2df1a4a16b411eafb43c80eba5Jim Miller public void run() { 24890d5d46b9e1bfc2df1a4a16b411eafb43c80eba5Jim Miller if (mSimUnlockProgressDialog != null) { 24990d5d46b9e1bfc2df1a4a16b411eafb43c80eba5Jim Miller mSimUnlockProgressDialog.hide(); 25090d5d46b9e1bfc2df1a4a16b411eafb43c80eba5Jim Miller } 25190d5d46b9e1bfc2df1a4a16b411eafb43c80eba5Jim Miller if (success) { 25290d5d46b9e1bfc2df1a4a16b411eafb43c80eba5Jim Miller // before closing the keyguard, report back that 25390d5d46b9e1bfc2df1a4a16b411eafb43c80eba5Jim Miller // the sim is unlocked so it knows right away 25490d5d46b9e1bfc2df1a4a16b411eafb43c80eba5Jim Miller mUpdateMonitor.reportSimUnlocked(); 25590d5d46b9e1bfc2df1a4a16b411eafb43c80eba5Jim Miller mCallback.goToUnlockScreen(); 25690d5d46b9e1bfc2df1a4a16b411eafb43c80eba5Jim Miller } else { 25790d5d46b9e1bfc2df1a4a16b411eafb43c80eba5Jim Miller mHeaderText.setText(R.string.badPuk); 25890d5d46b9e1bfc2df1a4a16b411eafb43c80eba5Jim Miller mPukText.setText(""); 25990d5d46b9e1bfc2df1a4a16b411eafb43c80eba5Jim Miller mPinText.setText(""); 26090d5d46b9e1bfc2df1a4a16b411eafb43c80eba5Jim Miller } 26190d5d46b9e1bfc2df1a4a16b411eafb43c80eba5Jim Miller } 26290d5d46b9e1bfc2df1a4a16b411eafb43c80eba5Jim Miller }); 2630f7b3f8ba5c2f0b8f96e072bd866c9fb374ebdebJohn Wang } 2640f7b3f8ba5c2f0b8f96e072bd866c9fb374ebdebJohn Wang }.start(); 2650f7b3f8ba5c2f0b8f96e072bd866c9fb374ebdebJohn Wang } 2660f7b3f8ba5c2f0b8f96e072bd866c9fb374ebdebJohn Wang 2670f7b3f8ba5c2f0b8f96e072bd866c9fb374ebdebJohn Wang 2680f7b3f8ba5c2f0b8f96e072bd866c9fb374ebdebJohn Wang public boolean onKeyDown(int keyCode, KeyEvent event) { 2690f7b3f8ba5c2f0b8f96e072bd866c9fb374ebdebJohn Wang if (keyCode == KeyEvent.KEYCODE_BACK) { 2700f7b3f8ba5c2f0b8f96e072bd866c9fb374ebdebJohn Wang mCallback.goToLockScreen(); 2710f7b3f8ba5c2f0b8f96e072bd866c9fb374ebdebJohn Wang return true; 2720f7b3f8ba5c2f0b8f96e072bd866c9fb374ebdebJohn Wang } 2730f7b3f8ba5c2f0b8f96e072bd866c9fb374ebdebJohn Wang final char match = event.getMatch(DIGITS); 2740f7b3f8ba5c2f0b8f96e072bd866c9fb374ebdebJohn Wang if (match != 0) { 2750f7b3f8ba5c2f0b8f96e072bd866c9fb374ebdebJohn Wang reportDigit(match - '0'); 2760f7b3f8ba5c2f0b8f96e072bd866c9fb374ebdebJohn Wang return true; 2770f7b3f8ba5c2f0b8f96e072bd866c9fb374ebdebJohn Wang } 2780f7b3f8ba5c2f0b8f96e072bd866c9fb374ebdebJohn Wang if (keyCode == KeyEvent.KEYCODE_DEL) { 2790f7b3f8ba5c2f0b8f96e072bd866c9fb374ebdebJohn Wang mFocusedEntry.onKeyDown(keyCode, event); 2800f7b3f8ba5c2f0b8f96e072bd866c9fb374ebdebJohn Wang final Editable digits = mFocusedEntry.getEditableText(); 2810f7b3f8ba5c2f0b8f96e072bd866c9fb374ebdebJohn Wang final int len = digits.length(); 2820f7b3f8ba5c2f0b8f96e072bd866c9fb374ebdebJohn Wang if (len > 0) { 2830f7b3f8ba5c2f0b8f96e072bd866c9fb374ebdebJohn Wang digits.delete(len-1, len); 2840f7b3f8ba5c2f0b8f96e072bd866c9fb374ebdebJohn Wang } 2857f3eb49ad5dc7e4e4e9d354304ec1d43e9330b46John Wang mCallback.pokeWakelock(DIGIT_PRESS_WAKE_MILLIS); 2860f7b3f8ba5c2f0b8f96e072bd866c9fb374ebdebJohn Wang return true; 2870f7b3f8ba5c2f0b8f96e072bd866c9fb374ebdebJohn Wang } 2880f7b3f8ba5c2f0b8f96e072bd866c9fb374ebdebJohn Wang 2890f7b3f8ba5c2f0b8f96e072bd866c9fb374ebdebJohn Wang if (keyCode == KeyEvent.KEYCODE_ENTER) { 2900f7b3f8ba5c2f0b8f96e072bd866c9fb374ebdebJohn Wang checkPuk(); 2910f7b3f8ba5c2f0b8f96e072bd866c9fb374ebdebJohn Wang return true; 2920f7b3f8ba5c2f0b8f96e072bd866c9fb374ebdebJohn Wang } 2930f7b3f8ba5c2f0b8f96e072bd866c9fb374ebdebJohn Wang 2940f7b3f8ba5c2f0b8f96e072bd866c9fb374ebdebJohn Wang return false; 2950f7b3f8ba5c2f0b8f96e072bd866c9fb374ebdebJohn Wang } 2960f7b3f8ba5c2f0b8f96e072bd866c9fb374ebdebJohn Wang 2970f7b3f8ba5c2f0b8f96e072bd866c9fb374ebdebJohn Wang private void reportDigit(int digit) { 2980f7b3f8ba5c2f0b8f96e072bd866c9fb374ebdebJohn Wang mFocusedEntry.append(Integer.toString(digit)); 2990f7b3f8ba5c2f0b8f96e072bd866c9fb374ebdebJohn Wang } 3000f7b3f8ba5c2f0b8f96e072bd866c9fb374ebdebJohn Wang 3010f7b3f8ba5c2f0b8f96e072bd866c9fb374ebdebJohn Wang void updateConfiguration() { 3020f7b3f8ba5c2f0b8f96e072bd866c9fb374ebdebJohn Wang Configuration newConfig = getResources().getConfiguration(); 3030f7b3f8ba5c2f0b8f96e072bd866c9fb374ebdebJohn Wang if (newConfig.orientation != mCreationOrientation) { 3040f7b3f8ba5c2f0b8f96e072bd866c9fb374ebdebJohn Wang mCallback.recreateMe(newConfig); 3050f7b3f8ba5c2f0b8f96e072bd866c9fb374ebdebJohn Wang } else if (newConfig.hardKeyboardHidden != mKeyboardHidden) { 3060f7b3f8ba5c2f0b8f96e072bd866c9fb374ebdebJohn Wang mKeyboardHidden = newConfig.hardKeyboardHidden; 3070f7b3f8ba5c2f0b8f96e072bd866c9fb374ebdebJohn Wang } 3080f7b3f8ba5c2f0b8f96e072bd866c9fb374ebdebJohn Wang 3090f7b3f8ba5c2f0b8f96e072bd866c9fb374ebdebJohn Wang } 3100f7b3f8ba5c2f0b8f96e072bd866c9fb374ebdebJohn Wang 3110f7b3f8ba5c2f0b8f96e072bd866c9fb374ebdebJohn Wang @Override 3120f7b3f8ba5c2f0b8f96e072bd866c9fb374ebdebJohn Wang protected void onAttachedToWindow() { 3130f7b3f8ba5c2f0b8f96e072bd866c9fb374ebdebJohn Wang super.onAttachedToWindow(); 3140f7b3f8ba5c2f0b8f96e072bd866c9fb374ebdebJohn Wang updateConfiguration(); 3150f7b3f8ba5c2f0b8f96e072bd866c9fb374ebdebJohn Wang } 3160f7b3f8ba5c2f0b8f96e072bd866c9fb374ebdebJohn Wang 3170f7b3f8ba5c2f0b8f96e072bd866c9fb374ebdebJohn Wang /** {@inheritDoc} */ 3180f7b3f8ba5c2f0b8f96e072bd866c9fb374ebdebJohn Wang @Override 3190f7b3f8ba5c2f0b8f96e072bd866c9fb374ebdebJohn Wang protected void onConfigurationChanged(Configuration newConfig) { 3200f7b3f8ba5c2f0b8f96e072bd866c9fb374ebdebJohn Wang super.onConfigurationChanged(newConfig); 3210f7b3f8ba5c2f0b8f96e072bd866c9fb374ebdebJohn Wang updateConfiguration(); 3220f7b3f8ba5c2f0b8f96e072bd866c9fb374ebdebJohn Wang } 3230f7b3f8ba5c2f0b8f96e072bd866c9fb374ebdebJohn Wang 3240f7b3f8ba5c2f0b8f96e072bd866c9fb374ebdebJohn Wang /** 3250f7b3f8ba5c2f0b8f96e072bd866c9fb374ebdebJohn Wang * Helper class to handle input from touch dialer. Only relevant when 3260f7b3f8ba5c2f0b8f96e072bd866c9fb374ebdebJohn Wang * the keyboard is shut. 3270f7b3f8ba5c2f0b8f96e072bd866c9fb374ebdebJohn Wang */ 3280f7b3f8ba5c2f0b8f96e072bd866c9fb374ebdebJohn Wang private class TouchInput implements View.OnClickListener { 3290f7b3f8ba5c2f0b8f96e072bd866c9fb374ebdebJohn Wang private TextView mZero; 3300f7b3f8ba5c2f0b8f96e072bd866c9fb374ebdebJohn Wang private TextView mOne; 3310f7b3f8ba5c2f0b8f96e072bd866c9fb374ebdebJohn Wang private TextView mTwo; 3320f7b3f8ba5c2f0b8f96e072bd866c9fb374ebdebJohn Wang private TextView mThree; 3330f7b3f8ba5c2f0b8f96e072bd866c9fb374ebdebJohn Wang private TextView mFour; 3340f7b3f8ba5c2f0b8f96e072bd866c9fb374ebdebJohn Wang private TextView mFive; 3350f7b3f8ba5c2f0b8f96e072bd866c9fb374ebdebJohn Wang private TextView mSix; 3360f7b3f8ba5c2f0b8f96e072bd866c9fb374ebdebJohn Wang private TextView mSeven; 3370f7b3f8ba5c2f0b8f96e072bd866c9fb374ebdebJohn Wang private TextView mEight; 3380f7b3f8ba5c2f0b8f96e072bd866c9fb374ebdebJohn Wang private TextView mNine; 3390f7b3f8ba5c2f0b8f96e072bd866c9fb374ebdebJohn Wang private TextView mCancelButton; 3400f7b3f8ba5c2f0b8f96e072bd866c9fb374ebdebJohn Wang 3410f7b3f8ba5c2f0b8f96e072bd866c9fb374ebdebJohn Wang private TouchInput() { 3420f7b3f8ba5c2f0b8f96e072bd866c9fb374ebdebJohn Wang mZero = (TextView) findViewById(R.id.zero); 3430f7b3f8ba5c2f0b8f96e072bd866c9fb374ebdebJohn Wang mOne = (TextView) findViewById(R.id.one); 3440f7b3f8ba5c2f0b8f96e072bd866c9fb374ebdebJohn Wang mTwo = (TextView) findViewById(R.id.two); 3450f7b3f8ba5c2f0b8f96e072bd866c9fb374ebdebJohn Wang mThree = (TextView) findViewById(R.id.three); 3460f7b3f8ba5c2f0b8f96e072bd866c9fb374ebdebJohn Wang mFour = (TextView) findViewById(R.id.four); 3470f7b3f8ba5c2f0b8f96e072bd866c9fb374ebdebJohn Wang mFive = (TextView) findViewById(R.id.five); 3480f7b3f8ba5c2f0b8f96e072bd866c9fb374ebdebJohn Wang mSix = (TextView) findViewById(R.id.six); 3490f7b3f8ba5c2f0b8f96e072bd866c9fb374ebdebJohn Wang mSeven = (TextView) findViewById(R.id.seven); 3500f7b3f8ba5c2f0b8f96e072bd866c9fb374ebdebJohn Wang mEight = (TextView) findViewById(R.id.eight); 3510f7b3f8ba5c2f0b8f96e072bd866c9fb374ebdebJohn Wang mNine = (TextView) findViewById(R.id.nine); 3520f7b3f8ba5c2f0b8f96e072bd866c9fb374ebdebJohn Wang mCancelButton = (TextView) findViewById(R.id.cancel); 3530f7b3f8ba5c2f0b8f96e072bd866c9fb374ebdebJohn Wang 3540f7b3f8ba5c2f0b8f96e072bd866c9fb374ebdebJohn Wang mZero.setText("0"); 3550f7b3f8ba5c2f0b8f96e072bd866c9fb374ebdebJohn Wang mOne.setText("1"); 3560f7b3f8ba5c2f0b8f96e072bd866c9fb374ebdebJohn Wang mTwo.setText("2"); 3570f7b3f8ba5c2f0b8f96e072bd866c9fb374ebdebJohn Wang mThree.setText("3"); 3580f7b3f8ba5c2f0b8f96e072bd866c9fb374ebdebJohn Wang mFour.setText("4"); 3590f7b3f8ba5c2f0b8f96e072bd866c9fb374ebdebJohn Wang mFive.setText("5"); 3600f7b3f8ba5c2f0b8f96e072bd866c9fb374ebdebJohn Wang mSix.setText("6"); 3610f7b3f8ba5c2f0b8f96e072bd866c9fb374ebdebJohn Wang mSeven.setText("7"); 3620f7b3f8ba5c2f0b8f96e072bd866c9fb374ebdebJohn Wang mEight.setText("8"); 3630f7b3f8ba5c2f0b8f96e072bd866c9fb374ebdebJohn Wang mNine.setText("9"); 3640f7b3f8ba5c2f0b8f96e072bd866c9fb374ebdebJohn Wang 3650f7b3f8ba5c2f0b8f96e072bd866c9fb374ebdebJohn Wang mZero.setOnClickListener(this); 3660f7b3f8ba5c2f0b8f96e072bd866c9fb374ebdebJohn Wang mOne.setOnClickListener(this); 3670f7b3f8ba5c2f0b8f96e072bd866c9fb374ebdebJohn Wang mTwo.setOnClickListener(this); 3680f7b3f8ba5c2f0b8f96e072bd866c9fb374ebdebJohn Wang mThree.setOnClickListener(this); 3690f7b3f8ba5c2f0b8f96e072bd866c9fb374ebdebJohn Wang mFour.setOnClickListener(this); 3700f7b3f8ba5c2f0b8f96e072bd866c9fb374ebdebJohn Wang mFive.setOnClickListener(this); 3710f7b3f8ba5c2f0b8f96e072bd866c9fb374ebdebJohn Wang mSix.setOnClickListener(this); 3720f7b3f8ba5c2f0b8f96e072bd866c9fb374ebdebJohn Wang mSeven.setOnClickListener(this); 3730f7b3f8ba5c2f0b8f96e072bd866c9fb374ebdebJohn Wang mEight.setOnClickListener(this); 3740f7b3f8ba5c2f0b8f96e072bd866c9fb374ebdebJohn Wang mNine.setOnClickListener(this); 3750f7b3f8ba5c2f0b8f96e072bd866c9fb374ebdebJohn Wang mCancelButton.setOnClickListener(this); 3760f7b3f8ba5c2f0b8f96e072bd866c9fb374ebdebJohn Wang } 3770f7b3f8ba5c2f0b8f96e072bd866c9fb374ebdebJohn Wang 3780f7b3f8ba5c2f0b8f96e072bd866c9fb374ebdebJohn Wang 3790f7b3f8ba5c2f0b8f96e072bd866c9fb374ebdebJohn Wang public void onClick(View v) { 3800f7b3f8ba5c2f0b8f96e072bd866c9fb374ebdebJohn Wang if (v == mCancelButton) { 3819a3caf39e4c628c6dfcac92f7e2b7e4538a73009Jim Miller // clear the PIN/PUK entry fields if the user cancels 3829a3caf39e4c628c6dfcac92f7e2b7e4538a73009Jim Miller mPinText.setText(""); 3839a3caf39e4c628c6dfcac92f7e2b7e4538a73009Jim Miller mPukText.setText(""); 3840f7b3f8ba5c2f0b8f96e072bd866c9fb374ebdebJohn Wang mCallback.goToLockScreen(); 3850f7b3f8ba5c2f0b8f96e072bd866c9fb374ebdebJohn Wang return; 3860f7b3f8ba5c2f0b8f96e072bd866c9fb374ebdebJohn Wang } 3870f7b3f8ba5c2f0b8f96e072bd866c9fb374ebdebJohn Wang 3880f7b3f8ba5c2f0b8f96e072bd866c9fb374ebdebJohn Wang final int digit = checkDigit(v); 3890f7b3f8ba5c2f0b8f96e072bd866c9fb374ebdebJohn Wang if (digit >= 0) { 3900f7b3f8ba5c2f0b8f96e072bd866c9fb374ebdebJohn Wang mCallback.pokeWakelock(DIGIT_PRESS_WAKE_MILLIS); 3910f7b3f8ba5c2f0b8f96e072bd866c9fb374ebdebJohn Wang reportDigit(digit); 3920f7b3f8ba5c2f0b8f96e072bd866c9fb374ebdebJohn Wang } 3930f7b3f8ba5c2f0b8f96e072bd866c9fb374ebdebJohn Wang } 3940f7b3f8ba5c2f0b8f96e072bd866c9fb374ebdebJohn Wang 3950f7b3f8ba5c2f0b8f96e072bd866c9fb374ebdebJohn Wang private int checkDigit(View v) { 3960f7b3f8ba5c2f0b8f96e072bd866c9fb374ebdebJohn Wang int digit = -1; 3970f7b3f8ba5c2f0b8f96e072bd866c9fb374ebdebJohn Wang if (v == mZero) { 3980f7b3f8ba5c2f0b8f96e072bd866c9fb374ebdebJohn Wang digit = 0; 3990f7b3f8ba5c2f0b8f96e072bd866c9fb374ebdebJohn Wang } else if (v == mOne) { 4000f7b3f8ba5c2f0b8f96e072bd866c9fb374ebdebJohn Wang digit = 1; 4010f7b3f8ba5c2f0b8f96e072bd866c9fb374ebdebJohn Wang } else if (v == mTwo) { 4020f7b3f8ba5c2f0b8f96e072bd866c9fb374ebdebJohn Wang digit = 2; 4030f7b3f8ba5c2f0b8f96e072bd866c9fb374ebdebJohn Wang } else if (v == mThree) { 4040f7b3f8ba5c2f0b8f96e072bd866c9fb374ebdebJohn Wang digit = 3; 4050f7b3f8ba5c2f0b8f96e072bd866c9fb374ebdebJohn Wang } else if (v == mFour) { 4060f7b3f8ba5c2f0b8f96e072bd866c9fb374ebdebJohn Wang digit = 4; 4070f7b3f8ba5c2f0b8f96e072bd866c9fb374ebdebJohn Wang } else if (v == mFive) { 4080f7b3f8ba5c2f0b8f96e072bd866c9fb374ebdebJohn Wang digit = 5; 4090f7b3f8ba5c2f0b8f96e072bd866c9fb374ebdebJohn Wang } else if (v == mSix) { 4100f7b3f8ba5c2f0b8f96e072bd866c9fb374ebdebJohn Wang digit = 6; 4110f7b3f8ba5c2f0b8f96e072bd866c9fb374ebdebJohn Wang } else if (v == mSeven) { 4120f7b3f8ba5c2f0b8f96e072bd866c9fb374ebdebJohn Wang digit = 7; 4130f7b3f8ba5c2f0b8f96e072bd866c9fb374ebdebJohn Wang } else if (v == mEight) { 4140f7b3f8ba5c2f0b8f96e072bd866c9fb374ebdebJohn Wang digit = 8; 4150f7b3f8ba5c2f0b8f96e072bd866c9fb374ebdebJohn Wang } else if (v == mNine) { 4160f7b3f8ba5c2f0b8f96e072bd866c9fb374ebdebJohn Wang digit = 9; 4170f7b3f8ba5c2f0b8f96e072bd866c9fb374ebdebJohn Wang } 4180f7b3f8ba5c2f0b8f96e072bd866c9fb374ebdebJohn Wang return digit; 4190f7b3f8ba5c2f0b8f96e072bd866c9fb374ebdebJohn Wang } 4200f7b3f8ba5c2f0b8f96e072bd866c9fb374ebdebJohn Wang } 4210f7b3f8ba5c2f0b8f96e072bd866c9fb374ebdebJohn Wang 4220f7b3f8ba5c2f0b8f96e072bd866c9fb374ebdebJohn Wang} 423