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