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