summaryrefslogtreecommitdiffstats
path: root/src/com/android/settings/bluetooth
diff options
context:
space:
mode:
authorGanesh Ganapathi Batta <ganeshg@broadcom.com>2012-07-31 16:12:46 -0700
committerMatthew Xie <mattx@google.com>2012-08-06 23:27:27 -0700
commit0654b71534411f4d93502f6ed8d8e864ef5b88ef (patch)
treee302e924be3542db68a84163fc2acb97d5bcf5f7 /src/com/android/settings/bluetooth
parent9effd146114364c91d44b9a44ade761b69bdd1cf (diff)
downloadpackages_apps_settings-0654b71534411f4d93502f6ed8d8e864ef5b88ef.zip
packages_apps_settings-0654b71534411f4d93502f6ed8d8e864ef5b88ef.tar.gz
packages_apps_settings-0654b71534411f4d93502f6ed8d8e864ef5b88ef.tar.bz2
Remove Profile Auto connection specific logic
Remove profile auto connection specific logic as it is not implemented in Bluetooth app Disconnect PBAP server connection when user initiates device level disconnection Change-Id: I381ed96f6b57f414bbaccd694f55d2b992e330a4
Diffstat (limited to 'src/com/android/settings/bluetooth')
-rwxr-xr-xsrc/com/android/settings/bluetooth/A2dpProfile.java27
-rwxr-xr-xsrc/com/android/settings/bluetooth/BluetoothEventManager.java10
-rwxr-xr-xsrc/com/android/settings/bluetooth/CachedBluetoothDevice.java44
-rwxr-xr-xsrc/com/android/settings/bluetooth/HeadsetProfile.java23
-rwxr-xr-x[-rw-r--r--]src/com/android/settings/bluetooth/HidProfile.java6
-rwxr-xr-x[-rw-r--r--]src/com/android/settings/bluetooth/LocalBluetoothProfile.java2
-rwxr-xr-xsrc/com/android/settings/bluetooth/LocalBluetoothProfileManager.java164
-rwxr-xr-x[-rw-r--r--]src/com/android/settings/bluetooth/OppProfile.java4
-rwxr-xr-xsrc/com/android/settings/bluetooth/PBAPServerProfile.java142
-rwxr-xr-x[-rw-r--r--]src/com/android/settings/bluetooth/PanProfile.java5
10 files changed, 165 insertions, 262 deletions
diff --git a/src/com/android/settings/bluetooth/A2dpProfile.java b/src/com/android/settings/bluetooth/A2dpProfile.java
index 3f87b77..fbf24c9 100755
--- a/src/com/android/settings/bluetooth/A2dpProfile.java
+++ b/src/com/android/settings/bluetooth/A2dpProfile.java
@@ -56,13 +56,11 @@ final class A2dpProfile implements LocalBluetoothProfile {
public void onServiceConnected(int profile, BluetoothProfile proxy) {
if (V) Log.d(TAG,"Bluetooth service connected");
mService = (BluetoothA2dp) proxy;
- mProfileManager.setA2dpServiceUp(true);
mIsProfileReady=true;
}
public void onServiceDisconnected(int profile) {
if (V) Log.d(TAG,"Bluetooth service disconnected");
- mProfileManager.setA2dpServiceUp(false);
mIsProfileReady=false;
}
}
@@ -106,21 +104,11 @@ final class A2dpProfile implements LocalBluetoothProfile {
public boolean disconnect(BluetoothDevice device) {
if (mService == null) return false;
- return mService.disconnect(device);
- }
-
- // This function is added as the AUTO CONNECT priority could not be set by using setPreferred(),
- // as setPreferred() takes only boolean input but getPreferred() supports interger output.
- // Also this need not implemented by all profiles so this has been added here.
- public void enableAutoConnect(BluetoothDevice device, boolean enable) {
- if (mService == null) return;
- if (enable) {
- mService.setPriority(device, BluetoothProfile.PRIORITY_AUTO_CONNECT);
- } else {
- if (mService.getPriority(device) > BluetoothProfile.PRIORITY_ON) {
- mService.setPriority(device, BluetoothProfile.PRIORITY_ON);
- }
+ // Downgrade priority as user is disconnecting the headset.
+ if (mService.getPriority(device) > BluetoothProfile.PRIORITY_ON){
+ mService.setPriority(device, BluetoothProfile.PRIORITY_ON);
}
+ return mService.disconnect(device);
}
public int getConnectionStatus(BluetoothDevice device) {
@@ -150,13 +138,6 @@ final class A2dpProfile implements LocalBluetoothProfile {
mService.setPriority(device, BluetoothProfile.PRIORITY_OFF);
}
}
-
- public void setUnbonded(BluetoothDevice device)
- {
- if (mService == null) return;
- mService.setPriority(device, BluetoothProfile.PRIORITY_UNDEFINED);
- }
-
boolean isA2dpPlaying() {
if (mService == null) return false;
List<BluetoothDevice> sinks = mService.getConnectedDevices();
diff --git a/src/com/android/settings/bluetooth/BluetoothEventManager.java b/src/com/android/settings/bluetooth/BluetoothEventManager.java
index bc4bfca..0eead85 100755
--- a/src/com/android/settings/bluetooth/BluetoothEventManager.java
+++ b/src/com/android/settings/bluetooth/BluetoothEventManager.java
@@ -101,9 +101,6 @@ final class BluetoothEventManager {
// Dock event broadcasts
addHandler(Intent.ACTION_DOCK_EVENT, new DockEventHandler());
- // Connect other profiles broadcast
- addHandler(BluetoothProfile.ACTION_CONNECT_OTHER_PROFILES, new ConnectOtherProfilesHandler());
-
mContext.registerReceiver(mBroadcastReceiver, mAdapterIntentFilter);
}
@@ -372,13 +369,6 @@ final class BluetoothEventManager {
}
}
}
-
- private class ConnectOtherProfilesHandler implements Handler {
- public void onReceive(Context context, Intent intent, BluetoothDevice device) {
- mProfileManager.handleConnectOtherProfiles(device);
- }
- }
-
boolean readPairedDevices() {
Set<BluetoothDevice> bondedDevices = mLocalAdapter.getBondedDevices();
if (bondedDevices == null) {
diff --git a/src/com/android/settings/bluetooth/CachedBluetoothDevice.java b/src/com/android/settings/bluetooth/CachedBluetoothDevice.java
index 93288b8..ef223d5 100755
--- a/src/com/android/settings/bluetooth/CachedBluetoothDevice.java
+++ b/src/com/android/settings/bluetooth/CachedBluetoothDevice.java
@@ -119,30 +119,6 @@ final class CachedBluetoothDevice implements Comparable<CachedBluetoothDevice> {
Log.d(TAG, "onProfileStateChanged: profile " + profile +
" newProfileState " + newProfileState);
}
- if (profile instanceof HeadsetProfile) {
- if (newProfileState == BluetoothProfile.STATE_CONNECTED) {
- if (BluetoothProfile.PRIORITY_AUTO_CONNECT != profile.getPreferred(mDevice))
- mProfileManager.enableAutoConnectForHf(mDevice, true);
- } else if (newProfileState == BluetoothProfile.STATE_DISCONNECTED) {
- // dont reset auto connect priority when bluetooth turned off
- if ((BluetoothAdapter.STATE_ON == mLocalAdapter.getBluetoothState())
- || (BluetoothAdapter.STATE_TURNING_ON == mLocalAdapter.getBluetoothState())) {
- mProfileManager.enableAutoConnectForHf(mDevice, false);
- }
- }
- } else if (profile instanceof A2dpProfile ) {
- if (newProfileState == BluetoothProfile.STATE_CONNECTED) {
- if (BluetoothProfile.PRIORITY_AUTO_CONNECT != profile.getPreferred(mDevice))
- mProfileManager.enableAutoConnectForA2dp(mDevice,true);
- } else if (newProfileState == BluetoothProfile.STATE_DISCONNECTED) {
- // dont reset auto connect priority when bluetooth turned off
- if ((BluetoothAdapter.STATE_ON == mLocalAdapter.getBluetoothState())
- || (BluetoothAdapter.STATE_TURNING_ON == mLocalAdapter.getBluetoothState())) {
- mProfileManager.enableAutoConnectForA2dp(mDevice, false);
- }
- }
- }
-
mProfileConnectionState.put(profile, newProfileState);
if (newProfileState == BluetoothProfile.STATE_CONNECTED) {
if (!mProfiles.contains(profile)) {
@@ -180,6 +156,14 @@ final class CachedBluetoothDevice implements Comparable<CachedBluetoothDevice> {
for (LocalBluetoothProfile profile : mProfiles) {
disconnect(profile);
}
+ // Disconnect PBAP server in case its connected
+ // This is to ensure all the profiles are disconnected as some CK/Hs do not
+ // disconnect PBAP connection when HF connection is brought down
+ PbapServerProfile PbapProfile = mProfileManager.getPbapProfile();
+ if (PbapProfile.getConnectionStatus(mDevice) == BluetoothProfile.STATE_CONNECTED)
+ {
+ PbapProfile.disconnect(mDevice);
+ }
}
void disconnect(LocalBluetoothProfile profile) {
@@ -507,23 +491,11 @@ final class CachedBluetoothDevice implements Comparable<CachedBluetoothDevice> {
.elapsedRealtime()) {
connectWithoutResettingTimer(false);
}
- // On an incoming pairing, set all the available profiles as preferred.
- for (LocalBluetoothProfile profile : mProfiles) {
- profile.setPreferred(mDevice, true);
- }
dispatchAttributesChanged();
}
- // Clear service priority of Hid, A2DP and Headset profiles on unbond
- private void clearProfilePriorities() {
- for (LocalBluetoothProfile profile : mProfiles) {
- profile.setUnbonded(mDevice);
- }
- }
-
void onBondingStateChanged(int bondState) {
if (bondState == BluetoothDevice.BOND_NONE) {
- clearProfilePriorities();
mProfiles.clear();
mConnectAfterPairing = false; // cancel auto-connect
setPhonebookPermissionChoice(PHONEBOOK_ACCESS_UNKNOWN);
diff --git a/src/com/android/settings/bluetooth/HeadsetProfile.java b/src/com/android/settings/bluetooth/HeadsetProfile.java
index 5b73d1a..83c8e8e 100755
--- a/src/com/android/settings/bluetooth/HeadsetProfile.java
+++ b/src/com/android/settings/bluetooth/HeadsetProfile.java
@@ -78,14 +78,12 @@ final class HeadsetProfile implements LocalBluetoothProfile {
}
mProfileManager.callServiceConnectedListeners();
- mProfileManager.setHfServiceUp(true);
mIsProfileReady=true;
}
public void onServiceDisconnected(int profile) {
if (V) Log.d(TAG,"Bluetooth service disconnected");
mProfileManager.callServiceDisconnectedListeners();
- mProfileManager.setHfServiceUp(false);
mIsProfileReady=false;
}
}
@@ -167,12 +165,6 @@ final class HeadsetProfile implements LocalBluetoothProfile {
}
}
- public void setUnbonded(BluetoothDevice device)
- {
- if (mService == null) return;
- mService.setPriority(device, BluetoothProfile.PRIORITY_UNDEFINED);
- }
-
public List<BluetoothDevice> getConnectedDevices() {
if (mService == null) return new ArrayList<BluetoothDevice>(0);
return mService.getDevicesMatchingConnectionStates(
@@ -181,21 +173,6 @@ final class HeadsetProfile implements LocalBluetoothProfile {
BluetoothProfile.STATE_DISCONNECTING});
}
-
- // This function is added as the AUTO CONNECT priority could not be set by using setPreferred(),
- // as setPreferred() takes only boolean input but getPreferred() supports interger output.
- // Also this need not implemented by all profiles so this has been added here.
- public void enableAutoConnect(BluetoothDevice device, boolean enable) {
- if (mService == null) return;
- if (enable) {
- mService.setPriority(device, BluetoothProfile.PRIORITY_AUTO_CONNECT);
- } else {
- if (mService.getPriority(device) > BluetoothProfile.PRIORITY_ON) {
- mService.setPriority(device, BluetoothProfile.PRIORITY_ON);
- }
- }
- }
-
public String toString() {
return NAME;
}
diff --git a/src/com/android/settings/bluetooth/HidProfile.java b/src/com/android/settings/bluetooth/HidProfile.java
index ba78252..c502850 100644..100755
--- a/src/com/android/settings/bluetooth/HidProfile.java
+++ b/src/com/android/settings/bluetooth/HidProfile.java
@@ -118,12 +118,6 @@ final class HidProfile implements LocalBluetoothProfile {
}
}
- public void setUnbonded(BluetoothDevice device)
- {
- if (mService == null) return;
- mService.setPriority(device, BluetoothProfile.PRIORITY_UNDEFINED);
- }
-
public String toString() {
return NAME;
}
diff --git a/src/com/android/settings/bluetooth/LocalBluetoothProfile.java b/src/com/android/settings/bluetooth/LocalBluetoothProfile.java
index 65e3a26..8c0de95 100644..100755
--- a/src/com/android/settings/bluetooth/LocalBluetoothProfile.java
+++ b/src/com/android/settings/bluetooth/LocalBluetoothProfile.java
@@ -47,8 +47,6 @@ interface LocalBluetoothProfile {
void setPreferred(BluetoothDevice device, boolean preferred);
- void setUnbonded(BluetoothDevice device);
-
boolean isProfileReady();
/** Display order for device profile settings. */
diff --git a/src/com/android/settings/bluetooth/LocalBluetoothProfileManager.java b/src/com/android/settings/bluetooth/LocalBluetoothProfileManager.java
index 46e6159..916ef9e 100755
--- a/src/com/android/settings/bluetooth/LocalBluetoothProfileManager.java
+++ b/src/com/android/settings/bluetooth/LocalBluetoothProfileManager.java
@@ -21,6 +21,7 @@ import android.bluetooth.BluetoothDevice;
import android.bluetooth.BluetoothHeadset;
import android.bluetooth.BluetoothInputDevice;
import android.bluetooth.BluetoothPan;
+import android.bluetooth.BluetoothPbap;
import android.bluetooth.BluetoothProfile;
import android.bluetooth.BluetoothUuid;
import android.content.Context;
@@ -43,13 +44,6 @@ import java.util.List;
*/
final class LocalBluetoothProfileManager {
private static final String TAG = "LocalBluetoothProfileManager";
- private static final int CONNECT_HF_OR_A2DP = 1;
- private static final int CONNECT_OTHER_PROFILES = 2;
- // If either a2dp or hf is connected and if the other profile conneciton is not
- // happening with the timeout , the other profile(a2dp or hf) will be inititate connection.
- // Give reasonable timeout for the device to initiate the other profile connection.
- private static final int CONNECT_HF_OR_A2DP_TIMEOUT = 6000;
-
/** Singleton instance. */
private static LocalBluetoothProfileManager sInstance;
@@ -88,47 +82,7 @@ final class LocalBluetoothProfileManager {
private final HidProfile mHidProfile;
private OppProfile mOppProfile;
private final PanProfile mPanProfile;
- private boolean isHfServiceUp;
- private boolean isA2dpServiceUp;
- private boolean isHfA2dpConnectMessagePosted;
- private final Handler hfA2dpConnectHandler = new Handler() {
- @Override
- public void handleMessage(Message msg) {
-
- synchronized (this) {
- if (isA2dpConnectRequired((BluetoothDevice)msg.obj)) {
- mA2dpProfile.connect((BluetoothDevice)msg.obj);
- } else if (isHfConnectRequired((BluetoothDevice)msg.obj)) {
- mHeadsetProfile.connect((BluetoothDevice)msg.obj);
- }
- isHfA2dpConnectMessagePosted =false;
- }
- }
-};
-
- private final Handler connectOtherProfilesHandler = new Handler() {
- @Override
- public void handleMessage(Message msg) {
- synchronized (this) {
- // Connect all the profiles which are enabled
- // Right now hf/a2dp profiles connect is handled here
- List<BluetoothDevice> hfConnDevList= mHeadsetProfile.getConnectedDevices();
-
- if (hfConnDevList.isEmpty() && mHeadsetProfile.isPreferred((BluetoothDevice)msg.obj))
- mHeadsetProfile.connect((BluetoothDevice)msg.obj);
- else
- Log.d(TAG,"Hf device is not preferred or already Hf connected device exist");
-
- List<BluetoothDevice> a2dpConnDevList= mA2dpProfile.getConnectedDevices();
-
- if (a2dpConnDevList.isEmpty() && mA2dpProfile.isPreferred((BluetoothDevice)msg.obj))
- mA2dpProfile.connect((BluetoothDevice)msg.obj);
- else
- Log.d(TAG,"A2dp device is not preferred or already a2dp connected device exist");
-
- }
- }
- };
+ private final PbapServerProfile mPbapProfile;
/**
* Mapping from profile name, e.g. "HEADSET" to profile object.
@@ -165,6 +119,10 @@ final class LocalBluetoothProfileManager {
addPanProfile(mPanProfile, PanProfile.NAME,
BluetoothPan.ACTION_CONNECTION_STATE_CHANGED);
+ //Create PBAP server profile, but do not add it to list of profiles
+ // as we do not need to monitor the profile as part of profile list
+ mPbapProfile = new PbapServerProfile(context);
+
Log.d(TAG, "LocalBluetoothProfileManager construction complete");
}
@@ -273,21 +231,6 @@ final class LocalBluetoothProfileManager {
cachedDevice.onProfileStateChanged(mProfile, newState);
cachedDevice.refresh();
-
- if ((mProfile instanceof HeadsetProfile)||(mProfile instanceof A2dpProfile)) {
- if ((BluetoothProfile.STATE_CONNECTED == newState)&&
- (!isHfA2dpConnectMessagePosted)) {
- Message mes = hfA2dpConnectHandler.obtainMessage(CONNECT_HF_OR_A2DP);
- mes.obj = device;
- hfA2dpConnectHandler.sendMessageDelayed(mes,CONNECT_HF_OR_A2DP_TIMEOUT);
- Log.i(TAG,"Message posted for hf/a2dp connection");
- isHfA2dpConnectMessagePosted = true;
- } else if (isHfA2dpConnectMessagePosted) {
- hfA2dpConnectHandler.removeMessages(CONNECT_HF_OR_A2DP);
- Log.i(TAG,"Message removed for hf/a2dp connection");
- isHfA2dpConnectMessagePosted =false;
- }
- }
}
}
@@ -331,66 +274,6 @@ final class LocalBluetoothProfileManager {
}
}
- synchronized void setHfServiceUp(boolean isUp) {
- isHfServiceUp = isUp;
- if (isHfServiceUp && isA2dpServiceUp) {
- // connect hf and then a2dp
- // this order is maintained as per the white paper
- handleAutoConnect(mHeadsetProfile);
- handleAutoConnect(mA2dpProfile);
- }
- }
-
- synchronized void setA2dpServiceUp(boolean isUp) {
- isA2dpServiceUp= isUp;
- if (isHfServiceUp && isA2dpServiceUp) {
- // connect hf and then a2dp
- // this order is maintained as per the white paper
- handleAutoConnect(mHeadsetProfile);
- handleAutoConnect(mA2dpProfile);
- }
- }
-
- private void handleAutoConnect(LocalBluetoothProfile profile) {
- Set<BluetoothDevice> bondedDevices = mLocalAdapter.getBondedDevices();
- for (BluetoothDevice device : bondedDevices) {
- if (profile.getPreferred(device) ==
- BluetoothProfile.PRIORITY_AUTO_CONNECT) {
- Log.d(TAG,"handleAutoConnect for device");
- CachedBluetoothDevice cacheDevice = mDeviceManager.findDevice(device);
- if (null == cacheDevice)
- {
- Log.w(TAG,"Dev not found in cached dev list. Adding the dev to cached list");
- cacheDevice = mDeviceManager.addDevice(mLocalAdapter,
- LocalBluetoothProfileManager.this, device);
- }
- cacheDevice.connectInt(profile);
- break;
- }
- }
- }
-
- public void enableAutoConnectForHf(BluetoothDevice device,boolean enable) {
- mHeadsetProfile.enableAutoConnect(device,enable);
- }
-
- public void enableAutoConnectForA2dp(BluetoothDevice device,boolean enable) {
- mA2dpProfile.enableAutoConnect(device,enable);
- }
-
- public void handleConnectOtherProfiles(BluetoothDevice device) {
- if (device != null){
- // Remove previous messages if any
- connectOtherProfilesHandler.removeMessages(CONNECT_OTHER_PROFILES);
- Message mes = connectOtherProfilesHandler.obtainMessage(CONNECT_OTHER_PROFILES);
- mes.obj = device;
- connectOtherProfilesHandler.sendMessageDelayed(mes,CONNECT_HF_OR_A2DP_TIMEOUT);
- Log.i(TAG,"Message posted for connection other Profiles ");
- } else {
- Log.e(TAG,"Device = Null received in handleConnectOtherProfiles ");
- }
- }
-
// This is called by DockService, so check Headset and A2DP.
public synchronized boolean isManagerReady() {
// Getting just the headset profile is fine for now. Will need to deal with A2DP
@@ -414,6 +297,11 @@ final class LocalBluetoothProfileManager {
return mHeadsetProfile;
}
+ PbapServerProfile getPbapProfile(){
+ return mPbapProfile;
+ }
+
+
/**
* Fill in a list of LocalBluetoothProfile objects that are supported by
* the local device and the remote device.
@@ -473,34 +361,4 @@ final class LocalBluetoothProfileManager {
}
}
- private boolean isHfConnectRequired(BluetoothDevice device) {
- List<BluetoothDevice> a2dpConnDevList= mA2dpProfile.getConnectedDevices();
- List<BluetoothDevice> hfConnDevList= mHeadsetProfile.getConnectedDevices();
-
- // If both hf and a2dp is connected hf connection is not required
- // Hf connection is required only when a2dp is connected but
- // hf connect did no happen untill CONNECT_HF_OR_A2DP_TIMEOUT
- if (!a2dpConnDevList.isEmpty() && !hfConnDevList.isEmpty())
- return false;
- if (hfConnDevList.isEmpty() && mHeadsetProfile.isPreferred(device))
- return true;
-
- return false;
- }
-
- private boolean isA2dpConnectRequired(BluetoothDevice device) {
- List<BluetoothDevice> a2dpConnDevList= mA2dpProfile.getConnectedDevices();
- List<BluetoothDevice> hfConnDevList= mHeadsetProfile.getConnectedDevices();
-
- // If both hf and a2dp is connected a2dp connection is not required
- // A2dp connection is required only when hf is connected but
- // a2dp connect did no happen until CONNECT_HF_OR_A2DP_TIMEOUT
- if (!a2dpConnDevList.isEmpty() && !hfConnDevList.isEmpty())
- return false;
- if (a2dpConnDevList.isEmpty() && mA2dpProfile.isPreferred(device))
- return true;
-
- return false;
- }
-
}
diff --git a/src/com/android/settings/bluetooth/OppProfile.java b/src/com/android/settings/bluetooth/OppProfile.java
index 86ed0dc..7ee2ad1 100644..100755
--- a/src/com/android/settings/bluetooth/OppProfile.java
+++ b/src/com/android/settings/bluetooth/OppProfile.java
@@ -63,10 +63,6 @@ final class OppProfile implements LocalBluetoothProfile {
public void setPreferred(BluetoothDevice device, boolean preferred) {
}
- public void setUnbonded(BluetoothDevice device) {
- // Settings app doesn't handle OPP
- }
-
public boolean isProfileReady() {
return true;
}
diff --git a/src/com/android/settings/bluetooth/PBAPServerProfile.java b/src/com/android/settings/bluetooth/PBAPServerProfile.java
new file mode 100755
index 0000000..7217574
--- /dev/null
+++ b/src/com/android/settings/bluetooth/PBAPServerProfile.java
@@ -0,0 +1,142 @@
+/*
+ * Copyright (C) 2011 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.settings.bluetooth;
+
+import android.bluetooth.BluetoothAdapter;
+import android.bluetooth.BluetoothClass;
+import android.bluetooth.BluetoothDevice;
+import android.bluetooth.BluetoothPbap;
+import android.bluetooth.BluetoothProfile;
+import android.content.Context;
+import android.util.Log;
+
+import com.android.settings.R;
+
+import java.util.HashMap;
+import java.util.List;
+
+/**
+ *PBAPServer Profile
+ */
+final class PbapServerProfile implements LocalBluetoothProfile {
+ private static final String TAG = "PbapServerProfile";
+ private static boolean V = true;
+
+ private BluetoothPbap mService;
+ private boolean mIsProfileReady;
+
+ static final String NAME = "PBAP Server";
+
+ // Order of this profile in device profiles list
+ private static final int ORDINAL = 6;
+
+ // These callbacks run on the main thread.
+ private final class PbapServiceListener
+ implements BluetoothPbap.ServiceListener {
+
+ public void onServiceConnected(BluetoothPbap proxy) {
+ if (V) Log.d(TAG,"Bluetooth service connected");
+ mService = (BluetoothPbap) proxy;
+ mIsProfileReady=true;
+ }
+
+ public void onServiceDisconnected() {
+ if (V) Log.d(TAG,"Bluetooth service disconnected");
+ mIsProfileReady=false;
+ }
+ }
+
+ public boolean isProfileReady() {
+ return mIsProfileReady;
+ }
+
+ PbapServerProfile(Context context) {
+ BluetoothPbap pbap = new BluetoothPbap(context, new PbapServiceListener());
+ }
+
+ public boolean isConnectable() {
+ return true;
+ }
+
+ public boolean isAutoConnectable() {
+ return false;
+ }
+
+ public boolean connect(BluetoothDevice device) {
+ /*Can't connect from server */
+ return false;
+
+ }
+
+ public boolean disconnect(BluetoothDevice device) {
+ if (mService == null) return false;
+ return mService.disconnect();
+ }
+
+ public int getConnectionStatus(BluetoothDevice device) {
+ if (mService == null) {
+ return BluetoothProfile.STATE_DISCONNECTED;
+ }
+ if (mService.isConnected(device))
+ return BluetoothProfile.STATE_CONNECTED;
+ else
+ return BluetoothProfile.STATE_DISCONNECTED;
+ }
+
+ public boolean isPreferred(BluetoothDevice device) {
+ return false;
+ }
+
+ public int getPreferred(BluetoothDevice device) {
+ return -1;
+ }
+
+ public void setPreferred(BluetoothDevice device, boolean preferred) {
+ // ignore: isPreferred is always true for PBAP
+ }
+
+ public String toString() {
+ return NAME;
+ }
+
+ public int getOrdinal() {
+ return ORDINAL;
+ }
+
+ public int getNameResource(BluetoothDevice device) {
+ return 0;
+ }
+
+ public int getSummaryResourceForDevice(BluetoothDevice device) {
+ return 0;
+ }
+
+ public int getDrawableResource(BluetoothClass btClass) {
+ return 0;
+ }
+ protected void finalize() {
+ if (V) Log.d(TAG, "finalize()");
+ if (mService != null) {
+ try {
+ mService.close();
+ mService = null;
+ }catch (Throwable t) {
+ Log.w(TAG, "Error cleaning up PBAP proxy", t);
+ }
+ }
+ }
+}
diff --git a/src/com/android/settings/bluetooth/PanProfile.java b/src/com/android/settings/bluetooth/PanProfile.java
index c0da3fe..b9db77b 100644..100755
--- a/src/com/android/settings/bluetooth/PanProfile.java
+++ b/src/com/android/settings/bluetooth/PanProfile.java
@@ -117,11 +117,6 @@ final class PanProfile implements LocalBluetoothProfile {
// ignore: isPreferred is always true for PAN
}
- public void setUnbonded(BluetoothDevice device)
- {
- // ignore: PAN profile cannot be disabled
- }
-
public String toString() {
return NAME;
}