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

Commit 65ed9d92 authored by Jordan Liu's avatar Jordan Liu
Browse files

CallAttributes uses the call network type

Instead of the ServiceState.getNetworkType(), since the service state
might not match the RAT of the specific call, we use the radio type from
the ImsCall.

Bug: 124785734
Test: manual
Change-Id: I33f84bb415c943d5b766fcd3a4e8257d8f7c1cfe
parent 0dddb902
Loading
Loading
Loading
Loading
+9 −33
Original line number Diff line number Diff line
@@ -177,8 +177,6 @@ public class TelephonyRegistry extends ITelephonyRegistry.Stub {

    private ServiceState[] mServiceState;

    private int[] mNetworkType;

    private int[] mVoiceActivationState;

    private int[] mDataActivationState;
@@ -213,6 +211,9 @@ public class TelephonyRegistry extends ITelephonyRegistry.Stub {
    private CallAttributes mCallAttributes = new CallAttributes(new PreciseCallState(),
            TelephonyManager.NETWORK_TYPE_UNKNOWN, new CallQuality());

    // network type of the call associated with the mCallAttributes and mCallQuality
    private int mCallNetworkType = TelephonyManager.NETWORK_TYPE_UNKNOWN;

    private int[] mSrvccState;

    private int mDefaultSubId = SubscriptionManager.INVALID_SUBSCRIPTION_ID;
@@ -374,7 +375,6 @@ public class TelephonyRegistry extends ITelephonyRegistry.Stub {
        mDataConnectionNetworkType = new int[numPhones];
        mCallIncomingNumber = new String[numPhones];
        mServiceState = new ServiceState[numPhones];
        mNetworkType = new int[numPhones];
        mVoiceActivationState = new int[numPhones];
        mDataActivationState = new int[numPhones];
        mUserMobileDataState = new boolean[numPhones];
@@ -395,7 +395,6 @@ public class TelephonyRegistry extends ITelephonyRegistry.Stub {
            mDataActivationState[i] = TelephonyManager.SIM_ACTIVATION_STATE_UNKNOWN;
            mCallIncomingNumber[i] =  "";
            mServiceState[i] =  new ServiceState();
            mNetworkType[i] = mServiceState[i].getVoiceNetworkType();
            mSignalStrength[i] =  new SignalStrength();
            mUserMobileDataState[i] = false;
            mMessageWaiting[i] =  false;
@@ -997,21 +996,6 @@ public class TelephonyRegistry extends ITelephonyRegistry.Stub {
            if (validatePhoneId(phoneId)) {
                mServiceState[phoneId] = state;

                boolean notifyCallAttributes = true;
                if (mNetworkType[phoneId] != mServiceState[phoneId].getVoiceNetworkType()) {
                    mNetworkType[phoneId] = state.getVoiceNetworkType();
                    mCallAttributes = new CallAttributes(mPreciseCallState, mNetworkType[phoneId],
                            mCallQuality);
                } else {
                    // No change to network type, so no need to notify call attributes
                    notifyCallAttributes = false;
                }

                if (mCallQuality == null) {
                    // No call quality reported yet, so no need to notify call attributes
                    notifyCallAttributes = false;
                }

                for (Record r : mRecords) {
                    if (VDBG) {
                        log("notifyServiceStateForSubscriber: r=" + r + " subId=" + subId
@@ -1039,14 +1023,6 @@ public class TelephonyRegistry extends ITelephonyRegistry.Stub {
                            mRemoveList.add(r.binder);
                        }
                    }
                    if (notifyCallAttributes && r.matchPhoneStateListenerEvent(
                                    PhoneStateListener.LISTEN_CALL_ATTRIBUTES_CHANGED)) {
                        try {
                            r.callback.onCallAttributesChanged(mCallAttributes);
                        } catch (RemoteException ex) {
                            mRemoveList.add(r.binder);
                        }
                    }
                }
            } else {
                log("notifyServiceStateForSubscriber: INVALID phoneId=" + phoneId);
@@ -1573,7 +1549,7 @@ public class TelephonyRegistry extends ITelephonyRegistry.Stub {
                log("notifyPreciseCallState: mCallQuality is null, skipping call attributes");
                notifyCallAttributes = false;
            } else {
                mCallAttributes = new CallAttributes(mPreciseCallState, mNetworkType[phoneId],
                mCallAttributes = new CallAttributes(mPreciseCallState, mCallNetworkType,
                        mCallQuality);
            }

@@ -1840,16 +1816,16 @@ public class TelephonyRegistry extends ITelephonyRegistry.Stub {
    }

    @Override
    public void notifyCallQualityChanged(CallQuality callQuality, int phoneId) {
    public void notifyCallQualityChanged(CallQuality callQuality, int phoneId,
            int callNetworkType) {
        if (!checkNotifyPermission("notifyCallQualityChanged()")) {
            return;
        }

        // merge CallQuality with PreciseCallState and network type
        mCallQuality = callQuality;
        mCallAttributes = new CallAttributes(mPreciseCallState,
                mNetworkType[phoneId],
                callQuality);
        mCallNetworkType = callNetworkType;
        mCallAttributes = new CallAttributes(mPreciseCallState, callNetworkType, callQuality);

        synchronized (mRecords) {
            TelephonyManager tm = (TelephonyManager) mContext.getSystemService(
@@ -1886,7 +1862,6 @@ public class TelephonyRegistry extends ITelephonyRegistry.Stub {
                pw.println("mCallState=" + mCallState[i]);
                pw.println("mCallIncomingNumber=" + mCallIncomingNumber[i]);
                pw.println("mServiceState=" + mServiceState[i]);
                pw.println("mNetworkType=" + mNetworkType[i]);
                pw.println("mVoiceActivationState= " + mVoiceActivationState[i]);
                pw.println("mDataActivationState= " + mDataActivationState[i]);
                pw.println("mUserMobileDataState= " + mUserMobileDataState[i]);
@@ -1900,6 +1875,7 @@ public class TelephonyRegistry extends ITelephonyRegistry.Stub {
                pw.println("mImsCallDisconnectCause=" + mImsReasonInfo.get(i).toString());
                pw.decreaseIndent();
            }
            pw.println("mCallNetworkType=" + mCallNetworkType);
            pw.println("mPreciseDataConnectionState=" + mPreciseDataConnectionState);
            pw.println("mPreciseCallState=" + mPreciseCallState);
            pw.println("mCallDisconnectCause=" + mCallDisconnectCause);
+1 −1
Original line number Diff line number Diff line
@@ -84,6 +84,6 @@ interface ITelephonyRegistry {
    void notifyPreferredDataSubIdChanged(int preferredSubId);
    void notifyRadioPowerStateChanged(in int state);
    void notifyEmergencyNumberList();
    void notifyCallQualityChanged(in CallQuality callQuality, int phoneId);
    void notifyCallQualityChanged(in CallQuality callQuality, int phoneId, int callNetworkType);
    void notifyImsDisconnectCause(int subId, in ImsReasonInfo imsReasonInfo);
}