Merge "CloseGuard for more Bluetooth components." into sc-dev

This commit is contained in:
Jeff Sharkey
2021-06-04 04:07:09 +00:00
committed by Android (Google) Code Review
2 changed files with 23 additions and 0 deletions

View File

@@ -39,6 +39,7 @@ import android.os.IBinder;
import android.os.Looper;
import android.os.Message;
import android.os.RemoteException;
import android.util.CloseGuard;
import android.util.Log;
import java.util.ArrayList;
@@ -338,6 +339,8 @@ public final class BluetoothHeadset implements BluetoothProfile {
private static final int MESSAGE_HEADSET_SERVICE_CONNECTED = 100;
private static final int MESSAGE_HEADSET_SERVICE_DISCONNECTED = 101;
private final CloseGuard mCloseGuard = new CloseGuard();
private Context mContext;
private ServiceListener mServiceListener;
private volatile IBluetoothHeadset mService;
@@ -385,6 +388,7 @@ public final class BluetoothHeadset implements BluetoothProfile {
}
doBind();
mCloseGuard.open("close");
}
private boolean doBind() {
@@ -438,6 +442,14 @@ public final class BluetoothHeadset implements BluetoothProfile {
}
mServiceListener = null;
doUnbind();
mCloseGuard.close();
}
/** {@hide} */
@Override
protected void finalize() throws Throwable {
mCloseGuard.warnIfOpen();
close();
}
/**

View File

@@ -26,6 +26,7 @@ import android.os.Build;
import android.os.IBinder;
import android.os.RemoteException;
import android.os.UserHandle;
import android.util.CloseGuard;
import android.util.Log;
/**
@@ -36,6 +37,7 @@ import android.util.Log;
*/
@SuppressLint("AndroidFrameworkBluetoothPermission")
public abstract class BluetoothProfileConnector<T> {
private final CloseGuard mCloseGuard = new CloseGuard();
private final int mProfileId;
private BluetoothProfile.ServiceListener mServiceListener;
private final BluetoothProfile mProfileProxy;
@@ -82,11 +84,19 @@ public abstract class BluetoothProfileConnector<T> {
mServiceName = serviceName;
}
/** {@hide} */
@Override
public void finalize() {
mCloseGuard.warnIfOpen();
doUnbind();
}
@SuppressLint("AndroidFrameworkRequiresPermission")
private boolean doBind() {
synchronized (mConnection) {
if (mService == null) {
logDebug("Binding service...");
mCloseGuard.open("doUnbind");
try {
Intent intent = new Intent(mServiceName);
ComponentName comp = intent.resolveSystemService(
@@ -110,6 +120,7 @@ public abstract class BluetoothProfileConnector<T> {
synchronized (mConnection) {
if (mService != null) {
logDebug("Unbinding service...");
mCloseGuard.close();
try {
mContext.unbindService(mConnection);
} catch (IllegalArgumentException ie) {