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

Commit 85b387b5 authored by virkumar's avatar virkumar
Browse files

Syncronize frameowrk and ImsStack operation for ImsFeatureStatusCallback.

Avoid race condition when ImsStack updates the feature status and
framework adds callback for ImsFeatureStatus

Test: atest CtsTelephonyTestCases:ImsCallingTest
Bug: 248215521

Merged-In: I42dfb45e15dda0f2bf6a11263edf3a7920a4140b
Change-Id: I42dfb45e15dda0f2bf6a11263edf3a7920a4140b
parent dc7b6087
Loading
Loading
Loading
Loading
+2 −2
Original line number Diff line number Diff line
@@ -425,8 +425,8 @@ public class ImsService extends Service {
        }
    }

    private IImsRcsFeature createRcsFeatureInternal(int slotId, int subI) {
        RcsFeature f = createRcsFeatureForSubscription(slotId, subI);
    private IImsRcsFeature createRcsFeatureInternal(int slotId, int subId) {
        RcsFeature f = createRcsFeatureForSubscription(slotId, subId);
        if (f != null) {
            f.setDefaultExecutor(mExecutor);
            setupFeature(f, slotId, ImsFeature.FEATURE_RCS);
+9 −5
Original line number Diff line number Diff line
@@ -394,10 +394,12 @@ public abstract class ImsFeature {
    @VisibleForTesting
    public void addImsFeatureStatusCallback(@NonNull IImsFeatureStatusCallback c) {
        try {
            synchronized (mStatusCallbacks) {
                // Add the callback if the callback completes successfully without a RemoteException
                mStatusCallbacks.register(c);
                // If we have just connected, send queued status.
                c.notifyImsFeatureStatus(getFeatureState());
            // Add the callback if the callback completes successfully without a RemoteException.
            mStatusCallbacks.register(c);
            }
        } catch (RemoteException e) {
            Log.w(LOG_TAG, "Couldn't notify feature state: " + e.getMessage());
        }
@@ -409,8 +411,10 @@ public abstract class ImsFeature {
     */
    @VisibleForTesting
    public void removeImsFeatureStatusCallback(@NonNull IImsFeatureStatusCallback c) {
        synchronized (mStatusCallbacks) {
            mStatusCallbacks.unregister(c);
        }
    }

    /**
     * Internal method called by ImsFeature when setFeatureState has changed.