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