Honor Ble scanning settings from Settings UI.
Bug:20643039
Change-Id: Ib1465108e26b8537c9da1bfbb31a99d2e33da910
diff --git a/core/java/android/bluetooth/BluetoothAdapter.java b/core/java/android/bluetooth/BluetoothAdapter.java
index 3044a94..b631920 100644
--- a/core/java/android/bluetooth/BluetoothAdapter.java
+++ b/core/java/android/bluetooth/BluetoothAdapter.java
@@ -34,6 +34,7 @@
import android.os.ServiceManager;
import android.app.ActivityThread;
import android.os.SystemProperties;
+import android.provider.Settings;
import android.os.Binder;
import android.util.Log;
import android.util.Pair;
@@ -632,24 +633,6 @@
}
/**
- * Returns true if LE only mode is enabled, that is apps
- * have authorization to turn only BT ON and the calling
- * app has privilage to do so
- */
- private boolean isLEAlwaysOnEnabled() {
- boolean ret = false;
- if (SystemProperties.getBoolean("ro.bluetooth.blealwayson", true) == true) {
- Log.v(TAG, "LE always on mode is enabled");
- // TODO: System API authorization check
- ret = true;
- } else {
- Log.v(TAG, "LE always on mode is disabled");
- ret = false;
- }
- return ret;
- }
-
- /**
* Turns off Bluetooth LE which was earlier turned on by calling EnableBLE().
*
* <p> If the internal Adapter state is STATE_BLE_ON, this would trigger the transition
@@ -676,7 +659,7 @@
* @hide
*/
public boolean disableBLE() {
- if (isLEAlwaysOnEnabled() != true) return false;
+ if (!isBleScanAlwaysAvailable()) return false;
int state = getLeState();
if (state == BluetoothAdapter.STATE_ON) {
@@ -738,7 +721,7 @@
* @hide
*/
public boolean enableBLE() {
- if (isLEAlwaysOnEnabled() != true) return false;
+ if (!isBleScanAlwaysAvailable()) return false;
if (isLeEnabled() == true) {
if (DBG) Log.d(TAG, "enableBLE(): BT is already enabled..!");
@@ -1243,8 +1226,12 @@
*/
@SystemApi
public boolean isBleScanAlwaysAvailable() {
- // TODO: implement after Settings UI change.
- return false;
+ try {
+ return mManagerService.isBleScanAlwaysAvailable();
+ } catch (RemoteException e) {
+ Log.e(TAG, "remote expection when calling isBleScanAlwaysAvailable", e);
+ return false;
+ }
}
/**
diff --git a/core/java/android/bluetooth/IBluetoothManager.aidl b/core/java/android/bluetooth/IBluetoothManager.aidl
index 8d1ce99..0b81ee8 100644
--- a/core/java/android/bluetooth/IBluetoothManager.aidl
+++ b/core/java/android/bluetooth/IBluetoothManager.aidl
@@ -44,6 +44,8 @@
String getAddress();
String getName();
+
+ boolean isBleScanAlwaysAvailable();
int updateBleAppCount(IBinder b, boolean enable);
boolean isBleAppPresent();
}
diff --git a/services/core/java/com/android/server/BluetoothManagerService.java b/services/core/java/com/android/server/BluetoothManagerService.java
index ef82bb7..1019faa 100644
--- a/services/core/java/com/android/server/BluetoothManagerService.java
+++ b/services/core/java/com/android/server/BluetoothManagerService.java
@@ -48,6 +48,7 @@
import android.os.UserHandle;
import android.os.UserManager;
import android.provider.Settings;
+import android.provider.Settings.SettingNotFoundException;
import android.util.Log;
import java.io.FileDescriptor;
@@ -443,6 +444,16 @@
/** Internal death rec list */
Map<IBinder, ClientDeathRecipient> mBleApps = new HashMap<IBinder, ClientDeathRecipient>();
+ @Override
+ public boolean isBleScanAlwaysAvailable() {
+ try {
+ return (Settings.Global.getInt(mContentResolver,
+ Settings.Global.BLE_SCAN_ALWAYS_AVAILABLE)) != 0;
+ } catch (SettingNotFoundException e) {
+ }
+ return false;
+ }
+
public int updateBleAppCount(IBinder token, boolean enable) {
if (enable) {
ClientDeathRecipient r = mBleApps.get(token);