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

Commit c81d89a3 authored by Amit Mahajan's avatar Amit Mahajan Committed by Gerrit Code Review
Browse files

Merge "Show forwarded number in call screen"

parents 913fbf4e bc2a2b04
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