1afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project/*
2afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project * Copyright (C) 2008 The Android Open Source Project
3afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project *
4afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project * Licensed under the Apache License, Version 2.0 (the "License");
5afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project * you may not use this file except in compliance with the License.
6afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project * You may obtain a copy of the License at
7afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project *
8afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project *      http://www.apache.org/licenses/LICENSE-2.0
9afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project *
10afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project * Unless required by applicable law or agreed to in writing, software
11afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project * distributed under the License is distributed on an "AS IS" BASIS,
12afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project * See the License for the specific language governing permissions and
14afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project * limitations under the License.
15afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project */
16afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project
17afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Projectpackage com.android.settings;
18afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project
19113ae0258d8a0aac363e397ad025cb65df237328Jim Millerimport android.content.BroadcastReceiver;
20afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Projectimport android.content.Context;
21113ae0258d8a0aac363e397ad025cb65df237328Jim Millerimport android.content.Intent;
22113ae0258d8a0aac363e397ad025cb65df237328Jim Millerimport android.content.IntentFilter;
23afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Projectimport android.content.res.Resources;
24afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Projectimport android.os.AsyncResult;
25afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Projectimport android.os.Bundle;
26afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Projectimport android.os.Handler;
27afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Projectimport android.os.Message;
28c38866843e966622346dc8f7b028749cac9c2198Wink Savilleimport android.preference.CheckBoxPreference;
29afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Projectimport android.preference.Preference;
303065f75e164d71c9c45b26666e37f5acb68ab3f1Fabrice Di Meglioimport android.preference.PreferenceActivity;
31afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Projectimport android.preference.PreferenceScreen;
328246579fa14a1021fb02b2762f7d79390ff7c4e0Wink Savilleimport android.util.Log;
33c38866843e966622346dc8f7b028749cac9c2198Wink Savilleimport android.widget.Toast;
34c38866843e966622346dc8f7b028749cac9c2198Wink Saville
35afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Projectimport com.android.internal.telephony.Phone;
36afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Projectimport com.android.internal.telephony.PhoneFactory;
37113ae0258d8a0aac363e397ad025cb65df237328Jim Millerimport com.android.internal.telephony.TelephonyIntents;
38afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project
39afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project/**
40c38866843e966622346dc8f7b028749cac9c2198Wink Saville * Implements the preference screen to enable/disable ICC lock and
41c38866843e966622346dc8f7b028749cac9c2198Wink Saville * also the dialogs to change the ICC PIN. In the former case, enabling/disabling
42c38866843e966622346dc8f7b028749cac9c2198Wink Saville * the ICC lock will prompt the user for the current PIN.
43afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project * In the Change PIN case, it prompts the user for old pin, new pin and new pin
44afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project * again before attempting to change it. Calls the SimCard interface to execute
45afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project * these operations.
46afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project *
47afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project */
483065f75e164d71c9c45b26666e37f5acb68ab3f1Fabrice Di Megliopublic class IccLockSettings extends PreferenceActivity
49afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        implements EditPinPreference.OnPinEnteredListener {
508246579fa14a1021fb02b2762f7d79390ff7c4e0Wink Saville    private static final String TAG = "IccLockSettings";
518246579fa14a1021fb02b2762f7d79390ff7c4e0Wink Saville    private static final boolean DBG = true;
52afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project
53afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project    private static final int OFF_MODE = 0;
54c38866843e966622346dc8f7b028749cac9c2198Wink Saville    // State when enabling/disabling ICC lock
55c38866843e966622346dc8f7b028749cac9c2198Wink Saville    private static final int ICC_LOCK_MODE = 1;
56afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project    // State when entering the old pin
57c38866843e966622346dc8f7b028749cac9c2198Wink Saville    private static final int ICC_OLD_MODE = 2;
58afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project    // State when entering the new pin - first time
59c38866843e966622346dc8f7b028749cac9c2198Wink Saville    private static final int ICC_NEW_MODE = 3;
60afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project    // State when entering the new pin - second time
61c38866843e966622346dc8f7b028749cac9c2198Wink Saville    private static final int ICC_REENTER_MODE = 4;
62113ae0258d8a0aac363e397ad025cb65df237328Jim Miller
63afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project    // Keys in xml file
64afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project    private static final String PIN_DIALOG = "sim_pin";
65afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project    private static final String PIN_TOGGLE = "sim_toggle";
66afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project    // Keys in icicle
67afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project    private static final String DIALOG_STATE = "dialogState";
68afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project    private static final String DIALOG_PIN = "dialogPin";
69afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project    private static final String DIALOG_ERROR = "dialogError";
70afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project    private static final String ENABLE_TO_STATE = "enableState";
7122135ea7739433802fa55a37790c2a931b698f30Yongwei Cai
7222135ea7739433802fa55a37790c2a931b698f30Yongwei Cai    // Save and restore inputted PIN code when configuration changed
7322135ea7739433802fa55a37790c2a931b698f30Yongwei Cai    // (ex. portrait<-->landscape) during change PIN code
7422135ea7739433802fa55a37790c2a931b698f30Yongwei Cai    private static final String OLD_PINCODE = "oldPinCode";
7522135ea7739433802fa55a37790c2a931b698f30Yongwei Cai    private static final String NEW_PINCODE = "newPinCode";
76113ae0258d8a0aac363e397ad025cb65df237328Jim Miller
77afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project    private static final int MIN_PIN_LENGTH = 4;
78afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project    private static final int MAX_PIN_LENGTH = 8;
79afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project    // Which dialog to show next when popped up
80afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project    private int mDialogState = OFF_MODE;
81113ae0258d8a0aac363e397ad025cb65df237328Jim Miller
82afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project    private String mPin;
83afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project    private String mOldPin;
84afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project    private String mNewPin;
85afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project    private String mError;
86c38866843e966622346dc8f7b028749cac9c2198Wink Saville    // Are we trying to enable or disable ICC lock?
87afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project    private boolean mToState;
88113ae0258d8a0aac363e397ad025cb65df237328Jim Miller
89afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project    private Phone mPhone;
90113ae0258d8a0aac363e397ad025cb65df237328Jim Miller
91afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project    private EditPinPreference mPinDialog;
92afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project    private CheckBoxPreference mPinToggle;
93113ae0258d8a0aac363e397ad025cb65df237328Jim Miller
94afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project    private Resources mRes;
95afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project
96afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project    // For async handler to identify request type
97113ae0258d8a0aac363e397ad025cb65df237328Jim Miller    private static final int MSG_ENABLE_ICC_PIN_COMPLETE = 100;
98113ae0258d8a0aac363e397ad025cb65df237328Jim Miller    private static final int MSG_CHANGE_ICC_PIN_COMPLETE = 101;
99113ae0258d8a0aac363e397ad025cb65df237328Jim Miller    private static final int MSG_SIM_STATE_CHANGED = 102;
100afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project
101c38866843e966622346dc8f7b028749cac9c2198Wink Saville    // For replies from IccCard interface
102afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project    private Handler mHandler = new Handler() {
103afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        public void handleMessage(Message msg) {
104afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project            AsyncResult ar = (AsyncResult) msg.obj;
105afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project            switch (msg.what) {
106113ae0258d8a0aac363e397ad025cb65df237328Jim Miller                case MSG_ENABLE_ICC_PIN_COMPLETE:
1078246579fa14a1021fb02b2762f7d79390ff7c4e0Wink Saville                    iccLockChanged(ar.exception == null, msg.arg1);
108afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project                    break;
109113ae0258d8a0aac363e397ad025cb65df237328Jim Miller                case MSG_CHANGE_ICC_PIN_COMPLETE:
1108246579fa14a1021fb02b2762f7d79390ff7c4e0Wink Saville                    iccPinChanged(ar.exception == null, msg.arg1);
111afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project                    break;
112113ae0258d8a0aac363e397ad025cb65df237328Jim Miller                case MSG_SIM_STATE_CHANGED:
113113ae0258d8a0aac363e397ad025cb65df237328Jim Miller                    updatePreferences();
114113ae0258d8a0aac363e397ad025cb65df237328Jim Miller                    break;
115afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project            }
116afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project
117afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project            return;
118afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        }
119afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project    };
120113ae0258d8a0aac363e397ad025cb65df237328Jim Miller
121113ae0258d8a0aac363e397ad025cb65df237328Jim Miller    private final BroadcastReceiver mSimStateReceiver = new BroadcastReceiver() {
122113ae0258d8a0aac363e397ad025cb65df237328Jim Miller        public void onReceive(Context context, Intent intent) {
123113ae0258d8a0aac363e397ad025cb65df237328Jim Miller            final String action = intent.getAction();
124113ae0258d8a0aac363e397ad025cb65df237328Jim Miller            if (TelephonyIntents.ACTION_SIM_STATE_CHANGED.equals(action)) {
125113ae0258d8a0aac363e397ad025cb65df237328Jim Miller                mHandler.sendMessage(mHandler.obtainMessage(MSG_SIM_STATE_CHANGED));
126113ae0258d8a0aac363e397ad025cb65df237328Jim Miller            }
127113ae0258d8a0aac363e397ad025cb65df237328Jim Miller        }
128113ae0258d8a0aac363e397ad025cb65df237328Jim Miller    };
129113ae0258d8a0aac363e397ad025cb65df237328Jim Miller
130afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project    // For top-level settings screen to query
1313065f75e164d71c9c45b26666e37f5acb68ab3f1Fabrice Di Meglio    static boolean isIccLockEnabled() {
1323065f75e164d71c9c45b26666e37f5acb68ab3f1Fabrice Di Meglio        return PhoneFactory.getDefaultPhone().getIccCard().getIccLockEnabled();
133afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project    }
134113ae0258d8a0aac363e397ad025cb65df237328Jim Miller
1353065f75e164d71c9c45b26666e37f5acb68ab3f1Fabrice Di Meglio    static String getSummary(Context context) {
136afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        Resources res = context.getResources();
137113ae0258d8a0aac363e397ad025cb65df237328Jim Miller        String summary = isIccLockEnabled()
138c38866843e966622346dc8f7b028749cac9c2198Wink Saville                ? res.getString(R.string.sim_lock_on)
139afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project                : res.getString(R.string.sim_lock_off);
140afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        return summary;
141afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project    }
142c38866843e966622346dc8f7b028749cac9c2198Wink Saville
143afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project    @Override
1443065f75e164d71c9c45b26666e37f5acb68ab3f1Fabrice Di Meglio    protected void onCreate(Bundle savedInstanceState) {
145afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        super.onCreate(savedInstanceState);
146c38866843e966622346dc8f7b028749cac9c2198Wink Saville
1472e180ef88050bfa243dfccaab72fb6ab235e21afAmith Yamasani        if (Utils.isMonkeyRunning()) {
1482e180ef88050bfa243dfccaab72fb6ab235e21afAmith Yamasani            finish();
1492e180ef88050bfa243dfccaab72fb6ab235e21afAmith Yamasani            return;
1502e180ef88050bfa243dfccaab72fb6ab235e21afAmith Yamasani        }
1512e180ef88050bfa243dfccaab72fb6ab235e21afAmith Yamasani
152afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        addPreferencesFromResource(R.xml.sim_lock_settings);
153c38866843e966622346dc8f7b028749cac9c2198Wink Saville
154afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        mPinDialog = (EditPinPreference) findPreference(PIN_DIALOG);
155afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        mPinToggle = (CheckBoxPreference) findPreference(PIN_TOGGLE);
156afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        if (savedInstanceState != null && savedInstanceState.containsKey(DIALOG_STATE)) {
157afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project            mDialogState = savedInstanceState.getInt(DIALOG_STATE);
158afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project            mPin = savedInstanceState.getString(DIALOG_PIN);
159afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project            mError = savedInstanceState.getString(DIALOG_ERROR);
160afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project            mToState = savedInstanceState.getBoolean(ENABLE_TO_STATE);
16122135ea7739433802fa55a37790c2a931b698f30Yongwei Cai
16222135ea7739433802fa55a37790c2a931b698f30Yongwei Cai            // Restore inputted PIN code
16322135ea7739433802fa55a37790c2a931b698f30Yongwei Cai            switch (mDialogState) {
16422135ea7739433802fa55a37790c2a931b698f30Yongwei Cai                case ICC_NEW_MODE:
16522135ea7739433802fa55a37790c2a931b698f30Yongwei Cai                    mOldPin = savedInstanceState.getString(OLD_PINCODE);
16622135ea7739433802fa55a37790c2a931b698f30Yongwei Cai                    break;
16722135ea7739433802fa55a37790c2a931b698f30Yongwei Cai
16822135ea7739433802fa55a37790c2a931b698f30Yongwei Cai                case ICC_REENTER_MODE:
16922135ea7739433802fa55a37790c2a931b698f30Yongwei Cai                    mOldPin = savedInstanceState.getString(OLD_PINCODE);
17022135ea7739433802fa55a37790c2a931b698f30Yongwei Cai                    mNewPin = savedInstanceState.getString(NEW_PINCODE);
17122135ea7739433802fa55a37790c2a931b698f30Yongwei Cai                    break;
17222135ea7739433802fa55a37790c2a931b698f30Yongwei Cai
17322135ea7739433802fa55a37790c2a931b698f30Yongwei Cai                case ICC_LOCK_MODE:
17422135ea7739433802fa55a37790c2a931b698f30Yongwei Cai                case ICC_OLD_MODE:
17522135ea7739433802fa55a37790c2a931b698f30Yongwei Cai                default:
17622135ea7739433802fa55a37790c2a931b698f30Yongwei Cai                    break;
17722135ea7739433802fa55a37790c2a931b698f30Yongwei Cai            }
178afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        }
179afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project
180afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        mPinDialog.setOnPinEnteredListener(this);
181113ae0258d8a0aac363e397ad025cb65df237328Jim Miller
182afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        // Don't need any changes to be remembered
183afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        getPreferenceScreen().setPersistent(false);
184113ae0258d8a0aac363e397ad025cb65df237328Jim Miller
185afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        mPhone = PhoneFactory.getDefaultPhone();
186afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        mRes = getResources();
187113ae0258d8a0aac363e397ad025cb65df237328Jim Miller        updatePreferences();
188afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project    }
189113ae0258d8a0aac363e397ad025cb65df237328Jim Miller
190113ae0258d8a0aac363e397ad025cb65df237328Jim Miller    private void updatePreferences() {
191113ae0258d8a0aac363e397ad025cb65df237328Jim Miller        mPinToggle.setChecked(mPhone.getIccCard().getIccLockEnabled());
192113ae0258d8a0aac363e397ad025cb65df237328Jim Miller    }
193113ae0258d8a0aac363e397ad025cb65df237328Jim Miller
194afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project    @Override
1953065f75e164d71c9c45b26666e37f5acb68ab3f1Fabrice Di Meglio    protected void onResume() {
196afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        super.onResume();
197113ae0258d8a0aac363e397ad025cb65df237328Jim Miller
198113ae0258d8a0aac363e397ad025cb65df237328Jim Miller        // ACTION_SIM_STATE_CHANGED is sticky, so we'll receive current state after this call,
199113ae0258d8a0aac363e397ad025cb65df237328Jim Miller        // which will call updatePreferences().
200113ae0258d8a0aac363e397ad025cb65df237328Jim Miller        final IntentFilter filter = new IntentFilter(TelephonyIntents.ACTION_SIM_STATE_CHANGED);
2013065f75e164d71c9c45b26666e37f5acb68ab3f1Fabrice Di Meglio        registerReceiver(mSimStateReceiver, filter);
202113ae0258d8a0aac363e397ad025cb65df237328Jim Miller
203afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        if (mDialogState != OFF_MODE) {
204afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project            showPinDialog();
205afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        } else {
206afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project            // Prep for standard click on "Change PIN"
207afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project            resetDialogState();
208afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        }
209afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project    }
210113ae0258d8a0aac363e397ad025cb65df237328Jim Miller
211113ae0258d8a0aac363e397ad025cb65df237328Jim Miller    @Override
2123065f75e164d71c9c45b26666e37f5acb68ab3f1Fabrice Di Meglio    protected void onPause() {
213113ae0258d8a0aac363e397ad025cb65df237328Jim Miller        super.onPause();
2143065f75e164d71c9c45b26666e37f5acb68ab3f1Fabrice Di Meglio        unregisterReceiver(mSimStateReceiver);
215113ae0258d8a0aac363e397ad025cb65df237328Jim Miller    }
216113ae0258d8a0aac363e397ad025cb65df237328Jim Miller
217afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project    @Override
2183065f75e164d71c9c45b26666e37f5acb68ab3f1Fabrice Di Meglio    protected void onSaveInstanceState(Bundle out) {
219afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        // Need to store this state for slider open/close
220afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        // There is one case where the dialog is popped up by the preference
221afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        // framework. In that case, let the preference framework store the
222afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        // dialog state. In other cases, where this activity manually launches
223afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        // the dialog, store the state of the dialog.
224afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        if (mPinDialog.isDialogOpen()) {
225afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project            out.putInt(DIALOG_STATE, mDialogState);
226afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project            out.putString(DIALOG_PIN, mPinDialog.getEditText().getText().toString());
227afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project            out.putString(DIALOG_ERROR, mError);
228afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project            out.putBoolean(ENABLE_TO_STATE, mToState);
22922135ea7739433802fa55a37790c2a931b698f30Yongwei Cai
23022135ea7739433802fa55a37790c2a931b698f30Yongwei Cai            // Save inputted PIN code
23122135ea7739433802fa55a37790c2a931b698f30Yongwei Cai            switch (mDialogState) {
23222135ea7739433802fa55a37790c2a931b698f30Yongwei Cai                case ICC_NEW_MODE:
23322135ea7739433802fa55a37790c2a931b698f30Yongwei Cai                    out.putString(OLD_PINCODE, mOldPin);
23422135ea7739433802fa55a37790c2a931b698f30Yongwei Cai                    break;
23522135ea7739433802fa55a37790c2a931b698f30Yongwei Cai
23622135ea7739433802fa55a37790c2a931b698f30Yongwei Cai                case ICC_REENTER_MODE:
23722135ea7739433802fa55a37790c2a931b698f30Yongwei Cai                    out.putString(OLD_PINCODE, mOldPin);
23822135ea7739433802fa55a37790c2a931b698f30Yongwei Cai                    out.putString(NEW_PINCODE, mNewPin);
23922135ea7739433802fa55a37790c2a931b698f30Yongwei Cai                    break;
24022135ea7739433802fa55a37790c2a931b698f30Yongwei Cai
24122135ea7739433802fa55a37790c2a931b698f30Yongwei Cai                case ICC_LOCK_MODE:
24222135ea7739433802fa55a37790c2a931b698f30Yongwei Cai                case ICC_OLD_MODE:
24322135ea7739433802fa55a37790c2a931b698f30Yongwei Cai                default:
24422135ea7739433802fa55a37790c2a931b698f30Yongwei Cai                    break;
24522135ea7739433802fa55a37790c2a931b698f30Yongwei Cai            }
246afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        } else {
247afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project            super.onSaveInstanceState(out);
248afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        }
249afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project    }
250afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project
251afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project    private void showPinDialog() {
252afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        if (mDialogState == OFF_MODE) {
253afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project            return;
254afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        }
255afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        setDialogValues();
256113ae0258d8a0aac363e397ad025cb65df237328Jim Miller
257afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        mPinDialog.showPinDialog();
258afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project    }
259113ae0258d8a0aac363e397ad025cb65df237328Jim Miller
260afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project    private void setDialogValues() {
261afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        mPinDialog.setText(mPin);
262afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        String message = "";
263afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        switch (mDialogState) {
264c38866843e966622346dc8f7b028749cac9c2198Wink Saville            case ICC_LOCK_MODE:
265afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project                message = mRes.getString(R.string.sim_enter_pin);
266113ae0258d8a0aac363e397ad025cb65df237328Jim Miller                mPinDialog.setDialogTitle(mToState
267afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project                        ? mRes.getString(R.string.sim_enable_sim_lock)
268afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project                        : mRes.getString(R.string.sim_disable_sim_lock));
269afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project                break;
270c38866843e966622346dc8f7b028749cac9c2198Wink Saville            case ICC_OLD_MODE:
271afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project                message = mRes.getString(R.string.sim_enter_old);
272afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project                mPinDialog.setDialogTitle(mRes.getString(R.string.sim_change_pin));
273afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project                break;
274c38866843e966622346dc8f7b028749cac9c2198Wink Saville            case ICC_NEW_MODE:
275afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project                message = mRes.getString(R.string.sim_enter_new);
276afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project                mPinDialog.setDialogTitle(mRes.getString(R.string.sim_change_pin));
277afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project                break;
278c38866843e966622346dc8f7b028749cac9c2198Wink Saville            case ICC_REENTER_MODE:
279afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project                message = mRes.getString(R.string.sim_reenter_new);
280afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project                mPinDialog.setDialogTitle(mRes.getString(R.string.sim_change_pin));
281afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project                break;
282afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        }
283afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        if (mError != null) {
284afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project            message = mError + "\n" + message;
285afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project            mError = null;
286afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        }
287afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        mPinDialog.setDialogMessage(message);
288afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project    }
289afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project
290afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project    public void onPinEntered(EditPinPreference preference, boolean positiveResult) {
291afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        if (!positiveResult) {
292afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project            resetDialogState();
293afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project            return;
294afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        }
295113ae0258d8a0aac363e397ad025cb65df237328Jim Miller
296afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        mPin = preference.getText();
297afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        if (!reasonablePin(mPin)) {
298afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project            // inject error message and display dialog again
299afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project            mError = mRes.getString(R.string.sim_bad_pin);
300afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project            showPinDialog();
301afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project            return;
302afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        }
303afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        switch (mDialogState) {
304c38866843e966622346dc8f7b028749cac9c2198Wink Saville            case ICC_LOCK_MODE:
305c38866843e966622346dc8f7b028749cac9c2198Wink Saville                tryChangeIccLockState();
306afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project                break;
307c38866843e966622346dc8f7b028749cac9c2198Wink Saville            case ICC_OLD_MODE:
308afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project                mOldPin = mPin;
309c38866843e966622346dc8f7b028749cac9c2198Wink Saville                mDialogState = ICC_NEW_MODE;
310afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project                mError = null;
311afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project                mPin = null;
312afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project                showPinDialog();
313afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project                break;
314c38866843e966622346dc8f7b028749cac9c2198Wink Saville            case ICC_NEW_MODE:
315afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project                mNewPin = mPin;
316c38866843e966622346dc8f7b028749cac9c2198Wink Saville                mDialogState = ICC_REENTER_MODE;
317afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project                mPin = null;
318afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project                showPinDialog();
319afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project                break;
320c38866843e966622346dc8f7b028749cac9c2198Wink Saville            case ICC_REENTER_MODE:
321afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project                if (!mPin.equals(mNewPin)) {
322afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project                    mError = mRes.getString(R.string.sim_pins_dont_match);
323c38866843e966622346dc8f7b028749cac9c2198Wink Saville                    mDialogState = ICC_NEW_MODE;
324afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project                    mPin = null;
325afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project                    showPinDialog();
326afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project                } else {
327afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project                    mError = null;
328afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project                    tryChangePin();
329afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project                }
330afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project                break;
331afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        }
332afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project    }
333113ae0258d8a0aac363e397ad025cb65df237328Jim Miller
334afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project    public boolean onPreferenceTreeClick(PreferenceScreen preferenceScreen, Preference preference) {
335afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        if (preference == mPinToggle) {
336afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project            // Get the new, preferred state
337afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project            mToState = mPinToggle.isChecked();
338113ae0258d8a0aac363e397ad025cb65df237328Jim Miller            // Flip it back and pop up pin dialog
339113ae0258d8a0aac363e397ad025cb65df237328Jim Miller            mPinToggle.setChecked(!mToState);
340c38866843e966622346dc8f7b028749cac9c2198Wink Saville            mDialogState = ICC_LOCK_MODE;
341afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project            showPinDialog();
34211cd8c5ac95334c9363a82fd81d05d85623f9d17Amith Yamasani        } else if (preference == mPinDialog) {
34311cd8c5ac95334c9363a82fd81d05d85623f9d17Amith Yamasani            mDialogState = ICC_OLD_MODE;
34411cd8c5ac95334c9363a82fd81d05d85623f9d17Amith Yamasani            return false;
345afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        }
346afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        return true;
347afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project    }
34811cd8c5ac95334c9363a82fd81d05d85623f9d17Amith Yamasani
349c38866843e966622346dc8f7b028749cac9c2198Wink Saville    private void tryChangeIccLockState() {
350113ae0258d8a0aac363e397ad025cb65df237328Jim Miller        // Try to change icc lock. If it succeeds, toggle the lock state and
351afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        // reset dialog state. Else inject error message and show dialog again.
352113ae0258d8a0aac363e397ad025cb65df237328Jim Miller        Message callback = Message.obtain(mHandler, MSG_ENABLE_ICC_PIN_COMPLETE);
353c38866843e966622346dc8f7b028749cac9c2198Wink Saville        mPhone.getIccCard().setIccLockEnabled(mToState, mPin, callback);
35448c03831253d2749cb6842b4e2fc9fb5255dab44Jeevaka Badrappan        // Disable the setting till the response is received.
35548c03831253d2749cb6842b4e2fc9fb5255dab44Jeevaka Badrappan        mPinToggle.setEnabled(false);
356afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project    }
357113ae0258d8a0aac363e397ad025cb65df237328Jim Miller
3588246579fa14a1021fb02b2762f7d79390ff7c4e0Wink Saville    private void iccLockChanged(boolean success, int attemptsRemaining) {
359afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        if (success) {
360afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project            mPinToggle.setChecked(mToState);
361afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        } else {
3623065f75e164d71c9c45b26666e37f5acb68ab3f1Fabrice Di Meglio            Toast.makeText(this, getPinPasswordErrorMessage(attemptsRemaining), Toast.LENGTH_LONG)
3633065f75e164d71c9c45b26666e37f5acb68ab3f1Fabrice Di Meglio                    .show();
364afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        }
36548c03831253d2749cb6842b4e2fc9fb5255dab44Jeevaka Badrappan        mPinToggle.setEnabled(true);
366afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        resetDialogState();
367afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project    }
368afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project
3698246579fa14a1021fb02b2762f7d79390ff7c4e0Wink Saville    private void iccPinChanged(boolean success, int attemptsRemaining) {
370afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        if (!success) {
3713065f75e164d71c9c45b26666e37f5acb68ab3f1Fabrice Di Meglio            Toast.makeText(this, getPinPasswordErrorMessage(attemptsRemaining),
3728246579fa14a1021fb02b2762f7d79390ff7c4e0Wink Saville                    Toast.LENGTH_LONG)
373afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project                    .show();
374afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        } else {
3753065f75e164d71c9c45b26666e37f5acb68ab3f1Fabrice Di Meglio            Toast.makeText(this, mRes.getString(R.string.sim_change_succeeded),
376afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project                    Toast.LENGTH_SHORT)
377afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project                    .show();
378afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project
379afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        }
380afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        resetDialogState();
381afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project    }
382afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project
383afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project    private void tryChangePin() {
384113ae0258d8a0aac363e397ad025cb65df237328Jim Miller        Message callback = Message.obtain(mHandler, MSG_CHANGE_ICC_PIN_COMPLETE);
385c38866843e966622346dc8f7b028749cac9c2198Wink Saville        mPhone.getIccCard().changeIccLockPassword(mOldPin,
386afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project                mNewPin, callback);
387afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project    }
38811cd8c5ac95334c9363a82fd81d05d85623f9d17Amith Yamasani
3898246579fa14a1021fb02b2762f7d79390ff7c4e0Wink Saville    private String getPinPasswordErrorMessage(int attemptsRemaining) {
3908246579fa14a1021fb02b2762f7d79390ff7c4e0Wink Saville        String displayMessage;
3918246579fa14a1021fb02b2762f7d79390ff7c4e0Wink Saville
3928246579fa14a1021fb02b2762f7d79390ff7c4e0Wink Saville        if (attemptsRemaining == 0) {
3938246579fa14a1021fb02b2762f7d79390ff7c4e0Wink Saville            displayMessage = mRes.getString(R.string.wrong_pin_code_pukked);
3948246579fa14a1021fb02b2762f7d79390ff7c4e0Wink Saville        } else if (attemptsRemaining > 0) {
3958246579fa14a1021fb02b2762f7d79390ff7c4e0Wink Saville            displayMessage = mRes
3968246579fa14a1021fb02b2762f7d79390ff7c4e0Wink Saville                    .getQuantityString(R.plurals.wrong_pin_code, attemptsRemaining,
3978246579fa14a1021fb02b2762f7d79390ff7c4e0Wink Saville                            attemptsRemaining);
3988246579fa14a1021fb02b2762f7d79390ff7c4e0Wink Saville        } else {
3998246579fa14a1021fb02b2762f7d79390ff7c4e0Wink Saville            displayMessage = mRes.getString(R.string.pin_failed);
4008246579fa14a1021fb02b2762f7d79390ff7c4e0Wink Saville        }
4018246579fa14a1021fb02b2762f7d79390ff7c4e0Wink Saville        if (DBG) Log.d(TAG, "getPinPasswordErrorMessage:"
4028246579fa14a1021fb02b2762f7d79390ff7c4e0Wink Saville                + " attemptsRemaining=" + attemptsRemaining + " displayMessage=" + displayMessage);
4038246579fa14a1021fb02b2762f7d79390ff7c4e0Wink Saville        return displayMessage;
4048246579fa14a1021fb02b2762f7d79390ff7c4e0Wink Saville    }
4058246579fa14a1021fb02b2762f7d79390ff7c4e0Wink Saville
406afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project    private boolean reasonablePin(String pin) {
407afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        if (pin == null || pin.length() < MIN_PIN_LENGTH || pin.length() > MAX_PIN_LENGTH) {
408afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project            return false;
409afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        } else {
410afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project            return true;
411afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        }
412afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project    }
41311cd8c5ac95334c9363a82fd81d05d85623f9d17Amith Yamasani
414afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project    private void resetDialogState() {
415afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        mError = null;
416c38866843e966622346dc8f7b028749cac9c2198Wink Saville        mDialogState = ICC_OLD_MODE; // Default for when Change PIN is clicked
417afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        mPin = "";
418afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        setDialogValues();
41911cd8c5ac95334c9363a82fd81d05d85623f9d17Amith Yamasani        mDialogState = OFF_MODE;
420afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project    }
421afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project}
422