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

Commit bba3f348 authored by Neil Fuller's avatar Neil Fuller Committed by android-build-merger
Browse files

Merge "Track service changes in TimeDetectionService"

am: 055c6b44

Change-Id: I479e9d45f732cc02405d4ccea4dc75b8f001d3b4
parents 3048314d 055c6b44
Loading
Loading
Loading
Loading
+6 −1
Original line number Diff line number Diff line
@@ -16,6 +16,7 @@

package com.android.internal.telephony;

import android.app.timedetector.PhoneTimeSuggestion;
import android.content.Context;
import android.os.PowerManager;
import android.telephony.Rlog;
@@ -428,7 +429,11 @@ public final class NitzStateMachineImpl implements NitzStateMachine {
                Rlog.d(LOG_TAG, logMsg);
            }
            mTimeLog.log(logMsg);
            mTimeServiceHelper.suggestDeviceTime(newNitzTime);
            PhoneTimeSuggestion phoneTimeSuggestion =
                    new PhoneTimeSuggestion(mPhone.getPhoneId(), newNitzTime);
            phoneTimeSuggestion.addDebugInfo(logMsg);
            mTimeServiceHelper.suggestDeviceTime(phoneTimeSuggestion);

            TelephonyMetrics.getInstance().writeNITZEvent(
                    mPhone.getPhoneId(), newNitzTime.getValue());

+3 −3
Original line number Diff line number Diff line
@@ -16,8 +16,8 @@

package com.android.internal.telephony;

import android.app.timedetector.PhoneTimeSuggestion;
import android.app.timedetector.TimeDetector;
import android.util.TimestampedValue;

/**
 * An interface to various time / time zone detection behaviors that should be centralized into a
@@ -62,8 +62,8 @@ public interface TimeServiceHelper {
    /**
     * Suggest the time to the {@link TimeDetector}.
     *
     * @param signalTimeMillis the signal time as received from the network
     * @param phoneTimeSuggestion the suggested time
     */
    void suggestDeviceTime(TimestampedValue<Long> signalTimeMillis);
    void suggestDeviceTime(PhoneTimeSuggestion phoneTimeSuggestion);

}
+3 −5
Original line number Diff line number Diff line
@@ -17,8 +17,8 @@
package com.android.internal.telephony;

import android.app.AlarmManager;
import android.app.timedetector.PhoneTimeSuggestion;
import android.app.timedetector.TimeDetector;
import android.app.timedetector.TimeSignal;
import android.content.ContentResolver;
import android.content.Context;
import android.content.Intent;
@@ -27,7 +27,6 @@ import android.os.Handler;
import android.os.SystemProperties;
import android.os.UserHandle;
import android.provider.Settings;
import android.util.TimestampedValue;

