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