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