BluetoothController.java revision 564f16a8d71b79b5e07a597a8f188efa8d80a0ee
13b573f7bf1c5736d500e39013b8d32478a1429e6Gloria Wang/*
23b573f7bf1c5736d500e39013b8d32478a1429e6Gloria Wang * Copyright (C) 2008 The Android Open Source Project
33b573f7bf1c5736d500e39013b8d32478a1429e6Gloria Wang *
43b573f7bf1c5736d500e39013b8d32478a1429e6Gloria Wang * Licensed under the Apache License, Version 2.0 (the "License");
53b573f7bf1c5736d500e39013b8d32478a1429e6Gloria Wang * you may not use this file except in compliance with the License.
63b573f7bf1c5736d500e39013b8d32478a1429e6Gloria Wang * You may obtain a copy of the License at
73b573f7bf1c5736d500e39013b8d32478a1429e6Gloria Wang *
83b573f7bf1c5736d500e39013b8d32478a1429e6Gloria Wang *      http://www.apache.org/licenses/LICENSE-2.0
93b573f7bf1c5736d500e39013b8d32478a1429e6Gloria Wang *
103b573f7bf1c5736d500e39013b8d32478a1429e6Gloria Wang * Unless required by applicable law or agreed to in writing, software
113b573f7bf1c5736d500e39013b8d32478a1429e6Gloria Wang * distributed under the License is distributed on an "AS IS" BASIS,
123b573f7bf1c5736d500e39013b8d32478a1429e6Gloria Wang * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
133b573f7bf1c5736d500e39013b8d32478a1429e6Gloria Wang * See the License for the specific language governing permissions and
143b573f7bf1c5736d500e39013b8d32478a1429e6Gloria Wang * limitations under the License.
153b573f7bf1c5736d500e39013b8d32478a1429e6Gloria Wang */
163b573f7bf1c5736d500e39013b8d32478a1429e6Gloria Wang
173b573f7bf1c5736d500e39013b8d32478a1429e6Gloria Wangpackage com.android.systemui.statusbar.policy;
183b573f7bf1c5736d500e39013b8d32478a1429e6Gloria Wang
193b573f7bf1c5736d500e39013b8d32478a1429e6Gloria Wangimport java.util.ArrayList;
203b573f7bf1c5736d500e39013b8d32478a1429e6Gloria Wang
213b573f7bf1c5736d500e39013b8d32478a1429e6Gloria Wangimport android.bluetooth.BluetoothAdapter;
223b573f7bf1c5736d500e39013b8d32478a1429e6Gloria Wangimport android.content.BroadcastReceiver;
233b573f7bf1c5736d500e39013b8d32478a1429e6Gloria Wangimport android.content.Context;
243b573f7bf1c5736d500e39013b8d32478a1429e6Gloria Wangimport android.content.Intent;
253b573f7bf1c5736d500e39013b8d32478a1429e6Gloria Wangimport android.content.IntentFilter;
263b573f7bf1c5736d500e39013b8d32478a1429e6Gloria Wangimport android.view.View;
273b573f7bf1c5736d500e39013b8d32478a1429e6Gloria Wangimport android.widget.ImageView;
283b573f7bf1c5736d500e39013b8d32478a1429e6Gloria Wang
293b573f7bf1c5736d500e39013b8d32478a1429e6Gloria Wangimport com.android.systemui.R;
303b573f7bf1c5736d500e39013b8d32478a1429e6Gloria Wang
313b573f7bf1c5736d500e39013b8d32478a1429e6Gloria Wangpublic class BluetoothController extends BroadcastReceiver {
323b573f7bf1c5736d500e39013b8d32478a1429e6Gloria Wang    private static final String TAG = "StatusBar.BluetoothController";
333b573f7bf1c5736d500e39013b8d32478a1429e6Gloria Wang
343b573f7bf1c5736d500e39013b8d32478a1429e6Gloria Wang    private Context mContext;
353b573f7bf1c5736d500e39013b8d32478a1429e6Gloria Wang    private ArrayList<ImageView> mIconViews = new ArrayList<ImageView>();
363b573f7bf1c5736d500e39013b8d32478a1429e6Gloria Wang
373b573f7bf1c5736d500e39013b8d32478a1429e6Gloria Wang    private int mIconId = R.drawable.stat_sys_data_bluetooth;
383b573f7bf1c5736d500e39013b8d32478a1429e6Gloria Wang    private int mContentDescriptionId = 0;
393b573f7bf1c5736d500e39013b8d32478a1429e6Gloria Wang    private boolean mEnabled = false;
403b573f7bf1c5736d500e39013b8d32478a1429e6Gloria Wang
413b573f7bf1c5736d500e39013b8d32478a1429e6Gloria Wang    public BluetoothController(Context context) {
423b573f7bf1c5736d500e39013b8d32478a1429e6Gloria Wang        mContext = context;
433b573f7bf1c5736d500e39013b8d32478a1429e6Gloria Wang
443b573f7bf1c5736d500e39013b8d32478a1429e6Gloria Wang        IntentFilter filter = new IntentFilter();
453b573f7bf1c5736d500e39013b8d32478a1429e6Gloria Wang        filter.addAction(BluetoothAdapter.ACTION_STATE_CHANGED);
463b573f7bf1c5736d500e39013b8d32478a1429e6Gloria Wang        filter.addAction(BluetoothAdapter.ACTION_CONNECTION_STATE_CHANGED);
473b573f7bf1c5736d500e39013b8d32478a1429e6Gloria Wang        context.registerReceiver(this, filter);
483b573f7bf1c5736d500e39013b8d32478a1429e6Gloria Wang
493b573f7bf1c5736d500e39013b8d32478a1429e6Gloria Wang        final BluetoothAdapter adapter = BluetoothAdapter.getDefaultAdapter();
503b573f7bf1c5736d500e39013b8d32478a1429e6Gloria Wang        if (adapter != null) {
513b573f7bf1c5736d500e39013b8d32478a1429e6Gloria Wang            handleAdapterStateChange(adapter.getState());
523b573f7bf1c5736d500e39013b8d32478a1429e6Gloria Wang            handleConnectionStateChange(adapter.getConnectionState());
533b573f7bf1c5736d500e39013b8d32478a1429e6Gloria Wang        }
543b573f7bf1c5736d500e39013b8d32478a1429e6Gloria Wang        refreshViews();
553b573f7bf1c5736d500e39013b8d32478a1429e6Gloria Wang    }
563b573f7bf1c5736d500e39013b8d32478a1429e6Gloria Wang
573b573f7bf1c5736d500e39013b8d32478a1429e6Gloria Wang    public void addIconView(ImageView v) {
583b573f7bf1c5736d500e39013b8d32478a1429e6Gloria Wang        mIconViews.add(v);
593b573f7bf1c5736d500e39013b8d32478a1429e6Gloria Wang    }
603b573f7bf1c5736d500e39013b8d32478a1429e6Gloria Wang
613b573f7bf1c5736d500e39013b8d32478a1429e6Gloria Wang    @Override
623b573f7bf1c5736d500e39013b8d32478a1429e6Gloria Wang    public void onReceive(Context context, Intent intent) {
633b573f7bf1c5736d500e39013b8d32478a1429e6Gloria Wang        final String action = intent.getAction();
643b573f7bf1c5736d500e39013b8d32478a1429e6Gloria Wang
653b573f7bf1c5736d500e39013b8d32478a1429e6Gloria Wang        if (action.equals(BluetoothAdapter.ACTION_STATE_CHANGED)) {
663b573f7bf1c5736d500e39013b8d32478a1429e6Gloria Wang            handleAdapterStateChange(
673b573f7bf1c5736d500e39013b8d32478a1429e6Gloria Wang                    intent.getIntExtra(BluetoothAdapter.EXTRA_STATE, BluetoothAdapter.ERROR));
683b573f7bf1c5736d500e39013b8d32478a1429e6Gloria Wang        } else if (action.equals(BluetoothAdapter.ACTION_CONNECTION_STATE_CHANGED)) {
693b573f7bf1c5736d500e39013b8d32478a1429e6Gloria Wang            handleConnectionStateChange(
703b573f7bf1c5736d500e39013b8d32478a1429e6Gloria Wang                    intent.getIntExtra(BluetoothAdapter.EXTRA_CONNECTION_STATE,
713b573f7bf1c5736d500e39013b8d32478a1429e6Gloria Wang                        BluetoothAdapter.STATE_DISCONNECTED));
723b573f7bf1c5736d500e39013b8d32478a1429e6Gloria Wang        }
733b573f7bf1c5736d500e39013b8d32478a1429e6Gloria Wang        refreshViews();
743b573f7bf1c5736d500e39013b8d32478a1429e6Gloria Wang    }
753b573f7bf1c5736d500e39013b8d32478a1429e6Gloria Wang
763b573f7bf1c5736d500e39013b8d32478a1429e6Gloria Wang    public void handleAdapterStateChange(int adapterState) {
773b573f7bf1c5736d500e39013b8d32478a1429e6Gloria Wang        mEnabled = (adapterState == BluetoothAdapter.STATE_ON);
783b573f7bf1c5736d500e39013b8d32478a1429e6Gloria Wang    }
793b573f7bf1c5736d500e39013b8d32478a1429e6Gloria Wang
803b573f7bf1c5736d500e39013b8d32478a1429e6Gloria Wang    public void handleConnectionStateChange(int connectionState) {
813b573f7bf1c5736d500e39013b8d32478a1429e6Gloria Wang        final boolean connected = (connectionState == BluetoothAdapter.STATE_CONNECTED);
823b573f7bf1c5736d500e39013b8d32478a1429e6Gloria Wang        if (connected) {
833b573f7bf1c5736d500e39013b8d32478a1429e6Gloria Wang            mIconId = R.drawable.stat_sys_data_bluetooth_connected;
843b573f7bf1c5736d500e39013b8d32478a1429e6Gloria Wang            mContentDescriptionId = R.string.accessibility_bluetooth_connected;
853b573f7bf1c5736d500e39013b8d32478a1429e6Gloria Wang        } else {
863b573f7bf1c5736d500e39013b8d32478a1429e6Gloria Wang            mIconId = R.drawable.stat_sys_data_bluetooth;
873b573f7bf1c5736d500e39013b8d32478a1429e6Gloria Wang            mContentDescriptionId = R.string.accessibility_bluetooth_disconnected;
883b573f7bf1c5736d500e39013b8d32478a1429e6Gloria Wang        }
893b573f7bf1c5736d500e39013b8d32478a1429e6Gloria Wang    }
903b573f7bf1c5736d500e39013b8d32478a1429e6Gloria Wang
913b573f7bf1c5736d500e39013b8d32478a1429e6Gloria Wang    public void refreshViews() {
923b573f7bf1c5736d500e39013b8d32478a1429e6Gloria Wang        int N = mIconViews.size();
933b573f7bf1c5736d500e39013b8d32478a1429e6Gloria Wang        for (int i=0; i<N; i++) {
943b573f7bf1c5736d500e39013b8d32478a1429e6Gloria Wang            ImageView v = mIconViews.get(i);
953b573f7bf1c5736d500e39013b8d32478a1429e6Gloria Wang            v.setImageResource(mIconId);
963b573f7bf1c5736d500e39013b8d32478a1429e6Gloria Wang            v.setVisibility(mEnabled ? View.VISIBLE : View.GONE);
973b573f7bf1c5736d500e39013b8d32478a1429e6Gloria Wang            v.setContentDescription((mContentDescriptionId == 0)
983b573f7bf1c5736d500e39013b8d32478a1429e6Gloria Wang                    ? null
993b573f7bf1c5736d500e39013b8d32478a1429e6Gloria Wang                    : mContext.getString(mContentDescriptionId));
1003b573f7bf1c5736d500e39013b8d32478a1429e6Gloria Wang        }
1013b573f7bf1c5736d500e39013b8d32478a1429e6Gloria Wang    }
1023b573f7bf1c5736d500e39013b8d32478a1429e6Gloria Wang}
1033b573f7bf1c5736d500e39013b8d32478a1429e6Gloria Wang