Search in sources :

Example 6 with TelephonyTimeZoneSuggestion

use of android.app.timezonedetector.TelephonyTimeZoneSuggestion in project android_frameworks_opt_telephony by LineageOS.

the class NitzStateMachineImplTest method test_airplaneModeClearsState.

@Test
public void test_airplaneModeClearsState() throws Exception {
    Scenario scenario = UNITED_KINGDOM_SCENARIO.mutableCopy();
    int timeStepMillis = (int) TimeUnit.HOURS.toMillis(3);
    Script script = new Script().initializeSystemClock(ARBITRARY_SYSTEM_CLOCK_TIME).networkAvailable();
    // Pre-flight: Simulate a device receiving signals that allow it to detect time and time
    // zone.
    TimestampedValue<NitzData> preFlightNitzSignal = scenario.createNitzSignal(mFakeDeviceState.elapsedRealtime());
    TelephonyTimeSuggestion expectedPreFlightTimeSuggestion = createTimeSuggestionFromNitzSignal(SLOT_INDEX, preFlightNitzSignal);
    String preFlightCountryIsoCode = scenario.getNetworkCountryIsoCode();
    // Simulate receiving the NITZ signal and country.
    script.nitzReceived(preFlightNitzSignal).countryReceived(preFlightCountryIsoCode);
    // Verify the state machine did the right thing.
    TelephonyTimeZoneSuggestion expectedPreFlightTimeZoneSuggestion = mRealTimeZoneSuggester.getTimeZoneSuggestion(SLOT_INDEX, preFlightCountryIsoCode, preFlightNitzSignal);
    script.verifyTimeAndTimeZoneSuggestedAndReset(expectedPreFlightTimeSuggestion, expectedPreFlightTimeZoneSuggestion);
    // Check state that NitzStateMachine must expose.
    assertEquals(preFlightNitzSignal.getValue(), mNitzStateMachineImpl.getCachedNitzData());
    // Boarded flight: Airplane mode turned on / time zone detection still enabled.
    // The NitzStateMachine must lose all state and stop having an opinion about time zone.
    // Simulate the passage of time and update the device realtime clock.
    scenario.incrementTime(timeStepMillis);
    script.incrementTime(timeStepMillis);
    // Simulate airplane mode being turned on.
    script.toggleAirplaneMode(true);
    // Verify the state machine did the right thing.
    // Check the time zone suggestion was withdrawn (time is not currently withdrawn).
    script.verifyTimeAndTimeZoneSuggestedAndReset(EMPTY_TIME_SUGGESTION, EMPTY_TIME_ZONE_SUGGESTION);
    // Check state that NitzStateMachine must expose.
    assertNull(mNitzStateMachineImpl.getCachedNitzData());
    // During flight: Airplane mode turned off / time zone detection still enabled.
    // The NitzStateMachine still must not have an opinion about time zone / hold any state.
    // Simulate the passage of time and update the device realtime clock.
    scenario.incrementTime(timeStepMillis);
    script.incrementTime(timeStepMillis);
    // Simulate airplane mode being turned off.
    script.toggleAirplaneMode(false);
    // Verify nothing was suggested: The last suggestion was empty so nothing has changed.
    script.verifyNothingWasSuggested();
    // Check the state that NitzStateMachine must expose.
    assertNull(mNitzStateMachineImpl.getCachedNitzData());
    // Post flight: Device has moved and receives new signals.
    // Simulate the passage of time and update the device realtime clock.
    scenario.incrementTime(timeStepMillis);
    script.incrementTime(timeStepMillis);
    // Simulate the movement to the destination.
    scenario.changeCountry(UNIQUE_US_ZONE_SCENARIO1.getTimeZoneId(), UNIQUE_US_ZONE_SCENARIO1.getNetworkCountryIsoCode());
    // Simulate the device receiving NITZ signal and country again after the flight. Now the
    // NitzStateMachine should be opinionated again.
    TimestampedValue<NitzData> postFlightNitzSignal = scenario.createNitzSignal(mFakeDeviceState.elapsedRealtime());
    String postFlightCountryCode = scenario.getNetworkCountryIsoCode();
    script.countryReceived(postFlightCountryCode).nitzReceived(postFlightNitzSignal);
    // Verify the state machine did the right thing.
    TelephonyTimeSuggestion expectedPostFlightTimeSuggestion = createTimeSuggestionFromNitzSignal(SLOT_INDEX, postFlightNitzSignal);
    TelephonyTimeZoneSuggestion expectedPostFlightTimeZoneSuggestion = mRealTimeZoneSuggester.getTimeZoneSuggestion(SLOT_INDEX, postFlightCountryCode, postFlightNitzSignal);
    script.verifyTimeAndTimeZoneSuggestedAndReset(expectedPostFlightTimeSuggestion, expectedPostFlightTimeZoneSuggestion);
    // Check state that NitzStateMachine must expose.
    assertEquals(postFlightNitzSignal.getValue(), mNitzStateMachineImpl.getCachedNitzData());
}
Also used : TelephonyTimeSuggestion(android.app.timedetector.TelephonyTimeSuggestion) TelephonyTimeZoneSuggestion(android.app.timezonedetector.TelephonyTimeZoneSuggestion) NitzData(com.android.internal.telephony.NitzData) Scenario(com.android.internal.telephony.nitz.NitzStateMachineTestSupport.Scenario) TelephonyTest(com.android.internal.telephony.TelephonyTest) Test(org.junit.Test)

