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

Commit 4aea2c04 authored by Amit Mahajan's avatar Amit Mahajan Committed by Automerger Merge Worker
Browse files

Merge "Show forwarded number in call screen" am: c81d89a3 am: 795afd85

Original change: https://android-review.googlesource.com/c/platform/frameworks/opt/telephony/+/812859

MUST ONLY BE SUBMITTED BY AUTOMERGER

Change-Id: If2ca95fbc66b55a14ec28495e2b9c615d59a8129
parents adc33abf 795afd85
Loading
Loading
Loading
Loading
+11 −0
Original line number Diff line number Diff line
@@ -241,6 +241,8 @@ public abstract class Connection {
    protected boolean mNumberConverted = false;
    protected String mConvertedNumber;

    protected ArrayList<String> mForwardedNumber = null; //May be null. Incoming calls only.

    protected String mPostDialString;      // outgoing calls only
    protected int mNextPostDialChar;       // index into postDialString

@@ -360,6 +362,15 @@ public abstract class Connection {
        return mIsAdhocConference;
    }

    /**
     * Gets redirecting address (e.g. phone number) associated with connection.
     *
     * @return ArrayList of the forwarded number or null if unavailable
     */
    public ArrayList<String> getForwardedNumber() {
        return mForwardedNumber;
    }

    /**
     * Gets CNAP name associated with connection.
     * @return cnap name or null if unavailable
+1 −0
Original line number Diff line number Diff line
@@ -79,6 +79,7 @@ public class DriverCall implements Comparable<DriverCall> {
    public boolean isMpty;
    @UnsupportedAppUsage
    public String number;
    public String forwardedNumber;     // May be null. Incoming calls only.
    public int TOA;
    @UnsupportedAppUsage
    public boolean isVoice;
+13 −2
Original line number Diff line number Diff line
@@ -26,22 +26,24 @@ import android.os.PersistableBundle;
import android.os.PowerManager;
import android.os.Registrant;
import android.os.SystemClock;
import android.telephony.emergency.EmergencyNumber;
import android.telephony.CarrierConfigManager;
import android.telephony.DisconnectCause;
import android.telephony.PhoneNumberUtils;
import android.telephony.ServiceState;
import android.text.TextUtils;

import com.android.internal.telephony.PhoneInternalInterface.DialArgs;
import com.android.internal.telephony.cdma.CdmaCallWaitingNotification;
import com.android.internal.telephony.cdma.CdmaSubscriptionSourceManager;
import com.android.internal.telephony.emergency.EmergencyNumberTracker;
import com.android.internal.telephony.metrics.TelephonyMetrics;
import com.android.internal.telephony.uicc.IccCardApplicationStatus.AppState;
import com.android.internal.telephony.uicc.UiccCardApplication;
import com.android.internal.telephony.PhoneInternalInterface.DialArgs;
import com.android.telephony.Rlog;

import java.util.ArrayList;
import java.util.Arrays;

/**
 * {@hide}
 */
@@ -139,6 +141,7 @@ public class GsmCdmaConnection extends Connection {
        mAddress = dc.number;
        setEmergencyCallInfo(mOwner);

        mForwardedNumber = new ArrayList<String>(Arrays.asList(dc.forwardedNumber));
        mIsIncoming = dc.isMT;
        mCreateTime = System.currentTimeMillis();
        mCnapName = dc.name;
@@ -704,6 +707,14 @@ public class GsmCdmaConnection extends Connection {
            mOwner.getPhone().getVoiceCallSessionStats().onAudioCodecChanged(this, dc.audioQuality);
        }

        ArrayList<String> forwardedNumber =
                new ArrayList<String>(Arrays.asList(dc.forwardedNumber));
        if (!equalsHandlesNulls(mForwardedNumber, forwardedNumber)) {
            if (Phone.DEBUG_PHONE) log("update: mForwardedNumber, # changed!");
            mForwardedNumber = forwardedNumber;
            changed = true;
        }

        // A null cnapName should be the same as ""
        if (TextUtils.isEmpty(dc.name)) {
            if (!TextUtils.isEmpty(mCnapName)) {
+8 −1
Original line number Diff line number Diff line
@@ -1106,7 +1106,14 @@ public class RIL extends BaseCommands implements CommandsInterface {
            }

            try {
                if (mRadioVersion.greaterOrEqual(RADIO_HAL_VERSION_1_6)) {
                    // IRadio V1.6
                    android.hardware.radio.V1_6.IRadio radioProxy16 =
                            (android.hardware.radio.V1_6.IRadio) radioProxy;
                    radioProxy16.getCurrentCalls_1_6(rr.mSerial);
                } else {
                    radioProxy.getCurrentCalls(rr.mSerial);
                }
            } catch (RemoteException | RuntimeException e) {
                handleRadioProxyExceptionForRR(rr, "getCurrentCalls", e);
            }
+104 −78
Original line number Diff line number Diff line
@@ -225,6 +225,16 @@ public class RadioResponse extends IRadioResponse.Stub {
        responseCurrentCalls_1_2(responseInfo, calls);
    }

    /**
     * @param responseInfo Response info struct containing response type, serial no. and error
     * @param calls Current call list
     */
    public void getCurrentCallsResponse_1_6(
            android.hardware.radio.V1_6.RadioResponseInfo responseInfo,
            ArrayList<android.hardware.radio.V1_6.Call> calls) {
        responseCurrentCalls_1_6(responseInfo, calls);
    }

    /**
     * @param responseInfo Response info struct containing response type, serial no. and error
     */
@@ -2072,46 +2082,7 @@ public class RadioResponse extends IRadioResponse.Stub {
            DriverCall dc;

            for (int i = 0; i < num; i++) {
                dc = new DriverCall();
                // TODO: change name of function stateFromCLCC() in DriverCall.java to name
                // clarifying what is CLCC
                dc.state = DriverCall.stateFromCLCC((int) (calls.get(i).state));
                dc.index = calls.get(i).index;
                dc.TOA = calls.get(i).toa;
                dc.isMpty = calls.get(i).isMpty;
                dc.isMT = calls.get(i).isMT;
                dc.als = calls.get(i).als;
                dc.isVoice = calls.get(i).isVoice;
                dc.isVoicePrivacy = calls.get(i).isVoicePrivacy;
                dc.number = calls.get(i).number;
                dc.numberPresentation =
                        DriverCall.presentationFromCLIP(
                                (int) (calls.get(i).numberPresentation));
                dc.name = calls.get(i).name;
                dc.namePresentation =
                        DriverCall.presentationFromCLIP((int) (calls.get(i).namePresentation));
                if (calls.get(i).uusInfo.size() == 1) {
                    dc.uusInfo = new UUSInfo();
                    dc.uusInfo.setType(calls.get(i).uusInfo.get(0).uusType);
                    dc.uusInfo.setDcs(calls.get(i).uusInfo.get(0).uusDcs);
                    if (!TextUtils.isEmpty(calls.get(i).uusInfo.get(0).uusData)) {
                        byte[] userData = calls.get(i).uusInfo.get(0).uusData.getBytes();
                        dc.uusInfo.setUserData(userData);
                    } else {
                        mRil.riljLog("responseCurrentCalls: uusInfo data is null or empty");
                    }

                    mRil.riljLogv(String.format("Incoming UUS : type=%d, dcs=%d, length=%d",
                            dc.uusInfo.getType(), dc.uusInfo.getDcs(),
                            dc.uusInfo.getUserData().length));
                    mRil.riljLogv("Incoming UUS : data (hex): "
                            + IccUtils.bytesToHexString(dc.uusInfo.getUserData()));
                } else {
                    mRil.riljLogv("Incoming UUS : NOT present!");
                }

                // Make sure there's a leading + on addresses with a TOA of 145
                dc.number = PhoneNumberUtils.stringFromStringAndTOA(dc.number, dc.TOA);
                dc = convertToDriverCall(calls.get(i));

                dcCalls.add(dc);

@@ -2151,48 +2122,48 @@ public class RadioResponse extends IRadioResponse.Stub {
            DriverCall dc;

            for (int i = 0; i < num; i++) {
                dc = new DriverCall();
                // TODO: change name of function stateFromCLCC() in DriverCall.java to name
                // clarifying what is CLCC
                dc.state = DriverCall.stateFromCLCC((int) (calls.get(i).base.state));
                dc.index = calls.get(i).base.index;
                dc.TOA = calls.get(i).base.toa;
                dc.isMpty = calls.get(i).base.isMpty;
                dc.isMT = calls.get(i).base.isMT;
                dc.als = calls.get(i).base.als;
                dc.isVoice = calls.get(i).base.isVoice;
                dc.isVoicePrivacy = calls.get(i).base.isVoicePrivacy;
                dc.number = calls.get(i).base.number;
                dc.numberPresentation =
                        DriverCall.presentationFromCLIP(
                                (int) (calls.get(i).base.numberPresentation));
                dc.name = calls.get(i).base.name;
                dc.namePresentation =
                        DriverCall.presentationFromCLIP((int) (calls.get(i).base.namePresentation));
                if (calls.get(i).base.uusInfo.size() == 1) {
                    dc.uusInfo = new UUSInfo();
                    dc.uusInfo.setType(calls.get(i).base.uusInfo.get(0).uusType);
                    dc.uusInfo.setDcs(calls.get(i).base.uusInfo.get(0).uusDcs);
                    if (!TextUtils.isEmpty(calls.get(i).base.uusInfo.get(0).uusData)) {
                        byte[] userData = calls.get(i).base.uusInfo.get(0).uusData.getBytes();
                        dc.uusInfo.setUserData(userData);
                dc = convertToDriverCall_1_2(calls.get(i));

                dcCalls.add(dc);

                if (dc.isVoicePrivacy) {
                    mRil.mVoicePrivacyOnRegistrants.notifyRegistrants();
                    mRil.riljLog("InCall VoicePrivacy is enabled");
                } else {
                        mRil.riljLog("responseCurrentCalls: uusInfo data is null or empty");
                    mRil.mVoicePrivacyOffRegistrants.notifyRegistrants();
                    mRil.riljLog("InCall VoicePrivacy is disabled");
                }
            }

                    mRil.riljLogv(String.format("Incoming UUS : type=%d, dcs=%d, length=%d",
                            dc.uusInfo.getType(), dc.uusInfo.getDcs(),
                            dc.uusInfo.getUserData().length));
                    mRil.riljLogv("Incoming UUS : data (hex): "
                            + IccUtils.bytesToHexString(dc.uusInfo.getUserData()));
                } else {
                    mRil.riljLogv("Incoming UUS : NOT present!");
            Collections.sort(dcCalls);

            if ((num == 0) && mRil.mTestingEmergencyCall.getAndSet(false)) {
                if (mRil.mEmergencyCallbackModeRegistrant != null) {
                    mRil.riljLog("responseCurrentCalls: call ended, testing emergency call,"
                            + " notify ECM Registrants");
                    mRil.mEmergencyCallbackModeRegistrant.notifyRegistrant();
                }
            }

                // Make sure there's a leading + on addresses with a TOA of 145
                dc.number = PhoneNumberUtils.stringFromStringAndTOA(dc.number, dc.TOA);
            if (responseInfo.error == RadioError.NONE) {
                sendMessageResponse(rr.mResult, dcCalls);
            }
            mRil.processResponseDone(rr, responseInfo, dcCalls);
        }
    }

    private void responseCurrentCalls_1_6(
            android.hardware.radio.V1_6.RadioResponseInfo responseInfo,
            ArrayList<android.hardware.radio.V1_6.Call> calls) {
        RILRequest rr = mRil.processResponse_1_6(responseInfo);

        if (rr != null) {
            int num = calls.size();
            ArrayList<DriverCall> dcCalls = new ArrayList<DriverCall>(num);
            DriverCall dc;

                dc.audioQuality = (int) (calls.get(i).audioQuality);
            for (int i = 0; i < num; i++) {
                dc = convertToDriverCall_1_6(calls.get(i));

                dcCalls.add(dc);

@@ -2218,10 +2189,65 @@ public class RadioResponse extends IRadioResponse.Stub {
            if (responseInfo.error == RadioError.NONE) {
                sendMessageResponse(rr.mResult, dcCalls);
            }
            mRil.processResponseDone(rr, responseInfo, dcCalls);
            mRil.processResponseDone_1_6(rr, responseInfo, dcCalls);
        }
    }

    private DriverCall convertToDriverCall(android.hardware.radio.V1_0.Call call) {
        DriverCall dc = new DriverCall();
        // TODO: change name of function stateFromCLCC() in DriverCall.java to name
        // clarifying what is CLCC
        dc.state = DriverCall.stateFromCLCC((int) (call.state));
        dc.index = call.index;
        dc.TOA = call.toa;
        dc.isMpty = call.isMpty;
        dc.isMT = call.isMT;
        dc.als = call.als;
        dc.isVoice = call.isVoice;
        dc.isVoicePrivacy = call.isVoicePrivacy;
        dc.number = call.number;
        dc.numberPresentation = DriverCall.presentationFromCLIP((int) (call.numberPresentation));
        dc.name = call.name;
        dc.namePresentation = DriverCall.presentationFromCLIP((int) (call.namePresentation));
        if (call.uusInfo.size() == 1) {
            dc.uusInfo = new UUSInfo();
            dc.uusInfo.setType(call.uusInfo.get(0).uusType);
            dc.uusInfo.setDcs(call.uusInfo.get(0).uusDcs);
            if (!TextUtils.isEmpty(call.uusInfo.get(0).uusData)) {
                byte[] userData = call.uusInfo.get(0).uusData.getBytes();
                dc.uusInfo.setUserData(userData);
            } else {
                mRil.riljLog("convertToDriverCall: uusInfo data is null or empty");
            }

            mRil.riljLogv(String.format("Incoming UUS : type=%d, dcs=%d, length=%d",
                    dc.uusInfo.getType(), dc.uusInfo.getDcs(),
                    dc.uusInfo.getUserData().length));
            mRil.riljLogv("Incoming UUS : data (hex): "
                    + IccUtils.bytesToHexString(dc.uusInfo.getUserData()));
        } else {
            mRil.riljLogv("Incoming UUS : NOT present!");
        }

        // Make sure there's a leading + on addresses with a TOA of 145
        dc.number = PhoneNumberUtils.stringFromStringAndTOA(dc.number, dc.TOA);

        return dc;
    }

    private DriverCall convertToDriverCall_1_2(android.hardware.radio.V1_2.Call call) {
        android.hardware.radio.V1_0.Call earlierVersionCall = call.base;
        DriverCall dc = convertToDriverCall(earlierVersionCall);
        dc.audioQuality = (int) (call.audioQuality);
        return dc;
    }

    private DriverCall convertToDriverCall_1_6(android.hardware.radio.V1_6.Call call) {
        android.hardware.radio.V1_2.Call earlierVersionCall = call.base;
        DriverCall dc = convertToDriverCall_1_2(earlierVersionCall);
        dc.forwardedNumber = call.forwardedNumber;
        return dc;
    }

    private void responseVoid(RadioResponseInfo responseInfo) {
        RILRequest rr = mRil.processResponse(responseInfo);
Loading