/**
 * An interface to various time / time zone detection behaviors that should be centralized into a
@@ -89,9 +88,8 @@ public final class TimeServiceHelperImpl implements TimeServiceHelper {
    }

    @Override
    public void suggestDeviceTime(TimestampedValue<Long> signalTimeMillis) {
        TimeSignal timeSignal = new TimeSignal(TimeSignal.SOURCE_ID_NITZ, signalTimeMillis);
        mTimeDetector.suggestTime(timeSignal);
    public void suggestDeviceTime(PhoneTimeSuggestion phoneTimeSuggestion) {
        mTimeDetector.suggestPhoneTime(phoneTimeSuggestion);
    }

    /**
+132 −92
Original line number Diff line number Diff line
@@ -25,13 +25,14 @@ import static com.android.internal.telephony.NitzStateMachineTestSupport.UNIQUE_
import static com.android.internal.telephony.NitzStateMachineTestSupport.UNIQUE_US_ZONE_SCENARIO2;
import static com.android.internal.telephony.NitzStateMachineTestSupport.UNITED_KINGDOM_SCENARIO;
import static com.android.internal.telephony.NitzStateMachineTestSupport.US_COUNTRY_DEFAULT_ZONE_ID;
import static com.android.internal.telephony.NitzStateMachineTestSupport.createTimeSignalFromNitzSignal;
import static com.android.internal.telephony.NitzStateMachineTestSupport.createTimeSuggestionFromNitzSignal;

import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertNull;
import static org.junit.Assert.assertTrue;

import android.app.timedetector.PhoneTimeSuggestion;
import android.icu.util.TimeZone;
import android.util.TimestampedValue;

@@ -89,11 +90,13 @@ public class NitzStateMachineImplTest extends TelephonyTest {
        script.countryReceived(scenario.getNetworkCountryIsoCode())
                // Country won't be enough for time zone detection.
                .verifyNothingWasSetAndReset()
                .nitzReceived(nitzSignal)
                .nitzReceived(nitzSignal);

        // Country + NITZ is enough for both time + time zone detection.
                .verifyTimeSuggestedAndZoneSetAndReset(
                        scenario.createTimeSignal(mFakeDeviceState.elapsedRealtime()),
                        scenario.getTimeZoneId());
        PhoneTimeSuggestion expectedTimeSuggestion =
                createTimeSuggestionFromNitzSignal(mPhone.getPhoneId(), nitzSignal);
        script.verifyTimeSuggestedAndZoneSetAndReset(
                expectedTimeSuggestion, scenario.getTimeZoneId());

        // Check NitzStateMachine state.
        assertTrue(mNitzStateMachine.getNitzTimeZoneDetectionSuccessful());
@@ -149,8 +152,9 @@ public class NitzStateMachineImplTest extends TelephonyTest {
                .initializeTimeZoneSetting(null /* uninitialized */);

        script.nitzReceived(nitzSignal);
        TimestampedValue<Long> expectedTimeSignal = createTimeSignalFromNitzSignal(nitzSignal);
        script.verifyOnlyTimeWasSuggestedAndReset(expectedTimeSignal);
        PhoneTimeSuggestion expectedTimeSuggestion =
                createTimeSuggestionFromNitzSignal(mPhone.getPhoneId(), nitzSignal);
        script.verifyOnlyTimeWasSuggestedAndReset(expectedTimeSuggestion);

        script.countryReceived(scenario.getNetworkCountryIsoCode())
                // The code will use the country default zone because the setting is uninitialized.
