public void onClick(View v) {
          if (v == mOldPin) {
            mNewPin1.requestFocus();
          } else if (v == mNewPin1) {
            mNewPin2.requestFocus();
          } else if (v == mNewPin2) {
            mButton.requestFocus();
          } else if (v == mButton) {
            IccCard iccCardInterface = mPhone.getIccCard();
            if (iccCardInterface != null) {
              String oldPin = mOldPin.getText().toString();
              String newPin1 = mNewPin1.getText().toString();
              String newPin2 = mNewPin2.getText().toString();

              int error = validateNewPin(newPin1, newPin2);

              switch (error) {
                case PIN_INVALID_LENGTH:
                case PIN_MISMATCH:
                  mNewPin1.getText().clear();
                  mNewPin2.getText().clear();
                  mMismatchError.setVisibility(View.VISIBLE);

                  Resources r = getResources();
                  CharSequence text;

                  if (error == PIN_MISMATCH) {
                    text = r.getString(R.string.mismatchPin);
                  } else {
                    text = r.getString(R.string.invalidPin);
                  }

                  mMismatchError.setText(text);
                  break;

                default:
                  Message callBack = Message.obtain(mHandler, EVENT_PIN_CHANGED);

                  if (DBG) log("change pin attempt: old=" + oldPin + ", newPin=" + newPin1);

                  reset();

                  if (mChangePin2) {
                    iccCardInterface.changeIccFdnPassword(oldPin, newPin1, callBack);
                  } else {
                    iccCardInterface.changeIccLockPassword(oldPin, newPin1, callBack);
                  }

                  // TODO: show progress panel
              }
            }
          } else if (v == mPUKCode) {
            mPUKSubmit.requestFocus();
          } else if (v == mPUKSubmit) {
            mPhone
                .getIccCard()
                .supplyPuk2(
                    mPUKCode.getText().toString(),
                    mNewPin1.getText().toString(),
                    Message.obtain(mHandler, EVENT_PIN_CHANGED));
          }
        }