summaryrefslogtreecommitdiffstats
path: root/src/com/android/settings/SimLockSettings.java
diff options
context:
space:
mode:
Diffstat (limited to 'src/com/android/settings/SimLockSettings.java')
-rw-r--r--src/com/android/settings/SimLockSettings.java321
1 files changed, 0 insertions, 321 deletions
diff --git a/src/com/android/settings/SimLockSettings.java b/src/com/android/settings/SimLockSettings.java
deleted file mode 100644
index 286e3d6..0000000
--- a/src/com/android/settings/SimLockSettings.java
+++ /dev/null
@@ -1,321 +0,0 @@
-/*
- * Copyright (C) 2008 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.settings;
-
-import android.content.Context;
-import android.content.res.Resources;
-import android.os.AsyncResult;
-import android.os.Bundle;
-import android.os.Handler;
-import android.os.Message;
-import android.preference.Preference;
-import android.preference.PreferenceActivity;
-import android.preference.CheckBoxPreference;
-import android.preference.PreferenceScreen;
-import com.android.internal.telephony.Phone;
-import com.android.internal.telephony.PhoneFactory;
-import android.widget.Toast;
-
-/**
- * Implements the preference screen to enable/disable SIM lock and
- * also the dialogs to change the SIM PIN. In the former case, enabling/disabling
- * the SIM lock will prompt the user for the current PIN.
- * In the Change PIN case, it prompts the user for old pin, new pin and new pin
- * again before attempting to change it. Calls the SimCard interface to execute
- * these operations.
- *
- */
-public class SimLockSettings extends PreferenceActivity
- implements EditPinPreference.OnPinEnteredListener {
-
- private static final int OFF_MODE = 0;
- // State when enabling/disabling SIM lock
- private static final int SIM_LOCK_MODE = 1;
- // State when entering the old pin
- private static final int SIM_OLD_MODE = 2;
- // State when entering the new pin - first time
- private static final int SIM_NEW_MODE = 3;
- // State when entering the new pin - second time
- private static final int SIM_REENTER_MODE = 4;
-
- // Keys in xml file
- private static final String PIN_DIALOG = "sim_pin";
- private static final String PIN_TOGGLE = "sim_toggle";
- // Keys in icicle
- private static final String DIALOG_STATE = "dialogState";
- private static final String DIALOG_PIN = "dialogPin";
- private static final String DIALOG_ERROR = "dialogError";
- private static final String ENABLE_TO_STATE = "enableState";
-
- private static final int MIN_PIN_LENGTH = 4;
- private static final int MAX_PIN_LENGTH = 8;
- // Which dialog to show next when popped up
- private int mDialogState = OFF_MODE;
-
- private String mPin;
- private String mOldPin;
- private String mNewPin;
- private String mError;
- // Are we trying to enable or disable SIM lock?
- private boolean mToState;
-
- private Phone mPhone;
-
- private EditPinPreference mPinDialog;
- private CheckBoxPreference mPinToggle;
-
- private Resources mRes;
-
- // For async handler to identify request type
- private static final int ENABLE_SIM_PIN_COMPLETE = 100;
- private static final int CHANGE_SIM_PIN_COMPLETE = 101;
-
- // For replies from SimCard interface
- private Handler mHandler = new Handler() {
- public void handleMessage(Message msg) {
- AsyncResult ar = (AsyncResult) msg.obj;
- switch (msg.what) {
- case ENABLE_SIM_PIN_COMPLETE:
- simLockChanged(ar.exception == null);
- break;
- case CHANGE_SIM_PIN_COMPLETE:
- simPinChanged(ar.exception == null);
- break;
- }
-
- return;
- }
- };
-
- // For top-level settings screen to query
- static boolean isSimLockEnabled() {
- return PhoneFactory.getDefaultPhone().getSimCard().getSimLockEnabled();
- }
-
- static String getSummary(Context context) {
- Resources res = context.getResources();
- String summary = isSimLockEnabled()
- ? res.getString(R.string.sim_lock_on)
- : res.getString(R.string.sim_lock_off);
- return summary;
- }
-
- @Override
- protected void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
-
- addPreferencesFromResource(R.xml.sim_lock_settings);
-
- mPinDialog = (EditPinPreference) findPreference(PIN_DIALOG);
- mPinToggle = (CheckBoxPreference) findPreference(PIN_TOGGLE);
- if (savedInstanceState != null && savedInstanceState.containsKey(DIALOG_STATE)) {
- mDialogState = savedInstanceState.getInt(DIALOG_STATE);
- mPin = savedInstanceState.getString(DIALOG_PIN);
- mError = savedInstanceState.getString(DIALOG_ERROR);
- mToState = savedInstanceState.getBoolean(ENABLE_TO_STATE);
- }
-
- mPinDialog.setOnPinEnteredListener(this);
-
- // Don't need any changes to be remembered
- getPreferenceScreen().setPersistent(false);
-
- mPhone = PhoneFactory.getDefaultPhone();
- mRes = getResources();
- }
-
- @Override
- protected void onResume() {
- super.onResume();
-
- mPinToggle.setChecked(mPhone.getSimCard().getSimLockEnabled());
-
- if (mDialogState != OFF_MODE) {
- showPinDialog();
- } else {
- // Prep for standard click on "Change PIN"
- resetDialogState();
- }
- }
-
- @Override
- protected void onSaveInstanceState(Bundle out) {
- // Need to store this state for slider open/close
- // There is one case where the dialog is popped up by the preference
- // framework. In that case, let the preference framework store the
- // dialog state. In other cases, where this activity manually launches
- // the dialog, store the state of the dialog.
- if (mPinDialog.isDialogOpen()) {
- out.putInt(DIALOG_STATE, mDialogState);
- out.putString(DIALOG_PIN, mPinDialog.getEditText().getText().toString());
- out.putString(DIALOG_ERROR, mError);
- out.putBoolean(ENABLE_TO_STATE, mToState);
- } else {
- super.onSaveInstanceState(out);
- }
- }
-
- private void showPinDialog() {
- if (mDialogState == OFF_MODE) {
- return;
- }
- setDialogValues();
-
- mPinDialog.showPinDialog();
- }
-
- private void setDialogValues() {
- mPinDialog.setText(mPin);
- String message = "";
- switch (mDialogState) {
- case SIM_LOCK_MODE:
- message = mRes.getString(R.string.sim_enter_pin);
- mPinDialog.setDialogTitle(mToState
- ? mRes.getString(R.string.sim_enable_sim_lock)
- : mRes.getString(R.string.sim_disable_sim_lock));
- break;
- case SIM_OLD_MODE:
- message = mRes.getString(R.string.sim_enter_old);
- mPinDialog.setDialogTitle(mRes.getString(R.string.sim_change_pin));
- break;
- case SIM_NEW_MODE:
- message = mRes.getString(R.string.sim_enter_new);
- mPinDialog.setDialogTitle(mRes.getString(R.string.sim_change_pin));
- break;
- case SIM_REENTER_MODE:
- message = mRes.getString(R.string.sim_reenter_new);
- mPinDialog.setDialogTitle(mRes.getString(R.string.sim_change_pin));
- break;
- }
- if (mError != null) {
- message = mError + "\n" + message;
- mError = null;
- }
- mPinDialog.setDialogMessage(message);
- }
-
- public void onPinEntered(EditPinPreference preference, boolean positiveResult) {
- if (!positiveResult) {
- resetDialogState();
- return;
- }
-
- mPin = preference.getText();
- if (!reasonablePin(mPin)) {
- // inject error message and display dialog again
- mError = mRes.getString(R.string.sim_bad_pin);
- showPinDialog();
- return;
- }
- switch (mDialogState) {
- case SIM_LOCK_MODE:
- tryChangeSimLockState();
- break;
- case SIM_OLD_MODE:
- mOldPin = mPin;
- mDialogState = SIM_NEW_MODE;
- mError = null;
- mPin = null;
- showPinDialog();
- break;
- case SIM_NEW_MODE:
- mNewPin = mPin;
- mDialogState = SIM_REENTER_MODE;
- mPin = null;
- showPinDialog();
- break;
- case SIM_REENTER_MODE:
- if (!mPin.equals(mNewPin)) {
- mError = mRes.getString(R.string.sim_pins_dont_match);
- mDialogState = SIM_NEW_MODE;
- mPin = null;
- showPinDialog();
- } else {
- mError = null;
- tryChangePin();
- }
- break;
- }
- }
-
- public boolean onPreferenceTreeClick(PreferenceScreen preferenceScreen, Preference preference) {
- if (preference == mPinToggle) {
- // Get the new, preferred state
- mToState = mPinToggle.isChecked();
- // Flip it back and pop up pin dialog
- mPinToggle.setChecked(!mToState);
- mDialogState = SIM_LOCK_MODE;
- showPinDialog();
- }
- return true;
- }
-
- private void tryChangeSimLockState() {
- // Try to change sim lock. If it succeeds, toggle the lock state and
- // reset dialog state. Else inject error message and show dialog again.
- Message callback = Message.obtain(mHandler, ENABLE_SIM_PIN_COMPLETE);
- mPhone.getSimCard().setSimLockEnabled(mToState, mPin, callback);
-
- }
-
- private void simLockChanged(boolean success) {
- if (success) {
- mPinToggle.setChecked(mToState);
- } else {
- // TODO: I18N
- Toast.makeText(this, mRes.getString(R.string.sim_lock_failed), Toast.LENGTH_SHORT)
- .show();
- }
- resetDialogState();
- }
-
- private void simPinChanged(boolean success) {
- if (!success) {
- // TODO: I18N
- Toast.makeText(this, mRes.getString(R.string.sim_change_failed),
- Toast.LENGTH_SHORT)
- .show();
- } else {
- Toast.makeText(this, mRes.getString(R.string.sim_change_succeeded),
- Toast.LENGTH_SHORT)
- .show();
-
- }
- resetDialogState();
- }
-
- private void tryChangePin() {
- Message callback = Message.obtain(mHandler, CHANGE_SIM_PIN_COMPLETE);
- mPhone.getSimCard().changeSimLockPassword(mOldPin,
- mNewPin, callback);
- }
-
- private boolean reasonablePin(String pin) {
- if (pin == null || pin.length() < MIN_PIN_LENGTH || pin.length() > MAX_PIN_LENGTH) {
- return false;
- } else {
- return true;
- }
- }
-
- private void resetDialogState() {
- mError = null;
- mDialogState = SIM_OLD_MODE; // Default for when Change PIN is clicked
- mPin = "";
- setDialogValues();
- }
-}