KeyguardSimPinView.java revision 76a1623afc170a13923b68f3256057d8adeb7937
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; 18dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller 1953149e69e9e70af0e2db4a6223bf4d6a7d01a1acDaniel Sandlerimport com.android.internal.telephony.ITelephony; 20b896b9f74225d61af67c2661f44eceadb9e22013Wink Savilleimport com.android.internal.telephony.PhoneConstants; 2153149e69e9e70af0e2db4a6223bf4d6a7d01a1acDaniel Sandler 2253149e69e9e70af0e2db4a6223bf4d6a7d01a1acDaniel Sandlerimport android.content.Context; 23b896b9f74225d61af67c2661f44eceadb9e22013Wink Savilleimport android.app.AlertDialog; 24b896b9f74225d61af67c2661f44eceadb9e22013Wink Savilleimport android.app.AlertDialog.Builder; 25dcb3d84b82cc2448d04e73359a716581bfb657dbJim Millerimport android.app.Dialog; 26dcb3d84b82cc2448d04e73359a716581bfb657dbJim Millerimport android.app.ProgressDialog; 27dcb3d84b82cc2448d04e73359a716581bfb657dbJim Millerimport android.os.RemoteException; 28dcb3d84b82cc2448d04e73359a716581bfb657dbJim Millerimport android.os.ServiceManager; 29dcb3d84b82cc2448d04e73359a716581bfb657dbJim Millerimport android.util.AttributeSet; 30b896b9f74225d61af67c2661f44eceadb9e22013Wink Savilleimport android.util.Log; 31dcb3d84b82cc2448d04e73359a716581bfb657dbJim Millerimport android.view.WindowManager; 32dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller 33dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller/** 3453149e69e9e70af0e2db4a6223bf4d6a7d01a1acDaniel Sandler * Displays a PIN pad for unlocking. 35dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller */ 364e8b9ed30b67e5449d987e674b2966dc7f3ac224Selim Cinekpublic class KeyguardSimPinView extends KeyguardPinBasedInputView { 37b896b9f74225d61af67c2661f44eceadb9e22013Wink Saville private static final String LOG_TAG = "KeyguardSimPinView"; 385cf17879a31b7b78c09ec50b727f921840dcf783Jorim Jaggi private static final boolean DEBUG = KeyguardConstants.DEBUG; 394fc2b01fd0c8b6e0d4f82657d1ab2ff642a32696Jim Miller public static final String TAG = "KeyguardSimPinView"; 404b09dd31fb1cefcaee87e7a206f22ba31527e250Jim Miller 41d6c48847ba6a68594ac602350a5994904b9a67baJim Miller private ProgressDialog mSimUnlockProgressDialog = null; 424fc2b01fd0c8b6e0d4f82657d1ab2ff642a32696Jim Miller private CheckSimPin mCheckSimPinThread; 43d6c48847ba6a68594ac602350a5994904b9a67baJim Miller 44b896b9f74225d61af67c2661f44eceadb9e22013Wink Saville private AlertDialog mRemainingAttemptsDialog; 45b896b9f74225d61af67c2661f44eceadb9e22013Wink Saville 46d6c48847ba6a68594ac602350a5994904b9a67baJim Miller public KeyguardSimPinView(Context context) { 47dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller this(context, null); 48dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller } 49dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller 50dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller public KeyguardSimPinView(Context context, AttributeSet attrs) { 51dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller super(context, attrs); 52dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller } 53dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller 5453149e69e9e70af0e2db4a6223bf4d6a7d01a1acDaniel Sandler public void resetState() { 554e8b9ed30b67e5449d987e674b2966dc7f3ac224Selim Cinek super.resetState(); 5653149e69e9e70af0e2db4a6223bf4d6a7d01a1acDaniel Sandler mSecurityMessageDisplay.setMessage(R.string.kg_sim_pin_instructions, true); 5753149e69e9e70af0e2db4a6223bf4d6a7d01a1acDaniel Sandler } 5853149e69e9e70af0e2db4a6223bf4d6a7d01a1acDaniel Sandler 59b896b9f74225d61af67c2661f44eceadb9e22013Wink Saville private String getPinPasswordErrorMessage(int attemptsRemaining) { 60b896b9f74225d61af67c2661f44eceadb9e22013Wink Saville String displayMessage; 61b896b9f74225d61af67c2661f44eceadb9e22013Wink Saville 62b896b9f74225d61af67c2661f44eceadb9e22013Wink Saville if (attemptsRemaining == 0) { 63b896b9f74225d61af67c2661f44eceadb9e22013Wink Saville displayMessage = getContext().getString(R.string.kg_password_wrong_pin_code_pukked); 64b896b9f74225d61af67c2661f44eceadb9e22013Wink Saville } else if (attemptsRemaining > 0) { 65b896b9f74225d61af67c2661f44eceadb9e22013Wink Saville displayMessage = getContext().getResources() 66b896b9f74225d61af67c2661f44eceadb9e22013Wink Saville .getQuantityString(R.plurals.kg_password_wrong_pin_code, attemptsRemaining, 67b896b9f74225d61af67c2661f44eceadb9e22013Wink Saville attemptsRemaining); 68b896b9f74225d61af67c2661f44eceadb9e22013Wink Saville } else { 69b896b9f74225d61af67c2661f44eceadb9e22013Wink Saville displayMessage = getContext().getString(R.string.kg_password_pin_failed); 70b896b9f74225d61af67c2661f44eceadb9e22013Wink Saville } 71b896b9f74225d61af67c2661f44eceadb9e22013Wink Saville if (DEBUG) Log.d(LOG_TAG, "getPinPasswordErrorMessage:" 72b896b9f74225d61af67c2661f44eceadb9e22013Wink Saville + " attemptsRemaining=" + attemptsRemaining + " displayMessage=" + displayMessage); 73b896b9f74225d61af67c2661f44eceadb9e22013Wink Saville return displayMessage; 74b896b9f74225d61af67c2661f44eceadb9e22013Wink Saville } 75b896b9f74225d61af67c2661f44eceadb9e22013Wink Saville 7653149e69e9e70af0e2db4a6223bf4d6a7d01a1acDaniel Sandler @Override 777d5e00ab2b5134d11e40b5a84fa363f8e8b24d68Jim Miller protected boolean shouldLockout(long deadline) { 787d5e00ab2b5134d11e40b5a84fa363f8e8b24d68Jim Miller // SIM PIN doesn't have a timed lockout 797d5e00ab2b5134d11e40b5a84fa363f8e8b24d68Jim Miller return false; 807d5e00ab2b5134d11e40b5a84fa363f8e8b24d68Jim Miller } 817d5e00ab2b5134d11e40b5a84fa363f8e8b24d68Jim Miller 827d5e00ab2b5134d11e40b5a84fa363f8e8b24d68Jim Miller @Override 8353149e69e9e70af0e2db4a6223bf4d6a7d01a1acDaniel Sandler protected int getPasswordTextViewId() { 84fa9189fd7425e7a097e46d54e545fbec631f9cacJorim Jaggi return R.id.simPinEntry; 85dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller } 86dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller 87dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller @Override 88dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller protected void onFinishInflate() { 89dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller super.onFinishInflate(); 90dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller 91b896b9f74225d61af67c2661f44eceadb9e22013Wink Saville mSecurityMessageDisplay.setTimeout(0); // don't show ownerinfo/charging status by default 9240a0b38160b1b80a48aa6a0d87b3fab888fd55f0Jorim Jaggi if (mEcaView instanceof EmergencyCarrierArea) { 9340a0b38160b1b80a48aa6a0d87b3fab888fd55f0Jorim Jaggi ((EmergencyCarrierArea) mEcaView).setCarrierTextVisible(true); 9440a0b38160b1b80a48aa6a0d87b3fab888fd55f0Jorim Jaggi } 95dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller } 96dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller 976fb841fa219eaae3e87f2fdc05e105d7a1813c42Adam Cohen @Override 986fb841fa219eaae3e87f2fdc05e105d7a1813c42Adam Cohen public void showUsabilityHint() { 996fb841fa219eaae3e87f2fdc05e105d7a1813c42Adam Cohen } 1006fb841fa219eaae3e87f2fdc05e105d7a1813c42Adam Cohen 10153149e69e9e70af0e2db4a6223bf4d6a7d01a1acDaniel Sandler @Override 10253149e69e9e70af0e2db4a6223bf4d6a7d01a1acDaniel Sandler public void onPause() { 103dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller // dismiss the dialog. 104dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller if (mSimUnlockProgressDialog != null) { 105dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller mSimUnlockProgressDialog.dismiss(); 106dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller mSimUnlockProgressDialog = null; 107dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller } 108dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller } 109dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller 110dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller /** 111dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller * Since the IPC can block, we want to run the request in a separate thread 112dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller * with a callback. 113dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller */ 114dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller private abstract class CheckSimPin extends Thread { 115dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller private final String mPin; 116dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller 117dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller protected CheckSimPin(String pin) { 118dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller mPin = pin; 119dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller } 120dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller 121b896b9f74225d61af67c2661f44eceadb9e22013Wink Saville abstract void onSimCheckResponse(final int result, final int attemptsRemaining); 122dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller 123dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller @Override 124dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller public void run() { 125dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller try { 1264fc2b01fd0c8b6e0d4f82657d1ab2ff642a32696Jim Miller Log.v(TAG, "call supplyPinReportResult()"); 127b896b9f74225d61af67c2661f44eceadb9e22013Wink Saville final int[] result = ITelephony.Stub.asInterface(ServiceManager 128b896b9f74225d61af67c2661f44eceadb9e22013Wink Saville .checkService("phone")).supplyPinReportResult(mPin); 1294fc2b01fd0c8b6e0d4f82657d1ab2ff642a32696Jim Miller Log.v(TAG, "supplyPinReportResult returned: " + result[0] + " " + result[1]); 130dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller post(new Runnable() { 131dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller public void run() { 132b896b9f74225d61af67c2661f44eceadb9e22013Wink Saville onSimCheckResponse(result[0], result[1]); 133dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller } 134dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller }); 135dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller } catch (RemoteException e) { 1364fc2b01fd0c8b6e0d4f82657d1ab2ff642a32696Jim Miller Log.e(TAG, "RemoteException for supplyPinReportResult:", e); 137dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller post(new Runnable() { 138dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller public void run() { 139b896b9f74225d61af67c2661f44eceadb9e22013Wink Saville onSimCheckResponse(PhoneConstants.PIN_GENERAL_FAILURE, -1); 140dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller } 141dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller }); 142dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller } 143dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller } 144dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller } 145dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller 146dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller private Dialog getSimUnlockProgressDialog() { 147dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller if (mSimUnlockProgressDialog == null) { 148dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller mSimUnlockProgressDialog = new ProgressDialog(mContext); 149dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller mSimUnlockProgressDialog.setMessage( 150dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller mContext.getString(R.string.kg_sim_unlock_progress_dialog_message)); 151dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller mSimUnlockProgressDialog.setIndeterminate(true); 152dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller mSimUnlockProgressDialog.setCancelable(false); 153b896b9f74225d61af67c2661f44eceadb9e22013Wink Saville mSimUnlockProgressDialog.getWindow().setType( 154b896b9f74225d61af67c2661f44eceadb9e22013Wink Saville WindowManager.LayoutParams.TYPE_KEYGUARD_DIALOG); 155dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller } 156dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller return mSimUnlockProgressDialog; 157dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller } 158dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller 159b896b9f74225d61af67c2661f44eceadb9e22013Wink Saville private Dialog getSimRemainingAttemptsDialog(int remaining) { 160b896b9f74225d61af67c2661f44eceadb9e22013Wink Saville String msg = getPinPasswordErrorMessage(remaining); 161b896b9f74225d61af67c2661f44eceadb9e22013Wink Saville if (mRemainingAttemptsDialog == null) { 162b896b9f74225d61af67c2661f44eceadb9e22013Wink Saville Builder builder = new AlertDialog.Builder(mContext); 163b896b9f74225d61af67c2661f44eceadb9e22013Wink Saville builder.setMessage(msg); 164b896b9f74225d61af67c2661f44eceadb9e22013Wink Saville builder.setCancelable(false); 165b896b9f74225d61af67c2661f44eceadb9e22013Wink Saville builder.setNeutralButton(R.string.ok, null); 166b896b9f74225d61af67c2661f44eceadb9e22013Wink Saville mRemainingAttemptsDialog = builder.create(); 167b896b9f74225d61af67c2661f44eceadb9e22013Wink Saville mRemainingAttemptsDialog.getWindow().setType( 168b896b9f74225d61af67c2661f44eceadb9e22013Wink Saville WindowManager.LayoutParams.TYPE_KEYGUARD_DIALOG); 169b896b9f74225d61af67c2661f44eceadb9e22013Wink Saville } else { 170b896b9f74225d61af67c2661f44eceadb9e22013Wink Saville mRemainingAttemptsDialog.setMessage(msg); 171b896b9f74225d61af67c2661f44eceadb9e22013Wink Saville } 172b896b9f74225d61af67c2661f44eceadb9e22013Wink Saville return mRemainingAttemptsDialog; 173b896b9f74225d61af67c2661f44eceadb9e22013Wink Saville } 174b896b9f74225d61af67c2661f44eceadb9e22013Wink Saville 17553149e69e9e70af0e2db4a6223bf4d6a7d01a1acDaniel Sandler @Override 17653149e69e9e70af0e2db4a6223bf4d6a7d01a1acDaniel Sandler protected void verifyPasswordAndUnlock() { 1774e8b9ed30b67e5449d987e674b2966dc7f3ac224Selim Cinek String entry = mPasswordEntry.getText(); 1787d5e00ab2b5134d11e40b5a84fa363f8e8b24d68Jim Miller 17953149e69e9e70af0e2db4a6223bf4d6a7d01a1acDaniel Sandler if (entry.length() < 4) { 180dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller // otherwise, display a message to the user, and don't submit. 1810a4f900463024908220d0c9bf4b291a6e1284846Adam Cohen mSecurityMessageDisplay.setMessage(R.string.kg_invalid_sim_pin_hint, true); 1824e8b9ed30b67e5449d987e674b2966dc7f3ac224Selim Cinek resetPasswordText(true); 183b690f0d5023fcf144f2701058d5a6f88d66cc97aJorim Jaggi mCallback.userActivity(); 184dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller return; 185dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller } 186dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller 187dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller getSimUnlockProgressDialog().show(); 188dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller 1894fc2b01fd0c8b6e0d4f82657d1ab2ff642a32696Jim Miller if (mCheckSimPinThread == null) { 1904e8b9ed30b67e5449d987e674b2966dc7f3ac224Selim Cinek mCheckSimPinThread = new CheckSimPin(mPasswordEntry.getText()) { 191b896b9f74225d61af67c2661f44eceadb9e22013Wink Saville void onSimCheckResponse(final int result, final int attemptsRemaining) { 1924b09dd31fb1cefcaee87e7a206f22ba31527e250Jim Miller post(new Runnable() { 1934b09dd31fb1cefcaee87e7a206f22ba31527e250Jim Miller public void run() { 1944b09dd31fb1cefcaee87e7a206f22ba31527e250Jim Miller if (mSimUnlockProgressDialog != null) { 1954b09dd31fb1cefcaee87e7a206f22ba31527e250Jim Miller mSimUnlockProgressDialog.hide(); 1964b09dd31fb1cefcaee87e7a206f22ba31527e250Jim Miller } 197b896b9f74225d61af67c2661f44eceadb9e22013Wink Saville if (result == PhoneConstants.PIN_RESULT_SUCCESS) { 1984b09dd31fb1cefcaee87e7a206f22ba31527e250Jim Miller KeyguardUpdateMonitor.getInstance(getContext()).reportSimUnlocked(); 1994b09dd31fb1cefcaee87e7a206f22ba31527e250Jim Miller mCallback.dismiss(true); 2004b09dd31fb1cefcaee87e7a206f22ba31527e250Jim Miller } else { 201b896b9f74225d61af67c2661f44eceadb9e22013Wink Saville if (result == PhoneConstants.PIN_PASSWORD_INCORRECT) { 202b896b9f74225d61af67c2661f44eceadb9e22013Wink Saville if (attemptsRemaining <= 2) { 203b896b9f74225d61af67c2661f44eceadb9e22013Wink Saville // this is getting critical - show dialog 204b896b9f74225d61af67c2661f44eceadb9e22013Wink Saville getSimRemainingAttemptsDialog(attemptsRemaining).show(); 205b896b9f74225d61af67c2661f44eceadb9e22013Wink Saville } else { 206b896b9f74225d61af67c2661f44eceadb9e22013Wink Saville // show message 207b896b9f74225d61af67c2661f44eceadb9e22013Wink Saville mSecurityMessageDisplay.setMessage( 208b896b9f74225d61af67c2661f44eceadb9e22013Wink Saville getPinPasswordErrorMessage(attemptsRemaining), true); 209b896b9f74225d61af67c2661f44eceadb9e22013Wink Saville } 210b896b9f74225d61af67c2661f44eceadb9e22013Wink Saville } else { 211b896b9f74225d61af67c2661f44eceadb9e22013Wink Saville // "PIN operation failed!" - no idea what this was and no way to 212b896b9f74225d61af67c2661f44eceadb9e22013Wink Saville // find out. :/ 213b896b9f74225d61af67c2661f44eceadb9e22013Wink Saville mSecurityMessageDisplay.setMessage(getContext().getString( 214b896b9f74225d61af67c2661f44eceadb9e22013Wink Saville R.string.kg_password_pin_failed), true); 215b896b9f74225d61af67c2661f44eceadb9e22013Wink Saville } 216b896b9f74225d61af67c2661f44eceadb9e22013Wink Saville if (DEBUG) Log.d(LOG_TAG, "verifyPasswordAndUnlock " 217b896b9f74225d61af67c2661f44eceadb9e22013Wink Saville + " CheckSimPin.onSimCheckResponse: " + result 218b896b9f74225d61af67c2661f44eceadb9e22013Wink Saville + " attemptsRemaining=" + attemptsRemaining); 2194e8b9ed30b67e5449d987e674b2966dc7f3ac224Selim Cinek resetPasswordText(true /* animate */); 2204b09dd31fb1cefcaee87e7a206f22ba31527e250Jim Miller } 221b690f0d5023fcf144f2701058d5a6f88d66cc97aJorim Jaggi mCallback.userActivity(); 2224fc2b01fd0c8b6e0d4f82657d1ab2ff642a32696Jim Miller mCheckSimPinThread = null; 223dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller } 2244b09dd31fb1cefcaee87e7a206f22ba31527e250Jim Miller }); 2254b09dd31fb1cefcaee87e7a206f22ba31527e250Jim Miller } 2264fc2b01fd0c8b6e0d4f82657d1ab2ff642a32696Jim Miller }; 2274fc2b01fd0c8b6e0d4f82657d1ab2ff642a32696Jim Miller mCheckSimPinThread.start(); 2284b09dd31fb1cefcaee87e7a206f22ba31527e250Jim Miller } 229dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller } 230c14f829506a5273e8022b461db2d61038b18ac4bJorim Jaggi 231c14f829506a5273e8022b461db2d61038b18ac4bJorim Jaggi @Override 232c14f829506a5273e8022b461db2d61038b18ac4bJorim Jaggi public void startAppearAnimation() { 233c14f829506a5273e8022b461db2d61038b18ac4bJorim Jaggi // noop. 234c14f829506a5273e8022b461db2d61038b18ac4bJorim Jaggi } 23576a1623afc170a13923b68f3256057d8adeb7937Jorim Jaggi 23676a1623afc170a13923b68f3256057d8adeb7937Jorim Jaggi @Override 23776a1623afc170a13923b68f3256057d8adeb7937Jorim Jaggi public boolean startDisappearAnimation(Runnable finishRunnable) { 23876a1623afc170a13923b68f3256057d8adeb7937Jorim Jaggi return false; 23976a1623afc170a13923b68f3256057d8adeb7937Jorim Jaggi } 240dcb3d84b82cc2448d04e73359a716581bfb657dbJim Miller} 24153149e69e9e70af0e2db4a6223bf4d6a7d01a1acDaniel Sandler 242