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