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

Commit 08786f42 authored by Sooraj Sasindran's avatar Sooraj Sasindran Committed by Automerger Merge Worker
Browse files

Merge "support new NITZ HAL API" am: bedb84d0 am: 973f14e5 am: 5e9a429a

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

Change-Id: Ia79e123a5ff504f0f550da49fadd1e3d82be26fb
parents 57a3156b 5e9a429a
Loading
Loading
Loading
Loading
+23 −4
Original line number Diff line number Diff line
@@ -29,6 +29,7 @@ import static com.android.internal.telephony.RILConstants.RIL_UNSOL_SIGNAL_STREN
import static com.android.internal.telephony.RILConstants.RIL_UNSOL_SUPP_SVC_NOTIFICATION;
import static com.android.internal.telephony.RILConstants.RIL_UNSOL_VOICE_RADIO_TECH_CHANGED;

import android.annotation.ElapsedRealtimeLong;
import android.hardware.radio.network.IRadioNetworkIndication;
import android.os.AsyncResult;
import android.sysprop.TelephonyProperties;
@@ -237,17 +238,35 @@ public class NetworkIndication extends IRadioNetworkIndication.Stub {
     * Indicates when radio has received a NITZ time message.
     * @param indicationType Type of radio indication
     * @param nitzTime NITZ time string in the form "yy/mm/dd,hh:mm:ss(+/-)tz,dt"
     * @param receivedTime milliseconds since boot that the NITZ time was received
     * @param receivedTimeMs time according to {@link android.os.SystemClock#elapsedRealtime()} when
     *        the RIL sent the NITZ time to the framework
     * @param ageMs time in milliseconds indicating how long NITZ was cached in RIL and modem.
     *        This must track true age and therefore must be calculated using clocks that
     *        include the time spend in sleep / low power states. If it can not be guaranteed,
     *        there must not be any caching done at the modem and should fill in 0 for ageMs
     */
    public void nitzTimeReceived(int indicationType, String nitzTime, long receivedTime) {
    public void nitzTimeReceived(int indicationType, String nitzTime,
        @ElapsedRealtimeLong long receivedTimeMs, long ageMs) {
        mRil.processIndication(indicationType);

        if (RIL.RILJ_LOGD) mRil.unsljLogRet(RIL_UNSOL_NITZ_TIME_RECEIVED, nitzTime);

        // Ignore the NITZ if ageMs is not a valid time, e.g. negative or greater than
        // receivedTimeMs.
        if ((ageMs < 0) || (ageMs >= receivedTimeMs)) {
            AnomalyReporter.reportAnomaly(UUID.fromString("fc7c56d4-485d-475a-aaff-394203c6cdfc"),
                    "NITZ indication with invalid age");

            mRil.riljLoge("age time is invalid, ignoring nitzTimeReceived indication. "
                + "receivedTimeMs = " + receivedTimeMs + ", ageMs = " + ageMs);
            return;
        }

        // TODO: Clean this up with a parcelable class for better self-documentation
        Object[] result = new Object[2];
        Object[] result = new Object[3];
        result[0] = nitzTime;
        result[1] = receivedTime;
        result[1] = receivedTimeMs;
        result[2] = ageMs;

        boolean ignoreNitz = TelephonyProperties.ignore_nitz().orElse(false);

+20 −10
Original line number Diff line number Diff line
@@ -1426,14 +1426,20 @@ public class ServiceStateTracker extends Handler {
                mCi.getSignalStrength(obtainMessage(EVENT_GET_SIGNAL_STRENGTH));
                break;

            case EVENT_NITZ_TIME:
            case EVENT_NITZ_TIME: {
                ar = (AsyncResult) msg.obj;

                String nitzString = (String)((Object[])ar.result)[0];
                long nitzReceiveTime = ((Long)((Object[])ar.result)[1]).longValue();
                Object[] nitzArgs = (Object[])ar.result;
                String nitzString = (String)nitzArgs[0];
                long nitzReceiveTimeMs = ((Long)nitzArgs[1]).longValue();
                long ageMs = 0;
                if (nitzArgs.length >= 3) {
                    ageMs = ((Long)nitzArgs[2]).longValue();
                }

                setTimeFromNITZString(nitzString, nitzReceiveTime);
                setTimeFromNITZString(nitzString, nitzReceiveTimeMs, ageMs);
                break;
            }

            case EVENT_SIGNAL_STRENGTH_UPDATE:
                // This is a notification from CommandsInterface.setOnSignalStrengthUpdate
@@ -4418,20 +4424,24 @@ public class ServiceStateTracker extends Handler {
    }

    /**
     * nitzReceiveTime is time_t that the NITZ time was posted
     * Handle the NITZ string from the modem
     *
     * @param nitzString NITZ time string in the form "yy/mm/dd,hh:mm:ss(+/-)tz,dt"
     * @param nitzReceiveTimeMs time according to {@link android.os.SystemClock#elapsedRealtime()}
     *        when the RIL sent the NITZ time to the framework
     * @param ageMs time in milliseconds indicating how long NITZ was cached in RIL and modem
     */
    private void setTimeFromNITZString(String nitzString, long nitzReceiveTime) {
    private void setTimeFromNITZString(String nitzString, long nitzReceiveTimeMs, long ageMs) {
        long start = SystemClock.elapsedRealtime();
        if (DBG) {
            Rlog.d(LOG_TAG, "NITZ: " + nitzString + "," + nitzReceiveTime
                    + " start=" + start + " delay=" + (start - nitzReceiveTime));
            Rlog.d(LOG_TAG, "NITZ: " + nitzString + "," + nitzReceiveTimeMs + ", ageMs=" + ageMs
                    + " start=" + start + " delay=" + (start - nitzReceiveTimeMs));
        }
        NitzData newNitzData = NitzData.parse(nitzString);
        mLastNitzData = newNitzData;
        if (newNitzData != null) {
            try {
                long ageMillis = 0;
                NitzSignal nitzSignal = new NitzSignal(nitzReceiveTime, newNitzData, ageMillis);
                NitzSignal nitzSignal = new NitzSignal(nitzReceiveTimeMs, newNitzData, ageMs);
                mNitzState.handleNitzReceived(nitzSignal);
            } finally {
                if (DBG) {
+35 −2
Original line number Diff line number Diff line
@@ -2046,7 +2046,7 @@ public class ServiceStateTrackerTest extends TelephonyTest {

    @Test
    @SmallTest
    public void testSetTimeFromNITZStr() throws Exception {
    public void testSetTimeFromNITZStr_withoutAge() throws Exception {
        {
            // Mock sending incorrect nitz str from RIL
            mSimulatedCommands.triggerNITZupdate("38/06/20,00:00:00+0");
@@ -2054,7 +2054,7 @@ public class ServiceStateTrackerTest extends TelephonyTest {
            verify(mNitzStateMachine, times(0)).handleNitzReceived(any());
        }
        {
            // Mock sending correct nitz str from RIL
            // Mock sending correct nitz str from RIL with a zero ageMs
            String nitzStr = "15/06/20,00:00:00+0";
            NitzData expectedNitzData = NitzData.parse(nitzStr);
            mSimulatedCommands.triggerNITZupdate(nitzStr);
@@ -2070,6 +2070,39 @@ public class ServiceStateTrackerTest extends TelephonyTest {
            assertEquals(expectedNitzData, actualNitzSignal.getNitzData());
            assertTrue(actualNitzSignal.getReceiptElapsedRealtimeMillis()
                    <= SystemClock.elapsedRealtime());
            assertEquals(actualNitzSignal.getAgeMillis(), 0);
        }
    }

    @Test
    @SmallTest
    public void testSetTimeFromNITZStr_withAge() throws Exception {
        {
            // Mock sending incorrect nitz str from RIL with a non-zero ageMs
            long ageMs = 60 * 1000;
            mSimulatedCommands.triggerNITZupdate("38/06/20,00:00:00+0", ageMs);
            waitForLastHandlerAction(mSSTTestHandler.getThreadHandler());
            verify(mNitzStateMachine, times(0)).handleNitzReceived(any());
        }
        {
            // Mock sending correct nitz str from RIL with a non-zero ageMs
            String nitzStr = "21/08/15,00:00:00+0";
            long ageMs = 60 * 1000;
            NitzData expectedNitzData = NitzData.parse(nitzStr);
            mSimulatedCommands.triggerNITZupdate(nitzStr, ageMs);
            waitForLastHandlerAction(mSSTTestHandler.getThreadHandler());

            ArgumentCaptor<NitzSignal> argumentsCaptor =
                    ArgumentCaptor.forClass(NitzSignal.class);
            verify(mNitzStateMachine, times(1))
                    .handleNitzReceived(argumentsCaptor.capture());

            // Confirm the argument was what we expected.
            NitzSignal actualNitzSignal = argumentsCaptor.getValue();
            assertEquals(expectedNitzData, actualNitzSignal.getNitzData());
            assertTrue(actualNitzSignal.getReceiptElapsedRealtimeMillis()
                    <= SystemClock.elapsedRealtime());
            assertEquals(actualNitzSignal.getAgeMillis(), ageMs);
        }
    }

+7 −0
Original line number Diff line number Diff line
@@ -1190,6 +1190,13 @@ public class SimulatedCommands extends BaseCommands
        }
    }

    public void triggerNITZupdate(String NITZStr, long ageMs) {
        if (NITZStr != null) {
            mNITZTimeRegistrant.notifyRegistrant(new AsyncResult (null, new Object[]{NITZStr,
                    SystemClock.elapsedRealtime(), ageMs}, null));
        }
    }

    @Override
    public void setupDataCall(int accessNetworkType, DataProfile dataProfile, boolean isRoaming,
            boolean allowRoaming, int reason, LinkProperties linkProperties, int pduSessionId,