Merge "Avoid Bluetooth gets turned on by enableBle" into sc-qpr1-dev

This commit is contained in:
TreeHugger Robot
2021-09-08 21:06:21 +00:00
committed by Android (Google) Code Review

View File

@@ -25,9 +25,9 @@ import static android.os.PowerExemptionManager.TEMPORARY_ALLOW_LIST_TYPE_FOREGRO
import static android.os.UserHandle.USER_SYSTEM;
import android.Manifest;
import android.annotation.NonNull;
import android.annotation.RequiresPermission;
import android.annotation.SuppressLint;
import android.annotation.NonNull;
import android.app.ActivityManager;
import android.app.AppGlobals;
import android.app.AppOpsManager;
@@ -187,8 +187,6 @@ class BluetoothManagerService extends IBluetoothManager.Stub {
private final ReentrantReadWriteLock mBluetoothLock = new ReentrantReadWriteLock();
private boolean mBinding;
private boolean mUnbinding;
private int mWaitForEnableRetry;
private int mWaitForDisableRetry;
private BluetoothModeChangeHelper mBluetoothModeChangeHelper;
@@ -982,14 +980,15 @@ class BluetoothManagerService extends IBluetoothManager.Stub {
if (mState == BluetoothAdapter.STATE_ON
|| mState == BluetoothAdapter.STATE_BLE_ON
|| mState == BluetoothAdapter.STATE_TURNING_ON
|| mState == BluetoothAdapter.STATE_TURNING_OFF) {
Log.d(TAG, "enableBLE(): Bluetooth already enabled");
|| mState == BluetoothAdapter.STATE_TURNING_OFF
|| mState == BluetoothAdapter.STATE_BLE_TURNING_ON) {
Log.d(TAG, "enableBLE(): Bluetooth is already enabled or is turning on");
return true;
}
synchronized (mReceiver) {
// waive WRITE_SECURE_SETTINGS permission check
sendEnableMsg(false,
BluetoothProtoEnums.ENABLE_DISABLE_REASON_APPLICATION_REQUEST, packageName);
sendEnableMsg(false, BluetoothProtoEnums.ENABLE_DISABLE_REASON_APPLICATION_REQUEST,
packageName, true);
}
return true;
}
@@ -1802,6 +1801,8 @@ class BluetoothManagerService extends IBluetoothManager.Stub {
private class BluetoothHandler extends Handler {
boolean mGetNameAddressOnly = false;
private int mWaitForEnableRetry;
private int mWaitForDisableRetry;
BluetoothHandler(Looper looper) {
super(looper);
@@ -1852,11 +1853,12 @@ class BluetoothManagerService extends IBluetoothManager.Stub {
case MESSAGE_ENABLE:
int quietEnable = msg.arg1;
int isBle = msg.arg2;
if (mHandler.hasMessages(MESSAGE_HANDLE_DISABLE_DELAYED)
|| mHandler.hasMessages(MESSAGE_HANDLE_ENABLE_DELAYED)) {
// We are handling enable or disable right now, wait for it.
mHandler.sendMessageDelayed(mHandler.obtainMessage(MESSAGE_ENABLE,
quietEnable, 0), ENABLE_DISABLE_DELAY_MS);
quietEnable, isBle), ENABLE_DISABLE_DELAY_MS);
break;
}
@@ -1871,13 +1873,28 @@ class BluetoothManagerService extends IBluetoothManager.Stub {
try {
mBluetoothLock.readLock().lock();
if (mBluetooth != null) {
boolean isHandled = true;
int state = mBluetooth.getState();
if (state == BluetoothAdapter.STATE_BLE_ON) {
Slog.w(TAG, "BT Enable in BLE_ON State, going to ON");
mBluetooth.onLeServiceUp(mContext.getAttributionSource());
persistBluetoothSetting(BLUETOOTH_ON_BLUETOOTH);
break;
switch (state) {
case BluetoothAdapter.STATE_BLE_ON:
if (isBle == 1) {
Slog.i(TAG, "Already at BLE_ON State");
} else {
Slog.w(TAG, "BT Enable in BLE_ON State, going to ON");
mBluetooth.onLeServiceUp(mContext.getAttributionSource());
persistBluetoothSetting(BLUETOOTH_ON_BLUETOOTH);
}
break;
case BluetoothAdapter.STATE_BLE_TURNING_ON:
case BluetoothAdapter.STATE_TURNING_ON:
case BluetoothAdapter.STATE_ON:
Slog.i(TAG, "MESSAGE_ENABLE: already enabled");
break;
default:
isHandled = false;
break;
}
if (isHandled) break;
}
} catch (RemoteException e) {
Slog.e(TAG, "", e);
@@ -2643,7 +2660,12 @@ class BluetoothManagerService extends IBluetoothManager.Stub {
}
private void sendEnableMsg(boolean quietMode, int reason, String packageName) {
mHandler.sendMessage(mHandler.obtainMessage(MESSAGE_ENABLE, quietMode ? 1 : 0, 0));
sendEnableMsg(quietMode, reason, packageName, false);
}
private void sendEnableMsg(boolean quietMode, int reason, String packageName, boolean isBle) {
mHandler.sendMessage(mHandler.obtainMessage(MESSAGE_ENABLE, quietMode ? 1 : 0,
isBle ? 1 : 0));
addActiveLog(reason, packageName, true);
mLastEnabledTime = SystemClock.elapsedRealtime();
}