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

Commit cba16c6f authored by Emma James's avatar Emma James
Browse files

Change the call manager listeners to an array to enforce order where classes...

Change the call manager listeners to an array to enforce order where classes rely on the values from others.

Both the PhoneStateBroadcaster and CallAudioManager listen to onExternalCallChanged. CallAudioManager uses this callback to update foreground call, which PhoneStateBroadcaster uses to determine the phone state when it receives this callback. Enforcing order ensures that the foreground call is updated before the phone state reads the value.

Change-Id: I77f7982345ceee7a7cf0c7fb6a6e5031cee92824
Bug: 230480403
Test: manual test
parent 2385dc0b
Loading
Loading
Loading
Loading
+3 −2
Original line number Diff line number Diff line
@@ -468,10 +468,11 @@ public class CallAudioManager extends CallsManagerListenerBase {
    @VisibleForTesting
    public boolean startRinging() {
        synchronized (mCallsManager.getLock()) {
            boolean result = mRinger.startRinging(mForegroundCall,
            Call localForegroundCall = mForegroundCall;
            boolean result = mRinger.startRinging(localForegroundCall,
                    mCallAudioRouteStateMachine.isHfpDeviceAvailable());
            if (result) {
                mForegroundCall.setStartRingTime();
                localForegroundCall.setStartRingTime();
            }
            return result;
        }
+6 −5
Original line number Diff line number Diff line
@@ -140,6 +140,7 @@ import java.util.Optional;
import java.util.Set;
import java.util.concurrent.CompletableFuture;
import java.util.concurrent.ConcurrentHashMap;
import java.util.concurrent.CopyOnWriteArrayList;
import java.util.concurrent.CountDownLatch;
import java.util.concurrent.Executors;
import java.util.concurrent.TimeUnit;
@@ -343,10 +344,8 @@ public class CallsManager extends Call.ListenerBase
    private RespondViaSmsManager mRespondViaSmsManager;
    private final Ringer mRinger;
    private final InCallWakeLockController mInCallWakeLockController;
    // For this set initial table size to 16 because we add 13 listeners in
    // the CallsManager constructor.
    private final Set<CallsManagerListener> mListeners = Collections.newSetFromMap(
            new ConcurrentHashMap<CallsManagerListener, Boolean>(16, 0.9f, 1));
    private final CopyOnWriteArrayList<CallsManagerListener> mListeners =
            new CopyOnWriteArrayList<>();
    private final HeadsetMediaButton mHeadsetMediaButton;
    private final WiredHeadsetManager mWiredHeadsetManager;
    private final SystemStateHelper mSystemStateHelper;
@@ -579,7 +578,6 @@ public class CallsManager extends Call.ListenerBase
        mListeners.add(mInCallWakeLockController);
        mListeners.add(statusBarNotifier);
        mListeners.add(mCallLogManager);
        mListeners.add(mPhoneStateBroadcaster);
        mListeners.add(mInCallController);
        mListeners.add(mCallDiagnosticServiceController);
        mListeners.add(mCallAudioManager);
@@ -590,6 +588,9 @@ public class CallsManager extends Call.ListenerBase
        mListeners.add(mProximitySensorManager);
        mListeners.add(audioProcessingNotification);

        // this needs to be after the mCallAudioManager
        mListeners.add(mPhoneStateBroadcaster);

        // There is no USER_SWITCHED broadcast for user 0, handle it here explicitly.
        final UserManager userManager = UserManager.get(mContext);
        // Don't load missed call if it is run in split user model.