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

Commit bedb84d0 authored by Sooraj Sasindran's avatar Sooraj Sasindran Committed by Gerrit Code Review
Browse files

Merge "support new NITZ HAL API"

parents 0257be94 e4f090f2
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
@@ -4412,20 +4418,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
@@ -1189,6 +1189,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,