@@ -180,8 +184,9 @@ public class NitzStateMachineImplTest extends TelephonyTest {
                .initializeTimeZoneSetting(ARBITRARY_TIME_ZONE_ID);

        script.nitzReceived(nitzSignal);
        TimestampedValue<Long> expectedTimeSignal = createTimeSignalFromNitzSignal(nitzSignal);
        script.verifyOnlyTimeWasSuggestedAndReset(expectedTimeSignal);
        PhoneTimeSuggestion expectedTimeSuggestion =
                createTimeSuggestionFromNitzSignal(mPhone.getPhoneId(), nitzSignal);
        script.verifyOnlyTimeWasSuggestedAndReset(expectedTimeSuggestion);

        script.countryReceived(scenario.getNetworkCountryIsoCode())
                // The code will not set the zone because the setting is initialized.
@@ -201,11 +206,13 @@ public class NitzStateMachineImplTest extends TelephonyTest {
        script.countryReceived(scenario.getNetworkCountryIsoCode())
                // Country alone is enough to guess the time zone.
                .verifyOnlyTimeZoneWasSetAndReset(scenario.getTimeZoneId())
                .nitzReceived(nitzSignal)
                .nitzReceived(nitzSignal);

        // Country + NITZ is enough for both time + time zone detection.
                .verifyTimeSuggestedAndZoneSetAndReset(
                        scenario.createTimeSignal(mFakeDeviceState.elapsedRealtime()),
                        scenario.getTimeZoneId());
        PhoneTimeSuggestion expectedTimeSuggestion =
                createTimeSuggestionFromNitzSignal(mPhone.getPhoneId(), nitzSignal);
        script.verifyTimeSuggestedAndZoneSetAndReset(
                expectedTimeSuggestion, scenario.getTimeZoneId());

        // Check NitzStateMachine state.
        assertTrue(mNitzStateMachine.getNitzTimeZoneDetectionSuccessful());
@@ -231,11 +238,13 @@ public class NitzStateMachineImplTest extends TelephonyTest {
                    .verifyOnlyTimeZoneWasSetAndReset(scenario.getTimeZoneId());

            // Confirm what happens when NITZ doesn't conflict with the country-only result.
            script.nitzReceived(nitzSignal)
            script.nitzReceived(nitzSignal);

            // Country + NITZ is enough for both time + time zone detection.
                    .verifyTimeSuggestedAndZoneSetAndReset(
                            scenario.createTimeSignal(mFakeDeviceState.elapsedRealtime()),
                            scenario.getTimeZoneId());
            PhoneTimeSuggestion expectedTimeSuggestion =
                    createTimeSuggestionFromNitzSignal(mPhone.getPhoneId(), nitzSignal);
            script.verifyTimeSuggestedAndZoneSetAndReset(
                    expectedTimeSuggestion, scenario.getTimeZoneId());

            // Check NitzStateMachine state.
            assertTrue(mNitzStateMachine.getNitzTimeZoneDetectionSuccessful());
@@ -292,11 +301,13 @@ public class NitzStateMachineImplTest extends TelephonyTest {
                    .verifyNothingWasSetAndReset();

            // The NITZ signal + country iso code will be enough.
            script.nitzReceived(nitzSignal)
            script.nitzReceived(nitzSignal);

            // Country + NITZ is enough for both time + time zone detection.
                    .verifyTimeSuggestedAndZoneSetAndReset(
                            scenario.createTimeSignal(mFakeDeviceState.elapsedRealtime()),
                            scenario.getTimeZoneId());
            PhoneTimeSuggestion expectedTimeSuggestion =
                    createTimeSuggestionFromNitzSignal(mPhone.getPhoneId(), nitzSignal);
            script.verifyTimeSuggestedAndZoneSetAndReset(
                    expectedTimeSuggestion, scenario.getTimeZoneId());

            // Check NitzStateMachine state.
            assertTrue(mNitzStateMachine.getNitzTimeZoneDetectionSuccessful());
@@ -347,10 +358,11 @@ public class NitzStateMachineImplTest extends TelephonyTest {
        script.countryReceived(scenario.getNetworkCountryIsoCode())
                // Country is not enough to guess the time zone and time zone detection is disabled.
                .verifyNothingWasSetAndReset()
                .nitzReceived(nitzSignal)
                .nitzReceived(nitzSignal);
        // Time zone detection is disabled, but time should be suggested from NITZ.
                .verifyOnlyTimeWasSuggestedAndReset(
                        scenario.createTimeSignal(mFakeDeviceState.elapsedRealtime()));
        PhoneTimeSuggestion expectedTimeSuggestion =
                createTimeSuggestionFromNitzSignal(mPhone.getPhoneId(), nitzSignal);
        script.verifyOnlyTimeWasSuggestedAndReset(expectedTimeSuggestion);

        // Check NitzStateMachine state.
        assertTrue(mNitzStateMachine.getNitzTimeZoneDetectionSuccessful());
@@ -370,10 +382,11 @@ public class NitzStateMachineImplTest extends TelephonyTest {
        script.countryReceived(scenario.getNetworkCountryIsoCode())
                // Country alone would be enough for time zone detection, but it's disabled.
                .verifyNothingWasSetAndReset()
                .nitzReceived(nitzSignal)
                .nitzReceived(nitzSignal);
        // Time zone detection is disabled, but time should be suggested from NITZ.
                .verifyOnlyTimeWasSuggestedAndReset(
                        scenario.createTimeSignal(mFakeDeviceState.elapsedRealtime()));
        PhoneTimeSuggestion expectedTimeSuggestion =
                createTimeSuggestionFromNitzSignal(mPhone.getPhoneId(), nitzSignal);
        script.verifyOnlyTimeWasSuggestedAndReset(expectedTimeSuggestion);

        // Check NitzStateMachine state.
        assertTrue(mNitzStateMachine.getNitzTimeZoneDetectionSuccessful());
@@ -391,10 +404,12 @@ public class NitzStateMachineImplTest extends TelephonyTest {
        // Simulate receiving an NITZ signal.
        TimestampedValue<NitzData> nitzSignal =
                scenario.createNitzSignal(mFakeDeviceState.elapsedRealtime());
        script.nitzReceived(nitzSignal)
        script.nitzReceived(nitzSignal);

        // The NITZ alone isn't enough to detect a time zone.
                .verifyOnlyTimeWasSuggestedAndReset(
                        scenario.createTimeSignal(mFakeDeviceState.elapsedRealtime()));
        PhoneTimeSuggestion expectedTimeSuggestion =
                createTimeSuggestionFromNitzSignal(mPhone.getPhoneId(), nitzSignal);
        script.verifyOnlyTimeWasSuggestedAndReset(expectedTimeSuggestion);

        // Check NitzStateMachine state.
        assertFalse(mNitzStateMachine.getNitzTimeZoneDetectionSuccessful());
@@ -421,10 +436,11 @@ public class NitzStateMachineImplTest extends TelephonyTest {
        // Simulate receiving an NITZ signal.
        TimestampedValue<NitzData> nitzSignal =
                scenario.createNitzSignal(mFakeDeviceState.elapsedRealtime());
        script.nitzReceived(nitzSignal)
        script.nitzReceived(nitzSignal);
        // The NITZ alone isn't enough to detect a time zone.
                .verifyOnlyTimeWasSuggestedAndReset(
                        scenario.createTimeSignal(mFakeDeviceState.elapsedRealtime()));
        PhoneTimeSuggestion expectedTimeSuggestion =
                createTimeSuggestionFromNitzSignal(mPhone.getPhoneId(), nitzSignal);
        script.verifyOnlyTimeWasSuggestedAndReset(expectedTimeSuggestion);

        // Check NitzStateMachine state.
        assertFalse(mNitzStateMachine.getNitzTimeZoneDetectionSuccessful());
@@ -453,10 +469,12 @@ public class NitzStateMachineImplTest extends TelephonyTest {
                scenario.createNitzSignal(mFakeDeviceState.elapsedRealtime());

        // Simulate receiving an NITZ signal.
        script.nitzReceived(goodNitzSignal)
        script.nitzReceived(goodNitzSignal);

        // The NITZ alone isn't enough to detect a time zone.
                .verifyOnlyTimeWasSuggestedAndReset(
                        scenario.createTimeSignal(mFakeDeviceState.elapsedRealtime()));
        PhoneTimeSuggestion expectedTimeSuggestion =
                createTimeSuggestionFromNitzSignal(mPhone.getPhoneId(), goodNitzSignal);
        script.verifyOnlyTimeWasSuggestedAndReset(expectedTimeSuggestion);

        // Check NitzStateMachine state.
        assertFalse(mNitzStateMachine.getNitzTimeZoneDetectionSuccessful());
@@ -492,12 +510,14 @@ public class NitzStateMachineImplTest extends TelephonyTest {
        assertNull(mNitzStateMachine.getCachedNitzData());

        // Simulate receiving an NITZ signal.
        script.nitzReceived(goodNitzSignal)
        script.nitzReceived(goodNitzSignal);

        // The time will be suggested from the NITZ signal.
        // The combination of NITZ + country will cause the time zone to be set.
                .verifyTimeSuggestedAndZoneSetAndReset(
                        scenario.createTimeSignal(mFakeDeviceState.elapsedRealtime()),
                        scenario.getTimeZoneId());
        PhoneTimeSuggestion expectedTimeSuggestion =
                createTimeSuggestionFromNitzSignal(mPhone.getPhoneId(), goodNitzSignal);
        script.verifyTimeSuggestedAndZoneSetAndReset(
                expectedTimeSuggestion, scenario.getTimeZoneId());

        // Check NitzStateMachine state.
        assertTrue(mNitzStateMachine.getNitzTimeZoneDetectionSuccessful());
@@ -524,10 +544,13 @@ public class NitzStateMachineImplTest extends TelephonyTest {
                goodNitzSignal.getReferenceTimeMillis(), bogusNitzData);

        // Simulate receiving an NITZ signal.
        script.nitzReceived(badNitzSignal)
        script.nitzReceived(badNitzSignal);

        // The NITZ alone isn't enough to detect a time zone, but there isn't enough
        // information to work out it is bogus.
                .verifyOnlyTimeWasSuggestedAndReset(createTimeSignalFromNitzSignal(badNitzSignal));
        PhoneTimeSuggestion expectedTimeSuggestion =
                createTimeSuggestionFromNitzSignal(mPhone.getPhoneId(), badNitzSignal);
        script.verifyOnlyTimeWasSuggestedAndReset(expectedTimeSuggestion);

        // Check NitzStateMachine state.
        assertFalse(mNitzStateMachine.getNitzTimeZoneDetectionSuccessful());
@@ -571,9 +594,12 @@ public class NitzStateMachineImplTest extends TelephonyTest {
        assertNull(mNitzStateMachine.getCachedNitzData());

        // Simulate receiving an NITZ signal.
        script.nitzReceived(badNitzSignal)
        script.nitzReceived(badNitzSignal);

        // The NITZ should be detected as bogus so only the time will be suggested.
                .verifyOnlyTimeWasSuggestedAndReset(createTimeSignalFromNitzSignal(badNitzSignal));
        PhoneTimeSuggestion expectedTimeSuggestion =
                createTimeSuggestionFromNitzSignal(mPhone.getPhoneId(), badNitzSignal);
        script.verifyOnlyTimeWasSuggestedAndReset(expectedTimeSuggestion);

        // Check NitzStateMachine state.
        assertFalse(mNitzStateMachine.getNitzTimeZoneDetectionSuccessful());
@@ -600,10 +626,12 @@ public class NitzStateMachineImplTest extends TelephonyTest {
                goodNitzSignal.getReferenceTimeMillis(), bogusNitzData);

        // Simulate receiving an NITZ signal.
        script.nitzReceived(badNitzSignal)
        script.nitzReceived(badNitzSignal);
        // The NITZ alone isn't enough to detect a time zone, but there isn't enough
        // information to work out its bogus.
                .verifyOnlyTimeWasSuggestedAndReset(createTimeSignalFromNitzSignal(badNitzSignal));
        PhoneTimeSuggestion expectedTimeSuggestion =
                createTimeSuggestionFromNitzSignal(mPhone.getPhoneId(), badNitzSignal);
        script.verifyOnlyTimeWasSuggestedAndReset(expectedTimeSuggestion);

        // Check NitzStateMachine state.
        assertFalse(mNitzStateMachine.getNitzTimeZoneDetectionSuccessful());
@@ -650,9 +678,12 @@ public class NitzStateMachineImplTest extends TelephonyTest {
        assertNull(mNitzStateMachine.getCachedNitzData());

        // Simulate receiving an NITZ signal.
        script.nitzReceived(badNitzSignal)
        script.nitzReceived(badNitzSignal);

        // The NITZ should be detected as bogus so only the time will be suggested.
                .verifyOnlyTimeWasSuggestedAndReset(createTimeSignalFromNitzSignal(badNitzSignal));
        PhoneTimeSuggestion expectedTimeSuggestion =
                createTimeSuggestionFromNitzSignal(mPhone.getPhoneId(), badNitzSignal);
        script.verifyOnlyTimeWasSuggestedAndReset(expectedTimeSuggestion);

        // Check NitzStateMachine state.
        assertFalse(mNitzStateMachine.getNitzTimeZoneDetectionSuccessful());
@@ -683,9 +714,11 @@ public class NitzStateMachineImplTest extends TelephonyTest {
                originalNitzSignal.getReferenceTimeMillis(), emulatorNitzData);

        // Simulate receiving the emulator NITZ signal.
        script.nitzReceived(emulatorNitzSignal)
                .verifyTimeSuggestedAndZoneSetAndReset(
                        createTimeSignalFromNitzSignal(emulatorNitzSignal), emulatorTimeZoneId);
        script.nitzReceived(emulatorNitzSignal);

        PhoneTimeSuggestion expectedTimeSuggestion =
                createTimeSuggestionFromNitzSignal(mPhone.getPhoneId(), emulatorNitzSignal);
        script.verifyTimeSuggestedAndZoneSetAndReset(expectedTimeSuggestion, emulatorTimeZoneId);

        // Check NitzStateMachine state.
        assertTrue(mNitzStateMachine.getNitzTimeZoneDetectionSuccessful());
@@ -712,10 +745,11 @@ public class NitzStateMachineImplTest extends TelephonyTest {
        // Simulate receiving the NITZ signal.
        TimestampedValue<NitzData> nitzSignal =
                scenario.createNitzSignal(mFakeDeviceState.elapsedRealtime());
        script.nitzReceived(nitzSignal)
                .verifyTimeSuggestedAndZoneSetAndReset(
                        scenario.createTimeSignal(mFakeDeviceState.elapsedRealtime()),
                        expectedZoneId);
        script.nitzReceived(nitzSignal);

        PhoneTimeSuggestion expectedTimeSuggestion =
                createTimeSuggestionFromNitzSignal(mPhone.getPhoneId(), nitzSignal);
        script.verifyTimeSuggestedAndZoneSetAndReset(expectedTimeSuggestion, expectedZoneId);

        // Check NitzStateMachine state.
        assertTrue(mNitzStateMachine.getNitzTimeZoneDetectionSuccessful());
@@ -735,9 +769,11 @@ public class NitzStateMachineImplTest extends TelephonyTest {
        // Simulate receiving the NITZ signal.
        TimestampedValue<NitzData> nitzSignal =
                scenario.createNitzSignal(mFakeDeviceState.elapsedRealtime());
        script.nitzReceived(nitzSignal)
                .verifyOnlyTimeWasSuggestedAndReset(
                        scenario.createTimeSignal(mFakeDeviceState.elapsedRealtime()));
        script.nitzReceived(nitzSignal);

        PhoneTimeSuggestion expectedTimeSuggestion =
                createTimeSuggestionFromNitzSignal(mPhone.getPhoneId(), nitzSignal);
        script.verifyOnlyTimeWasSuggestedAndReset(expectedTimeSuggestion);

        // Check NitzStateMachine state.
        assertFalse(mNitzStateMachine.getNitzTimeZoneDetectionSuccessful());
@@ -767,10 +803,12 @@ public class NitzStateMachineImplTest extends TelephonyTest {
        TimestampedValue<NitzData> preflightNitzSignal =
                scenario.createNitzSignal(mFakeDeviceState.elapsedRealtime());
        script.nitzReceived(preflightNitzSignal)
                .countryReceived(scenario.getNetworkCountryIsoCode())
                .verifyTimeSuggestedAndZoneSetAndReset(
                        scenario.createTimeSignal(mFakeDeviceState.elapsedRealtime()),
                        scenario.getTimeZoneId());
                .countryReceived(scenario.getNetworkCountryIsoCode());

        PhoneTimeSuggestion expectedPreFlightTimeSuggestion =
                createTimeSuggestionFromNitzSignal(mPhone.getPhoneId(), preflightNitzSignal);
        script.verifyTimeSuggestedAndZoneSetAndReset(
                expectedPreFlightTimeSuggestion, scenario.getTimeZoneId());

        // Demonstrate the NitzStateMachineImpl is "opinionated" about time zone: toggling auto-time
        // zone on should cause it to set the last known time zone again.
@@ -837,9 +875,11 @@ public class NitzStateMachineImplTest extends TelephonyTest {
        TimestampedValue<NitzData> postFlightNitzSignal =
                scenario.createNitzSignal(mFakeDeviceState.elapsedRealtime());
        script.countryReceived(scenario.getNetworkCountryIsoCode())
                .nitzReceived(postFlightNitzSignal)
                .verifyTimeSuggestedAndZoneSetAndReset(
                        scenario.createTimeSignal(mFakeDeviceState.elapsedRealtime()),
                .nitzReceived(postFlightNitzSignal);

        PhoneTimeSuggestion expectedPostFlightTimeSuggestion =
                createTimeSuggestionFromNitzSignal(mPhone.getPhoneId(), postFlightNitzSignal);
        script.verifyTimeSuggestedAndZoneSetAndReset(expectedPostFlightTimeSuggestion,
                        scenario.getTimeZoneId());

        // Check state that NitzStateMachine must expose.
@@ -936,17 +976,17 @@ public class NitzStateMachineImplTest extends TelephonyTest {
            return this;
        }

        Script verifyOnlyTimeWasSuggestedAndReset(TimestampedValue<Long> time) {
        Script verifyOnlyTimeWasSuggestedAndReset(PhoneTimeSuggestion timeSuggestion) {
            verifyTimeZoneWasNotSet();
            verifyTimeWasSuggested(time);
            verifyTimeWasSuggested(timeSuggestion);
            commitStateChanges();
            return this;
        }

        Script verifyTimeSuggestedAndZoneSetAndReset(
                TimestampedValue<Long> time, String timeZoneId) {
                PhoneTimeSuggestion timeSuggestion, String timeZoneId) {
            verifyTimeZoneWasSet(timeZoneId);
            verifyTimeWasSuggested(time);
            verifyTimeWasSuggested(timeSuggestion);
            commitStateChanges();
            return this;
        }
@@ -964,9 +1004,9 @@ public class NitzStateMachineImplTest extends TelephonyTest {
            mFakeTimeServiceHelper.deviceTimeZone.assertLatestEquals(timeZoneId);
        }

        private void verifyTimeWasSuggested(TimestampedValue<Long> time) {
        private void verifyTimeWasSuggested(PhoneTimeSuggestion phoneTimeSuggestion) {
            mFakeTimeServiceHelper.suggestedTime.assertChangeCount(1);
            mFakeTimeServiceHelper.suggestedTime.assertLatestEquals(time);
            mFakeTimeServiceHelper.suggestedTime.assertLatestEquals(phoneTimeSuggestion);
        }

        private void commitStateChanges() {
@@ -1032,7 +1072,7 @@ public class NitzStateMachineImplTest extends TelephonyTest {

        // State we want to track.
        public TestState<String> deviceTimeZone = new TestState<>();
        public TestState<TimestampedValue<Long>> suggestedTime = new TestState<>();
        public TestState<PhoneTimeSuggestion> suggestedTime = new TestState<>();

        FakeTimeServiceHelper(FakeDeviceState fakeDeviceState) {
            mFakeDeviceState = fakeDeviceState;
@@ -1059,10 +1099,10 @@ public class NitzStateMachineImplTest extends TelephonyTest {
        }

        @Override
        public void suggestDeviceTime(TimestampedValue<Long> deviceTime) {
            suggestedTime.set(deviceTime);
        public void suggestDeviceTime(PhoneTimeSuggestion phoneTimeSuggestion) {
            suggestedTime.set(phoneTimeSuggestion);
            // The fake time service just uses the latest suggestion.
            mFakeDeviceState.currentTimeMillis = deviceTime.getValue();
            mFakeDeviceState.currentTimeMillis = phoneTimeSuggestion.getUtcTime().getValue();
        }

        void commitState() {
+8 −0
Original line number Diff line number Diff line
@@ -18,6 +18,7 @@ package com.android.internal.telephony;

import static org.junit.Assert.fail;

import android.app.timedetector.PhoneTimeSuggestion;
import android.icu.util.Calendar;
import android.icu.util.GregorianCalendar;
import android.icu.util.TimeZone;
@@ -260,6 +261,13 @@ public final class NitzStateMachineTestSupport {
        return cal.getTimeInMillis();
    }

    public static PhoneTimeSuggestion createTimeSuggestionFromNitzSignal(
            int phoneId, TimestampedValue<NitzData> nitzSignal) {
        PhoneTimeSuggestion timeSuggestion =
                new PhoneTimeSuggestion(phoneId, createTimeSignalFromNitzSignal(nitzSignal));
        return timeSuggestion;
    }

    public static TimestampedValue<Long> createTimeSignalFromNitzSignal(
            TimestampedValue<NitzData> nitzSignal) {
        return new TimestampedValue<>(