Example 7 with TelephonyTimeZoneSuggestion

use of android.app.timezonedetector.TelephonyTimeZoneSuggestion in project android_frameworks_opt_telephony by LineageOS.

the class TimeZoneSuggesterImplTest method test_emulatorNitzExtensionUsedForTimeZone.

@Test
public void test_emulatorNitzExtensionUsedForTimeZone() throws Exception {
    Scenario scenario = UNIQUE_US_ZONE_SCENARIO1;
    TimestampedValue<NitzData> originalNitzSignal = scenario.createNitzSignal(mFakeDeviceState.elapsedRealtime());
    // Create an NITZ signal with an explicit time zone (as can happen on emulators).
    NitzData originalNitzData = originalNitzSignal.getValue();
    // A time zone that is obviously not in the US, but because the explicit value is present it
    // should not be questioned.
    String emulatorTimeZoneId = "Europe/London";
    NitzData emulatorNitzData = NitzData.createForTests(originalNitzData.getLocalOffsetMillis(), originalNitzData.getDstAdjustmentMillis(), originalNitzData.getCurrentTimeInMillis(), java.util.TimeZone.getTimeZone(emulatorTimeZoneId));
    TimestampedValue<NitzData> emulatorNitzSignal = new TimestampedValue<>(originalNitzSignal.getReferenceTimeMillis(), emulatorNitzData);
    TelephonyTimeZoneSuggestion expectedTimeZoneSuggestion = new TelephonyTimeZoneSuggestion.Builder(SLOT_INDEX).setZoneId(emulatorTimeZoneId).setMatchType(MATCH_TYPE_EMULATOR_ZONE_ID).setQuality(QUALITY_SINGLE_ZONE).build();
    TelephonyTimeZoneSuggestion actualSuggestion = mTimeZoneSuggester.getTimeZoneSuggestion(SLOT_INDEX, scenario.getNetworkCountryIsoCode(), emulatorNitzSignal);
    assertEquals(expectedTimeZoneSuggestion, actualSuggestion);
}
Also used : TelephonyTimeZoneSuggestion(android.app.timezonedetector.TelephonyTimeZoneSuggestion) TimestampedValue(android.os.TimestampedValue) NitzData(com.android.internal.telephony.NitzData) Scenario(com.android.internal.telephony.nitz.NitzStateMachineTestSupport.Scenario) TelephonyTest(com.android.internal.telephony.TelephonyTest) Test(org.junit.Test)

Example 8 with TelephonyTimeZoneSuggestion

use of android.app.timezonedetector.TelephonyTimeZoneSuggestion in project android_frameworks_opt_telephony by LineageOS.

the class NitzStateMachineImplTest method test_nitzThenCountry.

@Test
public void test_nitzThenCountry() throws Exception {
    Scenario scenario = UNIQUE_US_ZONE_SCENARIO1;
    TimestampedValue<NitzData> nitzSignal = scenario.createNitzSignal(mFakeDeviceState.elapsedRealtime());
    String networkCountryIsoCode = scenario.getNetworkCountryIsoCode();
    // Capture test expectations from the real suggester and confirm we can tell the difference
    // between them.
    TelephonyTimeZoneSuggestion expectedTimeZoneSuggestion1 = mRealTimeZoneSuggester.getTimeZoneSuggestion(SLOT_INDEX, null, /* countryIsoCode */
    nitzSignal);
    TelephonyTimeZoneSuggestion expectedTimeZoneSuggestion2 = mRealTimeZoneSuggester.getTimeZoneSuggestion(SLOT_INDEX, networkCountryIsoCode, nitzSignal);
    assertNotEquals(expectedTimeZoneSuggestion1, expectedTimeZoneSuggestion2);
    Script script = new Script().initializeSystemClock(ARBITRARY_SYSTEM_CLOCK_TIME).networkAvailable();
    // Simulate receiving the NITZ signal.
    script.nitzReceived(nitzSignal);
    // Verify the state machine did the right thing.
    TelephonyTimeSuggestion expectedTimeSuggestion = createTimeSuggestionFromNitzSignal(SLOT_INDEX, nitzSignal);
    script.verifyTimeAndTimeZoneSuggestedAndReset(expectedTimeSuggestion, expectedTimeZoneSuggestion1);
    // Check NitzStateMachine exposed state.
    assertEquals(nitzSignal.getValue(), mNitzStateMachineImpl.getCachedNitzData());
    // Simulate country being known and verify the behavior.
    script.countryReceived(networkCountryIsoCode).verifyOnlyTimeZoneWasSuggestedAndReset(expectedTimeZoneSuggestion2);
    // Check NitzStateMachine exposed state.
    assertEquals(nitzSignal.getValue(), mNitzStateMachineImpl.getCachedNitzData());
}
Also used : TelephonyTimeZoneSuggestion(android.app.timezonedetector.TelephonyTimeZoneSuggestion) TelephonyTimeSuggestion(android.app.timedetector.TelephonyTimeSuggestion) NitzData(com.android.internal.telephony.NitzData) Scenario(com.android.internal.telephony.nitz.NitzStateMachineTestSupport.Scenario) TelephonyTest(com.android.internal.telephony.TelephonyTest) Test(org.junit.Test)

