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