1b154630235935e1aab2a41eff9ed794d40084a02David Brown/* 2b154630235935e1aab2a41eff9ed794d40084a02David Brown * Copyright (C) 2010 The Android Open Source Project 3b154630235935e1aab2a41eff9ed794d40084a02David Brown * 4b154630235935e1aab2a41eff9ed794d40084a02David Brown * Licensed under the Apache License, Version 2.0 (the "License"); 5b154630235935e1aab2a41eff9ed794d40084a02David Brown * you may not use this file except in compliance with the License. 6b154630235935e1aab2a41eff9ed794d40084a02David Brown * You may obtain a copy of the License at 7b154630235935e1aab2a41eff9ed794d40084a02David Brown * 8b154630235935e1aab2a41eff9ed794d40084a02David Brown * http://www.apache.org/licenses/LICENSE-2.0 9b154630235935e1aab2a41eff9ed794d40084a02David Brown * 10b154630235935e1aab2a41eff9ed794d40084a02David Brown * Unless required by applicable law or agreed to in writing, software 11b154630235935e1aab2a41eff9ed794d40084a02David Brown * distributed under the License is distributed on an "AS IS" BASIS, 12b154630235935e1aab2a41eff9ed794d40084a02David Brown * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13b154630235935e1aab2a41eff9ed794d40084a02David Brown * See the License for the specific language governing permissions and 14b154630235935e1aab2a41eff9ed794d40084a02David Brown * limitations under the License. 15b154630235935e1aab2a41eff9ed794d40084a02David Brown */ 16b154630235935e1aab2a41eff9ed794d40084a02David Brown 17d0a63062eebe4abb443506baa864f1c72896d339David Brownpackage com.android.phone.tests; 18b154630235935e1aab2a41eff9ed794d40084a02David Brown 19b154630235935e1aab2a41eff9ed794d40084a02David Brownimport android.app.Activity; 20b154630235935e1aab2a41eff9ed794d40084a02David Brownimport android.app.PendingIntent; 21b154630235935e1aab2a41eff9ed794d40084a02David Brownimport android.content.ActivityNotFoundException; 22b154630235935e1aab2a41eff9ed794d40084a02David Brownimport android.content.Intent; 23b154630235935e1aab2a41eff9ed794d40084a02David Brownimport android.os.Bundle; 24b154630235935e1aab2a41eff9ed794d40084a02David Brownimport android.util.Log; 25b154630235935e1aab2a41eff9ed794d40084a02David Brownimport android.view.View; 26b154630235935e1aab2a41eff9ed794d40084a02David Brownimport android.widget.Button; 27b154630235935e1aab2a41eff9ed794d40084a02David Brownimport android.widget.ProgressBar; 28b154630235935e1aab2a41eff9ed794d40084a02David Brownimport android.widget.TextView; 29b154630235935e1aab2a41eff9ed794d40084a02David Brown 30d0a63062eebe4abb443506baa864f1c72896d339David Brownimport com.android.phone.OtaUtils; 31d0a63062eebe4abb443506baa864f1c72896d339David Brown 32b154630235935e1aab2a41eff9ed794d40084a02David Brown/** 33b154630235935e1aab2a41eff9ed794d40084a02David Brown * Test activity that mimics the PERFORM_CDMA_PROVISIONING behavior of 34b154630235935e1aab2a41eff9ed794d40084a02David Brown * SetupWizard, useful for testing "non-interactive" OTASP. 35b154630235935e1aab2a41eff9ed794d40084a02David Brown * @see OtaUtils.startNonInteractiveOtasp 36b154630235935e1aab2a41eff9ed794d40084a02David Brown * 37b154630235935e1aab2a41eff9ed794d40084a02David Brown */ 38b154630235935e1aab2a41eff9ed794d40084a02David Brownpublic class OtaspTestActivity extends Activity implements View.OnClickListener { 39b154630235935e1aab2a41eff9ed794d40084a02David Brown private static final String LOG_TAG = "OtaspTestActivity"; 40b154630235935e1aab2a41eff9ed794d40084a02David Brown 41b154630235935e1aab2a41eff9ed794d40084a02David Brown // Request code used with startActivityForResult() 42b154630235935e1aab2a41eff9ed794d40084a02David Brown private static final int PERFORM_CDMA_PROVISIONING_REQUEST_CODE = 1; 43b154630235935e1aab2a41eff9ed794d40084a02David Brown 44b154630235935e1aab2a41eff9ed794d40084a02David Brown // UI elements 45b154630235935e1aab2a41eff9ed794d40084a02David Brown private TextView mLabel; 46b154630235935e1aab2a41eff9ed794d40084a02David Brown private ProgressBar mProgressBar; 47b154630235935e1aab2a41eff9ed794d40084a02David Brown private TextView mResult; 48b154630235935e1aab2a41eff9ed794d40084a02David Brown private Button mButton; 49b154630235935e1aab2a41eff9ed794d40084a02David Brown 50b154630235935e1aab2a41eff9ed794d40084a02David Brown @Override 51b154630235935e1aab2a41eff9ed794d40084a02David Brown protected void onCreate(Bundle savedInstanceState) { 52b154630235935e1aab2a41eff9ed794d40084a02David Brown Intent intent = getIntent(); 53b154630235935e1aab2a41eff9ed794d40084a02David Brown Log.i(LOG_TAG, "##### onCreate: intent = " + intent); 54b154630235935e1aab2a41eff9ed794d40084a02David Brown Bundle extras = intent.getExtras(); 55b154630235935e1aab2a41eff9ed794d40084a02David Brown if (extras != null) { 56b154630235935e1aab2a41eff9ed794d40084a02David Brown Log.i(LOG_TAG, " - has extras: size = " + extras.size()); // forces an unparcel() 57b154630235935e1aab2a41eff9ed794d40084a02David Brown Log.i(LOG_TAG, " - extras = " + extras); 58b154630235935e1aab2a41eff9ed794d40084a02David Brown } 59b154630235935e1aab2a41eff9ed794d40084a02David Brown 60b154630235935e1aab2a41eff9ed794d40084a02David Brown // Construct our basic UI: 61b154630235935e1aab2a41eff9ed794d40084a02David Brown super.onCreate(savedInstanceState); 62d0a63062eebe4abb443506baa864f1c72896d339David Brown setContentView(R.layout.otasp_test_activity); 63b154630235935e1aab2a41eff9ed794d40084a02David Brown 64b154630235935e1aab2a41eff9ed794d40084a02David Brown mLabel = (TextView) findViewById(R.id.label1); 65b154630235935e1aab2a41eff9ed794d40084a02David Brown mLabel.setText("OTA Test Activity"); 66b154630235935e1aab2a41eff9ed794d40084a02David Brown 67b154630235935e1aab2a41eff9ed794d40084a02David Brown mProgressBar = (ProgressBar) findViewById(R.id.progress_bar); 68b154630235935e1aab2a41eff9ed794d40084a02David Brown mResult = (TextView) findViewById(R.id.result1); 69b154630235935e1aab2a41eff9ed794d40084a02David Brown 70b154630235935e1aab2a41eff9ed794d40084a02David Brown mButton = (Button) findViewById(R.id.button1); 71b154630235935e1aab2a41eff9ed794d40084a02David Brown mButton.setText("Make test call"); 72b154630235935e1aab2a41eff9ed794d40084a02David Brown mButton.setOnClickListener(this); 73b154630235935e1aab2a41eff9ed794d40084a02David Brown 74b154630235935e1aab2a41eff9ed794d40084a02David Brown 75b154630235935e1aab2a41eff9ed794d40084a02David Brown // We can be launched either: 76b154630235935e1aab2a41eff9ed794d40084a02David Brown // 77b154630235935e1aab2a41eff9ed794d40084a02David Brown // (1) Directly from the launcher, in which case the current intent 78b154630235935e1aab2a41eff9ed794d40084a02David Brown // will simply be an ACTION_MAIN intent 79b154630235935e1aab2a41eff9ed794d40084a02David Brown // 80b154630235935e1aab2a41eff9ed794d40084a02David Brown // (2) Via the PendingIntent that we sent along (when we originally 81b154630235935e1aab2a41eff9ed794d40084a02David Brown // fired off the ACTION_PERFORM_CDMA_PROVISIONING intent) that 82b154630235935e1aab2a41eff9ed794d40084a02David Brown // allows the phone app to send us back a result code. 83b154630235935e1aab2a41eff9ed794d40084a02David Brown // We can identify this case by the presence of the 84b154630235935e1aab2a41eff9ed794d40084a02David Brown // EXTRA_OTASP_RESULT_CODE extra. 85b154630235935e1aab2a41eff9ed794d40084a02David Brown 86b154630235935e1aab2a41eff9ed794d40084a02David Brown if (intent.hasExtra(OtaUtils.EXTRA_OTASP_RESULT_CODE)) { 87b154630235935e1aab2a41eff9ed794d40084a02David Brown // Got a result from the OTASP call! 88b154630235935e1aab2a41eff9ed794d40084a02David Brown Log.i(LOG_TAG, "==> onCreate: got a result from the OTASP call!"); 89b154630235935e1aab2a41eff9ed794d40084a02David Brown 90b154630235935e1aab2a41eff9ed794d40084a02David Brown int resultCode = intent.getIntExtra(OtaUtils.EXTRA_OTASP_RESULT_CODE, 91b154630235935e1aab2a41eff9ed794d40084a02David Brown OtaUtils.OTASP_UNKNOWN); 92b154630235935e1aab2a41eff9ed794d40084a02David Brown Log.i(LOG_TAG, " - resultCode = " + resultCode); 93b154630235935e1aab2a41eff9ed794d40084a02David Brown 94b154630235935e1aab2a41eff9ed794d40084a02David Brown String resultString; 95b154630235935e1aab2a41eff9ed794d40084a02David Brown switch (resultCode) { 96b154630235935e1aab2a41eff9ed794d40084a02David Brown case OtaUtils.OTASP_USER_SKIPPED: 97b154630235935e1aab2a41eff9ed794d40084a02David Brown resultString = "User skipped!"; 98b154630235935e1aab2a41eff9ed794d40084a02David Brown break; 99b154630235935e1aab2a41eff9ed794d40084a02David Brown case OtaUtils.OTASP_SUCCESS: 100b154630235935e1aab2a41eff9ed794d40084a02David Brown resultString = "Success!"; 101b154630235935e1aab2a41eff9ed794d40084a02David Brown break; 102b154630235935e1aab2a41eff9ed794d40084a02David Brown case OtaUtils.OTASP_FAILURE: 103b154630235935e1aab2a41eff9ed794d40084a02David Brown resultString = "FAILURE"; 104b154630235935e1aab2a41eff9ed794d40084a02David Brown break; 105b154630235935e1aab2a41eff9ed794d40084a02David Brown default: 106b154630235935e1aab2a41eff9ed794d40084a02David Brown resultString = "Unexpected code: " + resultCode; 107b154630235935e1aab2a41eff9ed794d40084a02David Brown break; 108b154630235935e1aab2a41eff9ed794d40084a02David Brown } 109b154630235935e1aab2a41eff9ed794d40084a02David Brown Log.i(LOG_TAG, " - result: " + resultString); 110b154630235935e1aab2a41eff9ed794d40084a02David Brown mResult.setText(resultString); 111b154630235935e1aab2a41eff9ed794d40084a02David Brown mResult.setVisibility(View.VISIBLE); 112b154630235935e1aab2a41eff9ed794d40084a02David Brown mProgressBar.setVisibility(View.INVISIBLE); 113b154630235935e1aab2a41eff9ed794d40084a02David Brown 114b154630235935e1aab2a41eff9ed794d40084a02David Brown } else { 115b154630235935e1aab2a41eff9ed794d40084a02David Brown // We must have gotten here directly from the launcher. 116b154630235935e1aab2a41eff9ed794d40084a02David Brown // Leave the UI in its initial state. 117b154630235935e1aab2a41eff9ed794d40084a02David Brown Log.i(LOG_TAG, "==> onCreate: entered from the launcher."); 118b154630235935e1aab2a41eff9ed794d40084a02David Brown } 119b154630235935e1aab2a41eff9ed794d40084a02David Brown } 120b154630235935e1aab2a41eff9ed794d40084a02David Brown 121b154630235935e1aab2a41eff9ed794d40084a02David Brown @Override 122b154630235935e1aab2a41eff9ed794d40084a02David Brown protected void onNewIntent(Intent intent) { 123b154630235935e1aab2a41eff9ed794d40084a02David Brown Log.i(LOG_TAG, "onNewIntent: intent=" + intent); 124b154630235935e1aab2a41eff9ed794d40084a02David Brown Bundle extras = intent.getExtras(); 125b154630235935e1aab2a41eff9ed794d40084a02David Brown if (extras != null) Log.i(LOG_TAG, " - intent extras = " + extras); 126b154630235935e1aab2a41eff9ed794d40084a02David Brown 127b154630235935e1aab2a41eff9ed794d40084a02David Brown // This method isn't actually used since this test activity is not 128b154630235935e1aab2a41eff9ed794d40084a02David Brown // launched in "singleTop" mode. 129b154630235935e1aab2a41eff9ed794d40084a02David Brown 130b154630235935e1aab2a41eff9ed794d40084a02David Brown // Activities that *are* launched in singleTop mode, like the SetupWizard, 131b154630235935e1aab2a41eff9ed794d40084a02David Brown // would have to handle the various PendingIntents here just like 132b154630235935e1aab2a41eff9ed794d40084a02David Brown // we do above in onCreate(). 133b154630235935e1aab2a41eff9ed794d40084a02David Brown } 134b154630235935e1aab2a41eff9ed794d40084a02David Brown 135b154630235935e1aab2a41eff9ed794d40084a02David Brown @Override 136b154630235935e1aab2a41eff9ed794d40084a02David Brown protected void onActivityResult(int requestCode, int resultCode, Intent data) { 137b154630235935e1aab2a41eff9ed794d40084a02David Brown Log.i(LOG_TAG, "onActivityResult: request " + requestCode 138b154630235935e1aab2a41eff9ed794d40084a02David Brown + " result " + resultCode + " data " + data); 139b154630235935e1aab2a41eff9ed794d40084a02David Brown 140b154630235935e1aab2a41eff9ed794d40084a02David Brown // Note we receive this call immediately before onResume(), when 141b154630235935e1aab2a41eff9ed794d40084a02David Brown // we get re-started after launching the PERFORM_CDMA_PROVISIONING 142b154630235935e1aab2a41eff9ed794d40084a02David Brown // intent. 143b154630235935e1aab2a41eff9ed794d40084a02David Brown 144b154630235935e1aab2a41eff9ed794d40084a02David Brown if (requestCode == PERFORM_CDMA_PROVISIONING_REQUEST_CODE) { 145b154630235935e1aab2a41eff9ed794d40084a02David Brown // The InCallScreenShowActivation activity can set the following 146b154630235935e1aab2a41eff9ed794d40084a02David Brown // result codes: 147b154630235935e1aab2a41eff9ed794d40084a02David Brown // 148b154630235935e1aab2a41eff9ed794d40084a02David Brown // RESULT_INTERACTIVE_OTASP_STARTED 149b154630235935e1aab2a41eff9ed794d40084a02David Brown // RESULT_NONINTERACTIVE_OTASP_STARTED 150b154630235935e1aab2a41eff9ed794d40084a02David Brown // RESULT_NONINTERACTIVE_OTASP_FAILED 151b154630235935e1aab2a41eff9ed794d40084a02David Brown // 152b154630235935e1aab2a41eff9ed794d40084a02David Brown // but note that in practice we won't ever *get* the 153b154630235935e1aab2a41eff9ed794d40084a02David Brown // RESULT_INTERACTIVE_OTASP_STARTED result code, since the 154b154630235935e1aab2a41eff9ed794d40084a02David Brown // "interactive" OTASP sequence never actually finish()es; 155b154630235935e1aab2a41eff9ed794d40084a02David Brown // it ends by directly launching the Home activity. 156b154630235935e1aab2a41eff9ed794d40084a02David Brown // 157b154630235935e1aab2a41eff9ed794d40084a02David Brown // However, in non-interactive OTASP, the 158b154630235935e1aab2a41eff9ed794d40084a02David Brown // InCallScreenShowActivation activity will set one of the 159b154630235935e1aab2a41eff9ed794d40084a02David Brown // RESULT_NONINTERACTIVE_* codes and immediately 160b154630235935e1aab2a41eff9ed794d40084a02David Brown // finish(), so we *will* see that result here. 161b154630235935e1aab2a41eff9ed794d40084a02David Brown // 162b154630235935e1aab2a41eff9ed794d40084a02David Brown // Also, resultCode will be RESULT_CANCELED (= 0) if the 163b154630235935e1aab2a41eff9ed794d40084a02David Brown // InCallScreenShowActivation activity didn't return any 164b154630235935e1aab2a41eff9ed794d40084a02David Brown // result, or crashed. 165b154630235935e1aab2a41eff9ed794d40084a02David Brown 166b154630235935e1aab2a41eff9ed794d40084a02David Brown switch (resultCode) { 167b154630235935e1aab2a41eff9ed794d40084a02David Brown case OtaUtils.RESULT_INTERACTIVE_OTASP_STARTED: 168b154630235935e1aab2a41eff9ed794d40084a02David Brown Log.i(LOG_TAG, "==> onActivityResult: INTERACTIVE_OTASP_STARTED"); 169b154630235935e1aab2a41eff9ed794d40084a02David Brown break; 170b154630235935e1aab2a41eff9ed794d40084a02David Brown case OtaUtils.RESULT_NONINTERACTIVE_OTASP_STARTED: 171b154630235935e1aab2a41eff9ed794d40084a02David Brown Log.i(LOG_TAG, "==> onActivityResult: NONINTERACTIVE_OTASP_STARTED"); 172b154630235935e1aab2a41eff9ed794d40084a02David Brown break; 173b154630235935e1aab2a41eff9ed794d40084a02David Brown case OtaUtils.RESULT_NONINTERACTIVE_OTASP_FAILED: 174b154630235935e1aab2a41eff9ed794d40084a02David Brown Log.w(LOG_TAG, "==> onActivityResult: NONINTERACTIVE_OTASP_FAILED"); 175b154630235935e1aab2a41eff9ed794d40084a02David Brown // This means we couldn't even *initiate* an outgoing call 176b154630235935e1aab2a41eff9ed794d40084a02David Brown // to start the OTASP process. Not sure what could cause this. 177b154630235935e1aab2a41eff9ed794d40084a02David Brown // TODO: Update UI to indicate the error. 178b154630235935e1aab2a41eff9ed794d40084a02David Brown break; 179b154630235935e1aab2a41eff9ed794d40084a02David Brown case RESULT_CANCELED: 180b154630235935e1aab2a41eff9ed794d40084a02David Brown Log.i(LOG_TAG, "==> onActivityResult: CANCELED"); 181b154630235935e1aab2a41eff9ed794d40084a02David Brown break; 182b154630235935e1aab2a41eff9ed794d40084a02David Brown default: 183b154630235935e1aab2a41eff9ed794d40084a02David Brown Log.i(LOG_TAG, "==> onActivityResult: unknown result: " + resultCode); 184b154630235935e1aab2a41eff9ed794d40084a02David Brown break; 185b154630235935e1aab2a41eff9ed794d40084a02David Brown } 186b154630235935e1aab2a41eff9ed794d40084a02David Brown } 187b154630235935e1aab2a41eff9ed794d40084a02David Brown } 188b154630235935e1aab2a41eff9ed794d40084a02David Brown 189b154630235935e1aab2a41eff9ed794d40084a02David Brown @Override 190b154630235935e1aab2a41eff9ed794d40084a02David Brown protected void onResume() { 191b154630235935e1aab2a41eff9ed794d40084a02David Brown Log.i(LOG_TAG, "onResume()..."); 192b154630235935e1aab2a41eff9ed794d40084a02David Brown super.onResume(); 193b154630235935e1aab2a41eff9ed794d40084a02David Brown } 194b154630235935e1aab2a41eff9ed794d40084a02David Brown 195b154630235935e1aab2a41eff9ed794d40084a02David Brown @Override 196b154630235935e1aab2a41eff9ed794d40084a02David Brown protected void onPause() { 197b154630235935e1aab2a41eff9ed794d40084a02David Brown Log.i(LOG_TAG, "onPause()..."); 198b154630235935e1aab2a41eff9ed794d40084a02David Brown super.onPause(); 199b154630235935e1aab2a41eff9ed794d40084a02David Brown } 200b154630235935e1aab2a41eff9ed794d40084a02David Brown 201b154630235935e1aab2a41eff9ed794d40084a02David Brown // View.OnClickListener implementation 202b154630235935e1aab2a41eff9ed794d40084a02David Brown @Override 203b154630235935e1aab2a41eff9ed794d40084a02David Brown public void onClick(View view) { 204b154630235935e1aab2a41eff9ed794d40084a02David Brown int id = view.getId(); 205b154630235935e1aab2a41eff9ed794d40084a02David Brown Log.i(LOG_TAG, "onClick(View " + view + ", id " + id + ")..."); 206b154630235935e1aab2a41eff9ed794d40084a02David Brown 207b154630235935e1aab2a41eff9ed794d40084a02David Brown switch (id) { 208b154630235935e1aab2a41eff9ed794d40084a02David Brown case R.id.button1: 209b154630235935e1aab2a41eff9ed794d40084a02David Brown Log.i(LOG_TAG, "onClick: button1..."); 210b154630235935e1aab2a41eff9ed794d40084a02David Brown makeTestCall(); 211b154630235935e1aab2a41eff9ed794d40084a02David Brown break; 212b154630235935e1aab2a41eff9ed794d40084a02David Brown default: 213b154630235935e1aab2a41eff9ed794d40084a02David Brown Log.w(LOG_TAG, "onClick: unexpected View: " + view); 214b154630235935e1aab2a41eff9ed794d40084a02David Brown break; 215b154630235935e1aab2a41eff9ed794d40084a02David Brown } 216b154630235935e1aab2a41eff9ed794d40084a02David Brown } 217b154630235935e1aab2a41eff9ed794d40084a02David Brown 218b154630235935e1aab2a41eff9ed794d40084a02David Brown private void makeTestCall() { 219b154630235935e1aab2a41eff9ed794d40084a02David Brown Log.i(LOG_TAG, "##### makeTestCall()..."); 220b154630235935e1aab2a41eff9ed794d40084a02David Brown 221b154630235935e1aab2a41eff9ed794d40084a02David Brown mProgressBar.setVisibility(View.VISIBLE); 222b154630235935e1aab2a41eff9ed794d40084a02David Brown mResult.setVisibility(View.INVISIBLE); 223b154630235935e1aab2a41eff9ed794d40084a02David Brown 224b154630235935e1aab2a41eff9ed794d40084a02David Brown try { 225b154630235935e1aab2a41eff9ed794d40084a02David Brown Intent performProvisioningIntent = 226b154630235935e1aab2a41eff9ed794d40084a02David Brown new Intent(OtaUtils.ACTION_PERFORM_CDMA_PROVISIONING); 227b154630235935e1aab2a41eff9ed794d40084a02David Brown 228b154630235935e1aab2a41eff9ed794d40084a02David Brown // Set the magic extra to force "non-interactive mode" for the 229b154630235935e1aab2a41eff9ed794d40084a02David Brown // OTASP call. 230b154630235935e1aab2a41eff9ed794d40084a02David Brown performProvisioningIntent.putExtra(OtaUtils.EXTRA_OVERRIDE_INTERACTIVE_MODE, false); 231b154630235935e1aab2a41eff9ed794d40084a02David Brown 232b154630235935e1aab2a41eff9ed794d40084a02David Brown // Pass a PendingIntent along with the 233b154630235935e1aab2a41eff9ed794d40084a02David Brown // ACTION_PERFORM_CDMA_PROVISIONING intent, which allows 234b154630235935e1aab2a41eff9ed794d40084a02David Brown // results to be sent back to us. 235b154630235935e1aab2a41eff9ed794d40084a02David Brown Intent resultIntent = new Intent(this, this.getClass()); 236b154630235935e1aab2a41eff9ed794d40084a02David Brown PendingIntent pendingResultIntent = 237b154630235935e1aab2a41eff9ed794d40084a02David Brown PendingIntent.getActivity(this, 0, 238b154630235935e1aab2a41eff9ed794d40084a02David Brown resultIntent, 0); 239b154630235935e1aab2a41eff9ed794d40084a02David Brown performProvisioningIntent.putExtra(OtaUtils.EXTRA_OTASP_RESULT_CODE_PENDING_INTENT, 240b154630235935e1aab2a41eff9ed794d40084a02David Brown pendingResultIntent); 241b154630235935e1aab2a41eff9ed794d40084a02David Brown 242b154630235935e1aab2a41eff9ed794d40084a02David Brown Log.i(LOG_TAG, "- Firing off PERFORM_CDMA_PROVISIONING intent: " 243b154630235935e1aab2a41eff9ed794d40084a02David Brown + performProvisioningIntent); 244b154630235935e1aab2a41eff9ed794d40084a02David Brown Bundle extras = performProvisioningIntent.getExtras(); 245b154630235935e1aab2a41eff9ed794d40084a02David Brown if (extras != null) Log.i(LOG_TAG, " - intent extras = " + extras); 246b154630235935e1aab2a41eff9ed794d40084a02David Brown 247b154630235935e1aab2a41eff9ed794d40084a02David Brown // Originally, we would simply call 248b154630235935e1aab2a41eff9ed794d40084a02David Brown // startActivity(performProvisioningIntent); 249b154630235935e1aab2a41eff9ed794d40084a02David Brown // to launch the InCallScreenShowActivation activity and *not* expect 250b154630235935e1aab2a41eff9ed794d40084a02David Brown // a result. (Note that calling the plain startActivity() 251b154630235935e1aab2a41eff9ed794d40084a02David Brown // method *guarantees* that your onActivityResult() method 252b154630235935e1aab2a41eff9ed794d40084a02David Brown // will NOT be called at all.) 253b154630235935e1aab2a41eff9ed794d40084a02David Brown 254b154630235935e1aab2a41eff9ed794d40084a02David Brown // Now, we ask for a result: 255b154630235935e1aab2a41eff9ed794d40084a02David Brown startActivityForResult(performProvisioningIntent, 256b154630235935e1aab2a41eff9ed794d40084a02David Brown PERFORM_CDMA_PROVISIONING_REQUEST_CODE); 257b154630235935e1aab2a41eff9ed794d40084a02David Brown 258b154630235935e1aab2a41eff9ed794d40084a02David Brown // On a non-voice-capable device, the InCallScreenShowActivation activity 259b154630235935e1aab2a41eff9ed794d40084a02David Brown // will kick off the OTASP call and immediately return, passing 260b154630235935e1aab2a41eff9ed794d40084a02David Brown // the code RESULT_STARTED_NONINTERACTIVE_OTASP to our 261b154630235935e1aab2a41eff9ed794d40084a02David Brown // onActivityResult method. 262b154630235935e1aab2a41eff9ed794d40084a02David Brown 263b154630235935e1aab2a41eff9ed794d40084a02David Brown } catch (ActivityNotFoundException e) { 264b154630235935e1aab2a41eff9ed794d40084a02David Brown Log.w(LOG_TAG, "Couldn't show activiation UI; ActivityNotFoundException: " + e); 265b154630235935e1aab2a41eff9ed794d40084a02David Brown } 266b154630235935e1aab2a41eff9ed794d40084a02David Brown } 267b154630235935e1aab2a41eff9ed794d40084a02David Brown} 268