Example 9 with TelephonyTimeZoneSuggestion

use of android.app.timezonedetector.TelephonyTimeZoneSuggestion in project android_frameworks_opt_telephony by LineageOS.

the class NitzStateMachineImplTest method test_handleNetworkUnavailableClearsNetworkState.

/**
 * Confirm losing the network / NITZ doesn't clear country state.
 */
@Test
public void test_handleNetworkUnavailableClearsNetworkState() throws Exception {
    Scenario scenario = UNIQUE_US_ZONE_SCENARIO1.mutableCopy();
    int timeStepMillis = (int) TimeUnit.HOURS.toMillis(3);
    String countryIsoCode = scenario.getNetworkCountryIsoCode();
    Script script = new Script().initializeSystemClock(ARBITRARY_SYSTEM_CLOCK_TIME).networkAvailable();
    // Simulate a device receiving signals that allow it to detect time and time zone.
    TimestampedValue<NitzData> initialNitzSignal = scenario.createNitzSignal(mFakeDeviceState.elapsedRealtime());
    TelephonyTimeSuggestion expectedInitialTimeSuggestion = createTimeSuggestionFromNitzSignal(SLOT_INDEX, initialNitzSignal);
    // Simulate receiving the NITZ signal and country.
    script.nitzReceived(initialNitzSignal).countryReceived(countryIsoCode);
    // Verify the state machine did the right thing.
    TelephonyTimeZoneSuggestion expectedInitialTimeZoneSuggestion = mRealTimeZoneSuggester.getTimeZoneSuggestion(SLOT_INDEX, countryIsoCode, initialNitzSignal);
    script.verifyTimeAndTimeZoneSuggestedAndReset(expectedInitialTimeSuggestion, expectedInitialTimeZoneSuggestion);
    // Check state that NitzStateMachine must expose.
    assertEquals(initialNitzSignal.getValue(), mNitzStateMachineImpl.getCachedNitzData());
    // Simulate the passage of time and update the device realtime clock.
    scenario.incrementTime(timeStepMillis);
    script.incrementTime(timeStepMillis);
    // Simulate network being lost.
    script.networkUnavailable();
    // Check the "no NITZ" time and time zone suggestions are made.
    TelephonyTimeZoneSuggestion expectedMiddleTimeZoneSuggestion = mRealTimeZoneSuggester.getTimeZoneSuggestion(SLOT_INDEX, countryIsoCode, null);
    script.verifyTimeAndTimeZoneSuggestedAndReset(EMPTY_TIME_SUGGESTION, expectedMiddleTimeZoneSuggestion);
    // Check state that NitzStateMachine must expose.
    assertNull(mNitzStateMachineImpl.getCachedNitzData());
    // Simulate the passage of time and update the device realtime clock.
    scenario.incrementTime(timeStepMillis);
    script.incrementTime(timeStepMillis);
    // Simulate the network being found.
    script.networkAvailable().verifyNothingWasSuggested();
    // Check the state that NitzStateMachine must expose.
    assertNull(mNitzStateMachineImpl.getCachedNitzData());
    // Simulate the passage of time and update the device realtime clock.
    scenario.incrementTime(timeStepMillis);
    script.incrementTime(timeStepMillis);
    // Simulate the device receiving NITZ signal again. Now the NitzStateMachine should be
    // opinionated again.
    TimestampedValue<NitzData> finalNitzSignal = scenario.createNitzSignal(mFakeDeviceState.elapsedRealtime());
    script.nitzReceived(finalNitzSignal);
    // Verify the state machine did the right thing.
    TelephonyTimeSuggestion expectedFinalTimeSuggestion = createTimeSuggestionFromNitzSignal(SLOT_INDEX, finalNitzSignal);
    TelephonyTimeZoneSuggestion expectedFinalTimeZoneSuggestion = mRealTimeZoneSuggester.getTimeZoneSuggestion(SLOT_INDEX, countryIsoCode, finalNitzSignal);
    script.verifyTimeAndTimeZoneSuggestedAndReset(expectedFinalTimeSuggestion, expectedFinalTimeZoneSuggestion);
    // Check state that NitzStateMachine must expose.
    assertEquals(finalNitzSignal.getValue(), mNitzStateMachineImpl.getCachedNitzData());
}
Also used : TelephonyTimeSuggestion(android.app.timedetector.TelephonyTimeSuggestion) TelephonyTimeZoneSuggestion(android.app.timezonedetector.TelephonyTimeZoneSuggestion) NitzData(com.android.internal.telephony.NitzData) Scenario(com.android.internal.telephony.nitz.NitzStateMachineTestSupport.Scenario) TelephonyTest(com.android.internal.telephony.TelephonyTest) Test(org.junit.Test)

