blob: 160978f57dd81ef1117ba9dbe074d986de16e55e [file] [log] [blame]
/*
* Copyright (C) 2006 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.phone;
import android.app.Activity;
import android.os.AsyncResult;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.text.TextUtils;
import android.text.method.DigitsKeyListener;
import android.util.Log;
import android.view.View;
import android.widget.EditText;
import android.widget.LinearLayout;
import android.widget.TextView;
import com.android.internal.telephony.CommandException;
import com.android.internal.telephony.Phone;
/**
* UI to enable/disable the ICC PIN.
*/
public class EnableIccPinScreen extends Activity {
private static final String LOG_TAG = PhoneGlobals.LOG_TAG;
private static final int ENABLE_ICC_PIN_COMPLETE = 100;
private static final boolean DBG = false;
private LinearLayout mPinFieldContainer;
private EditText mPinField;
private TextView mStatusField;
private boolean mEnable;
private Phone mPhone;
private Handler mHandler = new Handler() {
public void handleMessage(Message msg) {
switch (msg.what) {
case ENABLE_ICC_PIN_COMPLETE:
AsyncResult ar = (AsyncResult) msg.obj;
handleResult(ar);
break;
}
return;
}
};
@Override
protected void onCreate(Bundle icicle) {
super.onCreate(icicle);
setContentView(R.layout.enable_sim_pin_screen);
setupView();
mPhone = PhoneGlobals.getPhone();
mEnable = !mPhone.getIccCard().getIccLockEnabled();
int id = mEnable ? R.string.enable_sim_pin : R.string.disable_sim_pin;
setTitle(getResources().getText(id));
}
private void setupView() {
mPinField = (EditText) findViewById(R.id.pin);
mPinField.setKeyListener(DigitsKeyListener.getInstance());
mPinField.setMovementMethod(null);
mPinField.setOnClickListener(mClicked);
mPinFieldContainer = (LinearLayout) findViewById(R.id.pinc);
mStatusField = (TextView) findViewById(R.id.status);
}
private void showStatus(CharSequence statusMsg) {
if (statusMsg != null) {
mStatusField.setText(statusMsg);
mStatusField.setVisibility(View.VISIBLE);
mPinFieldContainer.setVisibility(View.GONE);
} else {
mPinFieldContainer.setVisibility(View.VISIBLE);
mStatusField.setVisibility(View.GONE);
}
}
private String getPin() {
return mPinField.getText().toString();
}
private void enableIccPin() {
Message callback = Message.obtain(mHandler, ENABLE_ICC_PIN_COMPLETE);
if (DBG) log("enableIccPin:");
mPhone.getIccCard().setIccLockEnabled(mEnable, getPin(), callback);
if (DBG) log("enableIccPin: please wait...");
}
private void handleResult(AsyncResult ar) {
if (ar.exception == null) {
if (DBG) log("handleResult: success!");
showStatus(getResources().getText(
mEnable ? R.string.enable_pin_ok : R.string.disable_pin_ok));
} else if (ar.exception instanceof CommandException
/* && ((CommandException)ar.exception).getCommandError() ==
CommandException.Error.GENERIC_FAILURE */ ) {
if (DBG) log("handleResult: failed!");
showStatus(getResources().getText(
R.string.pin_failed));
}
mHandler.postDelayed(new Runnable() {
public void run() {
finish();
}
}, 3000);
}
private View.OnClickListener mClicked = new View.OnClickListener() {
public void onClick(View v) {
if (TextUtils.isEmpty(mPinField.getText())) {
return;
}
showStatus(getResources().getText(
R.string.enable_in_progress));
enableIccPin();
}
};
private void log(String msg) {
Log.d(LOG_TAG, "[EnableIccPin] " + msg);
}
}