KeyguardSimPinView.java revision 0a4f900463024908220d0c9bf4b291a6e1284846
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
17dcb3d84b82cc2448d04e73359a716581bfb657dbJim Millerpackage com.android.internal.policy.impl.keyguard;
18dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller
19dcb3d84b82cc2448d04e73359a716581bfb657dbJim Millerimport android.app.Activity;
20dcb3d84b82cc2448d04e73359a716581bfb657dbJim Millerimport android.app.Dialog;
21dcb3d84b82cc2448d04e73359a716581bfb657dbJim Millerimport android.app.ProgressDialog;
22dcb3d84b82cc2448d04e73359a716581bfb657dbJim Millerimport android.content.Context;
23dcb3d84b82cc2448d04e73359a716581bfb657dbJim Millerimport android.graphics.Rect;
24dcb3d84b82cc2448d04e73359a716581bfb657dbJim Millerimport android.os.RemoteException;
25dcb3d84b82cc2448d04e73359a716581bfb657dbJim Millerimport android.os.ServiceManager;
26dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller
27dcb3d84b82cc2448d04e73359a716581bfb657dbJim Millerimport com.android.internal.telephony.ITelephony;
28dcb3d84b82cc2448d04e73359a716581bfb657dbJim Millerimport com.android.internal.widget.LockPatternUtils;
29dcb3d84b82cc2448d04e73359a716581bfb657dbJim Millerimport com.android.internal.widget.PasswordEntryKeyboardHelper;
30dcb3d84b82cc2448d04e73359a716581bfb657dbJim Millerimport com.android.internal.widget.PasswordEntryKeyboardView;
31dcb3d84b82cc2448d04e73359a716581bfb657dbJim Millerimport com.android.internal.R;
32dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller
339cf2c523d82ec14632fd0db920dcc8909c0f44a5Jim Millerimport android.text.Editable;
349cf2c523d82ec14632fd0db920dcc8909c0f44a5Jim Millerimport android.text.TextWatcher;
35dcb3d84b82cc2448d04e73359a716581bfb657dbJim Millerimport android.util.AttributeSet;
36dcb3d84b82cc2448d04e73359a716581bfb657dbJim Millerimport android.view.KeyEvent;
374b09dd31fb1cefcaee87e7a206f22ba31527e250Jim Millerimport android.view.MotionEvent;
38dcb3d84b82cc2448d04e73359a716581bfb657dbJim Millerimport android.view.View;
39dcb3d84b82cc2448d04e73359a716581bfb657dbJim Millerimport android.view.WindowManager;
40dcb3d84b82cc2448d04e73359a716581bfb657dbJim Millerimport android.view.inputmethod.EditorInfo;
41dcb3d84b82cc2448d04e73359a716581bfb657dbJim Millerimport android.widget.EditText;
42dcb3d84b82cc2448d04e73359a716581bfb657dbJim Millerimport android.widget.LinearLayout;
43dcb3d84b82cc2448d04e73359a716581bfb657dbJim Millerimport android.widget.TextView;
44dcb3d84b82cc2448d04e73359a716581bfb657dbJim Millerimport android.widget.TextView.OnEditorActionListener;
45dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller
46dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller/**
47dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller * Displays a dialer like interface to unlock the SIM PIN.
48dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller */
49dcb3d84b82cc2448d04e73359a716581bfb657dbJim Millerpublic class KeyguardSimPinView extends LinearLayout
509cf2c523d82ec14632fd0db920dcc8909c0f44a5Jim Miller        implements KeyguardSecurityView, OnEditorActionListener, TextWatcher {
51dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller
52dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller    private EditText mPinEntry;
53dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller    private ProgressDialog mSimUnlockProgressDialog = null;
54dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller    private KeyguardSecurityCallback mCallback;
55dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller    private PasswordEntryKeyboardView mKeyboardView;
56dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller    private PasswordEntryKeyboardHelper mKeyboardHelper;
57dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller    private LockPatternUtils mLockPatternUtils;
580ff7f010f8bfd011f0915031b02739ae3bee401eJim Miller    private SecurityMessageDisplay mSecurityMessageDisplay;
59dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller
604b09dd31fb1cefcaee87e7a206f22ba31527e250Jim Miller    private volatile boolean mSimCheckInProgress;
614b09dd31fb1cefcaee87e7a206f22ba31527e250Jim Miller
62dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller    public KeyguardSimPinView(Context context) {
63dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller        this(context, null);
64dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller    }
65dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller
66dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller    public KeyguardSimPinView(Context context, AttributeSet attrs) {
67dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller        super(context, attrs);
68dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller        mLockPatternUtils = new LockPatternUtils(getContext());
69dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller    }
70dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller
71dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller    public void setKeyguardCallback(KeyguardSecurityCallback callback) {
72dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller        mCallback = callback;
73dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller    }
74dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller
75dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller    @Override
76dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller    protected void onFinishInflate() {
77dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller        super.onFinishInflate();
78dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller
79dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller        mPinEntry = (EditText) findViewById(R.id.sim_pin_entry);
80dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller        mPinEntry.setOnEditorActionListener(this);
819cf2c523d82ec14632fd0db920dcc8909c0f44a5Jim Miller        mPinEntry.addTextChangedListener(this);
82dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller
83dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller        mKeyboardView = (PasswordEntryKeyboardView) findViewById(R.id.keyboard);
843af630c8d18bcf4b23a5a308917319dd04cc8ed2Jim Miller        mKeyboardHelper = new PasswordEntryKeyboardHelper(mContext, mKeyboardView, this, false,
853af630c8d18bcf4b23a5a308917319dd04cc8ed2Jim Miller                new int[] {
863af630c8d18bcf4b23a5a308917319dd04cc8ed2Jim Miller                R.xml.kg_password_kbd_numeric,
873af630c8d18bcf4b23a5a308917319dd04cc8ed2Jim Miller                com.android.internal.R.xml.password_kbd_qwerty,
883af630c8d18bcf4b23a5a308917319dd04cc8ed2Jim Miller                com.android.internal.R.xml.password_kbd_qwerty_shifted,
893af630c8d18bcf4b23a5a308917319dd04cc8ed2Jim Miller                com.android.internal.R.xml.password_kbd_symbols,
903af630c8d18bcf4b23a5a308917319dd04cc8ed2Jim Miller                com.android.internal.R.xml.password_kbd_symbols_shift
913af630c8d18bcf4b23a5a308917319dd04cc8ed2Jim Miller                });
92dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller        mKeyboardHelper.setKeyboardMode(PasswordEntryKeyboardHelper.KEYBOARD_MODE_NUMERIC);
93dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller        mKeyboardHelper.setEnableHaptics(mLockPatternUtils.isTactileFeedbackEnabled());
94dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller
95dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller        final View deleteButton = findViewById(R.id.delete_button);
96dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller        if (deleteButton != null) {
97dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller            deleteButton.setOnClickListener(new OnClickListener() {
98dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller                public void onClick(View v) {
99dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller                    mKeyboardHelper.handleBackspace();
100dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller                }
101dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller            });
102dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller        }
103dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller        reset();
104dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller    }
105dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller
106dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller    @Override
107dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller    protected boolean onRequestFocusInDescendants(int direction, Rect previouslyFocusedRect) {
108dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller        return mPinEntry.requestFocus(direction, previouslyFocusedRect);
109dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller    }
110dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller
111dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller    public void reset() {
112dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller        // start fresh
1130ff7f010f8bfd011f0915031b02739ae3bee401eJim Miller        if (mSecurityMessageDisplay != null) {
1140a4f900463024908220d0c9bf4b291a6e1284846Adam Cohen            mSecurityMessageDisplay.setMessage(R.string.kg_sim_pin_instructions, true);
1150ff7f010f8bfd011f0915031b02739ae3bee401eJim Miller        }
116dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller
117dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller        // make sure that the number of entered digits is consistent when we
118dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller        // erase the SIM unlock code, including orientation changes.
119dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller        mPinEntry.setText("");
120dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller        mPinEntry.requestFocus();
121dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller    }
122dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller
123dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller    /** {@inheritDoc} */
124dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller    public void cleanUp() {
125dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller        // dismiss the dialog.
126dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller        if (mSimUnlockProgressDialog != null) {
127dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller            mSimUnlockProgressDialog.dismiss();
128dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller            mSimUnlockProgressDialog = null;
129dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller        }
130dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller    }
131dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller
132dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller    /**
133dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller     * Since the IPC can block, we want to run the request in a separate thread
134dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller     * with a callback.
135dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller     */
136dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller    private abstract class CheckSimPin extends Thread {
137dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller        private final String mPin;
138dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller
139dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller        protected CheckSimPin(String pin) {
140dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller            mPin = pin;
141dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller        }
142dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller
1434b09dd31fb1cefcaee87e7a206f22ba31527e250Jim Miller        abstract void onSimCheckResponse(boolean success);
144dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller
145dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller        @Override
146dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller        public void run() {
147dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller            try {
148dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller                final boolean result = ITelephony.Stub.asInterface(ServiceManager
149dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller                        .checkService("phone")).supplyPin(mPin);
150dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller                post(new Runnable() {
151dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller                    public void run() {
1524b09dd31fb1cefcaee87e7a206f22ba31527e250Jim Miller                        onSimCheckResponse(result);
153dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller                    }
154dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller                });
155dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller            } catch (RemoteException e) {
156dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller                post(new Runnable() {
157dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller                    public void run() {
1584b09dd31fb1cefcaee87e7a206f22ba31527e250Jim Miller                        onSimCheckResponse(false);
159dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller                    }
160dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller                });
161dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller            }
162dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller        }
163dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller    }
164dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller
165dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller    public boolean onEditorAction(TextView v, int actionId, KeyEvent event) {
166dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller        // Check if this was the result of hitting the enter key
1679cf2c523d82ec14632fd0db920dcc8909c0f44a5Jim Miller        mCallback.userActivity(KeyguardViewManager.DIGIT_PRESS_WAKE_MILLIS);
1684b09dd31fb1cefcaee87e7a206f22ba31527e250Jim Miller        if (event.getAction() == MotionEvent.ACTION_DOWN && (
1694b09dd31fb1cefcaee87e7a206f22ba31527e250Jim Miller                actionId == EditorInfo.IME_NULL
1704b09dd31fb1cefcaee87e7a206f22ba31527e250Jim Miller                || actionId == EditorInfo.IME_ACTION_DONE
1714b09dd31fb1cefcaee87e7a206f22ba31527e250Jim Miller                || actionId == EditorInfo.IME_ACTION_NEXT)) {
172dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller            checkPin();
173dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller            return true;
174dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller        }
175dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller        return false;
176dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller    }
177dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller
178dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller    private Dialog getSimUnlockProgressDialog() {
179dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller        if (mSimUnlockProgressDialog == null) {
180dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller            mSimUnlockProgressDialog = new ProgressDialog(mContext);
181dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller            mSimUnlockProgressDialog.setMessage(
182dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller                    mContext.getString(R.string.kg_sim_unlock_progress_dialog_message));
183dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller            mSimUnlockProgressDialog.setIndeterminate(true);
184dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller            mSimUnlockProgressDialog.setCancelable(false);
185dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller            if (!(mContext instanceof Activity)) {
186dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller                mSimUnlockProgressDialog.getWindow().setType(
187dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller                        WindowManager.LayoutParams.TYPE_KEYGUARD_DIALOG);
188dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller            }
189dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller        }
190dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller        return mSimUnlockProgressDialog;
191dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller    }
192dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller
193dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller    private void checkPin() {
194dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller        if (mPinEntry.getText().length() < 4) {
195dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller            // otherwise, display a message to the user, and don't submit.
1960a4f900463024908220d0c9bf4b291a6e1284846Adam Cohen            mSecurityMessageDisplay.setMessage(R.string.kg_invalid_sim_pin_hint, true);
197dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller            mPinEntry.setText("");
198dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller            mCallback.userActivity(0);
199dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller            return;
200dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller        }
201dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller
202dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller        getSimUnlockProgressDialog().show();
203dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller
2044b09dd31fb1cefcaee87e7a206f22ba31527e250Jim Miller        if (!mSimCheckInProgress) {
2054b09dd31fb1cefcaee87e7a206f22ba31527e250Jim Miller            mSimCheckInProgress = true; // there should be only one
2064b09dd31fb1cefcaee87e7a206f22ba31527e250Jim Miller            new CheckSimPin(mPinEntry.getText().toString()) {
2074b09dd31fb1cefcaee87e7a206f22ba31527e250Jim Miller                void onSimCheckResponse(final boolean success) {
2084b09dd31fb1cefcaee87e7a206f22ba31527e250Jim Miller                    post(new Runnable() {
2094b09dd31fb1cefcaee87e7a206f22ba31527e250Jim Miller                        public void run() {
2104b09dd31fb1cefcaee87e7a206f22ba31527e250Jim Miller                            if (mSimUnlockProgressDialog != null) {
2114b09dd31fb1cefcaee87e7a206f22ba31527e250Jim Miller                                mSimUnlockProgressDialog.hide();
2124b09dd31fb1cefcaee87e7a206f22ba31527e250Jim Miller                            }
2134b09dd31fb1cefcaee87e7a206f22ba31527e250Jim Miller                            if (success) {
2144b09dd31fb1cefcaee87e7a206f22ba31527e250Jim Miller                                // before closing the keyguard, report back that the sim is unlocked
2154b09dd31fb1cefcaee87e7a206f22ba31527e250Jim Miller                                // so it knows right away.
2164b09dd31fb1cefcaee87e7a206f22ba31527e250Jim Miller                                KeyguardUpdateMonitor.getInstance(getContext()).reportSimUnlocked();
2174b09dd31fb1cefcaee87e7a206f22ba31527e250Jim Miller                                mCallback.dismiss(true);
2184b09dd31fb1cefcaee87e7a206f22ba31527e250Jim Miller                            } else {
2190a4f900463024908220d0c9bf4b291a6e1284846Adam Cohen                                mSecurityMessageDisplay.setMessage
2200a4f900463024908220d0c9bf4b291a6e1284846Adam Cohen                                    (R.string.kg_password_wrong_pin_code, true);
2214b09dd31fb1cefcaee87e7a206f22ba31527e250Jim Miller                                mPinEntry.setText("");
2224b09dd31fb1cefcaee87e7a206f22ba31527e250Jim Miller                            }
2234b09dd31fb1cefcaee87e7a206f22ba31527e250Jim Miller                            mCallback.userActivity(0);
2244b09dd31fb1cefcaee87e7a206f22ba31527e250Jim Miller                            mSimCheckInProgress = false;
225dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller                        }
2264b09dd31fb1cefcaee87e7a206f22ba31527e250Jim Miller                    });
2274b09dd31fb1cefcaee87e7a206f22ba31527e250Jim Miller                }
2284b09dd31fb1cefcaee87e7a206f22ba31527e250Jim Miller            }.start();
2294b09dd31fb1cefcaee87e7a206f22ba31527e250Jim Miller        }
230dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller    }
231dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller
232dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller    public void setLockPatternUtils(LockPatternUtils utils) {
233dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller        mLockPatternUtils = utils;
234dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller    }
235dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller
236dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller    public boolean needsInput() {
237dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller        return false; // This view provides its own keypad
238dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller    }
239dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller
240dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller    public void onPause() {
241dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller
242dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller    }
243dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller
244dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller    public void onResume() {
245dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller        reset();
246dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller    }
247dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller
248dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller    public KeyguardSecurityCallback getCallback() {
249dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller        return mCallback;
250dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller    }
251dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller
2529cf2c523d82ec14632fd0db920dcc8909c0f44a5Jim Miller    @Override
2539cf2c523d82ec14632fd0db920dcc8909c0f44a5Jim Miller    public void beforeTextChanged(CharSequence s, int start, int count, int after) {
2549cf2c523d82ec14632fd0db920dcc8909c0f44a5Jim Miller        if (mCallback != null) {
2559cf2c523d82ec14632fd0db920dcc8909c0f44a5Jim Miller            mCallback.userActivity(KeyguardViewManager.DIGIT_PRESS_WAKE_MILLIS);
2569cf2c523d82ec14632fd0db920dcc8909c0f44a5Jim Miller        }
2579cf2c523d82ec14632fd0db920dcc8909c0f44a5Jim Miller    }
2589cf2c523d82ec14632fd0db920dcc8909c0f44a5Jim Miller
2599cf2c523d82ec14632fd0db920dcc8909c0f44a5Jim Miller    @Override
2609cf2c523d82ec14632fd0db920dcc8909c0f44a5Jim Miller    public void onTextChanged(CharSequence s, int start, int before, int count) {
2619cf2c523d82ec14632fd0db920dcc8909c0f44a5Jim Miller    }
2629cf2c523d82ec14632fd0db920dcc8909c0f44a5Jim Miller
2639cf2c523d82ec14632fd0db920dcc8909c0f44a5Jim Miller    @Override
2649cf2c523d82ec14632fd0db920dcc8909c0f44a5Jim Miller    public void afterTextChanged(Editable s) {
2659cf2c523d82ec14632fd0db920dcc8909c0f44a5Jim Miller    }
2669cf2c523d82ec14632fd0db920dcc8909c0f44a5Jim Miller
2670ff7f010f8bfd011f0915031b02739ae3bee401eJim Miller    @Override
2680ff7f010f8bfd011f0915031b02739ae3bee401eJim Miller    public void setSecurityMessageDisplay(SecurityMessageDisplay display) {
2690ff7f010f8bfd011f0915031b02739ae3bee401eJim Miller        mSecurityMessageDisplay = display;
2700ff7f010f8bfd011f0915031b02739ae3bee401eJim Miller        reset();
2710ff7f010f8bfd011f0915031b02739ae3bee401eJim Miller    }
272dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller}
273