1/*
2 * Copyright (c) 2008-2009, Motorola, Inc.
3 *
4 * All rights reserved.
5 *
6 * Redistribution and use in source and binary forms, with or without
7 * modification, are permitted provided that the following conditions are met:
8 *
9 * - Redistributions of source code must retain the above copyright notice,
10 * this list of conditions and the following disclaimer.
11 *
12 * - Redistributions in binary form must reproduce the above copyright notice,
13 * this list of conditions and the following disclaimer in the documentation
14 * and/or other materials provided with the distribution.
15 *
16 * - Neither the name of the Motorola, Inc. nor the names of its contributors
17 * may be used to endorse or promote products derived from this software
18 * without specific prior written permission.
19 *
20 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
21 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
22 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
23 * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
24 * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
25 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
26 * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
27 * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
28 * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
29 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
30 * POSSIBILITY OF SUCH DAMAGE.
31 */
32
33package com.android.bluetooth.opp;
34
35import com.android.bluetooth.R;
36import com.android.internal.app.AlertActivity;
37import com.android.internal.app.AlertController;
38
39import android.bluetooth.BluetoothAdapter;
40import android.content.BroadcastReceiver;
41import android.content.Context;
42import android.content.Intent;
43import android.content.IntentFilter;
44import android.os.Bundle;
45import android.os.Handler;
46import android.os.Message;
47import android.util.Log;
48import android.view.KeyEvent;
49import android.view.View;
50import android.widget.TextView;
51
52/**
53 * This class is designed to show BT enabling progress.
54 */
55public class BluetoothOppBtEnablingActivity extends AlertActivity {
56    private static final String TAG = "BluetoothOppEnablingActivity";
57
58    private static final boolean D = Constants.DEBUG;
59
60    private static final boolean V = Constants.VERBOSE;
61
62    private static final int BT_ENABLING_TIMEOUT = 0;
63
64    private static final int BT_ENABLING_TIMEOUT_VALUE = 20000;
65
66    private boolean mRegistered = false;
67
68    @Override
69    protected void onCreate(Bundle savedInstanceState) {
70        super.onCreate(savedInstanceState);
71
72        // If BT is already enabled jus return.
73        BluetoothAdapter adapter = BluetoothAdapter.getDefaultAdapter();
74        if (adapter.isEnabled()) {
75            finish();
76            return;
77        }
78
79        IntentFilter filter = new IntentFilter(BluetoothAdapter.ACTION_STATE_CHANGED);
80        registerReceiver(mBluetoothReceiver, filter);
81        mRegistered = true;
82
83        // Set up the "dialog"
84        final AlertController.AlertParams p = mAlertParams;
85        p.mIconId = android.R.drawable.ic_dialog_info;
86        p.mTitle = getString(R.string.enabling_progress_title);
87        p.mView = createView();
88        setupAlert();
89
90        // Add timeout for enabling progress
91        mTimeoutHandler.sendMessageDelayed(mTimeoutHandler.obtainMessage(BT_ENABLING_TIMEOUT),
92                BT_ENABLING_TIMEOUT_VALUE);
93    }
94
95    private View createView() {
96        View view = getLayoutInflater().inflate(R.layout.bt_enabling_progress, null);
97        TextView contentView = (TextView)view.findViewById(R.id.progress_info);
98        contentView.setText(getString(R.string.enabling_progress_content));
99
100        return view;
101    }
102
103    @Override
104    public boolean onKeyDown(int keyCode, KeyEvent event) {
105        if (keyCode == KeyEvent.KEYCODE_BACK) {
106            if (D) Log.d(TAG, "onKeyDown() called; Key: back key");
107            mTimeoutHandler.removeMessages(BT_ENABLING_TIMEOUT);
108            cancelSendingProgress();
109        }
110        return true;
111    }
112
113    @Override
114    protected void onDestroy() {
115        super.onDestroy();
116        if (mRegistered) {
117            unregisterReceiver(mBluetoothReceiver);
118        }
119    }
120
121    private final Handler mTimeoutHandler = new Handler() {
122        @Override
123        public void handleMessage(Message msg) {
124            switch (msg.what) {
125                case BT_ENABLING_TIMEOUT:
126                    if (V) Log.v(TAG, "Received BT_ENABLING_TIMEOUT msg.");
127                    cancelSendingProgress();
128                    break;
129                default:
130                    break;
131            }
132        }
133    };
134
135    private final BroadcastReceiver mBluetoothReceiver = new BroadcastReceiver() {
136        @Override
137        public void onReceive(Context context, Intent intent) {
138            String action = intent.getAction();
139            if (V) Log.v(TAG, "Received intent: " + action) ;
140            if (action.equals(BluetoothAdapter.ACTION_STATE_CHANGED)) {
141                switch (intent.getIntExtra(BluetoothAdapter.EXTRA_STATE, BluetoothAdapter.ERROR)) {
142                    case BluetoothAdapter.STATE_ON:
143                        mTimeoutHandler.removeMessages(BT_ENABLING_TIMEOUT);
144                        finish();
145                        break;
146                    default:
147                        break;
148                }
149            }
150        }
151    };
152
153    private void cancelSendingProgress() {
154        BluetoothOppManager mOppManager = BluetoothOppManager.getInstance(this);
155        if (mOppManager.mSendingFlag) {
156            mOppManager.mSendingFlag = false;
157        }
158        finish();
159    }
160}
161