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

Commit 53a8a6a8 authored by William Escande's avatar William Escande
Browse files

HeadsetClient: Properly enforce PRIVILEGED

Properly enforce permission that are docummented as systemApi with
BLUETOOTH_PRIVILEGED

Bug: 349682934
Test: m com.android.btservices
Flag: Exempt refactor to address errorprone error
Change-Id: I47711497b348a4528c6391a9f5d3c96e863ea965
parent a818c640
Loading
Loading
Loading
Loading
+6 −6
Original line number Diff line number Diff line
@@ -33,15 +33,15 @@ interface IBluetoothHeadsetClient {
    @JavaPassthrough(annotation="@android.annotation.RequiresPermission(android.Manifest.permission.BLUETOOTH_CONNECT)")
    boolean disconnect(in BluetoothDevice device, in AttributionSource attributionSource);

    @JavaPassthrough(annotation="@android.annotation.RequiresPermission(android.Manifest.permission.BLUETOOTH_CONNECT)")
    @JavaPassthrough(annotation="@android.annotation.RequiresPermission(allOf={android.Manifest.permission.BLUETOOTH_CONNECT,android.Manifest.permission.BLUETOOTH_PRIVILEGED})")
    List<BluetoothDevice> getConnectedDevices(in AttributionSource attributionSource);
    @JavaPassthrough(annotation="@android.annotation.RequiresPermission(android.Manifest.permission.BLUETOOTH_CONNECT)")
    @JavaPassthrough(annotation="@android.annotation.RequiresPermission(allOf={android.Manifest.permission.BLUETOOTH_CONNECT,android.Manifest.permission.BLUETOOTH_PRIVILEGED})")
    List<BluetoothDevice> getDevicesMatchingConnectionStates(in int[] states, in AttributionSource attributionSource);
    @JavaPassthrough(annotation="@android.annotation.RequiresPermission(android.Manifest.permission.BLUETOOTH_CONNECT)")
    @JavaPassthrough(annotation="@android.annotation.RequiresPermission(allOf={android.Manifest.permission.BLUETOOTH_CONNECT,android.Manifest.permission.BLUETOOTH_PRIVILEGED})")
    int getConnectionState(in BluetoothDevice device, in AttributionSource attributionSource);
    @JavaPassthrough(annotation="@android.annotation.RequiresPermission(android.Manifest.permission.BLUETOOTH_CONNECT)")
    @JavaPassthrough(annotation="@android.annotation.RequiresPermission(allOf={android.Manifest.permission.BLUETOOTH_CONNECT,android.Manifest.permission.BLUETOOTH_PRIVILEGED})")
    boolean setConnectionPolicy(in BluetoothDevice device, int connectionPolicy, in AttributionSource attributionSource);
    @JavaPassthrough(annotation="@android.annotation.RequiresPermission(android.Manifest.permission.BLUETOOTH_CONNECT)")
    @JavaPassthrough(annotation="@android.annotation.RequiresPermission(allOf={android.Manifest.permission.BLUETOOTH_CONNECT,android.Manifest.permission.BLUETOOTH_PRIVILEGED})")
    int getConnectionPolicy(in BluetoothDevice device, in AttributionSource attributionSource);

    @JavaPassthrough(annotation="@android.annotation.RequiresPermission(android.Manifest.permission.BLUETOOTH_CONNECT)")
@@ -51,7 +51,7 @@ interface IBluetoothHeadsetClient {

    @JavaPassthrough(annotation="@android.annotation.RequiresPermission(android.Manifest.permission.BLUETOOTH_CONNECT)")
    List<BluetoothHeadsetClientCall> getCurrentCalls(in BluetoothDevice device, in AttributionSource attributionSource);
    @JavaPassthrough(annotation="@android.annotation.RequiresPermission(android.Manifest.permission.BLUETOOTH_CONNECT)")
    @JavaPassthrough(annotation="@android.annotation.RequiresPermission(allOf={android.Manifest.permission.BLUETOOTH_CONNECT,android.Manifest.permission.BLUETOOTH_PRIVILEGED})")
    Bundle getCurrentAgEvents(in BluetoothDevice device, in AttributionSource attributionSource);

    @JavaPassthrough(annotation="@android.annotation.RequiresPermission(android.Manifest.permission.BLUETOOTH_CONNECT)")
+14 −1
Original line number Diff line number Diff line
@@ -17,6 +17,7 @@
package com.android.bluetooth.hfpclient;

import static android.Manifest.permission.BLUETOOTH_CONNECT;
import static android.Manifest.permission.BLUETOOTH_PRIVILEGED;
import static android.content.pm.PackageManager.FEATURE_WATCH;

import android.annotation.RequiresPermission;
@@ -77,7 +78,7 @@ public class HeadsetClientService extends ProfileService {
    private AudioManager mAudioManager = null;
    private BatteryManager mBatteryManager = null;
    private int mLastBatteryLevel = -1;
    // Maxinum number of devices we can try connecting to in one session
    // Maximum number of devices we can try connecting to in one session
    private static final int MAX_STATE_MACHINES_POSSIBLE = 100;

    private final Object mStartStopLock = new Object();
@@ -335,6 +336,8 @@ public class HeadsetClientService extends ProfileService {
                return Collections.emptyList();
            }

            service.enforceCallingPermission(BLUETOOTH_PRIVILEGED, null);

            return service.getConnectedDevices();
        }

@@ -346,6 +349,8 @@ public class HeadsetClientService extends ProfileService {
                return Collections.emptyList();
            }

            service.enforceCallingPermission(BLUETOOTH_PRIVILEGED, null);

            return service.getDevicesMatchingConnectionStates(states);
        }

@@ -356,6 +361,8 @@ public class HeadsetClientService extends ProfileService {
                return BluetoothProfile.STATE_DISCONNECTED;
            }

            service.enforceCallingPermission(BLUETOOTH_PRIVILEGED, null);

            return service.getConnectionState(device);
        }

@@ -367,6 +374,8 @@ public class HeadsetClientService extends ProfileService {
                return false;
            }

            service.enforceCallingPermission(BLUETOOTH_PRIVILEGED, null);

            return service.setConnectionPolicy(device, connectionPolicy);
        }

@@ -377,6 +386,8 @@ public class HeadsetClientService extends ProfileService {
                return BluetoothProfile.CONNECTION_POLICY_UNKNOWN;
            }

            service.enforceCallingPermission(BLUETOOTH_PRIVILEGED, null);

            return service.getConnectionPolicy(device);
        }

@@ -572,6 +583,8 @@ public class HeadsetClientService extends ProfileService {
                return null;
            }

            service.enforceCallingPermission(BLUETOOTH_PRIVILEGED, null);

            return service.getCurrentAgEvents(device);
        }