BluetoothDevicePreference.java revision e6531e253bf646324d3a68de0e9cc612c5e1c8ac
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