1b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project/* 2b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project * Copyright (C) 2006 The Android Open Source Project 3b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project * 4b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project * Licensed under the Apache License, Version 2.0 (the "License"); 5b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project * you may not use this file except in compliance with the License. 6b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project * You may obtain a copy of the License at 7b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project * 8b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project * http://www.apache.org/licenses/LICENSE-2.0 9b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project * 10b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project * Unless required by applicable law or agreed to in writing, software 11b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project * distributed under the License is distributed on an "AS IS" BASIS, 12b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project * See the License for the specific language governing permissions and 14b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project * limitations under the License. 15b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project */ 16b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project 17b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Projectpackage com.android.phone; 18b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project 19b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Projectimport android.app.Activity; 20b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Projectimport android.app.AlertDialog; 21b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Projectimport android.content.Intent; 22b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Projectimport android.content.res.Resources; 23b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Projectimport android.os.AsyncResult; 24b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Projectimport android.os.Bundle; 25b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Projectimport android.os.Handler; 26b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Projectimport android.os.Message; 27b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Projectimport android.text.method.DigitsKeyListener; 28b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Projectimport android.util.Log; 29b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Projectimport android.view.View; 30b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Projectimport android.widget.Button; 31b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Projectimport android.widget.EditText; 32b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Projectimport android.widget.LinearLayout; 33b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Projectimport android.widget.ScrollView; 34b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Projectimport android.widget.TextView; 35b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Projectimport android.widget.Toast; 36b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project 37c51f5ac3de9db72a11dfbb1cefd8cc72f7a0fc7cWink Savilleimport com.android.internal.telephony.CommandException; 38c51f5ac3de9db72a11dfbb1cefd8cc72f7a0fc7cWink Savilleimport com.android.internal.telephony.IccCard; 39c51f5ac3de9db72a11dfbb1cefd8cc72f7a0fc7cWink Savilleimport com.android.internal.telephony.Phone; 40c51f5ac3de9db72a11dfbb1cefd8cc72f7a0fc7cWink Saville 41b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project/** 42c51f5ac3de9db72a11dfbb1cefd8cc72f7a0fc7cWink Saville * "Change ICC PIN" UI for the Phone app. 43b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project */ 44c51f5ac3de9db72a11dfbb1cefd8cc72f7a0fc7cWink Savillepublic class ChangeIccPinScreen extends Activity { 45a1a9601840e50e18ff8ca4be9b888e592287577bDianne Hackborn private static final String LOG_TAG = PhoneGlobals.LOG_TAG; 46b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project private static final boolean DBG = false; 47b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project 48b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project private static final int EVENT_PIN_CHANGED = 100; 49b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project 50b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project private enum EntryState { 51b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project ES_PIN, 52b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project ES_PUK 53b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project } 54b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project 55b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project private EntryState mState; 56b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project 57b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project private static final int NO_ERROR = 0; 58b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project private static final int PIN_MISMATCH = 1; 59b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project private static final int PIN_INVALID_LENGTH = 2; 60b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project 61b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project private static final int MIN_PIN_LENGTH = 4; 62b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project private static final int MAX_PIN_LENGTH = 8; 63b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project 64b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project private Phone mPhone; 65b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project private boolean mChangePin2; 66b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project private TextView mBadPinError; 67b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project private TextView mMismatchError; 68b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project private EditText mOldPin; 69b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project private EditText mNewPin1; 70b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project private EditText mNewPin2; 71b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project private EditText mPUKCode; 72b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project private Button mButton; 73b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project private Button mPUKSubmit; 74b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project private ScrollView mScrollView; 75c51f5ac3de9db72a11dfbb1cefd8cc72f7a0fc7cWink Saville 76c51f5ac3de9db72a11dfbb1cefd8cc72f7a0fc7cWink Saville private LinearLayout mIccPUKPanel; 77b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project 78b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project private Handler mHandler = new Handler() { 79b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project public void handleMessage(Message msg) { 80b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project switch (msg.what) { 81b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project case EVENT_PIN_CHANGED: 82b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project AsyncResult ar = (AsyncResult) msg.obj; 83b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project handleResult(ar); 84b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project break; 85b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project } 86b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project 87b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project return; 88b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project } 89b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project }; 90b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project 91b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project public void onCreate(Bundle icicle) { 92b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project super.onCreate(icicle); 93b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project 94a1a9601840e50e18ff8ca4be9b888e592287577bDianne Hackborn mPhone = PhoneGlobals.getPhone(); 95b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project 96b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project resolveIntent(); 97b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project 98b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project setContentView(R.layout.change_sim_pin_screen); 99b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project 100b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project mOldPin = (EditText) findViewById(R.id.old_pin); 101b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project mOldPin.setKeyListener(DigitsKeyListener.getInstance()); 102b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project mOldPin.setMovementMethod(null); 103b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project mOldPin.setOnClickListener(mClicked); 104b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project 105b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project mNewPin1 = (EditText) findViewById(R.id.new_pin1); 106b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project mNewPin1.setKeyListener(DigitsKeyListener.getInstance()); 107b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project mNewPin1.setMovementMethod(null); 108b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project mNewPin1.setOnClickListener(mClicked); 109b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project 110b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project mNewPin2 = (EditText) findViewById(R.id.new_pin2); 111b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project mNewPin2.setKeyListener(DigitsKeyListener.getInstance()); 112b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project mNewPin2.setMovementMethod(null); 113b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project mNewPin2.setOnClickListener(mClicked); 114b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project 115b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project mBadPinError = (TextView) findViewById(R.id.bad_pin); 116b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project mMismatchError = (TextView) findViewById(R.id.mismatch); 117b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project 118b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project mButton = (Button) findViewById(R.id.button); 119b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project mButton.setOnClickListener(mClicked); 120b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project 121b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project mScrollView = (ScrollView) findViewById(R.id.scroll); 122b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project 123b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project mPUKCode = (EditText) findViewById(R.id.puk_code); 124b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project mPUKCode.setKeyListener(DigitsKeyListener.getInstance()); 125b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project mPUKCode.setMovementMethod(null); 126b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project mPUKCode.setOnClickListener(mClicked); 127b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project 128b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project mPUKSubmit = (Button) findViewById(R.id.puk_submit); 129b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project mPUKSubmit.setOnClickListener(mClicked); 130b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project 131c51f5ac3de9db72a11dfbb1cefd8cc72f7a0fc7cWink Saville mIccPUKPanel = (LinearLayout) findViewById(R.id.puk_panel); 132b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project 133b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project int id = mChangePin2 ? R.string.change_pin2 : R.string.change_pin; 134b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project setTitle(getResources().getText(id)); 135b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project 136b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project mState = EntryState.ES_PIN; 137b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project } 138b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project 139b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project private void resolveIntent() { 140b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project Intent intent = getIntent(); 141b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project mChangePin2 = intent.getBooleanExtra("pin2", mChangePin2); 142b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project } 143b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project 144b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project private void reset() { 145b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project mScrollView.scrollTo(0, 0); 146b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project mBadPinError.setVisibility(View.GONE); 147b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project mMismatchError.setVisibility(View.GONE); 148b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project } 149b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project 150b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project private int validateNewPin(String p1, String p2) { 151b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project if (p1 == null) { 152b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project return PIN_INVALID_LENGTH; 153b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project } 154b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project 155b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project if (!p1.equals(p2)) { 156b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project return PIN_MISMATCH; 157b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project } 158b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project 159b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project int len1 = p1.length(); 160b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project 161b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project if (len1 < MIN_PIN_LENGTH || len1 > MAX_PIN_LENGTH) { 162b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project return PIN_INVALID_LENGTH; 163b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project } 164b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project 165b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project return NO_ERROR; 166b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project } 167b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project 168b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project private View.OnClickListener mClicked = new View.OnClickListener() { 169b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project public void onClick(View v) { 170b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project if (v == mOldPin) { 171b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project mNewPin1.requestFocus(); 172b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project } else if (v == mNewPin1) { 173b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project mNewPin2.requestFocus(); 174b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project } else if (v == mNewPin2) { 175b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project mButton.requestFocus(); 176b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project } else if (v == mButton) { 177c51f5ac3de9db72a11dfbb1cefd8cc72f7a0fc7cWink Saville IccCard iccCardInterface = mPhone.getIccCard(); 178c51f5ac3de9db72a11dfbb1cefd8cc72f7a0fc7cWink Saville if (iccCardInterface != null) { 179b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project String oldPin = mOldPin.getText().toString(); 180b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project String newPin1 = mNewPin1.getText().toString(); 181b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project String newPin2 = mNewPin2.getText().toString(); 182b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project 183b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project int error = validateNewPin(newPin1, newPin2); 184b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project 185b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project switch (error) { 186b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project case PIN_INVALID_LENGTH: 187b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project case PIN_MISMATCH: 188b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project mNewPin1.getText().clear(); 189b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project mNewPin2.getText().clear(); 190b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project mMismatchError.setVisibility(View.VISIBLE); 191b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project 192b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project Resources r = getResources(); 193b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project CharSequence text; 194b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project 195b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project if (error == PIN_MISMATCH) { 196b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project text = r.getString(R.string.mismatchPin); 197b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project } else { 198b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project text = r.getString(R.string.invalidPin); 199b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project } 200b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project 201b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project mMismatchError.setText(text); 202b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project break; 203b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project 204b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project default: 205b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project Message callBack = Message.obtain(mHandler, 206b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project EVENT_PIN_CHANGED); 207b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project 208b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project if (DBG) log("change pin attempt: old=" + oldPin + 209b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project ", newPin=" + newPin1); 210b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project 211b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project reset(); 212b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project 213b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project if (mChangePin2) { 214c51f5ac3de9db72a11dfbb1cefd8cc72f7a0fc7cWink Saville iccCardInterface.changeIccFdnPassword(oldPin, 215b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project newPin1, callBack); 216b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project } else { 217c51f5ac3de9db72a11dfbb1cefd8cc72f7a0fc7cWink Saville iccCardInterface.changeIccLockPassword(oldPin, 218b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project newPin1, callBack); 219b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project } 220b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project 221b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project // TODO: show progress panel 222b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project } 223b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project } 224b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project } else if (v == mPUKCode) { 225b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project mPUKSubmit.requestFocus(); 226b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project } else if (v == mPUKSubmit) { 227c51f5ac3de9db72a11dfbb1cefd8cc72f7a0fc7cWink Saville mPhone.getIccCard().supplyPuk2(mPUKCode.getText().toString(), 228b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project mNewPin1.getText().toString(), 229b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project Message.obtain(mHandler, EVENT_PIN_CHANGED)); 230b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project } 231b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project } 232b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project }; 233b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project 234b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project private void handleResult(AsyncResult ar) { 235b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project if (ar.exception == null) { 236b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project if (DBG) log("handleResult: success!"); 237b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project 238b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project if (mState == EntryState.ES_PUK) { 239b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project mScrollView.setVisibility(View.VISIBLE); 240c51f5ac3de9db72a11dfbb1cefd8cc72f7a0fc7cWink Saville mIccPUKPanel.setVisibility(View.GONE); 241b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project } 242b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project // TODO: show success feedback 243b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project showConfirmation(); 244b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project 245b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project mHandler.postDelayed(new Runnable() { 246b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project public void run() { 247b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project finish(); 248b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project } 249b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project }, 3000); 250b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project 251b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project } else if (ar.exception instanceof CommandException 252b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project /* && ((CommandException)ar.exception).getCommandError() == 253b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project CommandException.Error.PASSWORD_INCORRECT */ ) { 254b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project if (mState == EntryState.ES_PIN) { 255b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project if (DBG) log("handleResult: pin failed!"); 256b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project mOldPin.getText().clear(); 257b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project mBadPinError.setVisibility(View.VISIBLE); 258b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project CommandException ce = (CommandException) ar.exception; 259b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project if (ce.getCommandError() == CommandException.Error.SIM_PUK2) { 260b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project if (DBG) log("handleResult: puk requested!"); 261b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project mState = EntryState.ES_PUK; 262b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project displayPUKAlert(); 263b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project mScrollView.setVisibility(View.GONE); 264c51f5ac3de9db72a11dfbb1cefd8cc72f7a0fc7cWink Saville mIccPUKPanel.setVisibility(View.VISIBLE); 265b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project mPUKCode.requestFocus(); 266b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project } 267b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project } else if (mState == EntryState.ES_PUK) { 268b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project //should really check to see if the error is CommandException.PASSWORD_INCORRECT... 269b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project if (DBG) log("handleResult: puk2 failed!"); 270b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project displayPUKAlert(); 271b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project mPUKCode.getText().clear(); 272b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project mPUKCode.requestFocus(); 273b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project } 274b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project } 275b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project } 276b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project 277b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project private AlertDialog mPUKAlert; 278b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project private void displayPUKAlert () { 279b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project if (mPUKAlert == null) { 280b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project mPUKAlert = new AlertDialog.Builder(this) 281b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project .setMessage (R.string.puk_requested) 282b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project .setCancelable(false) 283b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project .show(); 284b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project } else { 285b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project mPUKAlert.show(); 286b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project } 287b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project //TODO: The 3 second delay here is somewhat arbitrary, reflecting the values 288b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project //used elsewhere for similar code. This should get revisited with the framework 289b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project //crew to see if there is some standard we should adhere to. 290b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project mHandler.postDelayed(new Runnable() { 291b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project public void run() { 292b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project mPUKAlert.dismiss(); 293b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project } 294b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project }, 3000); 295b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project } 296b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project 297b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project private void showConfirmation() { 298b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project int id = mChangePin2 ? R.string.pin2_changed : R.string.pin_changed; 299b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project Toast.makeText(this, id, Toast.LENGTH_SHORT).show(); 300b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project } 301b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project 302b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project private void log(String msg) { 303b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project String prefix = mChangePin2 ? "[ChgPin2]" : "[ChgPin]"; 304b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project Log.d(LOG_TAG, prefix + msg); 305b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project } 306b16363f5fc191b769e88c364243e34b92eb22688The Android Open Source Project} 307