summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author Ganesh Ganapathi Batta <ganeshg@broadcom.com> 2012-08-08 15:35:49 -0700
committer Matthew Xie <mattx@google.com> 2012-08-14 00:18:07 -0700
commitfffa86ba834d37684238c83c0dd081133324984d (patch)
tree50e8de04a2b1294a29a3467871a231ff39901bec
parent06439fd29f9bbf7031f58f5b06aa6c022ac9897a (diff)
Implement enableNoAutoconnect()
Adding enableNoAutoconnect() API support in Bluetooth service to let BT enable in quiet mode Change-Id: I546f3ceb298082a9c9a698f406379470e3cc0d4f
-rwxr-xr-xcore/java/android/bluetooth/BluetoothAdapter.java15
-rwxr-xr-x[-rw-r--r--]core/java/android/bluetooth/IBluetoothManager.aidl1
-rwxr-xr-x[-rw-r--r--]services/java/com/android/server/BluetoothManagerService.java60
3 files changed, 65 insertions, 11 deletions
diff --git a/core/java/android/bluetooth/BluetoothAdapter.java b/core/java/android/bluetooth/BluetoothAdapter.java
index ceaf17ee6207..17d404d2d7a0 100755
--- a/core/java/android/bluetooth/BluetoothAdapter.java
+++ b/core/java/android/bluetooth/BluetoothAdapter.java
@@ -504,7 +504,10 @@ public final class BluetoothAdapter {
* immediate error
*/
public boolean enable() {
- boolean enabled = false;
+ if (isEnabled() == true){
+ if (DBG) Log.d(TAG, "enable(): BT is already enabled..!");
+ return true;
+ }
try {
return mManagerService.enable();
} catch (RemoteException e) {Log.e(TAG, "", e);}
@@ -1246,8 +1249,14 @@ public final class BluetoothAdapter {
* @hide
*/
public boolean enableNoAutoConnect() {
- // TODO avoid auto-connect in the new stack.
- return enable();
+ if (isEnabled() == true){
+ if (DBG) Log.d(TAG, "enableNoAutoConnect(): BT is already enabled..!");
+ return true;
+ }
+ try {
+ return mManagerService.enableNoAutoConnect();
+ } catch (RemoteException e) {Log.e(TAG, "", e);}
+ return false;
}
/**
diff --git a/core/java/android/bluetooth/IBluetoothManager.aidl b/core/java/android/bluetooth/IBluetoothManager.aidl
index f82da82fff10..de8fe91dc00d 100644..100755
--- a/core/java/android/bluetooth/IBluetoothManager.aidl
+++ b/core/java/android/bluetooth/IBluetoothManager.aidl
@@ -21,6 +21,7 @@ interface IBluetoothManager
void unregisterStateChangeCallback(in IBluetoothStateChangeCallback callback);
boolean isEnabled();
boolean enable();
+ boolean enableNoAutoConnect();
boolean disable(boolean persist);
String getAddress();
diff --git a/services/java/com/android/server/BluetoothManagerService.java b/services/java/com/android/server/BluetoothManagerService.java
index cc9b9fa3ff2e..4c98ac3d7952 100644..100755
--- a/services/java/com/android/server/BluetoothManagerService.java
+++ b/services/java/com/android/server/BluetoothManagerService.java
@@ -22,6 +22,7 @@ import android.os.IBinder;
import android.os.Message;
import android.os.RemoteCallbackList;
import android.os.RemoteException;
+import android.os.Binder;
import android.provider.Settings;
import android.util.Log;
import java.util.List;
@@ -66,6 +67,7 @@ class BluetoothManagerService extends IBluetoothManager.Stub {
private IBluetooth mBluetooth;
private boolean mBinding;
private boolean mUnbinding;
+ private boolean mQuietEnable = false;
private void registerForAirplaneMode(IntentFilter filter) {
final ContentResolver resolver = mContext.getContentResolver();
@@ -105,7 +107,7 @@ class BluetoothManagerService extends IBluetoothManager.Stub {
} else {
if (isBluetoothPersistedStateOn()) {
// enable without persisting the setting
- handleEnable(false);
+ handleEnable(false, false);
}
}
}
@@ -269,7 +271,32 @@ class BluetoothManagerService extends IBluetoothManager.Stub {
Message msg = mHandler.obtainMessage(MESSAGE_GET_NAME_AND_ADDRESS);
mHandler.sendMessage(msg);
}
+ public boolean enableNoAutoConnect()
+ {
+ mContext.enforceCallingOrSelfPermission(BLUETOOTH_ADMIN_PERM,
+ "Need BLUETOOTH ADMIN permission");
+ if (DBG) {
+ Log.d(TAG,"enableNoAutoConnect(): mBluetooth =" + mBluetooth +
+ " mBinding = " + mBinding);
+ }
+ if (Binder.getCallingUid() != android.os.Process.NFC_UID) {
+ throw new SecurityException("no permission to enable Bluetooth quietly");
+ }
+ synchronized(mConnection) {
+ if (mBinding) {
+ Log.w(TAG,"enableNoAutoConnect(): binding in progress. Returning..");
+ return true;
+ }
+ if (mConnection == null) mBinding = true;
+ }
+ Message msg = mHandler.obtainMessage(MESSAGE_ENABLE);
+ msg.arg1=0; //No persist
+ msg.arg2=1; //Quiet mode
+ mHandler.sendMessage(msg);
+ return true;
+
+ }
public boolean enable() {
mContext.enforceCallingOrSelfPermission(BLUETOOTH_ADMIN_PERM,
"Need BLUETOOTH ADMIN permission");
@@ -288,6 +315,7 @@ class BluetoothManagerService extends IBluetoothManager.Stub {
Message msg = mHandler.obtainMessage(MESSAGE_ENABLE);
msg.arg1=1; //persist
+ msg.arg2=0; //No Quiet Mode
mHandler.sendMessage(msg);
return true;
}
@@ -501,7 +529,7 @@ class BluetoothManagerService extends IBluetoothManager.Stub {
Log.d(TAG, "MESSAGE_ENABLE: mBluetooth = " + mBluetooth);
}
- handleEnable(msg.arg1 == 1);
+ handleEnable(msg.arg1 == 1, msg.arg2 ==1);
break;
case MESSAGE_DISABLE:
@@ -574,14 +602,21 @@ class BluetoothManagerService extends IBluetoothManager.Stub {
//Do enable request
try {
- if(!mBluetooth.enable()) {
- Log.e(TAG,"IBluetooth.enable() returned false");
+ if (mQuietEnable == false) {
+ if(!mBluetooth.enable()) {
+ Log.e(TAG,"IBluetooth.enable() returned false");
+ }
+ }
+ else
+ {
+ if(!mBluetooth.enableNoAutoConnect()) {
+ Log.e(TAG,"IBluetooth.enableNoAutoConnect() returned false");
+ }
}
} catch (RemoteException e) {
Log.e(TAG,"Unable to call enable()",e);
}
}
-
break;
}
case MESSAGE_TIMEOUT_BIND: {
@@ -637,11 +672,13 @@ class BluetoothManagerService extends IBluetoothManager.Stub {
}
};
- private void handleEnable(boolean persist) {
+ private void handleEnable(boolean persist, boolean quietMode) {
if (persist) {
persistBluetoothSetting(true);
}
+ mQuietEnable = quietMode;
+
synchronized(mConnection) {
if (mBluetooth == null) {
//Start bind timeout and bind
@@ -664,8 +701,15 @@ class BluetoothManagerService extends IBluetoothManager.Stub {
//Enable bluetooth
try {
- if(!mBluetooth.enable()) {
- Log.e(TAG,"IBluetooth.enable() returned false");
+ if (!mQuietEnable) {
+ if(!mBluetooth.enable()) {
+ Log.e(TAG,"IBluetooth.enable() returned false");
+ }
+ }
+ else {
+ if(!mBluetooth.enableNoAutoConnect()) {
+ Log.e(TAG,"IBluetooth.enableNoAutoConnect() returned false");
+ }
}
} catch (RemoteException e) {
Log.e(TAG,"Unable to call enable()",e);