Merge "Add @RequiresPermission annotation to SystemApis in BluetoothPan, open up close method as a SystemApi, and BluetoothPan class now implements AutoCloseable and CloseGuard"

This commit is contained in:
Treehugger Robot
2020-01-22 21:09:47 +00:00
committed by Gerrit Code Review
2 changed files with 24 additions and 9 deletions

View File

@@ -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";

View File

@@ -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();