17d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon/* 27d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon * Copyright (C) 2006 The Android Open Source Project 37d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon * 47d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon * Licensed under the Apache License, Version 2.0 (the "License"); 57d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon * you may not use this file except in compliance with the License. 67d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon * You may obtain a copy of the License at 77d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon * 87d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon * http://www.apache.org/licenses/LICENSE-2.0 97d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon * 107d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon * Unless required by applicable law or agreed to in writing, software 117d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon * distributed under the License is distributed on an "AS IS" BASIS, 127d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 137d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon * See the License for the specific language governing permissions and 147d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon * limitations under the License. 157d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon */ 167d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon 177d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordonpackage com.android.phone; 187d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon 197d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordonimport android.app.Activity; 207d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordonimport android.os.AsyncResult; 217d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordonimport android.os.Bundle; 227d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordonimport android.os.Handler; 237d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordonimport android.os.Message; 247d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordonimport android.text.TextUtils; 257d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordonimport android.text.method.DigitsKeyListener; 267d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordonimport android.util.Log; 277d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordonimport android.view.View; 287d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordonimport android.widget.EditText; 297d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordonimport android.widget.LinearLayout; 307d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordonimport android.widget.TextView; 317d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon 327d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordonimport com.android.internal.telephony.CommandException; 337d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordonimport com.android.internal.telephony.Phone; 347d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon 357d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon/** 367d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon * UI to enable/disable FDN. 377d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon */ 387d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordonpublic class EnableFdnScreen extends Activity { 397d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon private static final String LOG_TAG = PhoneGlobals.LOG_TAG; 407d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon private static final boolean DBG = false; 417d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon 427d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon private static final int ENABLE_FDN_COMPLETE = 100; 437d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon 447d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon private LinearLayout mPinFieldContainer; 457d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon private EditText mPin2Field; 467d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon private TextView mStatusField; 477d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon private boolean mEnable; 487d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon private Phone mPhone; 497d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon 507d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon private Handler mHandler = new Handler() { 517d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon public void handleMessage(Message msg) { 527d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon switch (msg.what) { 537d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon case ENABLE_FDN_COMPLETE: 547d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon AsyncResult ar = (AsyncResult) msg.obj; 557d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon handleResult(ar); 567d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon break; 577d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon } 587d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon 597d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon return; 607d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon } 617d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon }; 627d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon 637d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon @Override 647d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon protected void onCreate(Bundle icicle) { 657d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon super.onCreate(icicle); 667d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon 677d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon setContentView(R.layout.enable_fdn_screen); 687d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon setupView(); 697d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon 707d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon mPhone = PhoneGlobals.getPhone(); 717d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon mEnable = !mPhone.getIccCard().getIccFdnEnabled(); 727d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon 737d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon int id = mEnable ? R.string.enable_fdn : R.string.disable_fdn; 747d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon setTitle(getResources().getText(id)); 757d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon } 767d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon 777d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon @Override 787d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon protected void onResume() { 797d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon super.onResume(); 807d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon mPhone = PhoneGlobals.getPhone(); 817d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon } 827d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon 837d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon private void setupView() { 847d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon mPin2Field = (EditText) findViewById(R.id.pin); 857d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon mPin2Field.setKeyListener(DigitsKeyListener.getInstance()); 867d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon mPin2Field.setMovementMethod(null); 877d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon mPin2Field.setOnClickListener(mClicked); 887d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon 897d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon mPinFieldContainer = (LinearLayout) findViewById(R.id.pinc); 907d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon mStatusField = (TextView) findViewById(R.id.status); 917d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon } 927d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon 937d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon private void showStatus(CharSequence statusMsg) { 947d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon if (statusMsg != null) { 957d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon mStatusField.setText(statusMsg); 967d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon mStatusField.setVisibility(View.VISIBLE); 977d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon mPinFieldContainer.setVisibility(View.GONE); 987d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon } else { 997d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon mPinFieldContainer.setVisibility(View.VISIBLE); 1007d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon mStatusField.setVisibility(View.GONE); 1017d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon } 1027d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon } 1037d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon 1047d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon private String getPin2() { 1057d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon return mPin2Field.getText().toString(); 1067d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon } 1077d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon 1087d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon private void enableFdn() { 1097d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon Message callback = Message.obtain(mHandler, ENABLE_FDN_COMPLETE); 1107d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon mPhone.getIccCard().setIccFdnEnabled(mEnable, getPin2(), callback); 1117d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon if (DBG) log("enableFdn: please wait..."); 1127d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon } 1137d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon 1147d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon private void handleResult(AsyncResult ar) { 1157d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon if (ar.exception == null) { 1167d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon if (DBG) log("handleResult: success!"); 1177d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon showStatus(getResources().getText(mEnable ? 1187d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon R.string.enable_fdn_ok : R.string.disable_fdn_ok)); 1197d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon } else if (ar.exception instanceof CommandException 1207d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon /* && ((CommandException)ar.exception).getCommandError() == 1217d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon CommandException.Error.GENERIC_FAILURE */ ) { 1227d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon if (DBG) log("handleResult: failed!"); 1237d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon showStatus(getResources().getText( 1247d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon R.string.pin_failed)); 1257d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon } 1267d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon 1277d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon mHandler.postDelayed(new Runnable() { 1287d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon public void run() { 1297d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon finish(); 1307d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon } 1317d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon }, 3000); 1327d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon } 1337d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon 1347d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon private View.OnClickListener mClicked = new View.OnClickListener() { 1357d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon public void onClick(View v) { 1367d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon if (TextUtils.isEmpty(mPin2Field.getText())) { 1377d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon return; 1387d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon } 1397d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon 1407d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon showStatus(getResources().getText( 1417d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon R.string.enable_in_progress)); 1427d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon 1437d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon enableFdn(); 1447d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon } 1457d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon }; 1467d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon 1477d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon private void log(String msg) { 1487d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon Log.d(LOG_TAG, "[EnableSimPin] " + msg); 1497d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon } 1507d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon} 151