Example 10 with TelephonyTimeZoneSuggestion

use of android.app.timezonedetector.TelephonyTimeZoneSuggestion in project android_frameworks_opt_telephony by LineageOS.

the class NitzStateMachineImplTest method test_countryThenNitz.

@Test
public void test_countryThenNitz() throws Exception {
    Scenario scenario = UNIQUE_US_ZONE_SCENARIO1;
    String networkCountryIsoCode = scenario.getNetworkCountryIsoCode();
    TimestampedValue<NitzData> nitzSignal = scenario.createNitzSignal(mFakeDeviceState.elapsedRealtime());
    // Capture expected results from the real suggester and confirm we can tell the difference
    // between them.
    TelephonyTimeZoneSuggestion expectedTimeZoneSuggestion1 = mRealTimeZoneSuggester.getTimeZoneSuggestion(SLOT_INDEX, networkCountryIsoCode, null);
    TelephonyTimeZoneSuggestion expectedTimeZoneSuggestion2 = mRealTimeZoneSuggester.getTimeZoneSuggestion(SLOT_INDEX, networkCountryIsoCode, nitzSignal);
    assertNotNull(expectedTimeZoneSuggestion2);
    assertNotEquals(expectedTimeZoneSuggestion1, expectedTimeZoneSuggestion2);
    Script script = new Script().initializeSystemClock(ARBITRARY_SYSTEM_CLOCK_TIME).networkAvailable();
    // Simulate country being known.
    script.countryReceived(networkCountryIsoCode);
    script.verifyOnlyTimeZoneWasSuggestedAndReset(expectedTimeZoneSuggestion1);
    // Check NitzStateMachine exposed state.
    assertNull(mNitzStateMachineImpl.getCachedNitzData());
    // Simulate NITZ being received and verify the behavior.
    script.nitzReceived(nitzSignal);
    TelephonyTimeSuggestion expectedTimeSuggestion = createTimeSuggestionFromNitzSignal(SLOT_INDEX, nitzSignal);
    script.verifyTimeAndTimeZoneSuggestedAndReset(expectedTimeSuggestion, expectedTimeZoneSuggestion2);
    // Check NitzStateMachine exposed state.
    assertEquals(nitzSignal.getValue(), mNitzStateMachineImpl.getCachedNitzData());
}
Also used : TelephonyTimeZoneSuggestion(android.app.timezonedetector.TelephonyTimeZoneSuggestion) TelephonyTimeSuggestion(android.app.timedetector.TelephonyTimeSuggestion) NitzData(com.android.internal.telephony.NitzData) Scenario(com.android.internal.telephony.nitz.NitzStateMachineTestSupport.Scenario) TelephonyTest(com.android.internal.telephony.TelephonyTest) Test(org.junit.Test)

Aggregations

TelephonyTimeZoneSuggestion (android.app.timezonedetector.TelephonyTimeZoneSuggestion)14 NitzData (com.android.internal.telephony.NitzData)11 TelephonyTest (com.android.internal.telephony.TelephonyTest)8 Scenario (com.android.internal.telephony.nitz.NitzStateMachineTestSupport.Scenario)8 Test (org.junit.Test)8 TelephonyTimeSuggestion (android.app.timedetector.TelephonyTimeSuggestion)7 NonNull (android.annotation.NonNull)4 OffsetResult (android.timezone.CountryTimeZones.OffsetResult)2 CountryResult (com.android.internal.telephony.nitz.TimeZoneLookupHelper.CountryResult)2 TimestampedValue (android.os.TimestampedValue)1