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

Commit 69ab794b 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 c7e0fc83
Loading
Loading
Loading
Loading
+18 −4
Original line number Original line Diff line number Diff line
@@ -30,6 +30,7 @@ import android.content.Context;
import android.os.Binder;
import android.os.Binder;
import android.os.IBinder;
import android.os.IBinder;
import android.os.RemoteException;
import android.os.RemoteException;
import android.util.CloseGuard;
import android.util.Log;
import android.util.Log;


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


    /**
    /**
     * Intent used to broadcast the change in connection state of the Pan
     * 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();
        mAdapter = BluetoothAdapter.getDefaultAdapter();
        mContext = context;
        mContext = context;
        mProfileConnector.connect(context, listener);
        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()");
        if (VDBG) log("close()");
        mProfileConnector.disconnect();
        mProfileConnector.disconnect();
    }
    }
@@ -178,8 +185,11 @@ public final class BluetoothPan implements BluetoothProfile {
        return mProfileConnector.getService();
        return mProfileConnector.getService();
    }
    }



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


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