blob: 1b4be85bdd7ef9b4ec864402fc08e75ab37b3e99 [file] [log] [blame]
/*
* Copyright (C) 2014 The Android Open Source Project
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.android.systemui.statusbar.policy;
import android.bluetooth.BluetoothA2dp;
import android.bluetooth.BluetoothA2dpSink;
import android.bluetooth.BluetoothAdapter;
import android.bluetooth.BluetoothDevice;
import android.bluetooth.BluetoothHeadset;
import android.bluetooth.BluetoothHeadsetClient;
import android.bluetooth.BluetoothInputDevice;
import android.bluetooth.BluetoothMap;
import android.bluetooth.BluetoothPan;
import android.bluetooth.BluetoothProfile;
import android.bluetooth.BluetoothUuid;
import android.os.ParcelUuid;
import android.text.TextUtils;
public class BluetoothUtil {
public static String profileToString(int profile) {
if (profile == BluetoothProfile.HEADSET) return "HEADSET";
if (profile == BluetoothProfile.A2DP) return "A2DP";
if (profile == BluetoothProfile.AVRCP_CONTROLLER) return "AVRCP_CONTROLLER";
return "UNKNOWN";
}
public static String profileStateToString(int state) {
if (state == BluetoothProfile.STATE_CONNECTED) return "STATE_CONNECTED";
if (state == BluetoothProfile.STATE_CONNECTING) return "STATE_CONNECTING";
if (state == BluetoothProfile.STATE_DISCONNECTED) return "STATE_DISCONNECTED";
if (state == BluetoothProfile.STATE_DISCONNECTING) return "STATE_DISCONNECTING";
return "STATE_UNKNOWN";
}
public static String uuidToString(ParcelUuid uuid) {
if (BluetoothUuid.AudioSink.equals(uuid)) return "AudioSink";
if (BluetoothUuid.AudioSource.equals(uuid)) return "AudioSource";
if (BluetoothUuid.AdvAudioDist.equals(uuid)) return "AdvAudioDist";
if (BluetoothUuid.HSP.equals(uuid)) return "HSP";
if (BluetoothUuid.HSP_AG.equals(uuid)) return "HSP_AG";
if (BluetoothUuid.Handsfree.equals(uuid)) return "Handsfree";
if (BluetoothUuid.Handsfree_AG.equals(uuid)) return "Handsfree_AG";
if (BluetoothUuid.AvrcpController.equals(uuid)) return "AvrcpController";
if (BluetoothUuid.AvrcpTarget.equals(uuid)) return "AvrcpTarget";
if (BluetoothUuid.ObexObjectPush.equals(uuid)) return "ObexObjectPush";
if (BluetoothUuid.Hid.equals(uuid)) return "Hid";
if (BluetoothUuid.Hogp.equals(uuid)) return "Hogp";
if (BluetoothUuid.PANU.equals(uuid)) return "PANU";
if (BluetoothUuid.NAP.equals(uuid)) return "NAP";
if (BluetoothUuid.BNEP.equals(uuid)) return "BNEP";
if (BluetoothUuid.PBAP_PSE.equals(uuid)) return "PBAP_PSE";
if (BluetoothUuid.MAP.equals(uuid)) return "MAP";
if (BluetoothUuid.MNS.equals(uuid)) return "MNS";
if (BluetoothUuid.MAS.equals(uuid)) return "MAS";
return uuid != null ? uuid.toString() : null;
}
public static String connectionStateToString(int connectionState) {
if (connectionState == BluetoothAdapter.STATE_DISCONNECTED) return "STATE_DISCONNECTED";
if (connectionState == BluetoothAdapter.STATE_CONNECTED) return "STATE_CONNECTED";
if (connectionState == BluetoothAdapter.STATE_DISCONNECTING) return "STATE_DISCONNECTING";
if (connectionState == BluetoothAdapter.STATE_CONNECTING) return "STATE_CONNECTING";
return "ERROR";
}
public static String deviceToString(BluetoothDevice device) {
return device == null ? null : (device.getAddress() + '[' + device.getAliasName() + ']');
}
public static String uuidsToString(BluetoothDevice device) {
if (device == null) return null;
final ParcelUuid[] ids = device.getUuids();
if (ids == null) return null;
final String[] tokens = new String[ids.length];
for (int i = 0; i < tokens.length; i++) {
tokens[i] = uuidToString(ids[i]);
}
return TextUtils.join(",", tokens);
}
public static int uuidToProfile(ParcelUuid uuid) {
if (BluetoothUuid.AudioSink.equals(uuid)) return BluetoothProfile.A2DP;
if (BluetoothUuid.AdvAudioDist.equals(uuid)) return BluetoothProfile.A2DP;
if (BluetoothUuid.HSP.equals(uuid)) return BluetoothProfile.HEADSET;
if (BluetoothUuid.Handsfree.equals(uuid)) return BluetoothProfile.HEADSET;
if (BluetoothUuid.MAP.equals(uuid)) return BluetoothProfile.MAP;
if (BluetoothUuid.MNS.equals(uuid)) return BluetoothProfile.MAP;
if (BluetoothUuid.MAS.equals(uuid)) return BluetoothProfile.MAP;
if (BluetoothUuid.AvrcpController.equals(uuid)) return BluetoothProfile.AVRCP_CONTROLLER;
return 0;
}
public static Profile getProfile(BluetoothProfile p) {
if (p instanceof BluetoothA2dp) return newProfile((BluetoothA2dp) p);
if (p instanceof BluetoothHeadset) return newProfile((BluetoothHeadset) p);
if (p instanceof BluetoothA2dpSink) return newProfile((BluetoothA2dpSink) p);
if (p instanceof BluetoothHeadsetClient) return newProfile((BluetoothHeadsetClient) p);
if (p instanceof BluetoothInputDevice) return newProfile((BluetoothInputDevice) p);
if (p instanceof BluetoothMap) return newProfile((BluetoothMap) p);
if (p instanceof BluetoothPan) return newProfile((BluetoothPan) p);
return null;
}
private static Profile newProfile(final BluetoothA2dp a2dp) {
return new Profile() {
@Override
public boolean connect(BluetoothDevice device) {
return a2dp.connect(device);
}
@Override
public boolean disconnect(BluetoothDevice device) {
return a2dp.disconnect(device);
}
};
}
private static Profile newProfile(final BluetoothHeadset headset) {
return new Profile() {
@Override
public boolean connect(BluetoothDevice device) {
return headset.connect(device);
}
@Override
public boolean disconnect(BluetoothDevice device) {
return headset.disconnect(device);
}
};
}
private static Profile newProfile(final BluetoothA2dpSink sink) {
return new Profile() {
@Override
public boolean connect(BluetoothDevice device) {
return sink.connect(device);
}
@Override
public boolean disconnect(BluetoothDevice device) {
return sink.disconnect(device);
}
};
}
private static Profile newProfile(final BluetoothHeadsetClient client) {
return new Profile() {
@Override
public boolean connect(BluetoothDevice device) {
return client.connect(device);
}
@Override
public boolean disconnect(BluetoothDevice device) {
return client.disconnect(device);
}
};
}
private static Profile newProfile(final BluetoothInputDevice input) {
return new Profile() {
@Override
public boolean connect(BluetoothDevice device) {
return input.connect(device);
}
@Override
public boolean disconnect(BluetoothDevice device) {
return input.disconnect(device);
}
};
}
private static Profile newProfile(final BluetoothMap map) {
return new Profile() {
@Override
public boolean connect(BluetoothDevice device) {
return map.connect(device);
}
@Override
public boolean disconnect(BluetoothDevice device) {
return map.disconnect(device);
}
};
}
private static Profile newProfile(final BluetoothPan pan) {
return new Profile() {
@Override
public boolean connect(BluetoothDevice device) {
return pan.connect(device);
}
@Override
public boolean disconnect(BluetoothDevice device) {
return pan.disconnect(device);
}
};
}
// common abstraction for supported profiles
public interface Profile {
boolean connect(BluetoothDevice device);
boolean disconnect(BluetoothDevice device);
}
}