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

Commit dc125268 authored by Rahul Sabnis's avatar Rahul Sabnis
Browse files

Add @RequiresPermission annotation to SystemApis in BluetoothPan, open

up close method as a SystemApi, and BluetoothPan class now implements
AutoCloseable and CloseGuard

Bug: 146045934
Test: Manual
Change-Id: Iafb2157d67ae4f8e3d7d97cf4198f2978e391a8c
parent d982f6c3
Loading
Loading
Loading
Loading
+6 −5
Original line number Diff line number Diff line
@@ -1440,12 +1440,13 @@ package android.bluetooth {
    field public static final String ACTION_CONNECTION_STATE_CHANGED = "android.bluetooth.map.profile.action.CONNECTION_STATE_CHANGED";
  }
  public final class BluetoothPan implements android.bluetooth.BluetoothProfile {
    method protected void finalize();
  public final class BluetoothPan implements java.lang.AutoCloseable android.bluetooth.BluetoothProfile {
    method @RequiresPermission(android.Manifest.permission.BLUETOOTH) public void close();
    method @RequiresPermission(android.Manifest.permission.BLUETOOTH) protected void finalize();
    method @NonNull public java.util.List<android.bluetooth.BluetoothDevice> getConnectedDevices();
    method public int getConnectionState(@Nullable android.bluetooth.BluetoothDevice);
    method public boolean isTetheringOn();
    method public void setBluetoothTethering(boolean);
    method @RequiresPermission(android.Manifest.permission.BLUETOOTH) public int getConnectionState(@Nullable android.bluetooth.BluetoothDevice);
    method @RequiresPermission(android.Manifest.permission.BLUETOOTH) public boolean isTetheringOn();
    method @RequiresPermission(android.Manifest.permission.BLUETOOTH_ADMIN) public void setBluetoothTethering(boolean);
    method @RequiresPermission(android.Manifest.permission.BLUETOOTH_ADMIN) public boolean setConnectionPolicy(@NonNull android.bluetooth.BluetoothDevice, int);
    field public static final String ACTION_CONNECTION_STATE_CHANGED = "android.bluetooth.pan.profile.action.CONNECTION_STATE_CHANGED";
    field public static final String EXTRA_LOCAL_ROLE = "android.bluetooth.pan.extra.LOCAL_ROLE";
+18 −4
Original line number Diff line number Diff line
@@ -30,6 +30,7 @@ import android.content.Context;
import android.os.Binder;
import android.os.IBinder;
import android.os.RemoteException;
import android.util.CloseGuard;
import android.util.Log;

import java.lang.annotation.Retention;
@@ -50,10 +51,11 @@ import java.util.List;
 * @hide
 */
@SystemApi
public final class BluetoothPan implements BluetoothProfile {
public final class BluetoothPan implements BluetoothProfile, AutoCloseable {
    private static final String TAG = "BluetoothPan";
    private static final boolean DBG = true;
    private static final boolean VDBG = false;
    private CloseGuard mCloseGuard;

    /**
     * Intent used to broadcast the change in connection state of the Pan
@@ -166,10 +168,15 @@ public final class BluetoothPan implements BluetoothProfile {
        mAdapter = BluetoothAdapter.getDefaultAdapter();
        mContext = context;
        mProfileConnector.connect(context, listener);
        mCloseGuard = new CloseGuard();
        mCloseGuard.open("close");
    }

    @UnsupportedAppUsage
    /*package*/ void close() {
    /**
     * Closes the connection to the service and unregisters callbacks
     */
    @RequiresPermission(Manifest.permission.BLUETOOTH)
    public void close() {
        if (VDBG) log("close()");
        mProfileConnector.disconnect();
    }
@@ -178,8 +185,11 @@ public final class BluetoothPan implements BluetoothProfile {
        return mProfileConnector.getService();
    }


    @RequiresPermission(Manifest.permission.BLUETOOTH)
    protected void finalize() {
        if (mCloseGuard != null) {
            mCloseGuard.warnIfOpen();
        }
        close();
    }

@@ -316,6 +326,7 @@ public final class BluetoothPan implements BluetoothProfile {
     * @hide
     */
    @Override
    @RequiresPermission(Manifest.permission.BLUETOOTH)
    public List<BluetoothDevice> getDevicesMatchingConnectionStates(int[] states) {
        if (VDBG) log("getDevicesMatchingStates()");
        final IBluetoothPan service = getService();
@@ -335,6 +346,7 @@ public final class BluetoothPan implements BluetoothProfile {
     * {@inheritDoc}
     */
    @Override
    @RequiresPermission(Manifest.permission.BLUETOOTH)
    public int getConnectionState(@Nullable BluetoothDevice device) {
        if (VDBG) log("getState(" + device + ")");
        final IBluetoothPan service = getService();
@@ -355,6 +367,7 @@ public final class BluetoothPan implements BluetoothProfile {
     *
     * @param value is whether to enable or disable bluetooth tethering
     */
    @RequiresPermission(Manifest.permission.BLUETOOTH_ADMIN)
    public void setBluetoothTethering(boolean value) {
        String pkgName = mContext.getOpPackageName();
        if (DBG) log("setBluetoothTethering(" + value + "), calling package:" + pkgName);
@@ -373,6 +386,7 @@ public final class BluetoothPan implements BluetoothProfile {
     *
     * @return true if tethering is on, false if not or some error occurred
     */
    @RequiresPermission(Manifest.permission.BLUETOOTH)
    public boolean isTetheringOn() {
        if (VDBG) log("isTetheringOn()");
        final IBluetoothPan service = getService();