Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 2ac9f1e1 authored by Wei Wang's avatar Wei Wang Committed by Tom Turney
Browse files

[DO NOT MERGE] Honor Ble scanning settings from Settings UI.

Bug:20643039

Change-Id: Ib1465108e26b8537c9da1bfbb31a99d2e33da910
parent 295d6bdb
Loading
Loading
Loading
Loading
+9 −22
Original line number Diff line number Diff line
@@ -36,6 +36,7 @@ import android.os.RemoteException;
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;
@@ -634,24 +635,6 @@ public final class BluetoothAdapter {
        }
    }

    /**
     * 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().
     *
@@ -679,7 +662,7 @@ public final class BluetoothAdapter {
     * @hide
     */
    public boolean disableBLE() {
        if (isLEAlwaysOnEnabled() != true) return false;
        if (!isBleScanAlwaysAvailable()) return false;

        int state = getLeState();
        if (state == BluetoothAdapter.STATE_ON) {
@@ -741,7 +724,7 @@ public final class BluetoothAdapter {
     * @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..!");
@@ -1247,9 +1230,13 @@ public final class BluetoothAdapter {
     */
    @SystemApi
    public boolean isBleScanAlwaysAvailable() {
        // TODO: implement after Settings UI change.
        try {
            return mManagerService.isBleScanAlwaysAvailable();
        } catch (RemoteException e) {
            Log.e(TAG, "remote expection when calling isBleScanAlwaysAvailable", e);
            return false;
        }
    }

    /**
     * Returns whether peripheral mode is supported.
+2 −0
Original line number Diff line number Diff line
@@ -44,6 +44,8 @@ interface IBluetoothManager

    String getAddress();
    String getName();

    boolean isBleScanAlwaysAvailable();
    int updateBleAppCount(IBinder b, boolean enable);
    boolean isBleAppPresent();
}
+11 −0
Original line number Diff line number Diff line
@@ -48,6 +48,7 @@ import android.os.SystemClock;
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;
@@ -445,6 +446,16 @@ class BluetoothManagerService extends IBluetoothManager.Stub {
    /** 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);