17d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon/*
27d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon * Copyright (C) 2010 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.tests;
187d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon
197d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordonimport android.app.Activity;
207d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordonimport android.app.PendingIntent;
217d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordonimport android.content.ActivityNotFoundException;
227d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordonimport android.content.Intent;
237d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordonimport android.os.Bundle;
247d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordonimport android.util.Log;
257d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordonimport android.view.View;
267d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordonimport android.widget.Button;
277d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordonimport android.widget.ProgressBar;
287d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordonimport android.widget.TextView;
297d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon
307d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordonimport com.android.phone.OtaUtils;
317d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon
327d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon/**
337d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon * Test activity that mimics the PERFORM_CDMA_PROVISIONING behavior of
347d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon * SetupWizard, useful for testing "non-interactive" OTASP.
357d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon * @see OtaUtils.startNonInteractiveOtasp
367d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon *
377d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon */
387d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordonpublic class OtaspTestActivity extends Activity implements View.OnClickListener {
397d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon    private static final String LOG_TAG = "OtaspTestActivity";
407d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon
417d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon    // Request code used with startActivityForResult()
427d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon    private static final int PERFORM_CDMA_PROVISIONING_REQUEST_CODE = 1;
437d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon
447d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon    // UI elements
457d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon    private TextView mLabel;
467d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon    private ProgressBar mProgressBar;
477d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon    private TextView mResult;
487d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon    private Button mButton;
497d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon
507d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon    @Override
517d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon    protected void onCreate(Bundle savedInstanceState) {
527d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon        Intent intent = getIntent();
537d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon        Log.i(LOG_TAG, "##### onCreate: intent = " + intent);
547d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon        Bundle extras = intent.getExtras();
557d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon        if (extras != null) {
567d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon            Log.i(LOG_TAG, "      - has extras: size = " + extras.size()); // forces an unparcel()
577d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon            Log.i(LOG_TAG, "      - extras = " + extras);
587d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon        }
597d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon
607d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon        // Construct our basic UI:
617d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon        super.onCreate(savedInstanceState);
627d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon        setContentView(R.layout.otasp_test_activity);
637d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon
647d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon        mLabel = (TextView) findViewById(R.id.label1);
657d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon        mLabel.setText("OTA Test Activity");
667d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon
677d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon        mProgressBar = (ProgressBar) findViewById(R.id.progress_bar);
687d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon        mResult = (TextView) findViewById(R.id.result1);
697d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon
707d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon        mButton = (Button) findViewById(R.id.button1);
717d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon        mButton.setText("Make test call");
727d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon        mButton.setOnClickListener(this);
737d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon
747d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon
757d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon        // We can be launched either:
767d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon        //
777d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon        // (1) Directly from the launcher, in which case the current intent
787d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon        //     will simply be an ACTION_MAIN intent
797d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon        //
807d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon        // (2) Via the PendingIntent that we sent along (when we originally
817d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon        //     fired off the ACTION_PERFORM_CDMA_PROVISIONING intent) that
827d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon        //     allows the phone app to send us back a result code.
837d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon        //     We can identify this case by the presence of the
847d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon        //     EXTRA_OTASP_RESULT_CODE extra.
857d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon
867d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon        if (intent.hasExtra(OtaUtils.EXTRA_OTASP_RESULT_CODE)) {
877d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon            // Got a result from the OTASP call!
887d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon            Log.i(LOG_TAG, "==> onCreate: got a result from the OTASP call!");
897d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon
907d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon            int resultCode = intent.getIntExtra(OtaUtils.EXTRA_OTASP_RESULT_CODE,
917d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon                                                OtaUtils.OTASP_UNKNOWN);
927d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon            Log.i(LOG_TAG, "    - resultCode = " + resultCode);
937d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon
947d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon            String resultString;
957d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon            switch (resultCode) {
967d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon                case OtaUtils.OTASP_USER_SKIPPED:
977d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon                    resultString = "User skipped!";
987d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon                    break;
997d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon                case OtaUtils.OTASP_SUCCESS:
1007d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon                    resultString = "Success!";
1017d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon                    break;
1027d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon                case OtaUtils.OTASP_FAILURE:
1037d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon                    resultString = "FAILURE";
1047d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon                    break;
1057d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon                default:
1067d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon                    resultString = "Unexpected code: " + resultCode;
1077d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon                    break;
1087d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon            }
1097d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon            Log.i(LOG_TAG, "    - result: " + resultString);
1107d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon            mResult.setText(resultString);
1117d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon            mResult.setVisibility(View.VISIBLE);
1127d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon            mProgressBar.setVisibility(View.INVISIBLE);
1137d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon
1147d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon        } else {
1157d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon            // We must have gotten here directly from the launcher.
1167d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon            // Leave the UI in its initial state.
1177d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon            Log.i(LOG_TAG, "==> onCreate: entered from the launcher.");
1187d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon        }
1197d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon    }
1207d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon
1217d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon    @Override
1227d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon    protected void onNewIntent(Intent intent) {
1237d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon        Log.i(LOG_TAG, "onNewIntent: intent=" + intent);
1247d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon        Bundle extras = intent.getExtras();
1257d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon        if (extras != null) Log.i(LOG_TAG, "      - intent extras = " + extras);
1267d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon
1277d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon        // This method isn't actually used since this test activity is not
1287d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon        // launched in "singleTop" mode.
1297d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon
1307d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon        // Activities that *are* launched in singleTop mode, like the SetupWizard,
1317d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon        // would have to handle the various PendingIntents here just like
1327d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon        // we do above in onCreate().
1337d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon    }
1347d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon
1357d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon    @Override
1367d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
1377d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon        Log.i(LOG_TAG, "onActivityResult: request " + requestCode
1387d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon              + " result " + resultCode + " data " + data);
1397d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon
1407d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon        // Note we receive this call immediately before onResume(), when
1417d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon        // we get re-started after launching the PERFORM_CDMA_PROVISIONING
1427d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon        // intent.
1437d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon
1447d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon        if (requestCode == PERFORM_CDMA_PROVISIONING_REQUEST_CODE) {
1457d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon            // The InCallScreenShowActivation activity can set the following
1467d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon            // result codes:
1477d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon            //
1487d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon            //   RESULT_INTERACTIVE_OTASP_STARTED
1497d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon            //   RESULT_NONINTERACTIVE_OTASP_STARTED
1507d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon            //   RESULT_NONINTERACTIVE_OTASP_FAILED
1517d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon            //
1527d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon            // but note that in practice we won't ever *get* the
1537d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon            // RESULT_INTERACTIVE_OTASP_STARTED result code, since the
1547d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon            // "interactive" OTASP sequence never actually finish()es;
1557d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon            // it ends by directly launching the Home activity.
1567d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon            //
1577d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon            // However, in non-interactive OTASP, the
1587d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon            // InCallScreenShowActivation activity will set one of the
1597d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon            // RESULT_NONINTERACTIVE_* codes and immediately
1607d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon            // finish(), so we *will* see that result here.
1617d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon            //
1627d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon            // Also, resultCode will be RESULT_CANCELED (= 0) if the
1637d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon            // InCallScreenShowActivation activity didn't return any
1647d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon            // result, or crashed.
1657d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon
1667d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon            switch (resultCode) {
1677d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon                case OtaUtils.RESULT_INTERACTIVE_OTASP_STARTED:
1687d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon                    Log.i(LOG_TAG, "==> onActivityResult: INTERACTIVE_OTASP_STARTED");
1697d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon                    break;
1707d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon                case OtaUtils.RESULT_NONINTERACTIVE_OTASP_STARTED:
1717d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon                    Log.i(LOG_TAG, "==> onActivityResult: NONINTERACTIVE_OTASP_STARTED");
1727d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon                    break;
1737d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon                case OtaUtils.RESULT_NONINTERACTIVE_OTASP_FAILED:
1747d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon                    Log.w(LOG_TAG, "==> onActivityResult: NONINTERACTIVE_OTASP_FAILED");
1757d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon                    // This means we couldn't even *initiate* an outgoing call
1767d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon                    // to start the OTASP process.  Not sure what could cause this.
1777d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon                    // TODO: Update UI to indicate the error.
1787d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon                    break;
1797d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon                case RESULT_CANCELED:
1807d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon                    Log.i(LOG_TAG, "==> onActivityResult: CANCELED");
1817d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon                    break;
1827d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon                default:
1837d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon                    Log.i(LOG_TAG, "==> onActivityResult: unknown result: " + resultCode);
1847d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon                    break;
1857d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon            }
1867d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon        }
1877d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon    }
1887d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon
1897d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon    @Override
1907d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon    protected void onResume() {
1917d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon        Log.i(LOG_TAG, "onResume()...");
1927d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon        super.onResume();
1937d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon    }
1947d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon
1957d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon    @Override
1967d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon    protected void onPause() {
1977d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon        Log.i(LOG_TAG, "onPause()...");
1987d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon        super.onPause();
1997d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon    }
2007d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon
2017d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon    // View.OnClickListener implementation
2027d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon    @Override
2037d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon    public void onClick(View view) {
2047d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon        int id = view.getId();
2057d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon        Log.i(LOG_TAG, "onClick(View " + view + ", id " + id + ")...");
2067d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon
2077d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon        switch (id) {
2087d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon            case R.id.button1:
2097d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon                Log.i(LOG_TAG, "onClick: button1...");
2107d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon                makeTestCall();
2117d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon                break;
2127d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon            default:
2137d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon                Log.w(LOG_TAG, "onClick: unexpected View: " + view);
2147d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon                break;
2157d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon        }
2167d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon    }
2177d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon
2187d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon    private void makeTestCall() {
2197d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon        Log.i(LOG_TAG, "##### makeTestCall()...");
2207d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon
2217d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon        mProgressBar.setVisibility(View.VISIBLE);
2227d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon        mResult.setVisibility(View.INVISIBLE);
2237d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon
2247d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon        try {
2257d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon            Intent performProvisioningIntent =
2267d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon                    new Intent(OtaUtils.ACTION_PERFORM_CDMA_PROVISIONING);
2277d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon
2287d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon            // Set the magic extra to force "non-interactive mode" for the
2297d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon            // OTASP call.
2307d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon            performProvisioningIntent.putExtra(OtaUtils.EXTRA_OVERRIDE_INTERACTIVE_MODE, false);
2317d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon
2327d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon            // Pass a PendingIntent along with the
2337d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon            // ACTION_PERFORM_CDMA_PROVISIONING intent, which allows
2347d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon            // results to be sent back to us.
2357d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon            Intent resultIntent = new Intent(this, this.getClass());
2367d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon            PendingIntent pendingResultIntent =
2377d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon                    PendingIntent.getActivity(this, 0,
2387d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon                                              resultIntent, 0);
2397d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon            performProvisioningIntent.putExtra(OtaUtils.EXTRA_OTASP_RESULT_CODE_PENDING_INTENT,
2407d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon                                               pendingResultIntent);
2417d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon
2427d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon            Log.i(LOG_TAG, "- Firing off PERFORM_CDMA_PROVISIONING intent: "
2437d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon                  + performProvisioningIntent);
2447d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon            Bundle extras = performProvisioningIntent.getExtras();
2457d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon            if (extras != null) Log.i(LOG_TAG, "      - intent extras = " + extras);
2467d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon
2477d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon            // Originally, we would simply call
2487d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon            //     startActivity(performProvisioningIntent);
2497d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon            // to launch the InCallScreenShowActivation activity and *not* expect
2507d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon            // a result.  (Note that calling the plain startActivity()
2517d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon            // method *guarantees* that your onActivityResult() method
2527d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon            // will NOT be called at all.)
2537d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon
2547d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon            // Now, we ask for a result:
2557d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon            startActivityForResult(performProvisioningIntent,
2567d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon                                   PERFORM_CDMA_PROVISIONING_REQUEST_CODE);
2577d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon
2587d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon            // On a non-voice-capable device, the InCallScreenShowActivation activity
2597d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon            // will kick off the OTASP call and immediately return, passing
2607d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon            // the code RESULT_STARTED_NONINTERACTIVE_OTASP to our
2617d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon            // onActivityResult method.
2627d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon
2637d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon        } catch (ActivityNotFoundException e) {
2647d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon            Log.w(LOG_TAG, "Couldn't show activiation UI; ActivityNotFoundException: " + e);
2657d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon        }
2667d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon    }
2677d4ddf6dc0d7c8158bac3a5dec7936e837e95bddSantos Cordon}
268