1 /* 2 * Copyright (C) 2008 The Android Open Source Project 3 * 4 * Licensed under the Apache License, Version 2.0 (the "License"); 5 * you may not use this file except in compliance with the License. 6 * You may obtain a copy of the License at 7 * 8 * http://www.apache.org/licenses/LICENSE-2.0 9 * 10 * Unless required by applicable law or agreed to in writing, software 11 * distributed under the License is distributed on an "AS IS" BASIS, 12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 * See the License for the specific language governing permissions and 14 * limitations under the License. 15 */ 16 17 package com.android.settings.bluetooth; 18 19 import com.android.settings.R; 20 21 import android.content.Context; 22 import android.preference.Preference; 23 import android.util.TypedValue; 24 import android.view.View; 25 import android.widget.ImageView; 26 27 /** 28 * BluetoothDevicePreference is the preference type used to display each remote 29 * Bluetooth device in the Bluetooth Settings screen. 30 */ 31 public class BluetoothDevicePreference extends Preference implements LocalBluetoothDevice.Callback { 32 private static final String TAG = "BluetoothDevicePreference"; 33 34 private static int sDimAlpha = Integer.MIN_VALUE; 35 36 private LocalBluetoothDevice mLocalDevice; 37 38 /** 39 * Cached local copy of whether the device is busy. This is only updated 40 * from {@link #onDeviceAttributesChanged(LocalBluetoothDevice)}. 41 */ 42 private boolean mIsBusy; 43 BluetoothDevicePreference(Context context, LocalBluetoothDevice localDevice)44 public BluetoothDevicePreference(Context context, LocalBluetoothDevice localDevice) { 45 super(context); 46 47 if (sDimAlpha == Integer.MIN_VALUE) { 48 TypedValue outValue = new TypedValue(); 49 context.getTheme().resolveAttribute(android.R.attr.disabledAlpha, outValue, true); 50 sDimAlpha = (int) (outValue.getFloat() * 255); 51 } 52 53 mLocalDevice = localDevice; 54 55 setLayoutResource(R.layout.preference_bluetooth); 56 57 localDevice.registerCallback(this); 58 59 onDeviceAttributesChanged(localDevice); 60 } 61 getDevice()62 public LocalBluetoothDevice getDevice() { 63 return mLocalDevice; 64 } 65 66 @Override onPrepareForRemoval()67 protected void onPrepareForRemoval() { 68 super.onPrepareForRemoval(); 69 mLocalDevice.unregisterCallback(this); 70 } 71 onDeviceAttributesChanged(LocalBluetoothDevice device)72 public void onDeviceAttributesChanged(LocalBluetoothDevice device) { 73 74 /* 75 * The preference framework takes care of making sure the value has 76 * changed before proceeding. 77 */ 78 79 setTitle(mLocalDevice.getName()); 80 81 /* 82 * TODO: Showed "Paired" even though it was "Connected". This may be 83 * related to BluetoothHeadset not bound to the actual 84 * BluetoothHeadsetService when we got here. 85 */ 86 setSummary(mLocalDevice.getSummary()); 87 88 // Used to gray out the item 89 mIsBusy = mLocalDevice.isBusy(); 90 91 // Data has changed 92 notifyChanged(); 93 94 // This could affect ordering, so notify that also 95 notifyHierarchyChanged(); 96 } 97 98 @Override isEnabled()99 public boolean isEnabled() { 100 return super.isEnabled() && !mIsBusy; 101 } 102 103 @Override onBindView(View view)104 protected void onBindView(View view) { 105 super.onBindView(view); 106 107 // Disable this view if the bluetooth enable/disable preference view is off 108 setDependency("bt_checkbox"); 109 110 ImageView btClass = (ImageView) view.findViewById(R.id.btClass); 111 btClass.setImageResource(mLocalDevice.getBtClassDrawable()); 112 btClass.setAlpha(isEnabled() ? 255 : sDimAlpha); 113 } 114 115 @Override compareTo(Preference another)116 public int compareTo(Preference another) { 117 if (!(another instanceof BluetoothDevicePreference)) { 118 // Put other preference types above us 119 return 1; 120 } 121 122 return mLocalDevice.compareTo(((BluetoothDevicePreference) another).mLocalDevice); 123 } 124 125 } 126