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

Commit b4b0e40a authored by Parvathy Shanmugam's avatar Parvathy Shanmugam
Browse files

(IMS Threading refactoring) Telephony IMS classes to schedule IMS callback on the main thread

Passing executor to run the methods in main thread rather than on binder thread.

Test: atest FrameworksTelephonyTests
Bug: 197989471
Change-Id: I5688e827fe1f24d43f647a0e86169c90e5f7e405
parent 43c89752
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -386,7 +386,7 @@ public class TelephonyComponentFactory {

    public ImsExternalCallTracker makeImsExternalCallTracker(ImsPhone imsPhone) {

        return new ImsExternalCallTracker(imsPhone);
        return new ImsExternalCallTracker(imsPhone, imsPhone.getContext().getMainExecutor());
    }

    /**
+14 −6
Original line number Diff line number Diff line
@@ -33,10 +33,12 @@ import com.android.internal.telephony.Call;
import com.android.internal.telephony.Connection;
import com.android.internal.telephony.Phone;
import com.android.internal.telephony.PhoneConstants;
import com.android.internal.telephony.util.TelephonyUtils;

import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.concurrent.Executor;

/**
 * Responsible for tracking external calls known to the system.
@@ -70,9 +72,15 @@ public class ImsExternalCallTracker implements ImsPhoneCallTracker.PhoneStateLis
     * external call state updates from the IMS framework.
     */
    public class ExternalCallStateListener extends ImsExternalCallStateListener {
        public ExternalCallStateListener(Executor executor) {
            super(executor);
        }

        @Override
        public void onImsExternalCallStateUpdate(List<ImsExternalCallState> externalCallState) {
            refreshExternalCallState(externalCallState);
        public void onImsExternalCallStateUpdate(List<ImsExternalCallState> externalCallState,
                    Executor executor) {
            TelephonyUtils.runWithCleanCallingIdentity(()->
                        refreshExternalCallState(externalCallState), executor);
        }
    }

@@ -149,15 +157,15 @@ public class ImsExternalCallTracker implements ImsPhoneCallTracker.PhoneStateLis

    @VisibleForTesting
    public ImsExternalCallTracker(ImsPhone phone, ImsPullCall callPuller,
            ImsCallNotify callNotifier) {
            ImsCallNotify callNotifier, Executor executor) {

        mPhone = phone;
        mCallStateNotifier = callNotifier;
        mExternalCallStateListener = new ExternalCallStateListener();
        mExternalCallStateListener = new ExternalCallStateListener(executor);
        mCallPuller = callPuller;
    }

    public ImsExternalCallTracker(ImsPhone phone) {
    public ImsExternalCallTracker(ImsPhone phone, Executor executor) {
        mPhone = phone;
        mCallStateNotifier = new ImsCallNotify() {
            @Override
@@ -170,7 +178,7 @@ public class ImsExternalCallTracker implements ImsPhoneCallTracker.PhoneStateLis
                mPhone.notifyPreciseCallStateChanged();
            }
        };
        mExternalCallStateListener = new ExternalCallStateListener();
        mExternalCallStateListener = new ExternalCallStateListener(executor);
        registerForNotifications();
    }

+12 −5
Original line number Diff line number Diff line
@@ -116,6 +116,7 @@ import com.android.internal.telephony.metrics.VoiceCallSessionStats;
import com.android.internal.telephony.nano.TelephonyProto.ImsConnectionState;
import com.android.internal.telephony.uicc.IccRecords;
import com.android.internal.telephony.util.NotificationChannelController;
import com.android.internal.telephony.util.TelephonyUtils;
import com.android.internal.util.IndentingPrintWriter;
import com.android.telephony.Rlog;

@@ -123,6 +124,7 @@ import java.io.FileDescriptor;
import java.io.PrintWriter;
import java.util.ArrayList;
import java.util.List;
import java.util.concurrent.Executor;
import java.util.function.Consumer;

/**
@@ -1965,17 +1967,22 @@ public class ImsPhone extends ImsPhoneBase {
     * Listen to the IMS ECBM state change
     */
    private ImsEcbmStateListener mImsEcbmStateListener =
            new ImsEcbmStateListener() {
            new ImsEcbmStateListener(mContext.getMainExecutor()) {
                @Override
                public void onECBMEntered() {
                public void onECBMEntered(Executor executor) {
                    if (DBG) logd("onECBMEntered");
                    handleEnterEmergencyCallbackMode();

                    TelephonyUtils.runWithCleanCallingIdentity(()->
                            handleEnterEmergencyCallbackMode(), executor);
                }



                @Override
                public void onECBMExited() {
                public void onECBMExited(Executor executor) {
                    if (DBG) logd("onECBMExited");
                    handleExitEmergencyCallbackMode();
                    TelephonyUtils.runWithCleanCallingIdentity(()->
                            handleExitEmergencyCallbackMode(), executor);
                }
            };

+2 −1
Original line number Diff line number Diff line
@@ -58,7 +58,8 @@ public class ImsExternalCallTrackerTest {
    public void setUp() throws Exception {
        MockitoAnnotations.initMocks(this);

        mTracker = new ImsExternalCallTracker(mImsPhone, mImsPullCall, mCallNotifier);
        mTracker = new ImsExternalCallTracker(mImsPhone, mImsPullCall, mCallNotifier,
            Runnable::run);
    }

    @FlakyTest