1a40b983d03675500c531d6f362a2afe8693a5425Fan Zhang/*
2a40b983d03675500c531d6f362a2afe8693a5425Fan Zhang * Copyright (C) 2017 The Android Open Source Project
3a40b983d03675500c531d6f362a2afe8693a5425Fan Zhang *
4a40b983d03675500c531d6f362a2afe8693a5425Fan Zhang * Licensed under the Apache License, Version 2.0 (the "License");
5a40b983d03675500c531d6f362a2afe8693a5425Fan Zhang * you may not use this file except in compliance with the License.
6a40b983d03675500c531d6f362a2afe8693a5425Fan Zhang * You may obtain a copy of the License at
7a40b983d03675500c531d6f362a2afe8693a5425Fan Zhang *
8a40b983d03675500c531d6f362a2afe8693a5425Fan Zhang *      http://www.apache.org/licenses/LICENSE-2.0
9a40b983d03675500c531d6f362a2afe8693a5425Fan Zhang *
10a40b983d03675500c531d6f362a2afe8693a5425Fan Zhang * Unless required by applicable law or agreed to in writing, software
11a40b983d03675500c531d6f362a2afe8693a5425Fan Zhang * distributed under the License is distributed on an "AS IS" BASIS,
12a40b983d03675500c531d6f362a2afe8693a5425Fan Zhang * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13a40b983d03675500c531d6f362a2afe8693a5425Fan Zhang * See the License for the specific language governing permissions and
14a40b983d03675500c531d6f362a2afe8693a5425Fan Zhang * limitations under the License
15a40b983d03675500c531d6f362a2afe8693a5425Fan Zhang */
16a40b983d03675500c531d6f362a2afe8693a5425Fan Zhang
17a40b983d03675500c531d6f362a2afe8693a5425Fan Zhangpackage com.android.car.settings.bluetooth;
18a40b983d03675500c531d6f362a2afe8693a5425Fan Zhang
19a40b983d03675500c531d6f362a2afe8693a5425Fan Zhangimport android.bluetooth.BluetoothDevice;
20a40b983d03675500c531d6f362a2afe8693a5425Fan Zhangimport android.bluetooth.BluetoothProfile;
21a40b983d03675500c531d6f362a2afe8693a5425Fan Zhangimport android.content.Context;
22a40b983d03675500c531d6f362a2afe8693a5425Fan Zhang
235e02a7c64fa4dbcbbef81e1e582ff381287f2e34roger xueimport com.android.car.settings.common.CheckBoxLineItem;
24a40b983d03675500c531d6f362a2afe8693a5425Fan Zhang
25a40b983d03675500c531d6f362a2afe8693a5425Fan Zhangimport com.android.settingslib.bluetooth.CachedBluetoothDevice;
26a40b983d03675500c531d6f362a2afe8693a5425Fan Zhangimport com.android.settingslib.bluetooth.LocalBluetoothProfile;
27a40b983d03675500c531d6f362a2afe8693a5425Fan Zhangimport com.android.settingslib.bluetooth.PanProfile;
28a40b983d03675500c531d6f362a2afe8693a5425Fan Zhang
29a40b983d03675500c531d6f362a2afe8693a5425Fan Zhang/**
30a40b983d03675500c531d6f362a2afe8693a5425Fan Zhang * Represents a line item for a Bluetooth mProfile.
31a40b983d03675500c531d6f362a2afe8693a5425Fan Zhang */
325e02a7c64fa4dbcbbef81e1e582ff381287f2e34roger xuepublic class BluetoothProfileLineItem extends CheckBoxLineItem {
33a76987ecf243fa3ff76f7ea8a40597baeb763e3croger xue    private static final String TAG = "BTProfileLineItem";
34a40b983d03675500c531d6f362a2afe8693a5425Fan Zhang    private final LocalBluetoothProfile mProfile;
35a40b983d03675500c531d6f362a2afe8693a5425Fan Zhang    private final CachedBluetoothDevice mCachedDevice;
365e02a7c64fa4dbcbbef81e1e582ff381287f2e34roger xue    private CheckboxLineItemViewHolder mViewHolder;
37a40b983d03675500c531d6f362a2afe8693a5425Fan Zhang    private DataChangedListener mDataChangedListener;
38a76987ecf243fa3ff76f7ea8a40597baeb763e3croger xue    private final Context mContext;
39a40b983d03675500c531d6f362a2afe8693a5425Fan Zhang
40a40b983d03675500c531d6f362a2afe8693a5425Fan Zhang    public interface DataChangedListener {
41a40b983d03675500c531d6f362a2afe8693a5425Fan Zhang        void onDataChanged();
42a40b983d03675500c531d6f362a2afe8693a5425Fan Zhang    }
43a40b983d03675500c531d6f362a2afe8693a5425Fan Zhang
44a40b983d03675500c531d6f362a2afe8693a5425Fan Zhang    public BluetoothProfileLineItem(Context context, LocalBluetoothProfile profile,
45a40b983d03675500c531d6f362a2afe8693a5425Fan Zhang            CachedBluetoothDevice cachedBluetoothDevice, DataChangedListener listener) {
46a40b983d03675500c531d6f362a2afe8693a5425Fan Zhang        super(context.getText(profile.getNameResource(cachedBluetoothDevice.getDevice())));
47a76987ecf243fa3ff76f7ea8a40597baeb763e3croger xue        mContext = context;
48a40b983d03675500c531d6f362a2afe8693a5425Fan Zhang        mCachedDevice = cachedBluetoothDevice;
49a40b983d03675500c531d6f362a2afe8693a5425Fan Zhang        mProfile = profile;
50a40b983d03675500c531d6f362a2afe8693a5425Fan Zhang        mDataChangedListener = listener;
51a40b983d03675500c531d6f362a2afe8693a5425Fan Zhang    }
52a40b983d03675500c531d6f362a2afe8693a5425Fan Zhang
53a40b983d03675500c531d6f362a2afe8693a5425Fan Zhang    @Override
54a40b983d03675500c531d6f362a2afe8693a5425Fan Zhang    public void onClick(boolean isChecked) {
551a97e52eb4864e79f1b643dbb3cf64ca9658f7cdLujiang Xue        if (isChecked) {
56a40b983d03675500c531d6f362a2afe8693a5425Fan Zhang            mCachedDevice.disconnect(mProfile);
57a40b983d03675500c531d6f362a2afe8693a5425Fan Zhang            mProfile.setPreferred(mCachedDevice.getDevice(), false);
58b65a076987f188b26e9faa2fb3bae37bff2cb3earoger xue        } else if (mProfile.isPreferred(mCachedDevice.getDevice())) {
59b65a076987f188b26e9faa2fb3bae37bff2cb3earoger xue            if (mProfile instanceof PanProfile) {
60a40b983d03675500c531d6f362a2afe8693a5425Fan Zhang                mCachedDevice.connectProfile(mProfile);
61b65a076987f188b26e9faa2fb3bae37bff2cb3earoger xue            } else {
62b65a076987f188b26e9faa2fb3bae37bff2cb3earoger xue                mProfile.setPreferred(mCachedDevice.getDevice(), false);
63a40b983d03675500c531d6f362a2afe8693a5425Fan Zhang            }
64b65a076987f188b26e9faa2fb3bae37bff2cb3earoger xue        } else {
65b65a076987f188b26e9faa2fb3bae37bff2cb3earoger xue            mProfile.setPreferred(mCachedDevice.getDevice(), true);
66b65a076987f188b26e9faa2fb3bae37bff2cb3earoger xue            mCachedDevice.connectProfile(mProfile);
67a40b983d03675500c531d6f362a2afe8693a5425Fan Zhang        }
68a40b983d03675500c531d6f362a2afe8693a5425Fan Zhang        mDataChangedListener.onDataChanged();
69a40b983d03675500c531d6f362a2afe8693a5425Fan Zhang    }
70a40b983d03675500c531d6f362a2afe8693a5425Fan Zhang
71a40b983d03675500c531d6f362a2afe8693a5425Fan Zhang    @Override
725e02a7c64fa4dbcbbef81e1e582ff381287f2e34roger xue    public boolean isExpandable() {
735e02a7c64fa4dbcbbef81e1e582ff381287f2e34roger xue        return false;
74a40b983d03675500c531d6f362a2afe8693a5425Fan Zhang    }
75a40b983d03675500c531d6f362a2afe8693a5425Fan Zhang
76a40b983d03675500c531d6f362a2afe8693a5425Fan Zhang    @Override
775e02a7c64fa4dbcbbef81e1e582ff381287f2e34roger xue    public boolean isEnabled() {
785e02a7c64fa4dbcbbef81e1e582ff381287f2e34roger xue        return true;
795e02a7c64fa4dbcbbef81e1e582ff381287f2e34roger xue    }
805e02a7c64fa4dbcbbef81e1e582ff381287f2e34roger xue
815e02a7c64fa4dbcbbef81e1e582ff381287f2e34roger xue    @Override
825e02a7c64fa4dbcbbef81e1e582ff381287f2e34roger xue    public void bindViewHolder(CheckboxLineItemViewHolder holder) {
835e02a7c64fa4dbcbbef81e1e582ff381287f2e34roger xue        super.bindViewHolder(holder);
845e02a7c64fa4dbcbbef81e1e582ff381287f2e34roger xue        mViewHolder = holder;
85a40b983d03675500c531d6f362a2afe8693a5425Fan Zhang    }
86a40b983d03675500c531d6f362a2afe8693a5425Fan Zhang
87a40b983d03675500c531d6f362a2afe8693a5425Fan Zhang    @Override
88a40b983d03675500c531d6f362a2afe8693a5425Fan Zhang    public boolean isChecked() {
89a40b983d03675500c531d6f362a2afe8693a5425Fan Zhang        BluetoothDevice device = mCachedDevice.getDevice();
901a97e52eb4864e79f1b643dbb3cf64ca9658f7cdLujiang Xue        if (mProfile instanceof PanProfile) {
91a40b983d03675500c531d6f362a2afe8693a5425Fan Zhang            return mProfile.getConnectionStatus(device) == BluetoothProfile.STATE_CONNECTED;
92a40b983d03675500c531d6f362a2afe8693a5425Fan Zhang        } else {
93a40b983d03675500c531d6f362a2afe8693a5425Fan Zhang            return mProfile.isPreferred(device);
94a40b983d03675500c531d6f362a2afe8693a5425Fan Zhang        }
95a40b983d03675500c531d6f362a2afe8693a5425Fan Zhang    }
96a40b983d03675500c531d6f362a2afe8693a5425Fan Zhang}
97