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