Loading src/java/com/android/internal/telephony/NitzStateMachineImpl.java +6 −1 Original line number Diff line number Diff line Loading @@ -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; Loading Loading @@ -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()); Loading src/java/com/android/internal/telephony/TimeServiceHelper.java +3 −3 Original line number Diff line number Diff line Loading @@ -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 Loading Loading @@ -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); } src/java/com/android/internal/telephony/TimeServiceHelperImpl.java +3 −5 Original line number Diff line number Diff line Loading @@ -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; Loading @@ -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 Loading Loading @@ -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); } /** Loading tests/telephonytests/src/com/android/internal/telephony/NitzStateMachineImplTest.java +132 −92 Original line number Diff line number Diff line Loading @@ -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; Loading Loading @@ -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()); Loading Loading @@ -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. Loading Loading @@ -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. Loading @@ -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()); Loading @@ -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()); Loading Loading @@ -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()); Loading Loading @@ -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()); Loading @@ -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()); Loading @@ -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()); Loading @@ -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()); Loading Loading @@ -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()); Loading Loading @@ -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()); Loading @@ -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()); Loading Loading @@ -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()); Loading @@ -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()); Loading Loading @@ -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()); Loading Loading @@ -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()); Loading @@ -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()); Loading @@ -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()); Loading Loading @@ -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. Loading Loading @@ -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. Loading Loading @@ -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; } Loading @@ -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() { Loading Loading @@ -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; Loading @@ -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() { Loading tests/telephonytests/src/com/android/internal/telephony/NitzStateMachineTestSupport.java +8 −0 Original line number Diff line number Diff line Loading @@ -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; Loading Loading @@ -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<>( Loading Loading
src/java/com/android/internal/telephony/NitzStateMachineImpl.java +6 −1 Original line number Diff line number Diff line Loading @@ -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; Loading Loading @@ -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()); Loading
src/java/com/android/internal/telephony/TimeServiceHelper.java +3 −3 Original line number Diff line number Diff line Loading @@ -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 Loading Loading @@ -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); }
src/java/com/android/internal/telephony/TimeServiceHelperImpl.java +3 −5 Original line number Diff line number Diff line Loading @@ -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; Loading @@ -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 Loading Loading @@ -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); } /** Loading
tests/telephonytests/src/com/android/internal/telephony/NitzStateMachineImplTest.java +132 −92 Original line number Diff line number Diff line Loading @@ -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; Loading Loading @@ -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()); Loading Loading @@ -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. Loading Loading @@ -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. Loading @@ -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()); Loading @@ -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()); Loading Loading @@ -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()); Loading Loading @@ -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()); Loading @@ -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()); Loading @@ -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()); Loading @@ -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()); Loading Loading @@ -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()); Loading Loading @@ -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()); Loading @@ -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()); Loading Loading @@ -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()); Loading @@ -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()); Loading Loading @@ -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()); Loading Loading @@ -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()); Loading @@ -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()); Loading @@ -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()); Loading Loading @@ -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. Loading Loading @@ -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. Loading Loading @@ -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; } Loading @@ -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() { Loading Loading @@ -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; Loading @@ -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() { Loading
tests/telephonytests/src/com/android/internal/telephony/NitzStateMachineTestSupport.java +8 −0 Original line number Diff line number Diff line Loading @@ -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; Loading Loading @@ -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<>( Loading