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

Commit b55c6a1f authored by Calvin On's avatar Calvin On
Browse files

Use the live AdapterService in ProfileService.

Previously, if AdapterService was null while ProfileService is
created, the ProfileService would never work because it would
store a stale reference to the AdapterService.

This change ensures that ProfileService accesses the current
AdapterService at any given time.

Bug: 29519304

Change-Id: I25efbf4a58932f519ac9f0b89c4112a442c994eb
parent ff83745a
Loading
Loading
Loading
Loading
+3 −1
Original line number Diff line number Diff line
@@ -330,9 +330,11 @@ public class AdapterService extends Service {

    public void addProfile(ProfileService profile) {
        synchronized (mProfiles) {
            if (!mProfiles.contains(profile)) {
                mProfiles.add(profile);
            }
        }
    }

    public void removeProfile(ProfileService profile) {
        synchronized (mProfiles) {
+15 −13
Original line number Diff line number Diff line
@@ -55,8 +55,6 @@ public abstract class ProfileService extends Service {
    protected boolean mStartError=false;
    private boolean mCleaningUp = false;

    private AdapterService mAdapterService;

    protected String getName() {
        return getClass().getSimpleName();
    }
@@ -109,16 +107,17 @@ public abstract class ProfileService extends Service {
        super.onCreate();
        mAdapter = BluetoothAdapter.getDefaultAdapter();
        mBinder = initBinder();
        mAdapterService = AdapterService.getAdapterService();
        if (mAdapterService != null) {
            mAdapterService.addProfile(this);
        } else {
            Log.w(TAG, "onCreate, null mAdapterService");
        }
    }

    public int onStartCommand(Intent intent, int flags, int startId) {
        if (DBG) log("onStartCommand()");
        AdapterService adapterService = AdapterService.getAdapterService();
        if (adapterService != null) {
            adapterService.addProfile(this);
        } else {
            Log.w(TAG, "Could not add this profile because AdapterService is null.");
        }

        if (mStartError || mAdapter == null) {
            Log.w(mName, "Stopping profile service: device does not have BT");
            doStop(intent);
@@ -178,7 +177,8 @@ public abstract class ProfileService extends Service {
    @Override
    public void onDestroy() {
        if (DBG) log("Destroying service.");
        if (mAdapterService != null) mAdapterService.removeProfile(this);
        AdapterService adapterService = AdapterService.getAdapterService();
        if (adapterService != null) adapterService.removeProfile(this);

        if (mCleaningUp) {
            if (DBG) log("Cleanup already started... Skipping cleanup()...");
@@ -222,15 +222,17 @@ public abstract class ProfileService extends Service {

    protected void notifyProfileServiceStateChanged(int state) {
        //Notify adapter service
        if (mAdapterService != null) {
            mAdapterService.onProfileServiceStateChanged(getClass().getName(), state);
        AdapterService adapterService = AdapterService.getAdapterService();
        if (adapterService != null) {
            adapterService.onProfileServiceStateChanged(getClass().getName(), state);
        }
    }

    public void notifyProfileConnectionStateChanged(BluetoothDevice device,
            int profileId, int newState, int prevState) {
        if (mAdapterService != null) {
            mAdapterService.onProfileConnectionStateChanged(device, profileId, newState, prevState);
        AdapterService adapterService = AdapterService.getAdapterService();
        if (adapterService != null) {
            adapterService.onProfileConnectionStateChanged(device, profileId, newState, prevState);
        }
    }