1835704773b29fe1326091555ff76ac90f2531038Santos Cordon/* 2835704773b29fe1326091555ff76ac90f2531038Santos Cordon * Copyright (C) 2013 The Android Open Source Project 3835704773b29fe1326091555ff76ac90f2531038Santos Cordon * 4835704773b29fe1326091555ff76ac90f2531038Santos Cordon * Licensed under the Apache License, Version 2.0 (the "License"); 5835704773b29fe1326091555ff76ac90f2531038Santos Cordon * you may not use this file except in compliance with the License. 6835704773b29fe1326091555ff76ac90f2531038Santos Cordon * You may obtain a copy of the License at 7835704773b29fe1326091555ff76ac90f2531038Santos Cordon * 8835704773b29fe1326091555ff76ac90f2531038Santos Cordon * http://www.apache.org/licenses/LICENSE-2.0 9835704773b29fe1326091555ff76ac90f2531038Santos Cordon * 10835704773b29fe1326091555ff76ac90f2531038Santos Cordon * Unless required by applicable law or agreed to in writing, software 11835704773b29fe1326091555ff76ac90f2531038Santos Cordon * distributed under the License is distributed on an "AS IS" BASIS, 12835704773b29fe1326091555ff76ac90f2531038Santos Cordon * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13835704773b29fe1326091555ff76ac90f2531038Santos Cordon * See the License for the specific language governing permissions and 14835704773b29fe1326091555ff76ac90f2531038Santos Cordon * limitations under the License. 15835704773b29fe1326091555ff76ac90f2531038Santos Cordon */ 16835704773b29fe1326091555ff76ac90f2531038Santos Cordon 17835704773b29fe1326091555ff76ac90f2531038Santos Cordonpackage com.android.phone; 18835704773b29fe1326091555ff76ac90f2531038Santos Cordon 19835704773b29fe1326091555ff76ac90f2531038Santos Cordonimport android.app.Activity; 20835704773b29fe1326091555ff76ac90f2531038Santos Cordonimport android.app.AlertDialog; 21835704773b29fe1326091555ff76ac90f2531038Santos Cordonimport android.app.PendingIntent; 22835704773b29fe1326091555ff76ac90f2531038Santos Cordonimport android.content.DialogInterface; 23835704773b29fe1326091555ff76ac90f2531038Santos Cordonimport android.os.Bundle; 24835704773b29fe1326091555ff76ac90f2531038Santos Cordonimport android.util.Log; 25835704773b29fe1326091555ff76ac90f2531038Santos Cordon 26835704773b29fe1326091555ff76ac90f2531038Santos Cordon/** 27835704773b29fe1326091555ff76ac90f2531038Santos Cordon * Starts and displays status for Hands Free Activation (HFA). 28835704773b29fe1326091555ff76ac90f2531038Santos Cordon * 2900d7a430ac98cd65b7ae3afca5fa9509f1480edaSantos Cordon * This class operates with Hands Free Activation apps. It comes up during activation 3000d7a430ac98cd65b7ae3afca5fa9509f1480edaSantos Cordon * requests that occur outside of setup wizard and so provides its own UI. 3100d7a430ac98cd65b7ae3afca5fa9509f1480edaSantos Cordon * It uses {@link HfaLogic} to perform the actual activation and during the process 3200d7a430ac98cd65b7ae3afca5fa9509f1480edaSantos Cordon * displays a "performing activation..." dialog. This will remain up until the user 3300d7a430ac98cd65b7ae3afca5fa9509f1480edaSantos Cordon * chooses to skip the activation (still happens in the background) or the activation 3400d7a430ac98cd65b7ae3afca5fa9509f1480edaSantos Cordon * is successful. Upon failure, the dialog also goes away but a subsequent dialog will 3500d7a430ac98cd65b7ae3afca5fa9509f1480edaSantos Cordon * ask the user if they would like to try again or cancel. 36835704773b29fe1326091555ff76ac90f2531038Santos Cordon */ 37835704773b29fe1326091555ff76ac90f2531038Santos Cordonpublic class HfaActivity extends Activity { 38835704773b29fe1326091555ff76ac90f2531038Santos Cordon private static final String TAG = HfaActivity.class.getSimpleName(); 39835704773b29fe1326091555ff76ac90f2531038Santos Cordon 40835704773b29fe1326091555ff76ac90f2531038Santos Cordon private AlertDialog mDialog; 4100d7a430ac98cd65b7ae3afca5fa9509f1480edaSantos Cordon private HfaLogic mHfaLogic; 42835704773b29fe1326091555ff76ac90f2531038Santos Cordon 43835704773b29fe1326091555ff76ac90f2531038Santos Cordon @Override 44835704773b29fe1326091555ff76ac90f2531038Santos Cordon protected void onCreate(Bundle savedInstanceState) { 45835704773b29fe1326091555ff76ac90f2531038Santos Cordon super.onCreate(savedInstanceState); 46cd76f8b160e0e4b2e5ccf34c0c5e1e58a0bb8b72Santos Cordon Log.i(TAG, "onCreate"); 47835704773b29fe1326091555ff76ac90f2531038Santos Cordon 48cd76f8b160e0e4b2e5ccf34c0c5e1e58a0bb8b72Santos Cordon final PendingIntent otaResponseIntent = getIntent().getParcelableExtra( 49cd76f8b160e0e4b2e5ccf34c0c5e1e58a0bb8b72Santos Cordon OtaUtils.EXTRA_OTASP_RESULT_CODE_PENDING_INTENT); 50835704773b29fe1326091555ff76ac90f2531038Santos Cordon 5100d7a430ac98cd65b7ae3afca5fa9509f1480edaSantos Cordon mHfaLogic = new HfaLogic(this.getApplicationContext(), new HfaLogic.HfaLogicCallback() { 5200d7a430ac98cd65b7ae3afca5fa9509f1480edaSantos Cordon @Override 5300d7a430ac98cd65b7ae3afca5fa9509f1480edaSantos Cordon public void onSuccess() { 5400d7a430ac98cd65b7ae3afca5fa9509f1480edaSantos Cordon onHfaSuccess(); 5500d7a430ac98cd65b7ae3afca5fa9509f1480edaSantos Cordon } 5600d7a430ac98cd65b7ae3afca5fa9509f1480edaSantos Cordon 5700d7a430ac98cd65b7ae3afca5fa9509f1480edaSantos Cordon @Override 5800d7a430ac98cd65b7ae3afca5fa9509f1480edaSantos Cordon public void onError(String error) { 5900d7a430ac98cd65b7ae3afca5fa9509f1480edaSantos Cordon onHfaError(error); 6000d7a430ac98cd65b7ae3afca5fa9509f1480edaSantos Cordon } 61cd76f8b160e0e4b2e5ccf34c0c5e1e58a0bb8b72Santos Cordon }, otaResponseIntent); 6200d7a430ac98cd65b7ae3afca5fa9509f1480edaSantos Cordon 63835704773b29fe1326091555ff76ac90f2531038Santos Cordon startProvisioning(); 64835704773b29fe1326091555ff76ac90f2531038Santos Cordon } 65835704773b29fe1326091555ff76ac90f2531038Santos Cordon 66835704773b29fe1326091555ff76ac90f2531038Santos Cordon @Override 67835704773b29fe1326091555ff76ac90f2531038Santos Cordon protected void onDestroy() { 68835704773b29fe1326091555ff76ac90f2531038Santos Cordon super.onDestroy(); 69835704773b29fe1326091555ff76ac90f2531038Santos Cordon 70cd76f8b160e0e4b2e5ccf34c0c5e1e58a0bb8b72Santos Cordon Log.i(TAG, "onDestroy"); 71835704773b29fe1326091555ff76ac90f2531038Santos Cordon 72835704773b29fe1326091555ff76ac90f2531038Santos Cordon if (mDialog != null && mDialog.isShowing()) { 73835704773b29fe1326091555ff76ac90f2531038Santos Cordon mDialog.dismiss(); 74835704773b29fe1326091555ff76ac90f2531038Santos Cordon mDialog = null; 75835704773b29fe1326091555ff76ac90f2531038Santos Cordon } 76835704773b29fe1326091555ff76ac90f2531038Santos Cordon } 77835704773b29fe1326091555ff76ac90f2531038Santos Cordon 78835704773b29fe1326091555ff76ac90f2531038Santos Cordon private void startProvisioning() { 79835704773b29fe1326091555ff76ac90f2531038Santos Cordon buildAndShowDialog(); 8000d7a430ac98cd65b7ae3afca5fa9509f1480edaSantos Cordon mHfaLogic.start(); 81835704773b29fe1326091555ff76ac90f2531038Santos Cordon } 82835704773b29fe1326091555ff76ac90f2531038Santos Cordon 83835704773b29fe1326091555ff76ac90f2531038Santos Cordon private void buildAndShowDialog() { 8430b68dbdf73d9bf7295f49a0e6bd7b4361a494ceYorke Lee mDialog = new AlertDialog.Builder(this, AlertDialog.THEME_DEVICE_DEFAULT_LIGHT) 85835704773b29fe1326091555ff76ac90f2531038Santos Cordon .setTitle(R.string.ota_hfa_activation_title) 86835704773b29fe1326091555ff76ac90f2531038Santos Cordon .setMessage(R.string.ota_hfa_activation_dialog_message) 87835704773b29fe1326091555ff76ac90f2531038Santos Cordon .setPositiveButton(R.string.ota_skip_activation_dialog_skip_label, 88835704773b29fe1326091555ff76ac90f2531038Santos Cordon new DialogInterface.OnClickListener() { 89835704773b29fe1326091555ff76ac90f2531038Santos Cordon @Override 90835704773b29fe1326091555ff76ac90f2531038Santos Cordon public void onClick(DialogInterface di, int which) { 91cd76f8b160e0e4b2e5ccf34c0c5e1e58a0bb8b72Santos Cordon onUserSkip(); 92835704773b29fe1326091555ff76ac90f2531038Santos Cordon }}) 93835704773b29fe1326091555ff76ac90f2531038Santos Cordon /*.setOnCancelListener(new DialogInterface.OnCancelListener() { 94835704773b29fe1326091555ff76ac90f2531038Santos Cordon @Override 95835704773b29fe1326091555ff76ac90f2531038Santos Cordon public void onCancel(DialogInterface di) { 9600d7a430ac98cd65b7ae3afca5fa9509f1480edaSantos Cordon sendFinalResponse(OTASP_USER_SKIPPED); 97835704773b29fe1326091555ff76ac90f2531038Santos Cordon }})*/ 98835704773b29fe1326091555ff76ac90f2531038Santos Cordon .create(); 99835704773b29fe1326091555ff76ac90f2531038Santos Cordon 10000d7a430ac98cd65b7ae3afca5fa9509f1480edaSantos Cordon // Do not allow user to dismiss dialog unless they are clicking "skip" 10100d7a430ac98cd65b7ae3afca5fa9509f1480edaSantos Cordon mDialog.setCanceledOnTouchOutside(false); 10200d7a430ac98cd65b7ae3afca5fa9509f1480edaSantos Cordon mDialog.setCancelable(false); 10300d7a430ac98cd65b7ae3afca5fa9509f1480edaSantos Cordon 104cd76f8b160e0e4b2e5ccf34c0c5e1e58a0bb8b72Santos Cordon Log.i(TAG, "showing dialog"); 105835704773b29fe1326091555ff76ac90f2531038Santos Cordon mDialog.show(); 106835704773b29fe1326091555ff76ac90f2531038Santos Cordon } 107835704773b29fe1326091555ff76ac90f2531038Santos Cordon 108835704773b29fe1326091555ff76ac90f2531038Santos Cordon private void onHfaError(String errorMsg) { 109835704773b29fe1326091555ff76ac90f2531038Santos Cordon mDialog.dismiss(); 110835704773b29fe1326091555ff76ac90f2531038Santos Cordon 11130b68dbdf73d9bf7295f49a0e6bd7b4361a494ceYorke Lee AlertDialog errorDialog = new AlertDialog.Builder(this, 11230b68dbdf73d9bf7295f49a0e6bd7b4361a494ceYorke Lee AlertDialog.THEME_DEVICE_DEFAULT_LIGHT) 113835704773b29fe1326091555ff76ac90f2531038Santos Cordon .setMessage(errorMsg) 114835704773b29fe1326091555ff76ac90f2531038Santos Cordon .setPositiveButton(R.string.ota_skip_activation_dialog_skip_label, 115835704773b29fe1326091555ff76ac90f2531038Santos Cordon new DialogInterface.OnClickListener() { 116835704773b29fe1326091555ff76ac90f2531038Santos Cordon @Override 117835704773b29fe1326091555ff76ac90f2531038Santos Cordon public void onClick(DialogInterface di, int which) { 118835704773b29fe1326091555ff76ac90f2531038Santos Cordon di.dismiss(); 119cd76f8b160e0e4b2e5ccf34c0c5e1e58a0bb8b72Santos Cordon onUserSkip(); 120835704773b29fe1326091555ff76ac90f2531038Santos Cordon } 121835704773b29fe1326091555ff76ac90f2531038Santos Cordon }) 122835704773b29fe1326091555ff76ac90f2531038Santos Cordon .setNegativeButton(R.string.ota_try_again, 123835704773b29fe1326091555ff76ac90f2531038Santos Cordon new DialogInterface.OnClickListener() { 124835704773b29fe1326091555ff76ac90f2531038Santos Cordon @Override 125835704773b29fe1326091555ff76ac90f2531038Santos Cordon public void onClick(DialogInterface di, int which) { 126835704773b29fe1326091555ff76ac90f2531038Santos Cordon di.dismiss(); 127835704773b29fe1326091555ff76ac90f2531038Santos Cordon startProvisioning(); 128835704773b29fe1326091555ff76ac90f2531038Santos Cordon } 129835704773b29fe1326091555ff76ac90f2531038Santos Cordon }) 130835704773b29fe1326091555ff76ac90f2531038Santos Cordon .create(); 131835704773b29fe1326091555ff76ac90f2531038Santos Cordon 132835704773b29fe1326091555ff76ac90f2531038Santos Cordon errorDialog.show(); 133835704773b29fe1326091555ff76ac90f2531038Santos Cordon } 134835704773b29fe1326091555ff76ac90f2531038Santos Cordon 135835704773b29fe1326091555ff76ac90f2531038Santos Cordon private void onHfaSuccess() { 136cd76f8b160e0e4b2e5ccf34c0c5e1e58a0bb8b72Santos Cordon finish(); 137835704773b29fe1326091555ff76ac90f2531038Santos Cordon } 138835704773b29fe1326091555ff76ac90f2531038Santos Cordon 139cd76f8b160e0e4b2e5ccf34c0c5e1e58a0bb8b72Santos Cordon private void onUserSkip() { 140835704773b29fe1326091555ff76ac90f2531038Santos Cordon finish(); 141835704773b29fe1326091555ff76ac90f2531038Santos Cordon } 142cd76f8b160e0e4b2e5ccf34c0c5e1e58a0bb8b72Santos Cordon 143835704773b29fe1326091555ff76ac90f2531038Santos Cordon} 144