Loading src/java/com/android/internal/telephony/NitzStateMachineImpl.java +21 −6 Original line number Diff line number Diff line Loading @@ -327,9 +327,8 @@ public final class NitzStateMachineImpl implements NitzStateMachine { mSavedTimeZoneId = null; mTimeZoneLog.log("handleNetworkUnavailable: NITZ state cleared."); // Avoid doing country-only detection work unnecessarily: if the mLatestNitzSignal was // already null we have nothing to do as it will have been done last time the // mLatestNitzSignal was cleared. // Avoid doing work unnecessarily: if the mLatestNitzSignal was already null we have nothing // to do as it will have been done last time the mLatestNitzSignal was cleared. if (oldNitzSignal == null) { return; } Loading @@ -342,6 +341,7 @@ public final class NitzStateMachineImpl implements NitzStateMachine { if (!TextUtils.isEmpty(isoCountryCode)) { updateTimeZoneFromNetworkCountryCode(isoCountryCode); } sendEmptyTimeSuggestion("handleNetworkUnavailable"); } @Override Loading Loading @@ -386,14 +386,29 @@ public final class NitzStateMachineImpl implements NitzStateMachine { mTimeLog.log("handleAirplaneModeChanged(" + on + "): Time state cleared."); mCountryIsoCode = null; TimestampedValue<NitzData> oldNitzSignal = mLatestNitzSignal; mLatestNitzSignal = null; mNitzTimeZoneDetectionSuccessful = false; mSavedTimeZoneId = null; if (oldNitzSignal == null) { // No work to do - terminate early. return; } mTimeZoneLog.log("handleAirplaneModeChanged(" + on + "): Time zone state cleared."); sendEmptyTimeSuggestion("handleAirplaneModeChanged(" + on + ")"); } private void sendEmptyTimeSuggestion(String reason) { PhoneTimeSuggestion timeSuggestion = new PhoneTimeSuggestion(mPhone.getPhoneId()); timeSuggestion.addDebugInfo("Empty suggestion, reason=" + reason); mTimeServiceHelper.suggestDeviceTime(timeSuggestion); } private void updateTimeFromNitz() { TimestampedValue<NitzData> nitzSignal = mLatestNitzSignal; TimestampedValue<NitzData> nitzSignal = Objects.requireNonNull(mLatestNitzSignal); try { boolean ignoreNitz = mDeviceState.getIgnoreNitz(); if (ignoreNitz) { Loading Loading @@ -469,8 +484,8 @@ public final class NitzStateMachineImpl implements NitzStateMachine { Rlog.d(LOG_TAG, logMsg); } mTimeLog.log(logMsg); PhoneTimeSuggestion phoneTimeSuggestion = new PhoneTimeSuggestion(mPhone.getPhoneId(), newNitzTime); PhoneTimeSuggestion phoneTimeSuggestion = new PhoneTimeSuggestion(mPhone.getPhoneId()); phoneTimeSuggestion.setUtcTime(newNitzTime); phoneTimeSuggestion.addDebugInfo(logMsg); mTimeServiceHelper.suggestDeviceTime(phoneTimeSuggestion); Loading src/java/com/android/internal/telephony/nitz/NewNitzStateMachineImpl.java +12 −14 Original line number Diff line number Diff line Loading @@ -310,22 +310,20 @@ public final class NewNitzStateMachineImpl implements NitzStateMachine { @NonNull String reason) { try { Objects.requireNonNull(reason); if (nitzSignal == null) { // Do nothing to withdraw previous suggestions: the service currently does not // support withdrawing suggestions. return; } Objects.requireNonNull(nitzSignal.getValue()); PhoneTimeSuggestion timeSuggestion = new PhoneTimeSuggestion(mPhoneId); if (nitzSignal == null) { timeSuggestion.addDebugInfo("Clearing time zone suggestion" + " reason=" + reason); } else { TimestampedValue<Long> newNitzTime = new TimestampedValue<>( nitzSignal.getReferenceTimeMillis(), nitzSignal.getValue().getCurrentTimeInMillis()); PhoneTimeSuggestion timeSuggestion = new PhoneTimeSuggestion(mPhoneId, newNitzTime); timeSuggestion.addDebugInfo("doTimeDetection: NITZ signal used" timeSuggestion.setUtcTime(newNitzTime); timeSuggestion.addDebugInfo("Sending new time zone suggestion" + " nitzSignal=" + nitzSignal + ", newNitzTime=" + newNitzTime + ", reason=" + reason); } mNewTimeServiceHelper.suggestDeviceTime(timeSuggestion); } catch (RuntimeException ex) { Rlog.e(LOG_TAG, "doTimeDetection: Exception thrown" Loading src/java/com/android/internal/telephony/nitz/NewTimeServiceHelperImpl.java +6 −5 Original line number Diff line number Diff line Loading @@ -62,13 +62,14 @@ public final class NewTimeServiceHelperImpl implements NewTimeServiceHelper { @Override public void suggestDeviceTime(@NonNull PhoneTimeSuggestion phoneTimeSuggestion) { mTimeLog.log("Suggesting system clock update: " + phoneTimeSuggestion); mTimeLog.log("Sending time suggestion: " + phoneTimeSuggestion); // 3 nullness assertions in 1 line Objects.requireNonNull(phoneTimeSuggestion.getUtcTime().getValue()); Objects.requireNonNull(phoneTimeSuggestion); if (phoneTimeSuggestion.getUtcTime() != null) { TimestampedValue<Long> utcTime = phoneTimeSuggestion.getUtcTime(); TelephonyMetrics.getInstance().writeNITZEvent(mPhoneId, utcTime.getValue()); } mTimeDetector.suggestPhoneTime(phoneTimeSuggestion); } Loading tests/telephonytests/src/com/android/internal/telephony/NitzStateMachineImplTest.java +15 −7 Original line number Diff line number Diff line Loading @@ -25,6 +25,7 @@ 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.createEmptyTimeSuggestion; import static com.android.internal.telephony.NitzStateMachineTestSupport.createTimeSuggestionFromNitzSignal; import static org.junit.Assert.assertEquals; Loading Loading @@ -892,8 +893,9 @@ public class NitzStateMachineImplTest extends TelephonyTest { assertNull(mNitzStateMachine.getSavedTimeZoneId()); // Verify there's no time zone opinion by toggling auto time zone off and on. PhoneTimeSuggestion emptyTimeSuggestion = createEmptyTimeSuggestion(mPhone.getPhoneId()); script.toggleTimeZoneDetectionEnabled(false) .verifyNothingWasSetAndReset() .verifyOnlyTimeWasSuggestedAndReset(emptyTimeSuggestion) .toggleTimeZoneDetectionEnabled(true) .verifyNothingWasSetAndReset(); Loading Loading @@ -989,8 +991,10 @@ public class NitzStateMachineImplTest extends TelephonyTest { // Simulate losing the network. The NitzStateMachineImpl must lose all NITZ state and stop // having an opinion about time zone. script.networkUnavailable() .verifyNothingWasSetAndReset(); script.networkUnavailable(); PhoneTimeSuggestion emptyTimeSuggestion = createEmptyTimeSuggestion(mPhone.getPhoneId()); script.verifyOnlyTimeWasSuggestedAndReset(emptyTimeSuggestion); // Simulate the passage of time and update the device realtime clock. scenario.incrementTime(timeStepMillis); Loading Loading @@ -1091,8 +1095,10 @@ public class NitzStateMachineImplTest extends TelephonyTest { // Simulate losing the network. The NitzStateMachineImpl must lose all NITZ state but should // retain country knowledge and so remain opinionated about time zone ID because the country // is sufficient to detect time zone in the UK. script.networkUnavailable() .verifyOnlyTimeZoneWasSetAndReset(scenario.getTimeZoneId()); script.networkUnavailable(); PhoneTimeSuggestion emptyTimeSuggestion = createEmptyTimeSuggestion(mPhone.getPhoneId()); script.verifyTimeSuggestedAndZoneSetAndReset(emptyTimeSuggestion, scenario.getTimeZoneId()); // Simulate the passage of time and update the device realtime clock. scenario.incrementTime(timeStepMillis); Loading Loading @@ -1372,9 +1378,11 @@ public class NitzStateMachineImplTest extends TelephonyTest { @Override public void suggestDeviceTime(PhoneTimeSuggestion phoneTimeSuggestion) { suggestedTime.set(phoneTimeSuggestion); if (phoneTimeSuggestion.getUtcTime() != null) { // The fake time service just uses the latest suggestion. mFakeDeviceState.currentTimeMillis = phoneTimeSuggestion.getUtcTime().getValue(); } } void commitState() { deviceTimeZone.commitLatest(); Loading tests/telephonytests/src/com/android/internal/telephony/NitzStateMachineTestSupport.java +16 −2 Original line number Diff line number Diff line Loading @@ -25,6 +25,7 @@ import android.icu.util.TimeZone; import android.util.TimestampedValue; import com.android.internal.telephony.NitzStateMachine.DeviceState; import com.android.internal.telephony.nitz.service.PhoneTimeZoneSuggestion; /** * An assortment of methods and classes for testing {@link NitzStateMachine} implementations. Loading Loading @@ -270,10 +271,23 @@ public final class NitzStateMachineTestSupport { return cal.getTimeInMillis(); } public static PhoneTimeZoneSuggestion createEmptyTimeZoneSuggestion(int phoneId) { PhoneTimeZoneSuggestion timeZoneSuggestion = new PhoneTimeZoneSuggestion(phoneId); timeZoneSuggestion.addDebugInfo("Test"); return timeZoneSuggestion; } public static PhoneTimeSuggestion createEmptyTimeSuggestion(int phoneId) { PhoneTimeSuggestion timeSuggestion = new PhoneTimeSuggestion(phoneId); timeSuggestion.addDebugInfo("Test"); return timeSuggestion; } public static PhoneTimeSuggestion createTimeSuggestionFromNitzSignal( int phoneId, TimestampedValue<NitzData> nitzSignal) { PhoneTimeSuggestion timeSuggestion = new PhoneTimeSuggestion(phoneId, createTimeSignalFromNitzSignal(nitzSignal)); PhoneTimeSuggestion timeSuggestion = new PhoneTimeSuggestion(phoneId); timeSuggestion.setUtcTime(createTimeSignalFromNitzSignal(nitzSignal)); timeSuggestion.addDebugInfo("Test"); return timeSuggestion; } Loading Loading
src/java/com/android/internal/telephony/NitzStateMachineImpl.java +21 −6 Original line number Diff line number Diff line Loading @@ -327,9 +327,8 @@ public final class NitzStateMachineImpl implements NitzStateMachine { mSavedTimeZoneId = null; mTimeZoneLog.log("handleNetworkUnavailable: NITZ state cleared."); // Avoid doing country-only detection work unnecessarily: if the mLatestNitzSignal was // already null we have nothing to do as it will have been done last time the // mLatestNitzSignal was cleared. // Avoid doing work unnecessarily: if the mLatestNitzSignal was already null we have nothing // to do as it will have been done last time the mLatestNitzSignal was cleared. if (oldNitzSignal == null) { return; } Loading @@ -342,6 +341,7 @@ public final class NitzStateMachineImpl implements NitzStateMachine { if (!TextUtils.isEmpty(isoCountryCode)) { updateTimeZoneFromNetworkCountryCode(isoCountryCode); } sendEmptyTimeSuggestion("handleNetworkUnavailable"); } @Override Loading Loading @@ -386,14 +386,29 @@ public final class NitzStateMachineImpl implements NitzStateMachine { mTimeLog.log("handleAirplaneModeChanged(" + on + "): Time state cleared."); mCountryIsoCode = null; TimestampedValue<NitzData> oldNitzSignal = mLatestNitzSignal; mLatestNitzSignal = null; mNitzTimeZoneDetectionSuccessful = false; mSavedTimeZoneId = null; if (oldNitzSignal == null) { // No work to do - terminate early. return; } mTimeZoneLog.log("handleAirplaneModeChanged(" + on + "): Time zone state cleared."); sendEmptyTimeSuggestion("handleAirplaneModeChanged(" + on + ")"); } private void sendEmptyTimeSuggestion(String reason) { PhoneTimeSuggestion timeSuggestion = new PhoneTimeSuggestion(mPhone.getPhoneId()); timeSuggestion.addDebugInfo("Empty suggestion, reason=" + reason); mTimeServiceHelper.suggestDeviceTime(timeSuggestion); } private void updateTimeFromNitz() { TimestampedValue<NitzData> nitzSignal = mLatestNitzSignal; TimestampedValue<NitzData> nitzSignal = Objects.requireNonNull(mLatestNitzSignal); try { boolean ignoreNitz = mDeviceState.getIgnoreNitz(); if (ignoreNitz) { Loading Loading @@ -469,8 +484,8 @@ public final class NitzStateMachineImpl implements NitzStateMachine { Rlog.d(LOG_TAG, logMsg); } mTimeLog.log(logMsg); PhoneTimeSuggestion phoneTimeSuggestion = new PhoneTimeSuggestion(mPhone.getPhoneId(), newNitzTime); PhoneTimeSuggestion phoneTimeSuggestion = new PhoneTimeSuggestion(mPhone.getPhoneId()); phoneTimeSuggestion.setUtcTime(newNitzTime); phoneTimeSuggestion.addDebugInfo(logMsg); mTimeServiceHelper.suggestDeviceTime(phoneTimeSuggestion); Loading
src/java/com/android/internal/telephony/nitz/NewNitzStateMachineImpl.java +12 −14 Original line number Diff line number Diff line Loading @@ -310,22 +310,20 @@ public final class NewNitzStateMachineImpl implements NitzStateMachine { @NonNull String reason) { try { Objects.requireNonNull(reason); if (nitzSignal == null) { // Do nothing to withdraw previous suggestions: the service currently does not // support withdrawing suggestions. return; } Objects.requireNonNull(nitzSignal.getValue()); PhoneTimeSuggestion timeSuggestion = new PhoneTimeSuggestion(mPhoneId); if (nitzSignal == null) { timeSuggestion.addDebugInfo("Clearing time zone suggestion" + " reason=" + reason); } else { TimestampedValue<Long> newNitzTime = new TimestampedValue<>( nitzSignal.getReferenceTimeMillis(), nitzSignal.getValue().getCurrentTimeInMillis()); PhoneTimeSuggestion timeSuggestion = new PhoneTimeSuggestion(mPhoneId, newNitzTime); timeSuggestion.addDebugInfo("doTimeDetection: NITZ signal used" timeSuggestion.setUtcTime(newNitzTime); timeSuggestion.addDebugInfo("Sending new time zone suggestion" + " nitzSignal=" + nitzSignal + ", newNitzTime=" + newNitzTime + ", reason=" + reason); } mNewTimeServiceHelper.suggestDeviceTime(timeSuggestion); } catch (RuntimeException ex) { Rlog.e(LOG_TAG, "doTimeDetection: Exception thrown" Loading
src/java/com/android/internal/telephony/nitz/NewTimeServiceHelperImpl.java +6 −5 Original line number Diff line number Diff line Loading @@ -62,13 +62,14 @@ public final class NewTimeServiceHelperImpl implements NewTimeServiceHelper { @Override public void suggestDeviceTime(@NonNull PhoneTimeSuggestion phoneTimeSuggestion) { mTimeLog.log("Suggesting system clock update: " + phoneTimeSuggestion); mTimeLog.log("Sending time suggestion: " + phoneTimeSuggestion); // 3 nullness assertions in 1 line Objects.requireNonNull(phoneTimeSuggestion.getUtcTime().getValue()); Objects.requireNonNull(phoneTimeSuggestion); if (phoneTimeSuggestion.getUtcTime() != null) { TimestampedValue<Long> utcTime = phoneTimeSuggestion.getUtcTime(); TelephonyMetrics.getInstance().writeNITZEvent(mPhoneId, utcTime.getValue()); } mTimeDetector.suggestPhoneTime(phoneTimeSuggestion); } Loading
tests/telephonytests/src/com/android/internal/telephony/NitzStateMachineImplTest.java +15 −7 Original line number Diff line number Diff line Loading @@ -25,6 +25,7 @@ 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.createEmptyTimeSuggestion; import static com.android.internal.telephony.NitzStateMachineTestSupport.createTimeSuggestionFromNitzSignal; import static org.junit.Assert.assertEquals; Loading Loading @@ -892,8 +893,9 @@ public class NitzStateMachineImplTest extends TelephonyTest { assertNull(mNitzStateMachine.getSavedTimeZoneId()); // Verify there's no time zone opinion by toggling auto time zone off and on. PhoneTimeSuggestion emptyTimeSuggestion = createEmptyTimeSuggestion(mPhone.getPhoneId()); script.toggleTimeZoneDetectionEnabled(false) .verifyNothingWasSetAndReset() .verifyOnlyTimeWasSuggestedAndReset(emptyTimeSuggestion) .toggleTimeZoneDetectionEnabled(true) .verifyNothingWasSetAndReset(); Loading Loading @@ -989,8 +991,10 @@ public class NitzStateMachineImplTest extends TelephonyTest { // Simulate losing the network. The NitzStateMachineImpl must lose all NITZ state and stop // having an opinion about time zone. script.networkUnavailable() .verifyNothingWasSetAndReset(); script.networkUnavailable(); PhoneTimeSuggestion emptyTimeSuggestion = createEmptyTimeSuggestion(mPhone.getPhoneId()); script.verifyOnlyTimeWasSuggestedAndReset(emptyTimeSuggestion); // Simulate the passage of time and update the device realtime clock. scenario.incrementTime(timeStepMillis); Loading Loading @@ -1091,8 +1095,10 @@ public class NitzStateMachineImplTest extends TelephonyTest { // Simulate losing the network. The NitzStateMachineImpl must lose all NITZ state but should // retain country knowledge and so remain opinionated about time zone ID because the country // is sufficient to detect time zone in the UK. script.networkUnavailable() .verifyOnlyTimeZoneWasSetAndReset(scenario.getTimeZoneId()); script.networkUnavailable(); PhoneTimeSuggestion emptyTimeSuggestion = createEmptyTimeSuggestion(mPhone.getPhoneId()); script.verifyTimeSuggestedAndZoneSetAndReset(emptyTimeSuggestion, scenario.getTimeZoneId()); // Simulate the passage of time and update the device realtime clock. scenario.incrementTime(timeStepMillis); Loading Loading @@ -1372,9 +1378,11 @@ public class NitzStateMachineImplTest extends TelephonyTest { @Override public void suggestDeviceTime(PhoneTimeSuggestion phoneTimeSuggestion) { suggestedTime.set(phoneTimeSuggestion); if (phoneTimeSuggestion.getUtcTime() != null) { // The fake time service just uses the latest suggestion. mFakeDeviceState.currentTimeMillis = phoneTimeSuggestion.getUtcTime().getValue(); } } void commitState() { deviceTimeZone.commitLatest(); Loading
tests/telephonytests/src/com/android/internal/telephony/NitzStateMachineTestSupport.java +16 −2 Original line number Diff line number Diff line Loading @@ -25,6 +25,7 @@ import android.icu.util.TimeZone; import android.util.TimestampedValue; import com.android.internal.telephony.NitzStateMachine.DeviceState; import com.android.internal.telephony.nitz.service.PhoneTimeZoneSuggestion; /** * An assortment of methods and classes for testing {@link NitzStateMachine} implementations. Loading Loading @@ -270,10 +271,23 @@ public final class NitzStateMachineTestSupport { return cal.getTimeInMillis(); } public static PhoneTimeZoneSuggestion createEmptyTimeZoneSuggestion(int phoneId) { PhoneTimeZoneSuggestion timeZoneSuggestion = new PhoneTimeZoneSuggestion(phoneId); timeZoneSuggestion.addDebugInfo("Test"); return timeZoneSuggestion; } public static PhoneTimeSuggestion createEmptyTimeSuggestion(int phoneId) { PhoneTimeSuggestion timeSuggestion = new PhoneTimeSuggestion(phoneId); timeSuggestion.addDebugInfo("Test"); return timeSuggestion; } public static PhoneTimeSuggestion createTimeSuggestionFromNitzSignal( int phoneId, TimestampedValue<NitzData> nitzSignal) { PhoneTimeSuggestion timeSuggestion = new PhoneTimeSuggestion(phoneId, createTimeSignalFromNitzSignal(nitzSignal)); PhoneTimeSuggestion timeSuggestion = new PhoneTimeSuggestion(phoneId); timeSuggestion.setUtcTime(createTimeSignalFromNitzSignal(nitzSignal)); timeSuggestion.addDebugInfo("Test"); return timeSuggestion; } Loading