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

Commit 97340071 authored by Treehugger Robot's avatar Treehugger Robot Committed by Gerrit Code Review
Browse files

Merge "Reduced the impact of "synchronized" statements"

parents bf0fbcda 08eec363
Loading
Loading
Loading
Loading
+235 −132
Original line number Diff line number Diff line
@@ -53,6 +53,8 @@ import java.util.Locale;
import java.util.Map;
import java.util.Set;
import java.util.UUID;
import java.util.concurrent.TimeoutException;
import java.util.concurrent.locks.ReentrantReadWriteLock;

/**
 * Represents the local device Bluetooth adapter. The {@link BluetoothAdapter}
@@ -487,6 +489,8 @@ public final class BluetoothAdapter {

    private final IBluetoothManager mManagerService;
    private IBluetooth mService;
    private final ReentrantReadWriteLock mServiceLock =
        new ReentrantReadWriteLock();

    private final Object mLock = new Object();
    private final Map<LeScanCallback, ScanCallback> mLeScanClients;
@@ -521,8 +525,13 @@ public final class BluetoothAdapter {
            throw new IllegalArgumentException("bluetooth manager service is null");
        }
        try {
            mServiceLock.writeLock().lock();
            mService = managerService.registerAdapter(mManagerCallback);
        } catch (RemoteException e) {Log.e(TAG, "", e);}
        } catch (RemoteException e) {
            Log.e(TAG, "", e);
        } finally {
            mServiceLock.writeLock().unlock();
        }
        mManagerService = managerService;
        mLeScanClients = new HashMap<LeScanCallback, ScanCallback>();
        mToken = new Binder();
@@ -609,10 +618,14 @@ public final class BluetoothAdapter {
    @RequiresPermission(Manifest.permission.BLUETOOTH)
    public boolean isEnabled() {
        try {
            synchronized(mManagerCallback) {
            mServiceLock.readLock().lock();
            if (mService != null) return mService.isEnabled();
        } catch (RemoteException e) {
            Log.e(TAG, "", e);
        } finally {
            mServiceLock.readLock().unlock();
        }
        } catch (RemoteException e) {Log.e(TAG, "", e);}

        return false;
    }

@@ -643,12 +656,12 @@ public final class BluetoothAdapter {
     * or OFF if BT is in BLE_ON state
     */
    private void notifyUserAction(boolean enable) {
        try {
            mServiceLock.readLock().lock();
            if (mService == null) {
                Log.e(TAG, "mService is null");
                return;
            }

        try {
            if (enable) {
                mService.onLeServiceUp(); //NA:TODO implementation pending
            } else {
@@ -656,6 +669,8 @@ public final class BluetoothAdapter {
            }
        } catch (RemoteException e) {
            Log.e(TAG, "", e);
        } finally {
            mServiceLock.readLock().unlock();
        }
    }

@@ -787,27 +802,29 @@ public final class BluetoothAdapter {
    @RequiresPermission(Manifest.permission.BLUETOOTH)
    @AdapterState
    public int getState() {
        int state = BluetoothAdapter.STATE_OFF;

        try {
            synchronized(mManagerCallback) {
                if (mService != null)
                {
                    int state=  mService.getState();
                    if (VDBG) Log.d(TAG, "" + hashCode() + ": getState(). Returning " + state);
                    //consider all internal states as OFF
            mServiceLock.readLock().lock();
            if (mService != null) {
                state = mService.getState();
            }
        } catch (RemoteException e) {
            Log.e(TAG, "", e);
        } finally {
            mServiceLock.readLock().unlock();
        }

        // Consider all internal states as OFF
        if (state == BluetoothAdapter.STATE_BLE_ON
            || state == BluetoothAdapter.STATE_BLE_TURNING_ON
            || state == BluetoothAdapter.STATE_BLE_TURNING_OFF) {
            if (VDBG) Log.d(TAG, "Consider internal state as OFF");
            state = BluetoothAdapter.STATE_OFF;
        }
        if (VDBG) Log.d(TAG, "" + hashCode() + ": getState(). Returning " + state);
        return state;
    }
                // TODO(BT) there might be a small gap during STATE_TURNING_ON that
                //          mService is null, handle that case
            }
        } catch (RemoteException e) {Log.e(TAG, "", e);}
        return STATE_OFF;
    }

    /**
     * Get the current state of the local Bluetooth adapter
@@ -829,19 +846,21 @@ public final class BluetoothAdapter {
    @RequiresPermission(Manifest.permission.BLUETOOTH)
    @AdapterState
    public int getLeState() {
        int state = BluetoothAdapter.STATE_OFF;

        try {
            synchronized(mManagerCallback) {
                if (mService != null)
                {
                    int state=  mService.getState();
                    if (VDBG) Log.d(TAG,"getLeState() returning " + state);
                    return state;
                }
            mServiceLock.readLock().lock();
            if (mService != null) {
                state = mService.getState();
            }
        } catch (RemoteException e) {
            Log.e(TAG, "", e);
        } finally {
            mServiceLock.readLock().unlock();
        }
        return BluetoothAdapter.STATE_OFF;

        if (VDBG) Log.d(TAG,"getLeState() returning " + state);
        return state;
    }

    boolean getLeAccess() {
@@ -883,16 +902,21 @@ public final class BluetoothAdapter {
     */
    @RequiresPermission(Manifest.permission.BLUETOOTH_ADMIN)
    public boolean enable() {
        int state = STATE_OFF;
        int state = BluetoothAdapter.STATE_OFF;
        if (isEnabled() == true) {
            if (DBG) Log.d(TAG, "enable(): BT is already enabled..!");
            return true;
        }
        // Use service interface to get the exact state
        if (mService != null) {
        try {
            mServiceLock.readLock().lock();
            if (mService != null) {
                state = mService.getState();
            } catch (RemoteException e) {Log.e(TAG, "", e);}
            }
        } catch (RemoteException e) {
            Log.e(TAG, "", e);
        } finally {
            mServiceLock.readLock().unlock();
        }

        if (state == BluetoothAdapter.STATE_BLE_ON) {
@@ -997,10 +1021,13 @@ public final class BluetoothAdapter {
     */
    public boolean configHciSnoopLog(boolean enable) {
        try {
            synchronized(mManagerCallback) {
            mServiceLock.readLock().lock();
            if (mService != null) return mService.configHciSnoopLog(enable);
        } catch (RemoteException e) {
            Log.e(TAG, "", e);
        } finally {
            mServiceLock.readLock().unlock();
        }
        } catch (RemoteException e) {Log.e(TAG, "", e);}
        return false;
    }

@@ -1016,12 +1043,16 @@ public final class BluetoothAdapter {
     */
    public boolean factoryReset() {
        try {
            mServiceLock.readLock().lock();
            if (mService != null) {
                return mService.factoryReset();
            } else {
            }
            SystemProperties.set("persist.bluetooth.factoryreset", "true");
        } catch (RemoteException e) {
            Log.e(TAG, "", e);
        } finally {
            mServiceLock.readLock().unlock();
        }
        } catch (RemoteException e) {Log.e(TAG, "", e);}
        return false;
    }

@@ -1036,10 +1067,13 @@ public final class BluetoothAdapter {
    public ParcelUuid[] getUuids() {
        if (getState() != STATE_ON) return null;
        try {
            synchronized(mManagerCallback) {
            mServiceLock.readLock().lock();
            if (mService != null) return mService.getUuids();
        } catch (RemoteException e) {
            Log.e(TAG, "", e);
        } finally {
            mServiceLock.readLock().unlock();
        }
        } catch (RemoteException e) {Log.e(TAG, "", e);}
        return null;
    }

@@ -1062,10 +1096,13 @@ public final class BluetoothAdapter {
    public boolean setName(String name) {
        if (getState() != STATE_ON) return false;
        try {
            synchronized(mManagerCallback) {
            mServiceLock.readLock().lock();
            if (mService != null) return mService.setName(name);
        } catch (RemoteException e) {
            Log.e(TAG, "", e);
        } finally {
            mServiceLock.readLock().unlock();
        }
        } catch (RemoteException e) {Log.e(TAG, "", e);}
        return false;
    }

@@ -1090,10 +1127,13 @@ public final class BluetoothAdapter {
    public int getScanMode() {
        if (getState() != STATE_ON) return SCAN_MODE_NONE;
        try {
            synchronized(mManagerCallback) {
            mServiceLock.readLock().lock();
            if (mService != null) return mService.getScanMode();
        } catch (RemoteException e) {
            Log.e(TAG, "", e);
        } finally {
            mServiceLock.readLock().unlock();
        }
        } catch (RemoteException e) {Log.e(TAG, "", e);}
        return SCAN_MODE_NONE;
    }

@@ -1128,10 +1168,13 @@ public final class BluetoothAdapter {
    public boolean setScanMode(@ScanMode int mode, int duration) {
        if (getState() != STATE_ON) return false;
        try {
            synchronized(mManagerCallback) {
            mServiceLock.readLock().lock();
            if (mService != null) return mService.setScanMode(mode, duration);
        } catch (RemoteException e) {
            Log.e(TAG, "", e);
        } finally {
            mServiceLock.readLock().unlock();
        }
        } catch (RemoteException e) {Log.e(TAG, "", e);}
        return false;
    }

@@ -1146,10 +1189,13 @@ public final class BluetoothAdapter {
    public int getDiscoverableTimeout() {
        if (getState() != STATE_ON) return -1;
        try {
            synchronized(mManagerCallback) {
            mServiceLock.readLock().lock();
            if (mService != null) return mService.getDiscoverableTimeout();
        } catch (RemoteException e) {
            Log.e(TAG, "", e);
        } finally {
            mServiceLock.readLock().unlock();
        }
        } catch (RemoteException e) {Log.e(TAG, "", e);}
        return -1;
    }

@@ -1157,10 +1203,13 @@ public final class BluetoothAdapter {
    public void setDiscoverableTimeout(int timeout) {
        if (getState() != STATE_ON) return;
        try {
            synchronized(mManagerCallback) {
            mServiceLock.readLock().lock();
            if (mService != null) mService.setDiscoverableTimeout(timeout);
        } catch (RemoteException e) {
            Log.e(TAG, "", e);
        } finally {
            mServiceLock.readLock().unlock();
        }
        } catch (RemoteException e) {Log.e(TAG, "", e);}
    }

    /**
@@ -1197,10 +1246,13 @@ public final class BluetoothAdapter {
    public boolean startDiscovery() {
        if (getState() != STATE_ON) return false;
        try {
            synchronized(mManagerCallback) {
            mServiceLock.readLock().lock();
            if (mService != null) return mService.startDiscovery();
        } catch (RemoteException e) {
            Log.e(TAG, "", e);
        } finally {
            mServiceLock.readLock().unlock();
        }
        } catch (RemoteException e) {Log.e(TAG, "", e);}
        return false;
    }

@@ -1225,10 +1277,13 @@ public final class BluetoothAdapter {
    public boolean cancelDiscovery() {
        if (getState() != STATE_ON) return false;
        try {
            synchronized(mManagerCallback) {
            mServiceLock.readLock().lock();
            if (mService != null) return mService.cancelDiscovery();
        } catch (RemoteException e) {
            Log.e(TAG, "", e);
        } finally {
            mServiceLock.readLock().unlock();
        }
        } catch (RemoteException e) {Log.e(TAG, "", e);}
        return false;
    }

@@ -1255,10 +1310,13 @@ public final class BluetoothAdapter {
    public boolean isDiscovering() {
        if (getState() != STATE_ON) return false;
        try {
            synchronized(mManagerCallback) {
            mServiceLock.readLock().lock();
            if (mService != null) return mService.isDiscovering();
        } catch (RemoteException e) {
            Log.e(TAG, "", e);
        } finally {
            mServiceLock.readLock().unlock();
        }
        } catch (RemoteException e) {Log.e(TAG, "", e);}
        return false;
    }

@@ -1270,9 +1328,12 @@ public final class BluetoothAdapter {
    public boolean isMultipleAdvertisementSupported() {
        if (getState() != STATE_ON) return false;
        try {
            return mService.isMultiAdvertisementSupported();
            mServiceLock.readLock().lock();
            if (mService != null) return mService.isMultiAdvertisementSupported();
        } catch (RemoteException e) {
            Log.e(TAG, "failed to get isMultipleAdvertisementSupported, error: ", e);
        } finally {
            mServiceLock.readLock().unlock();
        }
        return false;
    }
@@ -1305,9 +1366,12 @@ public final class BluetoothAdapter {
    public boolean isPeripheralModeSupported() {
        if (getState() != STATE_ON) return false;
        try {
            return mService.isPeripheralModeSupported();
            mServiceLock.readLock().lock();
            if (mService != null) return mService.isPeripheralModeSupported();
        } catch (RemoteException e) {
            Log.e(TAG, "failed to get peripheral mode capability: ", e);
        } finally {
            mServiceLock.readLock().unlock();
        }
        return false;
    }
@@ -1320,9 +1384,12 @@ public final class BluetoothAdapter {
    public boolean isOffloadedFilteringSupported() {
        if (!getLeAccess()) return false;
        try {
            return mService.isOffloadedFilteringSupported();
            mServiceLock.readLock().lock();
            if (mService != null) return mService.isOffloadedFilteringSupported();
        } catch (RemoteException e) {
            Log.e(TAG, "failed to get isOffloadedFilteringSupported, error: ", e);
        } finally {
            mServiceLock.readLock().unlock();
        }
        return false;
    }
@@ -1335,9 +1402,12 @@ public final class BluetoothAdapter {
    public boolean isOffloadedScanBatchingSupported() {
        if (!getLeAccess()) return false;
        try {
            return mService.isOffloadedScanBatchingSupported();
            mServiceLock.readLock().lock();
            if (mService != null) return mService.isOffloadedScanBatchingSupported();
        } catch (RemoteException e) {
            Log.e(TAG, "failed to get isOffloadedScanBatchingSupported, error: ", e);
        } finally {
            mServiceLock.readLock().unlock();
        }
        return false;
    }
@@ -1376,10 +1446,13 @@ public final class BluetoothAdapter {
    public BluetoothActivityEnergyInfo getControllerActivityEnergyInfo(int updateType) {
        if (getState() != STATE_ON) return null;
        try {
            mServiceLock.readLock().lock();
            BluetoothActivityEnergyInfo record;
            if (mService != null) {
                if (!mService.isActivityAndEnergyReportingSupported()) {
                    return null;
                }
            }
            synchronized(this) {
                if (updateType == ACTIVITY_ENERGY_INFO_REFRESHED) {
                    mService.getActivityEnergyInfoFromController();
@@ -1396,6 +1469,8 @@ public final class BluetoothAdapter {
            Log.e(TAG, "getControllerActivityEnergyInfoCallback wait interrupted: " + e);
        } catch (RemoteException e) {
            Log.e(TAG, "getControllerActivityEnergyInfoCallback: " + e);
        } finally {
            mServiceLock.readLock().unlock();
        }
        return null;
    }
@@ -1417,11 +1492,14 @@ public final class BluetoothAdapter {
            return toDeviceSet(new BluetoothDevice[0]);
        }
        try {
            synchronized(mManagerCallback) {
            mServiceLock.readLock().lock();
            if (mService != null) return toDeviceSet(mService.getBondedDevices());
            }
            return toDeviceSet(new BluetoothDevice[0]);
        } catch (RemoteException e) {Log.e(TAG, "", e);}
        } catch (RemoteException e) {
            Log.e(TAG, "", e);
        } finally {
            mServiceLock.readLock().unlock();
        }
        return null;
    }

@@ -1441,10 +1519,13 @@ public final class BluetoothAdapter {
    public int getConnectionState() {
        if (getState() != STATE_ON) return BluetoothAdapter.STATE_DISCONNECTED;
        try {
            synchronized(mManagerCallback) {
            mServiceLock.readLock().lock();
            if (mService != null) return mService.getAdapterConnectionState();
        } catch (RemoteException e) {
            Log.e(TAG, "getConnectionState:", e);
        } finally {
            mServiceLock.readLock().unlock();
        }
        } catch (RemoteException e) {Log.e(TAG, "getConnectionState:", e);}
        return BluetoothAdapter.STATE_DISCONNECTED;
    }

@@ -1467,11 +1548,12 @@ public final class BluetoothAdapter {
    public int getProfileConnectionState(int profile) {
        if (getState() != STATE_ON) return BluetoothProfile.STATE_DISCONNECTED;
        try {
            synchronized(mManagerCallback) {
            mServiceLock.readLock().lock();
            if (mService != null) return mService.getProfileConnectionState(profile);
            }
        } catch (RemoteException e) {
            Log.e(TAG, "getProfileConnectionState:", e);
        } finally {
            mServiceLock.readLock().unlock();
        }
        return BluetoothProfile.STATE_DISCONNECTED;
    }
@@ -1775,7 +1857,9 @@ public final class BluetoothAdapter {
            byte[] hash;
            byte[] randomizer;

            byte[] ret = mService.readOutOfBandData();
            byte[] ret = null;
            mServiceLock.readLock().lock();
            if (mService != null) mService.readOutOfBandData();

            if (ret  == null || ret.length != 32) return null;

@@ -1788,7 +1872,12 @@ public final class BluetoothAdapter {
            }
            return new Pair<byte[], byte[]>(hash, randomizer);

        } catch (RemoteException e) {Log.e(TAG, "", e);}*/
        } catch (RemoteException e) {
            Log.e(TAG, "", e);
        } finally {
            mServiceLock.readLock().unlock();
        }
        */
        return null;
    }

@@ -1917,8 +2006,11 @@ public final class BluetoothAdapter {
        new IBluetoothManagerCallback.Stub() {
            public void onBluetoothServiceUp(IBluetooth bluetoothService) {
                if (VDBG) Log.d(TAG, "onBluetoothServiceUp: " + bluetoothService);
                synchronized (mManagerCallback) {

                mServiceLock.writeLock().lock();
                mService = bluetoothService;
                mServiceLock.writeLock().unlock();

                synchronized (mProxyServiceStateCallbacks) {
                    for (IBluetoothManagerCallback cb : mProxyServiceStateCallbacks ) {
                        try {
@@ -1927,7 +2019,8 @@ public final class BluetoothAdapter {
                            } else {
                                Log.d(TAG, "onBluetoothServiceUp: cb is null!!!");
                            }
                            } catch (Exception e)  { Log.e(TAG,"",e);}
                        } catch (Exception e) {
                            Log.e(TAG,"",e);
                        }
                    }
                }
@@ -1935,11 +2028,14 @@ public final class BluetoothAdapter {

            public void onBluetoothServiceDown() {
                if (VDBG) Log.d(TAG, "onBluetoothServiceDown: " + mService);
                synchronized (mManagerCallback) {

                mServiceLock.writeLock().lock();
                mService = null;
                if (mLeScanClients != null) mLeScanClients.clear();
                if (sBluetoothLeAdvertiser != null) sBluetoothLeAdvertiser.cleanup();
                if (sBluetoothLeScanner != null) sBluetoothLeScanner.cleanup();
                mServiceLock.writeLock().unlock();

                synchronized (mProxyServiceStateCallbacks) {
                    for (IBluetoothManagerCallback cb : mProxyServiceStateCallbacks ){
                        try {
@@ -1948,7 +2044,8 @@ public final class BluetoothAdapter {
                            } else {
                                Log.d(TAG, "onBluetoothServiceDown: cb is null!!!");
                            }
                            } catch (Exception e)  { Log.e(TAG,"",e);}
                        } catch (Exception e) {
                            Log.e(TAG,"",e);
                        }
                    }
                }
@@ -2011,11 +2108,17 @@ public final class BluetoothAdapter {
        //TODO(BT)
        /*
        try {
            mServiceLock.readLock().lock();
            if (mService != null) {
                return mService.changeApplicationBluetoothState(on, new
                    StateChangeCallbackWrapper(callback), new Binder());
            }
        } catch (RemoteException e) {
            Log.e(TAG, "changeBluetoothState", e);
        }*/
        } finally {
            mServiceLock.readLock().unlock();
        }
        */
        return false;
    }

+165 −118

File changed.

Preview size limit exceeded, changes collapsed.