KeyguardSimPukView.java revision 5ecd81154fa039961f65bb4e36d18ac555b0d1d6
1dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller/* 2dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller * Copyright (C) 2012 The Android Open Source Project 3dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller * 4dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller * Licensed under the Apache License, Version 2.0 (the "License"); 5dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller * you may not use this file except in compliance with the License. 6dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller * You may obtain a copy of the License at 7dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller * 8dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller * http://www.apache.org/licenses/LICENSE-2.0 9dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller * 10dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller * Unless required by applicable law or agreed to in writing, software 11dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller * distributed under the License is distributed on an "AS IS" BASIS, 12dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller * See the License for the specific language governing permissions and 14dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller * limitations under the License. 15dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller */ 16dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller 175ecd81154fa039961f65bb4e36d18ac555b0d1d6Jim Millerpackage com.android.keyguard; 185ecd81154fa039961f65bb4e36d18ac555b0d1d6Jim Miller 195ecd81154fa039961f65bb4e36d18ac555b0d1d6Jim Millerimport com.android.internal.telephony.ITelephony; 205ecd81154fa039961f65bb4e36d18ac555b0d1d6Jim Miller 215ecd81154fa039961f65bb4e36d18ac555b0d1d6Jim Millerimport android.content.Context; 22dcb3d84b82cc2448d04e73359a716581bfb657dbJim Millerimport android.app.Activity; 23dcb3d84b82cc2448d04e73359a716581bfb657dbJim Millerimport android.app.Dialog; 24dcb3d84b82cc2448d04e73359a716581bfb657dbJim Millerimport android.app.ProgressDialog; 25dcb3d84b82cc2448d04e73359a716581bfb657dbJim Millerimport android.os.RemoteException; 26dcb3d84b82cc2448d04e73359a716581bfb657dbJim Millerimport android.os.ServiceManager; 27dcb3d84b82cc2448d04e73359a716581bfb657dbJim Millerimport android.text.Editable; 2823d7a6e605f9c6c1c57550e1053d9e6ddd22741eDaniel Sandlerimport android.text.InputType; 299cf2c523d82ec14632fd0db920dcc8909c0f44a5Jim Millerimport android.text.TextWatcher; 3023d7a6e605f9c6c1c57550e1053d9e6ddd22741eDaniel Sandlerimport android.text.method.DigitsKeyListener; 31dcb3d84b82cc2448d04e73359a716581bfb657dbJim Millerimport android.util.AttributeSet; 32dcb3d84b82cc2448d04e73359a716581bfb657dbJim Millerimport android.view.View; 33dcb3d84b82cc2448d04e73359a716581bfb657dbJim Millerimport android.view.WindowManager; 34dcb3d84b82cc2448d04e73359a716581bfb657dbJim Millerimport android.widget.TextView.OnEditorActionListener; 35dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller 3623d7a6e605f9c6c1c57550e1053d9e6ddd22741eDaniel Sandler/** 3723d7a6e605f9c6c1c57550e1053d9e6ddd22741eDaniel Sandler * Displays a PIN pad for entering a PUK (Pin Unlock Kode) provided by a carrier. 3823d7a6e605f9c6c1c57550e1053d9e6ddd22741eDaniel Sandler */ 3923d7a6e605f9c6c1c57550e1053d9e6ddd22741eDaniel Sandlerpublic class KeyguardSimPukView extends KeyguardAbsKeyInputView 4023d7a6e605f9c6c1c57550e1053d9e6ddd22741eDaniel Sandler implements KeyguardSecurityView, OnEditorActionListener, TextWatcher { 41dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller 42dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller private ProgressDialog mSimUnlockProgressDialog = null; 434b09dd31fb1cefcaee87e7a206f22ba31527e250Jim Miller private volatile boolean mCheckInProgress; 443efe106264262924a9218268d3c7d19d272fb7a2Jim Miller private String mPukText; 453efe106264262924a9218268d3c7d19d272fb7a2Jim Miller private String mPinText; 463efe106264262924a9218268d3c7d19d272fb7a2Jim Miller private StateMachine mStateMachine = new StateMachine(); 473efe106264262924a9218268d3c7d19d272fb7a2Jim Miller 483efe106264262924a9218268d3c7d19d272fb7a2Jim Miller private class StateMachine { 493efe106264262924a9218268d3c7d19d272fb7a2Jim Miller final int ENTER_PUK = 0; 503efe106264262924a9218268d3c7d19d272fb7a2Jim Miller final int ENTER_PIN = 1; 513efe106264262924a9218268d3c7d19d272fb7a2Jim Miller final int CONFIRM_PIN = 2; 523efe106264262924a9218268d3c7d19d272fb7a2Jim Miller final int DONE = 3; 533efe106264262924a9218268d3c7d19d272fb7a2Jim Miller private int state = ENTER_PUK; 543efe106264262924a9218268d3c7d19d272fb7a2Jim Miller 553efe106264262924a9218268d3c7d19d272fb7a2Jim Miller public void next() { 563efe106264262924a9218268d3c7d19d272fb7a2Jim Miller int msg = 0; 573efe106264262924a9218268d3c7d19d272fb7a2Jim Miller if (state == ENTER_PUK) { 583efe106264262924a9218268d3c7d19d272fb7a2Jim Miller if (checkPuk()) { 593efe106264262924a9218268d3c7d19d272fb7a2Jim Miller state = ENTER_PIN; 603efe106264262924a9218268d3c7d19d272fb7a2Jim Miller msg = R.string.kg_puk_enter_pin_hint; 613efe106264262924a9218268d3c7d19d272fb7a2Jim Miller } else { 623efe106264262924a9218268d3c7d19d272fb7a2Jim Miller msg = R.string.kg_invalid_sim_puk_hint; 633efe106264262924a9218268d3c7d19d272fb7a2Jim Miller } 643efe106264262924a9218268d3c7d19d272fb7a2Jim Miller } else if (state == ENTER_PIN) { 653efe106264262924a9218268d3c7d19d272fb7a2Jim Miller if (checkPin()) { 663efe106264262924a9218268d3c7d19d272fb7a2Jim Miller state = CONFIRM_PIN; 673efe106264262924a9218268d3c7d19d272fb7a2Jim Miller msg = R.string.kg_enter_confirm_pin_hint; 683efe106264262924a9218268d3c7d19d272fb7a2Jim Miller } else { 693efe106264262924a9218268d3c7d19d272fb7a2Jim Miller msg = R.string.kg_invalid_sim_pin_hint; 703efe106264262924a9218268d3c7d19d272fb7a2Jim Miller } 713efe106264262924a9218268d3c7d19d272fb7a2Jim Miller } else if (state == CONFIRM_PIN) { 723efe106264262924a9218268d3c7d19d272fb7a2Jim Miller if (confirmPin()) { 733efe106264262924a9218268d3c7d19d272fb7a2Jim Miller state = DONE; 745ecd81154fa039961f65bb4e36d18ac555b0d1d6Jim Miller msg = R.string.keyguard_sim_unlock_progress_dialog_message; 753efe106264262924a9218268d3c7d19d272fb7a2Jim Miller updateSim(); 763efe106264262924a9218268d3c7d19d272fb7a2Jim Miller } else { 7723d7a6e605f9c6c1c57550e1053d9e6ddd22741eDaniel Sandler state = ENTER_PIN; // try again? 783efe106264262924a9218268d3c7d19d272fb7a2Jim Miller msg = R.string.kg_invalid_confirm_pin_hint; 793efe106264262924a9218268d3c7d19d272fb7a2Jim Miller } 803efe106264262924a9218268d3c7d19d272fb7a2Jim Miller } 8123d7a6e605f9c6c1c57550e1053d9e6ddd22741eDaniel Sandler mPasswordEntry.setText(null); 823efe106264262924a9218268d3c7d19d272fb7a2Jim Miller if (msg != 0) { 830a4f900463024908220d0c9bf4b291a6e1284846Adam Cohen mSecurityMessageDisplay.setMessage(msg, true); 843efe106264262924a9218268d3c7d19d272fb7a2Jim Miller } 853efe106264262924a9218268d3c7d19d272fb7a2Jim Miller } 863efe106264262924a9218268d3c7d19d272fb7a2Jim Miller 873efe106264262924a9218268d3c7d19d272fb7a2Jim Miller void reset() { 883efe106264262924a9218268d3c7d19d272fb7a2Jim Miller mPinText=""; 893efe106264262924a9218268d3c7d19d272fb7a2Jim Miller mPukText=""; 903efe106264262924a9218268d3c7d19d272fb7a2Jim Miller state = ENTER_PUK; 916dbf8610e94c1b41e0124577101d6369fd204ad3Adam Cohen mSecurityMessageDisplay.setMessage(R.string.kg_puk_enter_puk_hint, true); 9223d7a6e605f9c6c1c57550e1053d9e6ddd22741eDaniel Sandler mPasswordEntry.requestFocus(); 933efe106264262924a9218268d3c7d19d272fb7a2Jim Miller } 943efe106264262924a9218268d3c7d19d272fb7a2Jim Miller } 953efe106264262924a9218268d3c7d19d272fb7a2Jim Miller 96dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller public KeyguardSimPukView(Context context) { 97dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller this(context, null); 98dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller } 99dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller 100dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller public KeyguardSimPukView(Context context, AttributeSet attrs) { 101dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller super(context, attrs); 102dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller } 103dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller 10423d7a6e605f9c6c1c57550e1053d9e6ddd22741eDaniel Sandler public void resetState() { 10523d7a6e605f9c6c1c57550e1053d9e6ddd22741eDaniel Sandler mStateMachine.reset(); 10623d7a6e605f9c6c1c57550e1053d9e6ddd22741eDaniel Sandler mPasswordEntry.setEnabled(true); 107dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller } 108dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller 109dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller @Override 11023d7a6e605f9c6c1c57550e1053d9e6ddd22741eDaniel Sandler protected int getPasswordTextViewId() { 11123d7a6e605f9c6c1c57550e1053d9e6ddd22741eDaniel Sandler return R.id.pinEntry; 112dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller } 113dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller 114dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller @Override 11523d7a6e605f9c6c1c57550e1053d9e6ddd22741eDaniel Sandler protected void onFinishInflate() { 11623d7a6e605f9c6c1c57550e1053d9e6ddd22741eDaniel Sandler super.onFinishInflate(); 117dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller 11823d7a6e605f9c6c1c57550e1053d9e6ddd22741eDaniel Sandler final View ok = findViewById(R.id.key_enter); 11923d7a6e605f9c6c1c57550e1053d9e6ddd22741eDaniel Sandler if (ok != null) { 12023d7a6e605f9c6c1c57550e1053d9e6ddd22741eDaniel Sandler ok.setOnClickListener(new View.OnClickListener() { 12123d7a6e605f9c6c1c57550e1053d9e6ddd22741eDaniel Sandler @Override 12223d7a6e605f9c6c1c57550e1053d9e6ddd22741eDaniel Sandler public void onClick(View v) { 12323d7a6e605f9c6c1c57550e1053d9e6ddd22741eDaniel Sandler doHapticKeyClick(); 12423d7a6e605f9c6c1c57550e1053d9e6ddd22741eDaniel Sandler verifyPasswordAndUnlock(); 12523d7a6e605f9c6c1c57550e1053d9e6ddd22741eDaniel Sandler } 12623d7a6e605f9c6c1c57550e1053d9e6ddd22741eDaniel Sandler }); 12723d7a6e605f9c6c1c57550e1053d9e6ddd22741eDaniel Sandler } 128dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller 12923d7a6e605f9c6c1c57550e1053d9e6ddd22741eDaniel Sandler // The delete button is of the PIN keyboard itself in some (e.g. tablet) layouts, 13023d7a6e605f9c6c1c57550e1053d9e6ddd22741eDaniel Sandler // not a separate view 13123d7a6e605f9c6c1c57550e1053d9e6ddd22741eDaniel Sandler View pinDelete = findViewById(R.id.delete_button); 13223d7a6e605f9c6c1c57550e1053d9e6ddd22741eDaniel Sandler if (pinDelete != null) { 13323d7a6e605f9c6c1c57550e1053d9e6ddd22741eDaniel Sandler pinDelete.setVisibility(View.VISIBLE); 13423d7a6e605f9c6c1c57550e1053d9e6ddd22741eDaniel Sandler pinDelete.setOnClickListener(new OnClickListener() { 13523d7a6e605f9c6c1c57550e1053d9e6ddd22741eDaniel Sandler public void onClick(View v) { 13623d7a6e605f9c6c1c57550e1053d9e6ddd22741eDaniel Sandler CharSequence str = mPasswordEntry.getText(); 13723d7a6e605f9c6c1c57550e1053d9e6ddd22741eDaniel Sandler if (str.length() > 0) { 13823d7a6e605f9c6c1c57550e1053d9e6ddd22741eDaniel Sandler mPasswordEntry.setText(str.subSequence(0, str.length()-1)); 13923d7a6e605f9c6c1c57550e1053d9e6ddd22741eDaniel Sandler } 14023d7a6e605f9c6c1c57550e1053d9e6ddd22741eDaniel Sandler doHapticKeyClick(); 14123d7a6e605f9c6c1c57550e1053d9e6ddd22741eDaniel Sandler } 14223d7a6e605f9c6c1c57550e1053d9e6ddd22741eDaniel Sandler }); 14323d7a6e605f9c6c1c57550e1053d9e6ddd22741eDaniel Sandler pinDelete.setOnLongClickListener(new View.OnLongClickListener() { 14423d7a6e605f9c6c1c57550e1053d9e6ddd22741eDaniel Sandler public boolean onLongClick(View v) { 14523d7a6e605f9c6c1c57550e1053d9e6ddd22741eDaniel Sandler mPasswordEntry.setText(""); 14623d7a6e605f9c6c1c57550e1053d9e6ddd22741eDaniel Sandler doHapticKeyClick(); 14723d7a6e605f9c6c1c57550e1053d9e6ddd22741eDaniel Sandler return true; 14823d7a6e605f9c6c1c57550e1053d9e6ddd22741eDaniel Sandler } 14923d7a6e605f9c6c1c57550e1053d9e6ddd22741eDaniel Sandler }); 15023d7a6e605f9c6c1c57550e1053d9e6ddd22741eDaniel Sandler } 151dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller 15223d7a6e605f9c6c1c57550e1053d9e6ddd22741eDaniel Sandler mPasswordEntry.setKeyListener(DigitsKeyListener.getInstance()); 15323d7a6e605f9c6c1c57550e1053d9e6ddd22741eDaniel Sandler mPasswordEntry.setInputType(InputType.TYPE_CLASS_NUMBER 15423d7a6e605f9c6c1c57550e1053d9e6ddd22741eDaniel Sandler | InputType.TYPE_NUMBER_VARIATION_PASSWORD); 15523d7a6e605f9c6c1c57550e1053d9e6ddd22741eDaniel Sandler 15623d7a6e605f9c6c1c57550e1053d9e6ddd22741eDaniel Sandler mPasswordEntry.requestFocus(); 157dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller 15823d7a6e605f9c6c1c57550e1053d9e6ddd22741eDaniel Sandler mSecurityMessageDisplay.setTimeout(0); // don't show ownerinfo/charging status by default 159dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller } 160dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller 1616fb841fa219eaae3e87f2fdc05e105d7a1813c42Adam Cohen @Override 1626fb841fa219eaae3e87f2fdc05e105d7a1813c42Adam Cohen public void showUsabilityHint() { 1636fb841fa219eaae3e87f2fdc05e105d7a1813c42Adam Cohen } 1646fb841fa219eaae3e87f2fdc05e105d7a1813c42Adam Cohen 16523d7a6e605f9c6c1c57550e1053d9e6ddd22741eDaniel Sandler @Override 16623d7a6e605f9c6c1c57550e1053d9e6ddd22741eDaniel Sandler public void onPause() { 167dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller // dismiss the dialog. 168dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller if (mSimUnlockProgressDialog != null) { 169dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller mSimUnlockProgressDialog.dismiss(); 170dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller mSimUnlockProgressDialog = null; 171dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller } 172dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller } 173dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller 174dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller /** 175dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller * Since the IPC can block, we want to run the request in a separate thread 176dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller * with a callback. 177dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller */ 178dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller private abstract class CheckSimPuk extends Thread { 179dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller 180dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller private final String mPin, mPuk; 181dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller 182dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller protected CheckSimPuk(String puk, String pin) { 183dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller mPuk = puk; 184dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller mPin = pin; 185dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller } 186dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller 187dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller abstract void onSimLockChangedResponse(boolean success); 188dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller 189dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller @Override 190dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller public void run() { 191dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller try { 192dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller final boolean result = ITelephony.Stub.asInterface(ServiceManager 193dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller .checkService("phone")).supplyPuk(mPuk, mPin); 194dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller 195dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller post(new Runnable() { 196dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller public void run() { 197dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller onSimLockChangedResponse(result); 198dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller } 199dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller }); 200dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller } catch (RemoteException e) { 201dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller post(new Runnable() { 202dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller public void run() { 203dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller onSimLockChangedResponse(false); 204dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller } 205dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller }); 206dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller } 207dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller } 208dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller } 209dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller 210dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller private Dialog getSimUnlockProgressDialog() { 211dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller if (mSimUnlockProgressDialog == null) { 212dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller mSimUnlockProgressDialog = new ProgressDialog(mContext); 21323d7a6e605f9c6c1c57550e1053d9e6ddd22741eDaniel Sandler mSimUnlockProgressDialog.setMessage( 21423d7a6e605f9c6c1c57550e1053d9e6ddd22741eDaniel Sandler mContext.getString(R.string.kg_sim_unlock_progress_dialog_message)); 215dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller mSimUnlockProgressDialog.setIndeterminate(true); 216dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller mSimUnlockProgressDialog.setCancelable(false); 217dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller if (!(mContext instanceof Activity)) { 218dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller mSimUnlockProgressDialog.getWindow().setType( 219dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller WindowManager.LayoutParams.TYPE_KEYGUARD_DIALOG); 220dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller } 221dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller } 222dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller return mSimUnlockProgressDialog; 223dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller } 224dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller 2253efe106264262924a9218268d3c7d19d272fb7a2Jim Miller private boolean checkPuk() { 226dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller // make sure the puk is at least 8 digits long. 22723d7a6e605f9c6c1c57550e1053d9e6ddd22741eDaniel Sandler if (mPasswordEntry.getText().length() >= 8) { 22823d7a6e605f9c6c1c57550e1053d9e6ddd22741eDaniel Sandler mPukText = mPasswordEntry.getText().toString(); 2293efe106264262924a9218268d3c7d19d272fb7a2Jim Miller return true; 230dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller } 2313efe106264262924a9218268d3c7d19d272fb7a2Jim Miller return false; 2323efe106264262924a9218268d3c7d19d272fb7a2Jim Miller } 233dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller 2343efe106264262924a9218268d3c7d19d272fb7a2Jim Miller private boolean checkPin() { 235dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller // make sure the PIN is between 4 and 8 digits 23623d7a6e605f9c6c1c57550e1053d9e6ddd22741eDaniel Sandler int length = mPasswordEntry.getText().length(); 2373efe106264262924a9218268d3c7d19d272fb7a2Jim Miller if (length >= 4 && length <= 8) { 23823d7a6e605f9c6c1c57550e1053d9e6ddd22741eDaniel Sandler mPinText = mPasswordEntry.getText().toString(); 2393efe106264262924a9218268d3c7d19d272fb7a2Jim Miller return true; 240dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller } 2413efe106264262924a9218268d3c7d19d272fb7a2Jim Miller return false; 2423efe106264262924a9218268d3c7d19d272fb7a2Jim Miller } 243dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller 2443efe106264262924a9218268d3c7d19d272fb7a2Jim Miller public boolean confirmPin() { 24523d7a6e605f9c6c1c57550e1053d9e6ddd22741eDaniel Sandler return mPinText.equals(mPasswordEntry.getText().toString()); 2463efe106264262924a9218268d3c7d19d272fb7a2Jim Miller } 2473efe106264262924a9218268d3c7d19d272fb7a2Jim Miller 2483efe106264262924a9218268d3c7d19d272fb7a2Jim Miller private void updateSim() { 249dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller getSimUnlockProgressDialog().show(); 250dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller 2514b09dd31fb1cefcaee87e7a206f22ba31527e250Jim Miller if (!mCheckInProgress) { 2524b09dd31fb1cefcaee87e7a206f22ba31527e250Jim Miller mCheckInProgress = true; 2533efe106264262924a9218268d3c7d19d272fb7a2Jim Miller new CheckSimPuk(mPukText, mPinText) { 2544b09dd31fb1cefcaee87e7a206f22ba31527e250Jim Miller void onSimLockChangedResponse(final boolean success) { 2553efe106264262924a9218268d3c7d19d272fb7a2Jim Miller post(new Runnable() { 2564b09dd31fb1cefcaee87e7a206f22ba31527e250Jim Miller public void run() { 2574b09dd31fb1cefcaee87e7a206f22ba31527e250Jim Miller if (mSimUnlockProgressDialog != null) { 2584b09dd31fb1cefcaee87e7a206f22ba31527e250Jim Miller mSimUnlockProgressDialog.hide(); 2594b09dd31fb1cefcaee87e7a206f22ba31527e250Jim Miller } 2604b09dd31fb1cefcaee87e7a206f22ba31527e250Jim Miller if (success) { 2614b09dd31fb1cefcaee87e7a206f22ba31527e250Jim Miller mCallback.dismiss(true); 2624b09dd31fb1cefcaee87e7a206f22ba31527e250Jim Miller } else { 2633efe106264262924a9218268d3c7d19d272fb7a2Jim Miller mStateMachine.reset(); 2640a4f900463024908220d0c9bf4b291a6e1284846Adam Cohen mSecurityMessageDisplay.setMessage(R.string.kg_invalid_puk, true); 2654b09dd31fb1cefcaee87e7a206f22ba31527e250Jim Miller } 2664b09dd31fb1cefcaee87e7a206f22ba31527e250Jim Miller mCheckInProgress = false; 267dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller } 2684b09dd31fb1cefcaee87e7a206f22ba31527e250Jim Miller }); 2694b09dd31fb1cefcaee87e7a206f22ba31527e250Jim Miller } 2704b09dd31fb1cefcaee87e7a206f22ba31527e250Jim Miller }.start(); 2714b09dd31fb1cefcaee87e7a206f22ba31527e250Jim Miller } 272dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller } 273dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller 274dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller @Override 27523d7a6e605f9c6c1c57550e1053d9e6ddd22741eDaniel Sandler protected void verifyPasswordAndUnlock() { 27623d7a6e605f9c6c1c57550e1053d9e6ddd22741eDaniel Sandler mStateMachine.next(); 2779cf2c523d82ec14632fd0db920dcc8909c0f44a5Jim Miller } 27823d7a6e605f9c6c1c57550e1053d9e6ddd22741eDaniel Sandler} 2799cf2c523d82ec14632fd0db920dcc8909c0f44a5Jim Miller 2809cf2c523d82ec14632fd0db920dcc8909c0f44a5Jim Miller 281