diff options
| author | 2020-02-06 17:48:17 +0000 | |
|---|---|---|
| committer | 2020-02-06 17:48:17 +0000 | |
| commit | 746ba5d891e564b71b1bfd8963e9fc64aeeab4a1 (patch) | |
| tree | db5694213cbae189cc5255a10f1858c65e1d5a82 | |
| parent | e481352792f886a9be954f4c6442c2cca87d9f59 (diff) | |
| parent | 9522f9ff0fc64cf68d919fb2accc0929c2c2de94 (diff) | |
Merge "More renames for API council" am: b03661f5d8 am: 02e64e352c am: 9522f9ff0f
Change-Id: I642777126bf77db09c8b64a8302145472272c9c6
25 files changed, 805 insertions, 770 deletions
diff --git a/core/java/android/app/timedetector/ITimeDetectorService.aidl b/core/java/android/app/timedetector/ITimeDetectorService.aidl index de8f4700de2d..5ead0c90c80e 100644 --- a/core/java/android/app/timedetector/ITimeDetectorService.aidl +++ b/core/java/android/app/timedetector/ITimeDetectorService.aidl @@ -18,7 +18,7 @@ package android.app.timedetector; import android.app.timedetector.ManualTimeSuggestion; import android.app.timedetector.NetworkTimeSuggestion; -import android.app.timedetector.PhoneTimeSuggestion; +import android.app.timedetector.TelephonyTimeSuggestion; /** * System private API to communicate with time detector service. @@ -34,7 +34,7 @@ import android.app.timedetector.PhoneTimeSuggestion; * {@hide} */ interface ITimeDetectorService { - void suggestPhoneTime(in PhoneTimeSuggestion timeSuggestion); void suggestManualTime(in ManualTimeSuggestion timeSuggestion); void suggestNetworkTime(in NetworkTimeSuggestion timeSuggestion); + void suggestTelephonyTime(in TelephonyTimeSuggestion timeSuggestion); } diff --git a/core/java/android/app/timedetector/PhoneTimeSuggestion.aidl b/core/java/android/app/timedetector/TelephonyTimeSuggestion.aidl index f5e240549a9a..d9b038692c62 100644 --- a/core/java/android/app/timedetector/PhoneTimeSuggestion.aidl +++ b/core/java/android/app/timedetector/TelephonyTimeSuggestion.aidl @@ -16,4 +16,4 @@ package android.app.timedetector; -parcelable PhoneTimeSuggestion; +parcelable TelephonyTimeSuggestion; diff --git a/core/java/android/app/timedetector/PhoneTimeSuggestion.java b/core/java/android/app/timedetector/TelephonyTimeSuggestion.java index 0133a4472686..c0e8957727cf 100644 --- a/core/java/android/app/timedetector/PhoneTimeSuggestion.java +++ b/core/java/android/app/timedetector/TelephonyTimeSuggestion.java @@ -50,17 +50,17 @@ import java.util.Objects; * * @hide */ -public final class PhoneTimeSuggestion implements Parcelable { +public final class TelephonyTimeSuggestion implements Parcelable { /** @hide */ - public static final @NonNull Parcelable.Creator<PhoneTimeSuggestion> CREATOR = - new Parcelable.Creator<PhoneTimeSuggestion>() { - public PhoneTimeSuggestion createFromParcel(Parcel in) { - return PhoneTimeSuggestion.createFromParcel(in); + public static final @NonNull Parcelable.Creator<TelephonyTimeSuggestion> CREATOR = + new Parcelable.Creator<TelephonyTimeSuggestion>() { + public TelephonyTimeSuggestion createFromParcel(Parcel in) { + return TelephonyTimeSuggestion.createFromParcel(in); } - public PhoneTimeSuggestion[] newArray(int size) { - return new PhoneTimeSuggestion[size]; + public TelephonyTimeSuggestion[] newArray(int size) { + return new TelephonyTimeSuggestion[size]; } }; @@ -68,15 +68,15 @@ public final class PhoneTimeSuggestion implements Parcelable { @Nullable private final TimestampedValue<Long> mUtcTime; @Nullable private ArrayList<String> mDebugInfo; - private PhoneTimeSuggestion(Builder builder) { + private TelephonyTimeSuggestion(Builder builder) { mSlotIndex = builder.mSlotIndex; mUtcTime = builder.mUtcTime; mDebugInfo = builder.mDebugInfo != null ? new ArrayList<>(builder.mDebugInfo) : null; } - private static PhoneTimeSuggestion createFromParcel(Parcel in) { + private static TelephonyTimeSuggestion createFromParcel(Parcel in) { int slotIndex = in.readInt(); - PhoneTimeSuggestion suggestion = new PhoneTimeSuggestion.Builder(slotIndex) + TelephonyTimeSuggestion suggestion = new TelephonyTimeSuggestion.Builder(slotIndex) .setUtcTime(in.readParcelable(null /* classLoader */)) .build(); @SuppressWarnings("unchecked") @@ -102,7 +102,7 @@ public final class PhoneTimeSuggestion implements Parcelable { /** * Returns an identifier for the source of this suggestion. * - * <p>See {@link PhoneTimeSuggestion} for more information about {@code slotIndex}. + * <p>See {@link TelephonyTimeSuggestion} for more information about {@code slotIndex}. */ public int getSlotIndex() { return mSlotIndex; @@ -111,7 +111,7 @@ public final class PhoneTimeSuggestion implements Parcelable { /** * Returns the suggested time or {@code null} if there isn't one. * - * <p>See {@link PhoneTimeSuggestion} for more information about {@code utcTime}. + * <p>See {@link TelephonyTimeSuggestion} for more information about {@code utcTime}. */ @Nullable public TimestampedValue<Long> getUtcTime() { @@ -121,7 +121,7 @@ public final class PhoneTimeSuggestion implements Parcelable { /** * Returns debug metadata for the suggestion. * - * <p>See {@link PhoneTimeSuggestion} for more information about {@code debugInfo}. + * <p>See {@link TelephonyTimeSuggestion} for more information about {@code debugInfo}. */ @NonNull public List<String> getDebugInfo() { @@ -132,7 +132,7 @@ public final class PhoneTimeSuggestion implements Parcelable { /** * Associates information with the instance that can be useful for debugging / logging. * - * <p>See {@link PhoneTimeSuggestion} for more information about {@code debugInfo}. + * <p>See {@link TelephonyTimeSuggestion} for more information about {@code debugInfo}. */ public void addDebugInfo(@NonNull String debugInfo) { if (mDebugInfo == null) { @@ -144,7 +144,7 @@ public final class PhoneTimeSuggestion implements Parcelable { /** * Associates information with the instance that can be useful for debugging / logging. * - * <p>See {@link PhoneTimeSuggestion} for more information about {@code debugInfo}. + * <p>See {@link TelephonyTimeSuggestion} for more information about {@code debugInfo}. */ public void addDebugInfo(@NonNull List<String> debugInfo) { if (mDebugInfo == null) { @@ -161,7 +161,7 @@ public final class PhoneTimeSuggestion implements Parcelable { if (o == null || getClass() != o.getClass()) { return false; } - PhoneTimeSuggestion that = (PhoneTimeSuggestion) o; + TelephonyTimeSuggestion that = (TelephonyTimeSuggestion) o; return mSlotIndex == that.mSlotIndex && Objects.equals(mUtcTime, that.mUtcTime); } @@ -173,7 +173,7 @@ public final class PhoneTimeSuggestion implements Parcelable { @Override public String toString() { - return "PhoneTimeSuggestion{" + return "TelephonyTimeSuggestion{" + "mSlotIndex='" + mSlotIndex + '\'' + ", mUtcTime=" + mUtcTime + ", mDebugInfo=" + mDebugInfo @@ -181,7 +181,7 @@ public final class PhoneTimeSuggestion implements Parcelable { } /** - * Builds {@link PhoneTimeSuggestion} instances. + * Builds {@link TelephonyTimeSuggestion} instances. * * @hide */ @@ -193,7 +193,7 @@ public final class PhoneTimeSuggestion implements Parcelable { /** * Creates a builder with the specified {@code slotIndex}. * - * <p>See {@link PhoneTimeSuggestion} for more information about {@code slotIndex}. + * <p>See {@link TelephonyTimeSuggestion} for more information about {@code slotIndex}. */ public Builder(int slotIndex) { mSlotIndex = slotIndex; @@ -202,7 +202,7 @@ public final class PhoneTimeSuggestion implements Parcelable { /** * Returns the builder for call chaining. * - * <p>See {@link PhoneTimeSuggestion} for more information about {@code utcTime}. + * <p>See {@link TelephonyTimeSuggestion} for more information about {@code utcTime}. */ @NonNull public Builder setUtcTime(@Nullable TimestampedValue<Long> utcTime) { @@ -218,7 +218,7 @@ public final class PhoneTimeSuggestion implements Parcelable { /** * Returns the builder for call chaining. * - * <p>See {@link PhoneTimeSuggestion} for more information about {@code debugInfo}. + * <p>See {@link TelephonyTimeSuggestion} for more information about {@code debugInfo}. */ @NonNull public Builder addDebugInfo(@NonNull String debugInfo) { @@ -229,10 +229,10 @@ public final class PhoneTimeSuggestion implements Parcelable { return this; } - /** Returns the {@link PhoneTimeSuggestion}. */ + /** Returns the {@link TelephonyTimeSuggestion}. */ @NonNull - public PhoneTimeSuggestion build() { - return new PhoneTimeSuggestion(this); + public TelephonyTimeSuggestion build() { + return new TelephonyTimeSuggestion(this); } } } diff --git a/core/java/android/app/timedetector/TimeDetector.java b/core/java/android/app/timedetector/TimeDetector.java index df4f513ab095..84ad495da09b 100644 --- a/core/java/android/app/timedetector/TimeDetector.java +++ b/core/java/android/app/timedetector/TimeDetector.java @@ -45,12 +45,12 @@ public interface TimeDetector { } /** - * Suggests the current phone-signal derived time to the detector. The detector may ignore the - * signal if better signals are available such as those that come from more reliable sources or - * were determined more recently. + * Suggests a telephony-signal derived time to the detector. The detector may ignore the signal + * if better signals are available such as those that come from more reliable sources or were + * determined more recently. */ - @RequiresPermission(android.Manifest.permission.SUGGEST_PHONE_TIME_AND_ZONE) - void suggestPhoneTime(@NonNull PhoneTimeSuggestion timeSuggestion); + @RequiresPermission(android.Manifest.permission.SUGGEST_TELEPHONY_TIME_AND_ZONE) + void suggestTelephonyTime(@NonNull TelephonyTimeSuggestion timeSuggestion); /** * Suggests the user's manually entered current time to the detector. diff --git a/core/java/android/app/timedetector/TimeDetectorImpl.java b/core/java/android/app/timedetector/TimeDetectorImpl.java index 1683817740c3..c1d66672f9d2 100644 --- a/core/java/android/app/timedetector/TimeDetectorImpl.java +++ b/core/java/android/app/timedetector/TimeDetectorImpl.java @@ -40,12 +40,12 @@ public final class TimeDetectorImpl implements TimeDetector { } @Override - public void suggestPhoneTime(@NonNull PhoneTimeSuggestion timeSuggestion) { + public void suggestTelephonyTime(@NonNull TelephonyTimeSuggestion timeSuggestion) { if (DEBUG) { - Log.d(TAG, "suggestPhoneTime called: " + timeSuggestion); + Log.d(TAG, "suggestTelephonyTime called: " + timeSuggestion); } try { - mITimeDetectorService.suggestPhoneTime(timeSuggestion); + mITimeDetectorService.suggestTelephonyTime(timeSuggestion); } catch (RemoteException e) { throw e.rethrowFromSystemServer(); } diff --git a/core/java/android/app/timezonedetector/ITimeZoneDetectorService.aidl b/core/java/android/app/timezonedetector/ITimeZoneDetectorService.aidl index df6438319ab7..b06f4b8ecdb8 100644 --- a/core/java/android/app/timezonedetector/ITimeZoneDetectorService.aidl +++ b/core/java/android/app/timezonedetector/ITimeZoneDetectorService.aidl @@ -17,7 +17,7 @@ package android.app.timezonedetector; import android.app.timezonedetector.ManualTimeZoneSuggestion; -import android.app.timezonedetector.PhoneTimeZoneSuggestion; +import android.app.timezonedetector.TelephonyTimeZoneSuggestion; /** * System private API to communicate with time zone detector service. @@ -34,5 +34,5 @@ import android.app.timezonedetector.PhoneTimeZoneSuggestion; */ interface ITimeZoneDetectorService { void suggestManualTimeZone(in ManualTimeZoneSuggestion timeZoneSuggestion); - void suggestPhoneTimeZone(in PhoneTimeZoneSuggestion timeZoneSuggestion); + void suggestTelephonyTimeZone(in TelephonyTimeZoneSuggestion timeZoneSuggestion); } diff --git a/core/java/android/app/timezonedetector/PhoneTimeZoneSuggestion.aidl b/core/java/android/app/timezonedetector/TelephonyTimeZoneSuggestion.aidl index 3ad903bb5949..b57ad20734be 100644 --- a/core/java/android/app/timezonedetector/PhoneTimeZoneSuggestion.aidl +++ b/core/java/android/app/timezonedetector/TelephonyTimeZoneSuggestion.aidl @@ -16,4 +16,4 @@ package android.app.timezonedetector; -parcelable PhoneTimeZoneSuggestion; +parcelable TelephonyTimeZoneSuggestion; diff --git a/core/java/android/app/timezonedetector/PhoneTimeZoneSuggestion.java b/core/java/android/app/timezonedetector/TelephonyTimeZoneSuggestion.java index 9147b4462492..150c01d59899 100644 --- a/core/java/android/app/timezonedetector/PhoneTimeZoneSuggestion.java +++ b/core/java/android/app/timezonedetector/TelephonyTimeZoneSuggestion.java @@ -56,18 +56,18 @@ import java.util.Objects; * * @hide */ -public final class PhoneTimeZoneSuggestion implements Parcelable { +public final class TelephonyTimeZoneSuggestion implements Parcelable { /** @hide */ @NonNull - public static final Creator<PhoneTimeZoneSuggestion> CREATOR = - new Creator<PhoneTimeZoneSuggestion>() { - public PhoneTimeZoneSuggestion createFromParcel(Parcel in) { - return PhoneTimeZoneSuggestion.createFromParcel(in); + public static final Creator<TelephonyTimeZoneSuggestion> CREATOR = + new Creator<TelephonyTimeZoneSuggestion>() { + public TelephonyTimeZoneSuggestion createFromParcel(Parcel in) { + return TelephonyTimeZoneSuggestion.createFromParcel(in); } - public PhoneTimeZoneSuggestion[] newArray(int size) { - return new PhoneTimeZoneSuggestion[size]; + public TelephonyTimeZoneSuggestion[] newArray(int size) { + return new TelephonyTimeZoneSuggestion[size]; } }; @@ -76,7 +76,7 @@ public final class PhoneTimeZoneSuggestion implements Parcelable { * the same {@code slotIndex}. */ @NonNull - public static PhoneTimeZoneSuggestion createEmptySuggestion( + public static TelephonyTimeZoneSuggestion createEmptySuggestion( int slotIndex, @NonNull String debugInfo) { return new Builder(slotIndex).addDebugInfo(debugInfo).build(); } @@ -144,7 +144,7 @@ public final class PhoneTimeZoneSuggestion implements Parcelable { @Quality private final int mQuality; @Nullable private List<String> mDebugInfo; - private PhoneTimeZoneSuggestion(Builder builder) { + private TelephonyTimeZoneSuggestion(Builder builder) { mSlotIndex = builder.mSlotIndex; mZoneId = builder.mZoneId; mMatchType = builder.mMatchType; @@ -153,15 +153,16 @@ public final class PhoneTimeZoneSuggestion implements Parcelable { } @SuppressWarnings("unchecked") - private static PhoneTimeZoneSuggestion createFromParcel(Parcel in) { + private static TelephonyTimeZoneSuggestion createFromParcel(Parcel in) { // Use the Builder so we get validation during build(). int slotIndex = in.readInt(); - PhoneTimeZoneSuggestion suggestion = new Builder(slotIndex) + TelephonyTimeZoneSuggestion suggestion = new Builder(slotIndex) .setZoneId(in.readString()) .setMatchType(in.readInt()) .setQuality(in.readInt()) .build(); - List<String> debugInfo = in.readArrayList(PhoneTimeZoneSuggestion.class.getClassLoader()); + List<String> debugInfo = + in.readArrayList(TelephonyTimeZoneSuggestion.class.getClassLoader()); if (debugInfo != null) { suggestion.addDebugInfo(debugInfo); } @@ -185,7 +186,7 @@ public final class PhoneTimeZoneSuggestion implements Parcelable { /** * Returns an identifier for the source of this suggestion. * - * <p>See {@link PhoneTimeZoneSuggestion} for more information about {@code slotIndex}. + * <p>See {@link TelephonyTimeZoneSuggestion} for more information about {@code slotIndex}. */ public int getSlotIndex() { return mSlotIndex; @@ -195,7 +196,7 @@ public final class PhoneTimeZoneSuggestion implements Parcelable { * Returns the suggested time zone Olson ID, e.g. "America/Los_Angeles". {@code null} means that * the caller is no longer sure what the current time zone is. * - * <p>See {@link PhoneTimeZoneSuggestion} for more information about {@code zoneId}. + * <p>See {@link TelephonyTimeZoneSuggestion} for more information about {@code zoneId}. */ @Nullable public String getZoneId() { @@ -206,7 +207,7 @@ public final class PhoneTimeZoneSuggestion implements Parcelable { * Returns information about how the suggestion was determined which could be used to rank * suggestions when several are available from different sources. * - * <p>See {@link PhoneTimeZoneSuggestion} for more information about {@code matchType}. + * <p>See {@link TelephonyTimeZoneSuggestion} for more information about {@code matchType}. */ @MatchType public int getMatchType() { @@ -216,7 +217,7 @@ public final class PhoneTimeZoneSuggestion implements Parcelable { /** * Returns information about the likelihood of the suggested zone being correct. * - * <p>See {@link PhoneTimeZoneSuggestion} for more information about {@code quality}. + * <p>See {@link TelephonyTimeZoneSuggestion} for more information about {@code quality}. */ @Quality public int getQuality() { @@ -226,7 +227,7 @@ public final class PhoneTimeZoneSuggestion implements Parcelable { /** * Returns debug metadata for the suggestion. * - * <p>See {@link PhoneTimeZoneSuggestion} for more information about {@code debugInfo}. + * <p>See {@link TelephonyTimeZoneSuggestion} for more information about {@code debugInfo}. */ @NonNull public List<String> getDebugInfo() { @@ -237,7 +238,7 @@ public final class PhoneTimeZoneSuggestion implements Parcelable { /** * Associates information with the instance that can be useful for debugging / logging. * - * <p>See {@link PhoneTimeZoneSuggestion} for more information about {@code debugInfo}. + * <p>See {@link TelephonyTimeZoneSuggestion} for more information about {@code debugInfo}. */ public void addDebugInfo(@NonNull String debugInfo) { if (mDebugInfo == null) { @@ -249,7 +250,7 @@ public final class PhoneTimeZoneSuggestion implements Parcelable { /** * Associates information with the instance that can be useful for debugging / logging. * - * <p>See {@link PhoneTimeZoneSuggestion} for more information about {@code debugInfo}. + * <p>See {@link TelephonyTimeZoneSuggestion} for more information about {@code debugInfo}. */ public void addDebugInfo(@NonNull List<String> debugInfo) { if (mDebugInfo == null) { @@ -266,7 +267,7 @@ public final class PhoneTimeZoneSuggestion implements Parcelable { if (o == null || getClass() != o.getClass()) { return false; } - PhoneTimeZoneSuggestion that = (PhoneTimeZoneSuggestion) o; + TelephonyTimeZoneSuggestion that = (TelephonyTimeZoneSuggestion) o; return mSlotIndex == that.mSlotIndex && mMatchType == that.mMatchType && mQuality == that.mQuality @@ -280,7 +281,7 @@ public final class PhoneTimeZoneSuggestion implements Parcelable { @Override public String toString() { - return "PhoneTimeZoneSuggestion{" + return "TelephonyTimeZoneSuggestion{" + "mSlotIndex=" + mSlotIndex + ", mZoneId='" + mZoneId + '\'' + ", mMatchType=" + mMatchType @@ -290,7 +291,7 @@ public final class PhoneTimeZoneSuggestion implements Parcelable { } /** - * Builds {@link PhoneTimeZoneSuggestion} instances. + * Builds {@link TelephonyTimeZoneSuggestion} instances. * * @hide */ @@ -304,7 +305,7 @@ public final class PhoneTimeZoneSuggestion implements Parcelable { /** * Creates a builder with the specified {@code slotIndex}. * - * <p>See {@link PhoneTimeZoneSuggestion} for more information about {@code slotIndex}. + * <p>See {@link TelephonyTimeZoneSuggestion} for more information about {@code slotIndex}. */ public Builder(int slotIndex) { mSlotIndex = slotIndex; @@ -313,7 +314,7 @@ public final class PhoneTimeZoneSuggestion implements Parcelable { /** * Returns the builder for call chaining. * - * <p>See {@link PhoneTimeZoneSuggestion} for more information about {@code zoneId}. + * <p>See {@link TelephonyTimeZoneSuggestion} for more information about {@code zoneId}. */ @NonNull public Builder setZoneId(@Nullable String zoneId) { @@ -324,7 +325,7 @@ public final class PhoneTimeZoneSuggestion implements Parcelable { /** * Returns the builder for call chaining. * - * <p>See {@link PhoneTimeZoneSuggestion} for more information about {@code matchType}. + * <p>See {@link TelephonyTimeZoneSuggestion} for more information about {@code matchType}. */ @NonNull public Builder setMatchType(@MatchType int matchType) { @@ -335,7 +336,7 @@ public final class PhoneTimeZoneSuggestion implements Parcelable { /** * Returns the builder for call chaining. * - * <p>See {@link PhoneTimeZoneSuggestion} for more information about {@code quality}. + * <p>See {@link TelephonyTimeZoneSuggestion} for more information about {@code quality}. */ @NonNull public Builder setQuality(@Quality int quality) { @@ -346,7 +347,7 @@ public final class PhoneTimeZoneSuggestion implements Parcelable { /** * Returns the builder for call chaining. * - * <p>See {@link PhoneTimeZoneSuggestion} for more information about {@code debugInfo}. + * <p>See {@link TelephonyTimeZoneSuggestion} for more information about {@code debugInfo}. */ @NonNull public Builder addDebugInfo(@NonNull String debugInfo) { @@ -384,11 +385,11 @@ public final class PhoneTimeZoneSuggestion implements Parcelable { } } - /** Returns the {@link PhoneTimeZoneSuggestion}. */ + /** Returns the {@link TelephonyTimeZoneSuggestion}. */ @NonNull - public PhoneTimeZoneSuggestion build() { + public TelephonyTimeZoneSuggestion build() { validate(); - return new PhoneTimeZoneSuggestion(this); + return new TelephonyTimeZoneSuggestion(this); } } } diff --git a/core/java/android/app/timezonedetector/TimeZoneDetector.java b/core/java/android/app/timezonedetector/TimeZoneDetector.java index 6a3953eccb2d..20761ad2d447 100644 --- a/core/java/android/app/timezonedetector/TimeZoneDetector.java +++ b/core/java/android/app/timezonedetector/TimeZoneDetector.java @@ -47,8 +47,8 @@ public interface TimeZoneDetector { * * @hide */ - @RequiresPermission(android.Manifest.permission.SUGGEST_PHONE_TIME_AND_ZONE) - void suggestPhoneTimeZone(@NonNull PhoneTimeZoneSuggestion timeZoneSuggestion); + @RequiresPermission(android.Manifest.permission.SUGGEST_TELEPHONY_TIME_AND_ZONE) + void suggestTelephonyTimeZone(@NonNull TelephonyTimeZoneSuggestion timeZoneSuggestion); /** * Suggests the current time zone, determined for the user's manually information, to the diff --git a/core/java/android/app/timezonedetector/TimeZoneDetectorImpl.java b/core/java/android/app/timezonedetector/TimeZoneDetectorImpl.java index 27b8374db172..0ada88500193 100644 --- a/core/java/android/app/timezonedetector/TimeZoneDetectorImpl.java +++ b/core/java/android/app/timezonedetector/TimeZoneDetectorImpl.java @@ -40,12 +40,12 @@ public final class TimeZoneDetectorImpl implements TimeZoneDetector { } @Override - public void suggestPhoneTimeZone(@NonNull PhoneTimeZoneSuggestion timeZoneSuggestion) { + public void suggestTelephonyTimeZone(@NonNull TelephonyTimeZoneSuggestion timeZoneSuggestion) { if (DEBUG) { - Log.d(TAG, "suggestPhoneTimeZone called: " + timeZoneSuggestion); + Log.d(TAG, "suggestTelephonyTimeZone called: " + timeZoneSuggestion); } try { - mITimeZoneDetectorService.suggestPhoneTimeZone(timeZoneSuggestion); + mITimeZoneDetectorService.suggestTelephonyTimeZone(timeZoneSuggestion); } catch (RemoteException e) { throw e.rethrowFromSystemServer(); } diff --git a/core/res/AndroidManifest.xml b/core/res/AndroidManifest.xml index 6944b2bf0b56..32a6cc3b5344 100644 --- a/core/res/AndroidManifest.xml +++ b/core/res/AndroidManifest.xml @@ -2605,7 +2605,7 @@ <p>Not for use by third-party applications. @hide --> - <permission android:name="android.permission.SUGGEST_PHONE_TIME_AND_ZONE" + <permission android:name="android.permission.SUGGEST_TELEPHONY_TIME_AND_ZONE" android:protectionLevel="signature|telephony" /> <!-- Allows applications like settings to suggest the user's manually chosen time / time zone. diff --git a/core/tests/coretests/src/android/app/timedetector/PhoneTimeSuggestionTest.java b/core/tests/coretests/src/android/app/timedetector/TelephonyTimeSuggestionTest.java index d17b63597a21..4b64dfc84fb7 100644 --- a/core/tests/coretests/src/android/app/timedetector/PhoneTimeSuggestionTest.java +++ b/core/tests/coretests/src/android/app/timedetector/TelephonyTimeSuggestionTest.java @@ -26,44 +26,45 @@ import android.os.TimestampedValue; import org.junit.Test; -public class PhoneTimeSuggestionTest { +public class TelephonyTimeSuggestionTest { private static final int SLOT_INDEX = 99999; @Test public void testEquals() { - PhoneTimeSuggestion.Builder builder1 = new PhoneTimeSuggestion.Builder(SLOT_INDEX); + TelephonyTimeSuggestion.Builder builder1 = new TelephonyTimeSuggestion.Builder(SLOT_INDEX); { - PhoneTimeSuggestion one = builder1.build(); + TelephonyTimeSuggestion one = builder1.build(); assertEquals(one, one); } - PhoneTimeSuggestion.Builder builder2 = new PhoneTimeSuggestion.Builder(SLOT_INDEX); + TelephonyTimeSuggestion.Builder builder2 = new TelephonyTimeSuggestion.Builder(SLOT_INDEX); { - PhoneTimeSuggestion one = builder1.build(); - PhoneTimeSuggestion two = builder2.build(); + TelephonyTimeSuggestion one = builder1.build(); + TelephonyTimeSuggestion two = builder2.build(); assertEquals(one, two); assertEquals(two, one); } builder1.setUtcTime(new TimestampedValue<>(1111L, 2222L)); { - PhoneTimeSuggestion one = builder1.build(); + TelephonyTimeSuggestion one = builder1.build(); assertEquals(one, one); } builder2.setUtcTime(new TimestampedValue<>(1111L, 2222L)); { - PhoneTimeSuggestion one = builder1.build(); - PhoneTimeSuggestion two = builder2.build(); + TelephonyTimeSuggestion one = builder1.build(); + TelephonyTimeSuggestion two = builder2.build(); assertEquals(one, two); assertEquals(two, one); } - PhoneTimeSuggestion.Builder builder3 = new PhoneTimeSuggestion.Builder(SLOT_INDEX + 1); + TelephonyTimeSuggestion.Builder builder3 = + new TelephonyTimeSuggestion.Builder(SLOT_INDEX + 1); builder3.setUtcTime(new TimestampedValue<>(1111L, 2222L)); { - PhoneTimeSuggestion one = builder1.build(); - PhoneTimeSuggestion three = builder3.build(); + TelephonyTimeSuggestion one = builder1.build(); + TelephonyTimeSuggestion three = builder3.build(); assertNotEquals(one, three); assertNotEquals(three, one); } @@ -72,15 +73,15 @@ public class PhoneTimeSuggestionTest { builder1.addDebugInfo("Debug info 1"); builder2.addDebugInfo("Debug info 2"); { - PhoneTimeSuggestion one = builder1.build(); - PhoneTimeSuggestion two = builder2.build(); + TelephonyTimeSuggestion one = builder1.build(); + TelephonyTimeSuggestion two = builder2.build(); assertEquals(one, two); } } @Test public void testParcelable() { - PhoneTimeSuggestion.Builder builder = new PhoneTimeSuggestion.Builder(SLOT_INDEX); + TelephonyTimeSuggestion.Builder builder = new TelephonyTimeSuggestion.Builder(SLOT_INDEX); assertRoundTripParcelable(builder.build()); builder.setUtcTime(new TimestampedValue<>(1111L, 2222L)); @@ -88,9 +89,9 @@ public class PhoneTimeSuggestionTest { // DebugInfo should also be stored (but is not checked by equals() { - PhoneTimeSuggestion suggestion1 = builder.build(); + TelephonyTimeSuggestion suggestion1 = builder.build(); builder.addDebugInfo("This is debug info"); - PhoneTimeSuggestion rtSuggestion1 = roundTripParcelable(suggestion1); + TelephonyTimeSuggestion rtSuggestion1 = roundTripParcelable(suggestion1); assertEquals(suggestion1.getDebugInfo(), rtSuggestion1.getDebugInfo()); } } diff --git a/core/tests/coretests/src/android/app/timezonedetector/PhoneTimeZoneSuggestionTest.java b/core/tests/coretests/src/android/app/timezonedetector/PhoneTimeZoneSuggestionTest.java deleted file mode 100644 index 384dbf9fab07..000000000000 --- a/core/tests/coretests/src/android/app/timezonedetector/PhoneTimeZoneSuggestionTest.java +++ /dev/null @@ -1,155 +0,0 @@ -/* - * Copyright 2019 The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package android.app.timezonedetector; - -import static android.app.timezonedetector.ParcelableTestSupport.assertRoundTripParcelable; -import static android.app.timezonedetector.ParcelableTestSupport.roundTripParcelable; - -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertNotEquals; -import static org.junit.Assert.assertTrue; - -import org.junit.Test; - -public class PhoneTimeZoneSuggestionTest { - private static final int SLOT_INDEX = 99999; - - @Test - public void testEquals() { - PhoneTimeZoneSuggestion.Builder builder1 = new PhoneTimeZoneSuggestion.Builder(SLOT_INDEX); - { - PhoneTimeZoneSuggestion one = builder1.build(); - assertEquals(one, one); - } - - PhoneTimeZoneSuggestion.Builder builder2 = new PhoneTimeZoneSuggestion.Builder(SLOT_INDEX); - { - PhoneTimeZoneSuggestion one = builder1.build(); - PhoneTimeZoneSuggestion two = builder2.build(); - assertEquals(one, two); - assertEquals(two, one); - } - - PhoneTimeZoneSuggestion.Builder builder3 = - new PhoneTimeZoneSuggestion.Builder(SLOT_INDEX + 1); - { - PhoneTimeZoneSuggestion one = builder1.build(); - PhoneTimeZoneSuggestion three = builder3.build(); - assertNotEquals(one, three); - assertNotEquals(three, one); - } - - builder1.setZoneId("Europe/London"); - builder1.setMatchType(PhoneTimeZoneSuggestion.MATCH_TYPE_NETWORK_COUNTRY_ONLY); - builder1.setQuality(PhoneTimeZoneSuggestion.QUALITY_SINGLE_ZONE); - { - PhoneTimeZoneSuggestion one = builder1.build(); - PhoneTimeZoneSuggestion two = builder2.build(); - assertNotEquals(one, two); - } - - builder2.setZoneId("Europe/Paris"); - builder2.setMatchType(PhoneTimeZoneSuggestion.MATCH_TYPE_NETWORK_COUNTRY_ONLY); - builder2.setQuality(PhoneTimeZoneSuggestion.QUALITY_SINGLE_ZONE); - { - PhoneTimeZoneSuggestion one = builder1.build(); - PhoneTimeZoneSuggestion two = builder2.build(); - assertNotEquals(one, two); - } - - builder1.setZoneId("Europe/Paris"); - { - PhoneTimeZoneSuggestion one = builder1.build(); - PhoneTimeZoneSuggestion two = builder2.build(); - assertEquals(one, two); - } - - builder1.setMatchType(PhoneTimeZoneSuggestion.MATCH_TYPE_EMULATOR_ZONE_ID); - builder2.setMatchType(PhoneTimeZoneSuggestion.MATCH_TYPE_NETWORK_COUNTRY_ONLY); - { - PhoneTimeZoneSuggestion one = builder1.build(); - PhoneTimeZoneSuggestion two = builder2.build(); - assertNotEquals(one, two); - } - - builder1.setMatchType(PhoneTimeZoneSuggestion.MATCH_TYPE_NETWORK_COUNTRY_ONLY); - { - PhoneTimeZoneSuggestion one = builder1.build(); - PhoneTimeZoneSuggestion two = builder2.build(); - assertEquals(one, two); - } - - builder1.setQuality(PhoneTimeZoneSuggestion.QUALITY_SINGLE_ZONE); - builder2.setQuality(PhoneTimeZoneSuggestion.QUALITY_MULTIPLE_ZONES_WITH_DIFFERENT_OFFSETS); - { - PhoneTimeZoneSuggestion one = builder1.build(); - PhoneTimeZoneSuggestion two = builder2.build(); - assertNotEquals(one, two); - } - - builder1.setQuality(PhoneTimeZoneSuggestion.QUALITY_MULTIPLE_ZONES_WITH_DIFFERENT_OFFSETS); - { - PhoneTimeZoneSuggestion one = builder1.build(); - PhoneTimeZoneSuggestion two = builder2.build(); - assertEquals(one, two); - } - - // DebugInfo must not be considered in equals(). - { - PhoneTimeZoneSuggestion one = builder1.build(); - PhoneTimeZoneSuggestion two = builder2.build(); - one.addDebugInfo("Debug info 1"); - two.addDebugInfo("Debug info 2"); - assertEquals(one, two); - } - } - - @Test(expected = RuntimeException.class) - public void testBuilderValidates_emptyZone_badMatchType() { - PhoneTimeZoneSuggestion.Builder builder = new PhoneTimeZoneSuggestion.Builder(SLOT_INDEX); - // No zone ID, so match type should be left unset. - builder.setMatchType(PhoneTimeZoneSuggestion.MATCH_TYPE_NETWORK_COUNTRY_AND_OFFSET); - builder.build(); - } - - @Test(expected = RuntimeException.class) - public void testBuilderValidates_zoneSet_badMatchType() { - PhoneTimeZoneSuggestion.Builder builder = new PhoneTimeZoneSuggestion.Builder(SLOT_INDEX); - builder.setZoneId("Europe/London"); - builder.setQuality(PhoneTimeZoneSuggestion.QUALITY_SINGLE_ZONE); - builder.build(); - } - - @Test - public void testParcelable() { - PhoneTimeZoneSuggestion.Builder builder = new PhoneTimeZoneSuggestion.Builder(SLOT_INDEX); - assertRoundTripParcelable(builder.build()); - - builder.setZoneId("Europe/London"); - builder.setMatchType(PhoneTimeZoneSuggestion.MATCH_TYPE_EMULATOR_ZONE_ID); - builder.setQuality(PhoneTimeZoneSuggestion.QUALITY_SINGLE_ZONE); - PhoneTimeZoneSuggestion suggestion1 = builder.build(); - assertRoundTripParcelable(suggestion1); - - // DebugInfo should also be stored (but is not checked by equals() - String debugString = "This is debug info"; - suggestion1.addDebugInfo(debugString); - PhoneTimeZoneSuggestion suggestion1_2 = roundTripParcelable(suggestion1); - assertEquals(suggestion1, suggestion1_2); - assertTrue(suggestion1_2.getDebugInfo().contains(debugString)); - } -} diff --git a/core/tests/coretests/src/android/app/timezonedetector/TelephonyTimeZoneSuggestionTest.java b/core/tests/coretests/src/android/app/timezonedetector/TelephonyTimeZoneSuggestionTest.java new file mode 100644 index 000000000000..59d55b79157c --- /dev/null +++ b/core/tests/coretests/src/android/app/timezonedetector/TelephonyTimeZoneSuggestionTest.java @@ -0,0 +1,162 @@ +/* + * Copyright 2019 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package android.app.timezonedetector; + +import static android.app.timezonedetector.ParcelableTestSupport.assertRoundTripParcelable; +import static android.app.timezonedetector.ParcelableTestSupport.roundTripParcelable; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertNotEquals; +import static org.junit.Assert.assertTrue; + +import org.junit.Test; + +public class TelephonyTimeZoneSuggestionTest { + private static final int SLOT_INDEX = 99999; + + @Test + public void testEquals() { + TelephonyTimeZoneSuggestion.Builder builder1 = + new TelephonyTimeZoneSuggestion.Builder(SLOT_INDEX); + { + TelephonyTimeZoneSuggestion one = builder1.build(); + assertEquals(one, one); + } + + TelephonyTimeZoneSuggestion.Builder builder2 = + new TelephonyTimeZoneSuggestion.Builder(SLOT_INDEX); + { + TelephonyTimeZoneSuggestion one = builder1.build(); + TelephonyTimeZoneSuggestion two = builder2.build(); + assertEquals(one, two); + assertEquals(two, one); + } + + TelephonyTimeZoneSuggestion.Builder builder3 = + new TelephonyTimeZoneSuggestion.Builder(SLOT_INDEX + 1); + { + TelephonyTimeZoneSuggestion one = builder1.build(); + TelephonyTimeZoneSuggestion three = builder3.build(); + assertNotEquals(one, three); + assertNotEquals(three, one); + } + + builder1.setZoneId("Europe/London"); + builder1.setMatchType(TelephonyTimeZoneSuggestion.MATCH_TYPE_NETWORK_COUNTRY_ONLY); + builder1.setQuality(TelephonyTimeZoneSuggestion.QUALITY_SINGLE_ZONE); + { + TelephonyTimeZoneSuggestion one = builder1.build(); + TelephonyTimeZoneSuggestion two = builder2.build(); + assertNotEquals(one, two); + } + + builder2.setZoneId("Europe/Paris"); + builder2.setMatchType(TelephonyTimeZoneSuggestion.MATCH_TYPE_NETWORK_COUNTRY_ONLY); + builder2.setQuality(TelephonyTimeZoneSuggestion.QUALITY_SINGLE_ZONE); + { + TelephonyTimeZoneSuggestion one = builder1.build(); + TelephonyTimeZoneSuggestion two = builder2.build(); + assertNotEquals(one, two); + } + + builder1.setZoneId("Europe/Paris"); + { + TelephonyTimeZoneSuggestion one = builder1.build(); + TelephonyTimeZoneSuggestion two = builder2.build(); + assertEquals(one, two); + } + + builder1.setMatchType(TelephonyTimeZoneSuggestion.MATCH_TYPE_EMULATOR_ZONE_ID); + builder2.setMatchType(TelephonyTimeZoneSuggestion.MATCH_TYPE_NETWORK_COUNTRY_ONLY); + { + TelephonyTimeZoneSuggestion one = builder1.build(); + TelephonyTimeZoneSuggestion two = builder2.build(); + assertNotEquals(one, two); + } + + builder1.setMatchType(TelephonyTimeZoneSuggestion.MATCH_TYPE_NETWORK_COUNTRY_ONLY); + { + TelephonyTimeZoneSuggestion one = builder1.build(); + TelephonyTimeZoneSuggestion two = builder2.build(); + assertEquals(one, two); + } + + builder1.setQuality(TelephonyTimeZoneSuggestion.QUALITY_SINGLE_ZONE); + builder2.setQuality( + TelephonyTimeZoneSuggestion.QUALITY_MULTIPLE_ZONES_WITH_DIFFERENT_OFFSETS); + { + TelephonyTimeZoneSuggestion one = builder1.build(); + TelephonyTimeZoneSuggestion two = builder2.build(); + assertNotEquals(one, two); + } + + builder1.setQuality( + TelephonyTimeZoneSuggestion.QUALITY_MULTIPLE_ZONES_WITH_DIFFERENT_OFFSETS); + { + TelephonyTimeZoneSuggestion one = builder1.build(); + TelephonyTimeZoneSuggestion two = builder2.build(); + assertEquals(one, two); + } + + // DebugInfo must not be considered in equals(). + { + TelephonyTimeZoneSuggestion one = builder1.build(); + TelephonyTimeZoneSuggestion two = builder2.build(); + one.addDebugInfo("Debug info 1"); + two.addDebugInfo("Debug info 2"); + assertEquals(one, two); + } + } + + @Test(expected = RuntimeException.class) + public void testBuilderValidates_emptyZone_badMatchType() { + TelephonyTimeZoneSuggestion.Builder builder = + new TelephonyTimeZoneSuggestion.Builder(SLOT_INDEX); + // No zone ID, so match type should be left unset. + builder.setMatchType(TelephonyTimeZoneSuggestion.MATCH_TYPE_NETWORK_COUNTRY_AND_OFFSET); + builder.build(); + } + + @Test(expected = RuntimeException.class) + public void testBuilderValidates_zoneSet_badMatchType() { + TelephonyTimeZoneSuggestion.Builder builder = + new TelephonyTimeZoneSuggestion.Builder(SLOT_INDEX); + builder.setZoneId("Europe/London"); + builder.setQuality(TelephonyTimeZoneSuggestion.QUALITY_SINGLE_ZONE); + builder.build(); + } + + @Test + public void testParcelable() { + TelephonyTimeZoneSuggestion.Builder builder = + new TelephonyTimeZoneSuggestion.Builder(SLOT_INDEX); + assertRoundTripParcelable(builder.build()); + + builder.setZoneId("Europe/London"); + builder.setMatchType(TelephonyTimeZoneSuggestion.MATCH_TYPE_EMULATOR_ZONE_ID); + builder.setQuality(TelephonyTimeZoneSuggestion.QUALITY_SINGLE_ZONE); + TelephonyTimeZoneSuggestion suggestion1 = builder.build(); + assertRoundTripParcelable(suggestion1); + + // DebugInfo should also be stored (but is not checked by equals() + String debugString = "This is debug info"; + suggestion1.addDebugInfo(debugString); + TelephonyTimeZoneSuggestion suggestion1_2 = roundTripParcelable(suggestion1); + assertEquals(suggestion1, suggestion1_2); + assertTrue(suggestion1_2.getDebugInfo().contains(debugString)); + } +} diff --git a/data/etc/privapp-permissions-platform.xml b/data/etc/privapp-permissions-platform.xml index b9a7e225bdb9..f83fb3f312e9 100644 --- a/data/etc/privapp-permissions-platform.xml +++ b/data/etc/privapp-permissions-platform.xml @@ -169,7 +169,7 @@ applications that come with the platform <permission name="android.permission.START_ACTIVITIES_FROM_BACKGROUND"/> <permission name="android.permission.STATUS_BAR"/> <permission name="android.permission.STOP_APP_SWITCHES"/> - <permission name="android.permission.SUGGEST_PHONE_TIME_AND_ZONE"/> + <permission name="android.permission.SUGGEST_TELEPHONY_TIME_AND_ZONE"/> <permission name="android.permission.UPDATE_APP_OPS_STATS"/> <permission name="android.permission.UPDATE_DEVICE_STATS"/> <permission name="android.permission.UPDATE_LOCK"/> diff --git a/services/core/java/com/android/server/timedetector/TimeDetectorService.java b/services/core/java/com/android/server/timedetector/TimeDetectorService.java index 0bb0f94d1243..ed6424cb4a30 100644 --- a/services/core/java/com/android/server/timedetector/TimeDetectorService.java +++ b/services/core/java/com/android/server/timedetector/TimeDetectorService.java @@ -21,7 +21,7 @@ import android.annotation.Nullable; import android.app.timedetector.ITimeDetectorService; import android.app.timedetector.ManualTimeSuggestion; import android.app.timedetector.NetworkTimeSuggestion; -import android.app.timedetector.PhoneTimeSuggestion; +import android.app.timedetector.TelephonyTimeSuggestion; import android.content.ContentResolver; import android.content.Context; import android.database.ContentObserver; @@ -94,11 +94,11 @@ public final class TimeDetectorService extends ITimeDetectorService.Stub { } @Override - public void suggestPhoneTime(@NonNull PhoneTimeSuggestion timeSignal) { - enforceSuggestPhoneTimePermission(); + public void suggestTelephonyTime(@NonNull TelephonyTimeSuggestion timeSignal) { + enforceSuggestTelephonyTimePermission(); Objects.requireNonNull(timeSignal); - mHandler.post(() -> mTimeDetectorStrategy.suggestPhoneTime(timeSignal)); + mHandler.post(() -> mTimeDetectorStrategy.suggestTelephonyTime(timeSignal)); } @Override @@ -131,10 +131,10 @@ public final class TimeDetectorService extends ITimeDetectorService.Stub { mTimeDetectorStrategy.dump(pw, args); } - private void enforceSuggestPhoneTimePermission() { + private void enforceSuggestTelephonyTimePermission() { mContext.enforceCallingPermission( - android.Manifest.permission.SUGGEST_PHONE_TIME_AND_ZONE, - "suggest phone time and time zone"); + android.Manifest.permission.SUGGEST_TELEPHONY_TIME_AND_ZONE, + "suggest telephony time and time zone"); } private void enforceSuggestManualTimePermission() { diff --git a/services/core/java/com/android/server/timedetector/TimeDetectorStrategy.java b/services/core/java/com/android/server/timedetector/TimeDetectorStrategy.java index a7c3b4dad552..a5fba4e6ba49 100644 --- a/services/core/java/com/android/server/timedetector/TimeDetectorStrategy.java +++ b/services/core/java/com/android/server/timedetector/TimeDetectorStrategy.java @@ -20,7 +20,7 @@ import android.annotation.NonNull; import android.annotation.Nullable; import android.app.timedetector.ManualTimeSuggestion; import android.app.timedetector.NetworkTimeSuggestion; -import android.app.timedetector.PhoneTimeSuggestion; +import android.app.timedetector.TelephonyTimeSuggestion; import android.os.TimestampedValue; import java.io.PrintWriter; @@ -78,7 +78,7 @@ public interface TimeDetectorStrategy { void initialize(@NonNull Callback callback); /** Process the suggested time from telephony sources. */ - void suggestPhoneTime(@NonNull PhoneTimeSuggestion timeSuggestion); + void suggestTelephonyTime(@NonNull TelephonyTimeSuggestion timeSuggestion); /** Process the suggested manually entered time. */ void suggestManualTime(@NonNull ManualTimeSuggestion timeSuggestion); diff --git a/services/core/java/com/android/server/timedetector/TimeDetectorStrategyImpl.java b/services/core/java/com/android/server/timedetector/TimeDetectorStrategyImpl.java index 19435ee16660..8c54fa95e04b 100644 --- a/services/core/java/com/android/server/timedetector/TimeDetectorStrategyImpl.java +++ b/services/core/java/com/android/server/timedetector/TimeDetectorStrategyImpl.java @@ -22,7 +22,7 @@ import android.annotation.Nullable; import android.app.AlarmManager; import android.app.timedetector.ManualTimeSuggestion; import android.app.timedetector.NetworkTimeSuggestion; -import android.app.timedetector.PhoneTimeSuggestion; +import android.app.timedetector.TelephonyTimeSuggestion; import android.os.TimestampedValue; import android.util.LocalLog; import android.util.Slog; @@ -38,9 +38,9 @@ import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; /** - * An implementation of {@link TimeDetectorStrategy} that passes phone and manual suggestions to - * {@link AlarmManager}. When there are multiple phone sources, the one with the lowest ID is used - * unless the data becomes too stale. + * An implementation of {@link TimeDetectorStrategy} that passes telephony and manual suggestions to + * {@link AlarmManager}. When there are multiple telephony sources, the one with the lowest ID is + * used unless the data becomes too stale. * * <p>Most public methods are marked synchronized to ensure thread safety around internal state. */ @@ -50,23 +50,26 @@ public final class TimeDetectorStrategyImpl implements TimeDetectorStrategy { private static final String LOG_TAG = "SimpleTimeDetectorStrategy"; /** A score value used to indicate "no score", either due to validation failure or age. */ - private static final int PHONE_INVALID_SCORE = -1; - /** The number of buckets phone suggestions can be put in by age. */ - private static final int PHONE_BUCKET_COUNT = 24; + private static final int TELEPHONY_INVALID_SCORE = -1; + /** The number of buckets telephony suggestions can be put in by age. */ + private static final int TELEPHONY_BUCKET_COUNT = 24; /** Each bucket is this size. All buckets are equally sized. */ @VisibleForTesting - static final int PHONE_BUCKET_SIZE_MILLIS = 60 * 60 * 1000; - /** Phone and network suggestions older than this value are considered too old to be used. */ + static final int TELEPHONY_BUCKET_SIZE_MILLIS = 60 * 60 * 1000; + /** + * Telephony and network suggestions older than this value are considered too old to be used. + */ @VisibleForTesting - static final long MAX_UTC_TIME_AGE_MILLIS = PHONE_BUCKET_COUNT * PHONE_BUCKET_SIZE_MILLIS; + static final long MAX_UTC_TIME_AGE_MILLIS = + TELEPHONY_BUCKET_COUNT * TELEPHONY_BUCKET_SIZE_MILLIS; - @IntDef({ ORIGIN_PHONE, ORIGIN_MANUAL, ORIGIN_NETWORK }) + @IntDef({ ORIGIN_TELEPHONY, ORIGIN_MANUAL, ORIGIN_NETWORK }) @Retention(RetentionPolicy.SOURCE) public @interface Origin {} /** Used when a time value originated from a telephony signal. */ @Origin - private static final int ORIGIN_PHONE = 1; + private static final int ORIGIN_TELEPHONY = 1; /** Used when a time value originated from a user / manual settings. */ @Origin @@ -83,7 +86,9 @@ public final class TimeDetectorStrategyImpl implements TimeDetectorStrategy { */ private static final long SYSTEM_CLOCK_PARANOIA_THRESHOLD_MILLIS = 2 * 1000; - /** The number of previous phone suggestions to keep for each ID (for use during debugging). */ + /** + * The number of previous telephony suggestions to keep for each ID (for use during debugging). + */ private static final int KEEP_SUGGESTION_HISTORY_SIZE = 30; // A log for changes made to the system clock and why. @@ -106,7 +111,7 @@ public final class TimeDetectorStrategyImpl implements TimeDetectorStrategy { * stable. */ @GuardedBy("this") - private final ArrayMapWithHistory<Integer, PhoneTimeSuggestion> mSuggestionBySlotIndex = + private final ArrayMapWithHistory<Integer, TelephonyTimeSuggestion> mSuggestionBySlotIndex = new ArrayMapWithHistory<>(KEEP_SUGGESTION_HISTORY_SIZE); @GuardedBy("this") @@ -144,7 +149,7 @@ public final class TimeDetectorStrategyImpl implements TimeDetectorStrategy { } @Override - public synchronized void suggestPhoneTime(@NonNull PhoneTimeSuggestion timeSuggestion) { + public synchronized void suggestTelephonyTime(@NonNull TelephonyTimeSuggestion timeSuggestion) { // Empty time suggestion means that telephony network connectivity has been lost. // The passage of time is relentless, and we don't expect our users to use a time machine, // so we can continue relying on previous suggestions when we lose connectivity. This is @@ -157,13 +162,13 @@ public final class TimeDetectorStrategyImpl implements TimeDetectorStrategy { // Perform validation / input filtering and record the validated suggestion against the // slotIndex. - if (!validateAndStorePhoneSuggestion(timeSuggestion)) { + if (!validateAndStoreTelephonySuggestion(timeSuggestion)) { return; } // Now perform auto time detection. The new suggestion may be used to modify the system // clock. - String reason = "New phone time suggested. timeSuggestion=" + timeSuggestion; + String reason = "New telephony time suggested. timeSuggestion=" + timeSuggestion; doAutoTimeDetection(reason); } @@ -201,7 +206,7 @@ public final class TimeDetectorStrategyImpl implements TimeDetectorStrategy { mTimeChangesLog.dump(ipw); ipw.decreaseIndent(); // level 2 - ipw.println("Phone suggestion history:"); + ipw.println("Telephony suggestion history:"); ipw.increaseIndent(); // level 2 mSuggestionBySlotIndex.dump(ipw); ipw.decreaseIndent(); // level 2 @@ -216,7 +221,8 @@ public final class TimeDetectorStrategyImpl implements TimeDetectorStrategy { } @GuardedBy("this") - private boolean validateAndStorePhoneSuggestion(@NonNull PhoneTimeSuggestion suggestion) { + private boolean validateAndStoreTelephonySuggestion( + @NonNull TelephonyTimeSuggestion suggestion) { TimestampedValue<Long> newUtcTime = suggestion.getUtcTime(); if (!validateSuggestionTime(newUtcTime, suggestion)) { // There's probably nothing useful we can do: elsewhere we assume that reference @@ -225,7 +231,7 @@ public final class TimeDetectorStrategyImpl implements TimeDetectorStrategy { } int slotIndex = suggestion.getSlotIndex(); - PhoneTimeSuggestion previousSuggestion = mSuggestionBySlotIndex.get(slotIndex); + TelephonyTimeSuggestion previousSuggestion = mSuggestionBySlotIndex.get(slotIndex); if (previousSuggestion != null) { // We can log / discard suggestions with obvious issues with the reference time clock. if (previousSuggestion.getUtcTime() == null @@ -241,7 +247,7 @@ public final class TimeDetectorStrategyImpl implements TimeDetectorStrategy { newUtcTime, previousSuggestion.getUtcTime()); if (referenceTimeDifference < 0) { // The reference time is before the previously received suggestion. Ignore it. - Slog.w(LOG_TAG, "Out of order phone suggestion received." + Slog.w(LOG_TAG, "Out of order telephony suggestion received." + " referenceTimeDifference=" + referenceTimeDifference + " previousSuggestion=" + previousSuggestion + " suggestion=" + suggestion); @@ -282,18 +288,18 @@ public final class TimeDetectorStrategyImpl implements TimeDetectorStrategy { // Android devices currently prioritize any telephony over network signals. There are // carrier compliance tests that would need to be changed before we could ignore NITZ or - // prefer NTP generally. This check is cheap on devices without phone hardware. - PhoneTimeSuggestion bestPhoneSuggestion = findBestPhoneSuggestion(); - if (bestPhoneSuggestion != null) { - final TimestampedValue<Long> newUtcTime = bestPhoneSuggestion.getUtcTime(); - String cause = "Found good phone suggestion." - + ", bestPhoneSuggestion=" + bestPhoneSuggestion + // prefer NTP generally. This check is cheap on devices without telephony hardware. + TelephonyTimeSuggestion bestTelephonySuggestion = findBestTelephonySuggestion(); + if (bestTelephonySuggestion != null) { + final TimestampedValue<Long> newUtcTime = bestTelephonySuggestion.getUtcTime(); + String cause = "Found good telephony suggestion." + + ", bestTelephonySuggestion=" + bestTelephonySuggestion + ", detectionReason=" + detectionReason; - setSystemClockIfRequired(ORIGIN_PHONE, newUtcTime, cause); + setSystemClockIfRequired(ORIGIN_TELEPHONY, newUtcTime, cause); return; } - // There is no good phone suggestion, try network. + // There is no good telephony suggestion, try network. NetworkTimeSuggestion networkSuggestion = findLatestValidNetworkSuggestion(); if (networkSuggestion != null) { final TimestampedValue<Long> newUtcTime = networkSuggestion.getUtcTime(); @@ -305,18 +311,18 @@ public final class TimeDetectorStrategyImpl implements TimeDetectorStrategy { } if (DBG) { - Slog.d(LOG_TAG, "Could not determine time: No best phone or network suggestion." + Slog.d(LOG_TAG, "Could not determine time: No best telephony or network suggestion." + " detectionReason=" + detectionReason); } } @GuardedBy("this") @Nullable - private PhoneTimeSuggestion findBestPhoneSuggestion() { + private TelephonyTimeSuggestion findBestTelephonySuggestion() { long elapsedRealtimeMillis = mCallback.elapsedRealtimeMillis(); - // Phone time suggestions are assumed to be derived from NITZ or NITZ-like signals. These - // have a number of limitations: + // Telephony time suggestions are assumed to be derived from NITZ or NITZ-like signals. + // These have a number of limitations: // 1) No guarantee of accuracy ("accuracy of the time information is in the order of // minutes") [1] // 2) No guarantee of regular signals ("dependent on the handset crossing radio network @@ -335,8 +341,8 @@ public final class TimeDetectorStrategyImpl implements TimeDetectorStrategy { // For simplicity, we try to value recency, then consistency of slotIndex. // // The heuristic works as follows: - // Recency: The most recent suggestion from each phone is scored. The score is based on a - // discrete age bucket, i.e. so signals received around the same time will be in the same + // Recency: The most recent suggestion from each slotIndex is scored. The score is based on + // a discrete age bucket, i.e. so signals received around the same time will be in the same // bucket, thus applying a loose reference time ordering. The suggestion with the highest // score is used. // Consistency: If there a multiple suggestions with the same score, the suggestion with the @@ -345,11 +351,11 @@ public final class TimeDetectorStrategyImpl implements TimeDetectorStrategy { // In the trivial case with a single ID this will just mean that the latest received // suggestion is used. - PhoneTimeSuggestion bestSuggestion = null; - int bestScore = PHONE_INVALID_SCORE; + TelephonyTimeSuggestion bestSuggestion = null; + int bestScore = TELEPHONY_INVALID_SCORE; for (int i = 0; i < mSuggestionBySlotIndex.size(); i++) { Integer slotIndex = mSuggestionBySlotIndex.keyAt(i); - PhoneTimeSuggestion candidateSuggestion = mSuggestionBySlotIndex.valueAt(i); + TelephonyTimeSuggestion candidateSuggestion = mSuggestionBySlotIndex.valueAt(i); if (candidateSuggestion == null) { // Unexpected - null suggestions should never be stored. Slog.w(LOG_TAG, "Latest suggestion unexpectedly null for slotIndex." @@ -362,8 +368,9 @@ public final class TimeDetectorStrategyImpl implements TimeDetectorStrategy { continue; } - int candidateScore = scorePhoneSuggestion(elapsedRealtimeMillis, candidateSuggestion); - if (candidateScore == PHONE_INVALID_SCORE) { + int candidateScore = + scoreTelephonySuggestion(elapsedRealtimeMillis, candidateSuggestion); + if (candidateScore == TELEPHONY_INVALID_SCORE) { // Expected: This means the suggestion is obviously invalid or just too old. continue; } @@ -384,8 +391,8 @@ public final class TimeDetectorStrategyImpl implements TimeDetectorStrategy { return bestSuggestion; } - private static int scorePhoneSuggestion( - long elapsedRealtimeMillis, @NonNull PhoneTimeSuggestion timeSuggestion) { + private static int scoreTelephonySuggestion( + long elapsedRealtimeMillis, @NonNull TelephonyTimeSuggestion timeSuggestion) { // Validate first. TimestampedValue<Long> utcTime = timeSuggestion.getUtcTime(); @@ -393,21 +400,21 @@ public final class TimeDetectorStrategyImpl implements TimeDetectorStrategy { Slog.w(LOG_TAG, "Existing suggestion found to be invalid " + " elapsedRealtimeMillis=" + elapsedRealtimeMillis + ", timeSuggestion=" + timeSuggestion); - return PHONE_INVALID_SCORE; + return TELEPHONY_INVALID_SCORE; } // The score is based on the age since receipt. Suggestions are bucketed so two // suggestions in the same bucket from different slotIndexs are scored the same. long ageMillis = elapsedRealtimeMillis - utcTime.getReferenceTimeMillis(); - // Turn the age into a discrete value: 0 <= bucketIndex < PHONE_BUCKET_COUNT. - int bucketIndex = (int) (ageMillis / PHONE_BUCKET_SIZE_MILLIS); - if (bucketIndex >= PHONE_BUCKET_COUNT) { - return PHONE_INVALID_SCORE; + // Turn the age into a discrete value: 0 <= bucketIndex < TELEPHONY_BUCKET_COUNT. + int bucketIndex = (int) (ageMillis / TELEPHONY_BUCKET_SIZE_MILLIS); + if (bucketIndex >= TELEPHONY_BUCKET_COUNT) { + return TELEPHONY_INVALID_SCORE; } // We want the lowest bucket index to have the highest score. 0 > score >= BUCKET_COUNT. - return PHONE_BUCKET_COUNT - bucketIndex; + return TELEPHONY_BUCKET_COUNT - bucketIndex; } /** Returns the latest, valid, network suggestion. Returns {@code null} if there isn't one. */ @@ -537,13 +544,13 @@ public final class TimeDetectorStrategyImpl implements TimeDetectorStrategy { } /** - * Returns the current best phone suggestion. Not intended for general use: it is used during - * tests to check strategy behavior. + * Returns the current best telephony suggestion. Not intended for general use: it is used + * during tests to check strategy behavior. */ @VisibleForTesting @Nullable - public synchronized PhoneTimeSuggestion findBestPhoneSuggestionForTests() { - return findBestPhoneSuggestion(); + public synchronized TelephonyTimeSuggestion findBestTelephonySuggestionForTests() { + return findBestTelephonySuggestion(); } /** @@ -561,7 +568,7 @@ public final class TimeDetectorStrategyImpl implements TimeDetectorStrategy { */ @VisibleForTesting @Nullable - public synchronized PhoneTimeSuggestion getLatestPhoneSuggestion(int slotIndex) { + public synchronized TelephonyTimeSuggestion getLatestTelephonySuggestion(int slotIndex) { return mSuggestionBySlotIndex.get(slotIndex); } diff --git a/services/core/java/com/android/server/timezonedetector/TimeZoneDetectorService.java b/services/core/java/com/android/server/timezonedetector/TimeZoneDetectorService.java index 381ee101e125..57b6ec9062a8 100644 --- a/services/core/java/com/android/server/timezonedetector/TimeZoneDetectorService.java +++ b/services/core/java/com/android/server/timezonedetector/TimeZoneDetectorService.java @@ -20,7 +20,7 @@ import android.annotation.NonNull; import android.annotation.Nullable; import android.app.timezonedetector.ITimeZoneDetectorService; import android.app.timezonedetector.ManualTimeZoneSuggestion; -import android.app.timezonedetector.PhoneTimeZoneSuggestion; +import android.app.timezonedetector.TelephonyTimeZoneSuggestion; import android.content.ContentResolver; import android.content.Context; import android.database.ContentObserver; @@ -101,11 +101,11 @@ public final class TimeZoneDetectorService extends ITimeZoneDetectorService.Stub } @Override - public void suggestPhoneTimeZone(@NonNull PhoneTimeZoneSuggestion timeZoneSuggestion) { - enforceSuggestPhoneTimeZonePermission(); + public void suggestTelephonyTimeZone(@NonNull TelephonyTimeZoneSuggestion timeZoneSuggestion) { + enforceSuggestTelephonyTimeZonePermission(); Objects.requireNonNull(timeZoneSuggestion); - mHandler.post(() -> mTimeZoneDetectorStrategy.suggestPhoneTimeZone(timeZoneSuggestion)); + mHandler.post(() -> mTimeZoneDetectorStrategy.suggestTelephonyTimeZone(timeZoneSuggestion)); } @Override @@ -122,10 +122,10 @@ public final class TimeZoneDetectorService extends ITimeZoneDetectorService.Stub mHandler.post(mTimeZoneDetectorStrategy::handleAutoTimeZoneDetectionChanged); } - private void enforceSuggestPhoneTimeZonePermission() { + private void enforceSuggestTelephonyTimeZonePermission() { mContext.enforceCallingPermission( - android.Manifest.permission.SUGGEST_PHONE_TIME_AND_ZONE, - "suggest phone time and time zone"); + android.Manifest.permission.SUGGEST_TELEPHONY_TIME_AND_ZONE, + "suggest telephony time and time zone"); } private void enforceSuggestManualTimeZonePermission() { diff --git a/services/core/java/com/android/server/timezonedetector/TimeZoneDetectorStrategy.java b/services/core/java/com/android/server/timezonedetector/TimeZoneDetectorStrategy.java index 1d439e93a1f7..0eb27cc5cff0 100644 --- a/services/core/java/com/android/server/timezonedetector/TimeZoneDetectorStrategy.java +++ b/services/core/java/com/android/server/timezonedetector/TimeZoneDetectorStrategy.java @@ -17,7 +17,7 @@ package com.android.server.timezonedetector; import android.annotation.NonNull; import android.app.timezonedetector.ManualTimeZoneSuggestion; -import android.app.timezonedetector.PhoneTimeZoneSuggestion; +import android.app.timezonedetector.TelephonyTimeZoneSuggestion; import java.io.PrintWriter; @@ -38,13 +38,13 @@ public interface TimeZoneDetectorStrategy { /** * Suggests a time zone for the device, or withdraws a previous suggestion if - * {@link PhoneTimeZoneSuggestion#getZoneId()} is {@code null}. The suggestion is scoped to a - * specific {@link PhoneTimeZoneSuggestion#getSlotIndex() phone}. - * See {@link PhoneTimeZoneSuggestion} for an explanation of the metadata associated with a + * {@link TelephonyTimeZoneSuggestion#getZoneId()} is {@code null}. The suggestion is scoped to + * a specific {@link TelephonyTimeZoneSuggestion#getSlotIndex() slotIndex}. + * See {@link TelephonyTimeZoneSuggestion} for an explanation of the metadata associated with a * suggestion. The strategy uses suggestions to decide whether to modify the device's time zone * setting and what to set it to. */ - void suggestPhoneTimeZone(@NonNull PhoneTimeZoneSuggestion suggestion); + void suggestTelephonyTimeZone(@NonNull TelephonyTimeZoneSuggestion suggestion); /** * Called when there has been a change to the automatic time zone detection setting. diff --git a/services/core/java/com/android/server/timezonedetector/TimeZoneDetectorStrategyImpl.java b/services/core/java/com/android/server/timezonedetector/TimeZoneDetectorStrategyImpl.java index f85f9fe998a5..652dbe153680 100644 --- a/services/core/java/com/android/server/timezonedetector/TimeZoneDetectorStrategyImpl.java +++ b/services/core/java/com/android/server/timezonedetector/TimeZoneDetectorStrategyImpl.java @@ -15,17 +15,17 @@ */ package com.android.server.timezonedetector; -import static android.app.timezonedetector.PhoneTimeZoneSuggestion.MATCH_TYPE_EMULATOR_ZONE_ID; -import static android.app.timezonedetector.PhoneTimeZoneSuggestion.MATCH_TYPE_TEST_NETWORK_OFFSET_ONLY; -import static android.app.timezonedetector.PhoneTimeZoneSuggestion.QUALITY_MULTIPLE_ZONES_WITH_DIFFERENT_OFFSETS; -import static android.app.timezonedetector.PhoneTimeZoneSuggestion.QUALITY_MULTIPLE_ZONES_WITH_SAME_OFFSET; -import static android.app.timezonedetector.PhoneTimeZoneSuggestion.QUALITY_SINGLE_ZONE; +import static android.app.timezonedetector.TelephonyTimeZoneSuggestion.MATCH_TYPE_EMULATOR_ZONE_ID; +import static android.app.timezonedetector.TelephonyTimeZoneSuggestion.MATCH_TYPE_TEST_NETWORK_OFFSET_ONLY; +import static android.app.timezonedetector.TelephonyTimeZoneSuggestion.QUALITY_MULTIPLE_ZONES_WITH_DIFFERENT_OFFSETS; +import static android.app.timezonedetector.TelephonyTimeZoneSuggestion.QUALITY_MULTIPLE_ZONES_WITH_SAME_OFFSET; +import static android.app.timezonedetector.TelephonyTimeZoneSuggestion.QUALITY_SINGLE_ZONE; import android.annotation.IntDef; import android.annotation.NonNull; import android.annotation.Nullable; import android.app.timezonedetector.ManualTimeZoneSuggestion; -import android.app.timezonedetector.PhoneTimeZoneSuggestion; +import android.app.timezonedetector.TelephonyTimeZoneSuggestion; import android.content.Context; import android.util.LocalLog; import android.util.Slog; @@ -44,11 +44,11 @@ import java.util.Objects; * suggestions. Suggestions are acted on or ignored as needed, dependent on the current "auto time * zone detection" setting. * - * <p>For automatic detection it keeps track of the most recent suggestion from each phone it uses - * the best suggestion based on a scoring algorithm. If several phones provide the same score then - * the phone with the lowest numeric ID "wins". If the situation changes and it is no longer - * possible to be confident about the time zone, phones must submit an empty suggestion in order to - * "withdraw" their previous suggestion. + * <p>For automatic detection, it keeps track of the most recent telephony suggestion from each + * slotIndex and it uses the best suggestion based on a scoring algorithm. If several slotIndexes + * provide the same score then the slotIndex with the lowest numeric value "wins". If the situation + * changes and it is no longer possible to be confident about the time zone, slotIndexes must have + * an empty suggestion submitted in order to "withdraw" their previous suggestion. * * <p>Most public methods are marked synchronized to ensure thread safety around internal state. */ @@ -91,28 +91,28 @@ public final class TimeZoneDetectorStrategyImpl implements TimeZoneDetectorStrat private static final String LOG_TAG = "TimeZoneDetectorStrategy"; private static final boolean DBG = false; - @IntDef({ ORIGIN_PHONE, ORIGIN_MANUAL }) + @IntDef({ ORIGIN_TELEPHONY, ORIGIN_MANUAL }) @Retention(RetentionPolicy.SOURCE) public @interface Origin {} /** Used when a time value originated from a telephony signal. */ @Origin - private static final int ORIGIN_PHONE = 1; + private static final int ORIGIN_TELEPHONY = 1; /** Used when a time value originated from a user / manual settings. */ @Origin private static final int ORIGIN_MANUAL = 2; /** - * The abstract score for an empty or invalid phone suggestion. + * The abstract score for an empty or invalid telephony suggestion. * - * Used to score phone suggestions where there is no zone. + * Used to score telephony suggestions where there is no zone. */ @VisibleForTesting - public static final int PHONE_SCORE_NONE = 0; + public static final int TELEPHONY_SCORE_NONE = 0; /** - * The abstract score for a low quality phone suggestion. + * The abstract score for a low quality telephony suggestion. * * Used to score suggestions where: * The suggested zone ID is one of several possibilities, and the possibilities have different @@ -121,10 +121,10 @@ public final class TimeZoneDetectorStrategyImpl implements TimeZoneDetectorStrat * You would have to be quite desperate to want to use this choice. */ @VisibleForTesting - public static final int PHONE_SCORE_LOW = 1; + public static final int TELEPHONY_SCORE_LOW = 1; /** - * The abstract score for a medium quality phone suggestion. + * The abstract score for a medium quality telephony suggestion. * * Used for: * The suggested zone ID is one of several possibilities but at least the possibilities have the @@ -132,36 +132,38 @@ public final class TimeZoneDetectorStrategyImpl implements TimeZoneDetectorStrat * switch to DST at the wrong time and (for example) their calendar events. */ @VisibleForTesting - public static final int PHONE_SCORE_MEDIUM = 2; + public static final int TELEPHONY_SCORE_MEDIUM = 2; /** - * The abstract score for a high quality phone suggestion. + * The abstract score for a high quality telephony suggestion. * * Used for: * The suggestion was for one zone ID and the answer was unambiguous and likely correct given * the info available. */ @VisibleForTesting - public static final int PHONE_SCORE_HIGH = 3; + public static final int TELEPHONY_SCORE_HIGH = 3; /** - * The abstract score for a highest quality phone suggestion. + * The abstract score for a highest quality telephony suggestion. * * Used for: * Suggestions that must "win" because they constitute test or emulator zone ID. */ @VisibleForTesting - public static final int PHONE_SCORE_HIGHEST = 4; + public static final int TELEPHONY_SCORE_HIGHEST = 4; /** - * The threshold at which phone suggestions are good enough to use to set the device's time + * The threshold at which telephony suggestions are good enough to use to set the device's time * zone. */ @VisibleForTesting - public static final int PHONE_SCORE_USAGE_THRESHOLD = PHONE_SCORE_MEDIUM; + public static final int TELEPHONY_SCORE_USAGE_THRESHOLD = TELEPHONY_SCORE_MEDIUM; - /** The number of previous phone suggestions to keep for each ID (for use during debugging). */ - private static final int KEEP_PHONE_SUGGESTION_HISTORY_SIZE = 30; + /** + * The number of previous telephony suggestions to keep for each ID (for use during debugging). + */ + private static final int KEEP_TELEPHONY_SUGGESTION_HISTORY_SIZE = 30; @NonNull private final Callback mCallback; @@ -174,13 +176,14 @@ public final class TimeZoneDetectorStrategyImpl implements TimeZoneDetectorStrat private final LocalLog mTimeZoneChangesLog = new LocalLog(30, false /* useLocalTimestamps */); /** - * A mapping from slotIndex to a phone time zone suggestion. We typically expect one or two - * mappings: devices will have a small number of telephony devices and slotIndexs are assumed to - * be stable. + * A mapping from slotIndex to a telephony time zone suggestion. We typically expect one or two + * mappings: devices will have a small number of telephony devices and slotIndexes are assumed + * to be stable. */ @GuardedBy("this") - private ArrayMapWithHistory<Integer, QualifiedPhoneTimeZoneSuggestion> mSuggestionBySlotIndex = - new ArrayMapWithHistory<>(KEEP_PHONE_SUGGESTION_HISTORY_SIZE); + private ArrayMapWithHistory<Integer, QualifiedTelephonyTimeZoneSuggestion> + mSuggestionBySlotIndex = + new ArrayMapWithHistory<>(KEEP_TELEPHONY_SUGGESTION_HISTORY_SIZE); /** * Creates a new instance of {@link TimeZoneDetectorStrategyImpl}. @@ -205,42 +208,43 @@ public final class TimeZoneDetectorStrategyImpl implements TimeZoneDetectorStrat } @Override - public synchronized void suggestPhoneTimeZone(@NonNull PhoneTimeZoneSuggestion suggestion) { + public synchronized void suggestTelephonyTimeZone( + @NonNull TelephonyTimeZoneSuggestion suggestion) { if (DBG) { - Slog.d(LOG_TAG, "Phone suggestion received. newSuggestion=" + suggestion); + Slog.d(LOG_TAG, "Telephony suggestion received. newSuggestion=" + suggestion); } Objects.requireNonNull(suggestion); // Score the suggestion. - int score = scorePhoneSuggestion(suggestion); - QualifiedPhoneTimeZoneSuggestion scoredSuggestion = - new QualifiedPhoneTimeZoneSuggestion(suggestion, score); + int score = scoreTelephonySuggestion(suggestion); + QualifiedTelephonyTimeZoneSuggestion scoredSuggestion = + new QualifiedTelephonyTimeZoneSuggestion(suggestion, score); // Store the suggestion against the correct slotIndex. mSuggestionBySlotIndex.put(suggestion.getSlotIndex(), scoredSuggestion); // Now perform auto time zone detection. The new suggestion may be used to modify the time // zone setting. - String reason = "New phone time suggested. suggestion=" + suggestion; + String reason = "New telephony time suggested. suggestion=" + suggestion; doAutoTimeZoneDetection(reason); } - private static int scorePhoneSuggestion(@NonNull PhoneTimeZoneSuggestion suggestion) { + private static int scoreTelephonySuggestion(@NonNull TelephonyTimeZoneSuggestion suggestion) { int score; if (suggestion.getZoneId() == null) { - score = PHONE_SCORE_NONE; + score = TELEPHONY_SCORE_NONE; } else if (suggestion.getMatchType() == MATCH_TYPE_TEST_NETWORK_OFFSET_ONLY || suggestion.getMatchType() == MATCH_TYPE_EMULATOR_ZONE_ID) { // Handle emulator / test cases : These suggestions should always just be used. - score = PHONE_SCORE_HIGHEST; + score = TELEPHONY_SCORE_HIGHEST; } else if (suggestion.getQuality() == QUALITY_SINGLE_ZONE) { - score = PHONE_SCORE_HIGH; + score = TELEPHONY_SCORE_HIGH; } else if (suggestion.getQuality() == QUALITY_MULTIPLE_ZONES_WITH_SAME_OFFSET) { // The suggestion may be wrong, but at least the offset should be correct. - score = PHONE_SCORE_MEDIUM; + score = TELEPHONY_SCORE_MEDIUM; } else if (suggestion.getQuality() == QUALITY_MULTIPLE_ZONES_WITH_DIFFERENT_OFFSETS) { // The suggestion has a good chance of being wrong. - score = PHONE_SCORE_LOW; + score = TELEPHONY_SCORE_LOW; } else { throw new AssertionError(); } @@ -248,9 +252,9 @@ public final class TimeZoneDetectorStrategyImpl implements TimeZoneDetectorStrat } /** - * Finds the best available time zone suggestion from all phones. If it is high-enough quality - * and automatic time zone detection is enabled then it will be set on the device. The outcome - * can be that this strategy becomes / remains un-opinionated and nothing is set. + * Finds the best available time zone suggestion from all slotIndexes. If it is high-enough + * quality and automatic time zone detection is enabled then it will be set on the device. The + * outcome can be that this strategy becomes / remains un-opinionated and nothing is set. */ @GuardedBy("this") private void doAutoTimeZoneDetection(@NonNull String detectionReason) { @@ -259,35 +263,37 @@ public final class TimeZoneDetectorStrategyImpl implements TimeZoneDetectorStrat return; } - QualifiedPhoneTimeZoneSuggestion bestPhoneSuggestion = findBestPhoneSuggestion(); + QualifiedTelephonyTimeZoneSuggestion bestTelephonySuggestion = + findBestTelephonySuggestion(); // Work out what to do with the best suggestion. - if (bestPhoneSuggestion == null) { - // There is no phone suggestion available at all. Become un-opinionated. + if (bestTelephonySuggestion == null) { + // There is no telephony suggestion available at all. Become un-opinionated. if (DBG) { - Slog.d(LOG_TAG, "Could not determine time zone: No best phone suggestion." + Slog.d(LOG_TAG, "Could not determine time zone: No best telephony suggestion." + " detectionReason=" + detectionReason); } return; } // Special case handling for uninitialized devices. This should only happen once. - String newZoneId = bestPhoneSuggestion.suggestion.getZoneId(); + String newZoneId = bestTelephonySuggestion.suggestion.getZoneId(); if (newZoneId != null && !mCallback.isDeviceTimeZoneInitialized()) { String cause = "Device has no time zone set. Attempting to set the device to the best" + " available suggestion." - + " bestPhoneSuggestion=" + bestPhoneSuggestion + + " bestTelephonySuggestion=" + bestTelephonySuggestion + ", detectionReason=" + detectionReason; Slog.i(LOG_TAG, cause); - setDeviceTimeZoneIfRequired(ORIGIN_PHONE, newZoneId, cause); + setDeviceTimeZoneIfRequired(ORIGIN_TELEPHONY, newZoneId, cause); return; } - boolean suggestionGoodEnough = bestPhoneSuggestion.score >= PHONE_SCORE_USAGE_THRESHOLD; + boolean suggestionGoodEnough = + bestTelephonySuggestion.score >= TELEPHONY_SCORE_USAGE_THRESHOLD; if (!suggestionGoodEnough) { if (DBG) { Slog.d(LOG_TAG, "Best suggestion not good enough." - + " bestPhoneSuggestion=" + bestPhoneSuggestion + + " bestTelephonySuggestion=" + bestTelephonySuggestion + ", detectionReason=" + detectionReason); } return; @@ -297,16 +303,16 @@ public final class TimeZoneDetectorStrategyImpl implements TimeZoneDetectorStrat // zone ID. if (newZoneId == null) { Slog.w(LOG_TAG, "Empty zone suggestion scored higher than expected. This is an error:" - + " bestPhoneSuggestion=" + bestPhoneSuggestion + + " bestTelephonySuggestion=" + bestTelephonySuggestion + " detectionReason=" + detectionReason); return; } - String zoneId = bestPhoneSuggestion.suggestion.getZoneId(); + String zoneId = bestTelephonySuggestion.suggestion.getZoneId(); String cause = "Found good suggestion." - + ", bestPhoneSuggestion=" + bestPhoneSuggestion + + ", bestTelephonySuggestion=" + bestTelephonySuggestion + ", detectionReason=" + detectionReason; - setDeviceTimeZoneIfRequired(ORIGIN_PHONE, zoneId, cause); + setDeviceTimeZoneIfRequired(ORIGIN_TELEPHONY, zoneId, cause); } @GuardedBy("this") @@ -372,15 +378,15 @@ public final class TimeZoneDetectorStrategyImpl implements TimeZoneDetectorStrat @GuardedBy("this") @Nullable - private QualifiedPhoneTimeZoneSuggestion findBestPhoneSuggestion() { - QualifiedPhoneTimeZoneSuggestion bestSuggestion = null; + private QualifiedTelephonyTimeZoneSuggestion findBestTelephonySuggestion() { + QualifiedTelephonyTimeZoneSuggestion bestSuggestion = null; - // Iterate over the latest QualifiedPhoneTimeZoneSuggestion objects received for each phone - // and find the best. Note that we deliberately do not look at age: the caller can + // Iterate over the latest QualifiedTelephonyTimeZoneSuggestion objects received for each + // slotIndex and find the best. Note that we deliberately do not look at age: the caller can // rate-limit so age is not a strong indicator of confidence. Instead, the callers are // expected to withdraw suggestions they no longer have confidence in. for (int i = 0; i < mSuggestionBySlotIndex.size(); i++) { - QualifiedPhoneTimeZoneSuggestion candidateSuggestion = + QualifiedTelephonyTimeZoneSuggestion candidateSuggestion = mSuggestionBySlotIndex.valueAt(i); if (candidateSuggestion == null) { // Unexpected @@ -404,13 +410,13 @@ public final class TimeZoneDetectorStrategyImpl implements TimeZoneDetectorStrat } /** - * Returns the current best phone suggestion. Not intended for general use: it is used during - * tests to check strategy behavior. + * Returns the current best telephony suggestion. Not intended for general use: it is used + * during tests to check strategy behavior. */ @VisibleForTesting @Nullable - public synchronized QualifiedPhoneTimeZoneSuggestion findBestPhoneSuggestionForTests() { - return findBestPhoneSuggestion(); + public synchronized QualifiedTelephonyTimeZoneSuggestion findBestTelephonySuggestionForTests() { + return findBestTelephonySuggestion(); } @Override @@ -447,7 +453,7 @@ public final class TimeZoneDetectorStrategyImpl implements TimeZoneDetectorStrat mTimeZoneChangesLog.dump(ipw); ipw.decreaseIndent(); // level 2 - ipw.println("Phone suggestion history:"); + ipw.println("Telephony suggestion history:"); ipw.increaseIndent(); // level 2 mSuggestionBySlotIndex.dump(ipw); ipw.decreaseIndent(); // level 2 @@ -459,18 +465,19 @@ public final class TimeZoneDetectorStrategyImpl implements TimeZoneDetectorStrat * A method used to inspect strategy state during tests. Not intended for general use. */ @VisibleForTesting - public synchronized QualifiedPhoneTimeZoneSuggestion getLatestPhoneSuggestion(int slotIndex) { + public synchronized QualifiedTelephonyTimeZoneSuggestion getLatestTelephonySuggestion( + int slotIndex) { return mSuggestionBySlotIndex.get(slotIndex); } /** - * A {@link PhoneTimeZoneSuggestion} with additional qualifying metadata. + * A {@link TelephonyTimeZoneSuggestion} with additional qualifying metadata. */ @VisibleForTesting - public static class QualifiedPhoneTimeZoneSuggestion { + public static class QualifiedTelephonyTimeZoneSuggestion { @VisibleForTesting - public final PhoneTimeZoneSuggestion suggestion; + public final TelephonyTimeZoneSuggestion suggestion; /** * The score the suggestion has been given. This can be used to rank against other @@ -480,7 +487,8 @@ public final class TimeZoneDetectorStrategyImpl implements TimeZoneDetectorStrat public final int score; @VisibleForTesting - public QualifiedPhoneTimeZoneSuggestion(PhoneTimeZoneSuggestion suggestion, int score) { + public QualifiedTelephonyTimeZoneSuggestion( + TelephonyTimeZoneSuggestion suggestion, int score) { this.suggestion = suggestion; this.score = score; } @@ -493,7 +501,7 @@ public final class TimeZoneDetectorStrategyImpl implements TimeZoneDetectorStrat if (o == null || getClass() != o.getClass()) { return false; } - QualifiedPhoneTimeZoneSuggestion that = (QualifiedPhoneTimeZoneSuggestion) o; + QualifiedTelephonyTimeZoneSuggestion that = (QualifiedTelephonyTimeZoneSuggestion) o; return score == that.score && suggestion.equals(that.suggestion); } @@ -505,7 +513,7 @@ public final class TimeZoneDetectorStrategyImpl implements TimeZoneDetectorStrat @Override public String toString() { - return "QualifiedPhoneTimeZoneSuggestion{" + return "QualifiedTelephonyTimeZoneSuggestion{" + "suggestion=" + suggestion + ", score=" + score + '}'; diff --git a/services/tests/servicestests/src/com/android/server/timedetector/TimeDetectorServiceTest.java b/services/tests/servicestests/src/com/android/server/timedetector/TimeDetectorServiceTest.java index 218f43c9495d..2eeeb3ebaa2a 100644 --- a/services/tests/servicestests/src/com/android/server/timedetector/TimeDetectorServiceTest.java +++ b/services/tests/servicestests/src/com/android/server/timedetector/TimeDetectorServiceTest.java @@ -30,7 +30,7 @@ import static org.mockito.Mockito.when; import android.app.timedetector.ManualTimeSuggestion; import android.app.timedetector.NetworkTimeSuggestion; -import android.app.timedetector.PhoneTimeSuggestion; +import android.app.timedetector.TelephonyTimeSuggestion; import android.content.Context; import android.content.pm.PackageManager; import android.os.HandlerThread; @@ -80,35 +80,35 @@ public class TimeDetectorServiceTest { } @Test(expected = SecurityException.class) - public void testSuggestPhoneTime_withoutPermission() { + public void testSuggestTelephonyTime_withoutPermission() { doThrow(new SecurityException("Mock")) .when(mMockContext).enforceCallingPermission(anyString(), any()); - PhoneTimeSuggestion phoneTimeSuggestion = createPhoneTimeSuggestion(); + TelephonyTimeSuggestion timeSuggestion = createTelephonyTimeSuggestion(); try { - mTimeDetectorService.suggestPhoneTime(phoneTimeSuggestion); + mTimeDetectorService.suggestTelephonyTime(timeSuggestion); fail(); } finally { verify(mMockContext).enforceCallingPermission( - eq(android.Manifest.permission.SUGGEST_PHONE_TIME_AND_ZONE), + eq(android.Manifest.permission.SUGGEST_TELEPHONY_TIME_AND_ZONE), anyString()); } } @Test - public void testSuggestPhoneTime() throws Exception { + public void testSuggestTelephonyTime() throws Exception { doNothing().when(mMockContext).enforceCallingPermission(anyString(), any()); - PhoneTimeSuggestion phoneTimeSuggestion = createPhoneTimeSuggestion(); - mTimeDetectorService.suggestPhoneTime(phoneTimeSuggestion); + TelephonyTimeSuggestion timeSuggestion = createTelephonyTimeSuggestion(); + mTimeDetectorService.suggestTelephonyTime(timeSuggestion); mTestHandler.assertTotalMessagesEnqueued(1); verify(mMockContext).enforceCallingPermission( - eq(android.Manifest.permission.SUGGEST_PHONE_TIME_AND_ZONE), + eq(android.Manifest.permission.SUGGEST_TELEPHONY_TIME_AND_ZONE), anyString()); mTestHandler.waitForMessagesToBeProcessed(); - mStubbedTimeDetectorStrategy.verifySuggestPhoneTimeCalled(phoneTimeSuggestion); + mStubbedTimeDetectorStrategy.verifySuggestTelephonyTimeCalled(timeSuggestion); } @Test(expected = SecurityException.class) @@ -199,10 +199,10 @@ public class TimeDetectorServiceTest { mStubbedTimeDetectorStrategy.verifyHandleAutoTimeDetectionChangedCalled(); } - private static PhoneTimeSuggestion createPhoneTimeSuggestion() { + private static TelephonyTimeSuggestion createTelephonyTimeSuggestion() { int slotIndex = 1234; TimestampedValue<Long> timeValue = new TimestampedValue<>(100L, 1_000_000L); - return new PhoneTimeSuggestion.Builder(slotIndex) + return new TelephonyTimeSuggestion.Builder(slotIndex) .setUtcTime(timeValue) .build(); } @@ -220,7 +220,7 @@ public class TimeDetectorServiceTest { private static class StubbedTimeDetectorStrategy implements TimeDetectorStrategy { // Call tracking. - private PhoneTimeSuggestion mLastPhoneSuggestion; + private TelephonyTimeSuggestion mLastTelephonySuggestion; private ManualTimeSuggestion mLastManualSuggestion; private NetworkTimeSuggestion mLastNetworkSuggestion; private boolean mHandleAutoTimeDetectionChangedCalled; @@ -231,8 +231,8 @@ public class TimeDetectorServiceTest { } @Override - public void suggestPhoneTime(PhoneTimeSuggestion timeSuggestion) { - mLastPhoneSuggestion = timeSuggestion; + public void suggestTelephonyTime(TelephonyTimeSuggestion timeSuggestion) { + mLastTelephonySuggestion = timeSuggestion; } @Override @@ -256,15 +256,15 @@ public class TimeDetectorServiceTest { } void resetCallTracking() { - mLastPhoneSuggestion = null; + mLastTelephonySuggestion = null; mLastManualSuggestion = null; mLastNetworkSuggestion = null; mHandleAutoTimeDetectionChangedCalled = false; mDumpCalled = false; } - void verifySuggestPhoneTimeCalled(PhoneTimeSuggestion expectedSuggestion) { - assertEquals(expectedSuggestion, mLastPhoneSuggestion); + void verifySuggestTelephonyTimeCalled(TelephonyTimeSuggestion expectedSuggestion) { + assertEquals(expectedSuggestion, mLastTelephonySuggestion); } public void verifySuggestManualTimeCalled(ManualTimeSuggestion expectedSuggestion) { diff --git a/services/tests/servicestests/src/com/android/server/timedetector/TimeDetectorStrategyImplTest.java b/services/tests/servicestests/src/com/android/server/timedetector/TimeDetectorStrategyImplTest.java index d940a6a320f2..803b245889e7 100644 --- a/services/tests/servicestests/src/com/android/server/timedetector/TimeDetectorStrategyImplTest.java +++ b/services/tests/servicestests/src/com/android/server/timedetector/TimeDetectorStrategyImplTest.java @@ -24,7 +24,7 @@ import static org.junit.Assert.fail; import android.app.timedetector.ManualTimeSuggestion; import android.app.timedetector.NetworkTimeSuggestion; -import android.app.timedetector.PhoneTimeSuggestion; +import android.app.timedetector.TelephonyTimeSuggestion; import android.icu.util.Calendar; import android.icu.util.GregorianCalendar; import android.icu.util.TimeZone; @@ -52,7 +52,7 @@ public class TimeDetectorStrategyImplTest { */ private static final long ARBITRARY_TEST_TIME_MILLIS = createUtcTime(2018, 1, 1, 12, 0, 0); - private static final int ARBITRARY_PHONE_ID = 123456; + private static final int ARBITRARY_SLOT_INDEX = 123456; private Script mScript; @@ -62,51 +62,51 @@ public class TimeDetectorStrategyImplTest { } @Test - public void testSuggestPhoneTime_autoTimeEnabled() { + public void testSuggestTelephonyTime_autoTimeEnabled() { mScript.pokeFakeClocks(ARBITRARY_CLOCK_INITIALIZATION_INFO) .pokeAutoTimeDetectionEnabled(true); - int phoneId = ARBITRARY_PHONE_ID; + int slotIndex = ARBITRARY_SLOT_INDEX; long testTimeMillis = ARBITRARY_TEST_TIME_MILLIS; - PhoneTimeSuggestion timeSuggestion = - mScript.generatePhoneTimeSuggestion(phoneId, testTimeMillis); + TelephonyTimeSuggestion timeSuggestion = + mScript.generateTelephonyTimeSuggestion(slotIndex, testTimeMillis); mScript.simulateTimePassing() - .simulatePhoneTimeSuggestion(timeSuggestion); + .simulateTelephonyTimeSuggestion(timeSuggestion); long expectedSystemClockMillis = mScript.calculateTimeInMillisForNow(timeSuggestion.getUtcTime()); mScript.verifySystemClockWasSetAndResetCallTracking(expectedSystemClockMillis) - .assertLatestPhoneSuggestion(phoneId, timeSuggestion); + .assertLatestTelephonySuggestion(slotIndex, timeSuggestion); } @Test - public void testSuggestPhoneTime_emptySuggestionIgnored() { + public void testSuggestTelephonyTime_emptySuggestionIgnored() { mScript.pokeFakeClocks(ARBITRARY_CLOCK_INITIALIZATION_INFO) .pokeAutoTimeDetectionEnabled(true); - int phoneId = ARBITRARY_PHONE_ID; - PhoneTimeSuggestion timeSuggestion = - mScript.generatePhoneTimeSuggestion(phoneId, null); - mScript.simulatePhoneTimeSuggestion(timeSuggestion) + int slotIndex = ARBITRARY_SLOT_INDEX; + TelephonyTimeSuggestion timeSuggestion = + mScript.generateTelephonyTimeSuggestion(slotIndex, null); + mScript.simulateTelephonyTimeSuggestion(timeSuggestion) .verifySystemClockWasNotSetAndResetCallTracking() - .assertLatestPhoneSuggestion(phoneId, null); + .assertLatestTelephonySuggestion(slotIndex, null); } @Test - public void testSuggestPhoneTime_systemClockThreshold() { + public void testSuggestTelephonyTime_systemClockThreshold() { final int systemClockUpdateThresholdMillis = 1000; final int clockIncrementMillis = 100; mScript.pokeFakeClocks(ARBITRARY_CLOCK_INITIALIZATION_INFO) .pokeThresholds(systemClockUpdateThresholdMillis) .pokeAutoTimeDetectionEnabled(true); - int phoneId = ARBITRARY_PHONE_ID; + int slotIndex = ARBITRARY_SLOT_INDEX; // Send the first time signal. It should be used. { - PhoneTimeSuggestion timeSuggestion1 = - mScript.generatePhoneTimeSuggestion(phoneId, ARBITRARY_TEST_TIME_MILLIS); + TelephonyTimeSuggestion timeSuggestion1 = + mScript.generateTelephonyTimeSuggestion(slotIndex, ARBITRARY_TEST_TIME_MILLIS); // Increment the the device clocks to simulate the passage of time. mScript.simulateTimePassing(clockIncrementMillis); @@ -114,151 +114,151 @@ public class TimeDetectorStrategyImplTest { long expectedSystemClockMillis1 = mScript.calculateTimeInMillisForNow(timeSuggestion1.getUtcTime()); - mScript.simulatePhoneTimeSuggestion(timeSuggestion1) + mScript.simulateTelephonyTimeSuggestion(timeSuggestion1) .verifySystemClockWasSetAndResetCallTracking(expectedSystemClockMillis1) - .assertLatestPhoneSuggestion(phoneId, timeSuggestion1); + .assertLatestTelephonySuggestion(slotIndex, timeSuggestion1); } // Now send another time signal, but one that is too similar to the last one and should be // stored, but not used to set the system clock. { int underThresholdMillis = systemClockUpdateThresholdMillis - 1; - PhoneTimeSuggestion timeSuggestion2 = mScript.generatePhoneTimeSuggestion( - phoneId, mScript.peekSystemClockMillis() + underThresholdMillis); + TelephonyTimeSuggestion timeSuggestion2 = mScript.generateTelephonyTimeSuggestion( + slotIndex, mScript.peekSystemClockMillis() + underThresholdMillis); mScript.simulateTimePassing(clockIncrementMillis) - .simulatePhoneTimeSuggestion(timeSuggestion2) + .simulateTelephonyTimeSuggestion(timeSuggestion2) .verifySystemClockWasNotSetAndResetCallTracking() - .assertLatestPhoneSuggestion(phoneId, timeSuggestion2); + .assertLatestTelephonySuggestion(slotIndex, timeSuggestion2); } // Now send another time signal, but one that is on the threshold and so should be used. { - PhoneTimeSuggestion timeSuggestion3 = mScript.generatePhoneTimeSuggestion( - phoneId, + TelephonyTimeSuggestion timeSuggestion3 = mScript.generateTelephonyTimeSuggestion( + slotIndex, mScript.peekSystemClockMillis() + systemClockUpdateThresholdMillis); mScript.simulateTimePassing(clockIncrementMillis); long expectedSystemClockMillis3 = mScript.calculateTimeInMillisForNow(timeSuggestion3.getUtcTime()); - mScript.simulatePhoneTimeSuggestion(timeSuggestion3) + mScript.simulateTelephonyTimeSuggestion(timeSuggestion3) .verifySystemClockWasSetAndResetCallTracking(expectedSystemClockMillis3) - .assertLatestPhoneSuggestion(phoneId, timeSuggestion3); + .assertLatestTelephonySuggestion(slotIndex, timeSuggestion3); } } @Test - public void testSuggestPhoneTime_multiplePhoneIdsAndBucketing() { + public void testSuggestTelephonyTime_multipleSlotIndexsAndBucketing() { mScript.pokeFakeClocks(ARBITRARY_CLOCK_INITIALIZATION_INFO) .pokeAutoTimeDetectionEnabled(true); - // There are 2 phones in this test. Phone 2 has a different idea of the current time. - // phone1Id < phone2Id (which is important because the strategy uses the lowest ID when - // multiple phone suggestions are available. - int phone1Id = ARBITRARY_PHONE_ID; - int phone2Id = ARBITRARY_PHONE_ID + 1; - long phone1TimeMillis = ARBITRARY_TEST_TIME_MILLIS; - long phone2TimeMillis = ARBITRARY_TEST_TIME_MILLIS + Duration.ofDays(1).toMillis(); + // There are 2 slotIndexes in this test. slotIndex1 and slotIndex2 have different opinions + // about the current time. slotIndex1 < slotIndex2 (which is important because the strategy + // uses the lowest slotIndex when multiple telephony suggestions are available. + int slotIndex1 = ARBITRARY_SLOT_INDEX; + int slotIndex2 = ARBITRARY_SLOT_INDEX + 1; + long slotIndex1TimeMillis = ARBITRARY_TEST_TIME_MILLIS; + long slotIndex2TimeMillis = ARBITRARY_TEST_TIME_MILLIS + Duration.ofDays(1).toMillis(); - // Make a suggestion with phone2Id. + // Make a suggestion with slotIndex2. { - PhoneTimeSuggestion phone2TimeSuggestion = - mScript.generatePhoneTimeSuggestion(phone2Id, phone2TimeMillis); + TelephonyTimeSuggestion slotIndex2TimeSuggestion = + mScript.generateTelephonyTimeSuggestion(slotIndex2, slotIndex2TimeMillis); mScript.simulateTimePassing(); long expectedSystemClockMillis = - mScript.calculateTimeInMillisForNow(phone2TimeSuggestion.getUtcTime()); + mScript.calculateTimeInMillisForNow(slotIndex2TimeSuggestion.getUtcTime()); - mScript.simulatePhoneTimeSuggestion(phone2TimeSuggestion) + mScript.simulateTelephonyTimeSuggestion(slotIndex2TimeSuggestion) .verifySystemClockWasSetAndResetCallTracking(expectedSystemClockMillis) - .assertLatestPhoneSuggestion(phone1Id, null) - .assertLatestPhoneSuggestion(phone2Id, phone2TimeSuggestion); + .assertLatestTelephonySuggestion(slotIndex1, null) + .assertLatestTelephonySuggestion(slotIndex2, slotIndex2TimeSuggestion); } mScript.simulateTimePassing(); - // Now make a different suggestion with phone1Id. + // Now make a different suggestion with slotIndex1. { - PhoneTimeSuggestion phone1TimeSuggestion = - mScript.generatePhoneTimeSuggestion(phone1Id, phone1TimeMillis); + TelephonyTimeSuggestion slotIndex1TimeSuggestion = + mScript.generateTelephonyTimeSuggestion(slotIndex1, slotIndex1TimeMillis); mScript.simulateTimePassing(); long expectedSystemClockMillis = - mScript.calculateTimeInMillisForNow(phone1TimeSuggestion.getUtcTime()); + mScript.calculateTimeInMillisForNow(slotIndex1TimeSuggestion.getUtcTime()); - mScript.simulatePhoneTimeSuggestion(phone1TimeSuggestion) + mScript.simulateTelephonyTimeSuggestion(slotIndex1TimeSuggestion) .verifySystemClockWasSetAndResetCallTracking(expectedSystemClockMillis) - .assertLatestPhoneSuggestion(phone1Id, phone1TimeSuggestion); + .assertLatestTelephonySuggestion(slotIndex1, slotIndex1TimeSuggestion); } mScript.simulateTimePassing(); - // Make another suggestion with phone2Id. It should be stored but not used because the - // phone1Id suggestion will still "win". + // Make another suggestion with slotIndex2. It should be stored but not used because the + // slotIndex1 suggestion will still "win". { - PhoneTimeSuggestion phone2TimeSuggestion = - mScript.generatePhoneTimeSuggestion(phone2Id, phone2TimeMillis); + TelephonyTimeSuggestion slotIndex2TimeSuggestion = + mScript.generateTelephonyTimeSuggestion(slotIndex2, slotIndex2TimeMillis); mScript.simulateTimePassing(); - mScript.simulatePhoneTimeSuggestion(phone2TimeSuggestion) + mScript.simulateTelephonyTimeSuggestion(slotIndex2TimeSuggestion) .verifySystemClockWasNotSetAndResetCallTracking() - .assertLatestPhoneSuggestion(phone2Id, phone2TimeSuggestion); + .assertLatestTelephonySuggestion(slotIndex2, slotIndex2TimeSuggestion); } - // Let enough time pass that phone1Id's suggestion should now be too old. - mScript.simulateTimePassing(TimeDetectorStrategyImpl.PHONE_BUCKET_SIZE_MILLIS); + // Let enough time pass that slotIndex1's suggestion should now be too old. + mScript.simulateTimePassing(TimeDetectorStrategyImpl.TELEPHONY_BUCKET_SIZE_MILLIS); - // Make another suggestion with phone2Id. It should be used because the phoneId1 + // Make another suggestion with slotIndex2. It should be used because the slotIndex1 // is in an older "bucket". { - PhoneTimeSuggestion phone2TimeSuggestion = - mScript.generatePhoneTimeSuggestion(phone2Id, phone2TimeMillis); + TelephonyTimeSuggestion slotIndex2TimeSuggestion = + mScript.generateTelephonyTimeSuggestion(slotIndex2, slotIndex2TimeMillis); mScript.simulateTimePassing(); long expectedSystemClockMillis = - mScript.calculateTimeInMillisForNow(phone2TimeSuggestion.getUtcTime()); + mScript.calculateTimeInMillisForNow(slotIndex2TimeSuggestion.getUtcTime()); - mScript.simulatePhoneTimeSuggestion(phone2TimeSuggestion) + mScript.simulateTelephonyTimeSuggestion(slotIndex2TimeSuggestion) .verifySystemClockWasSetAndResetCallTracking(expectedSystemClockMillis) - .assertLatestPhoneSuggestion(phone2Id, phone2TimeSuggestion); + .assertLatestTelephonySuggestion(slotIndex2, slotIndex2TimeSuggestion); } } @Test - public void testSuggestPhoneTime_autoTimeDisabled() { + public void testSuggestTelephonyTime_autoTimeDisabled() { mScript.pokeFakeClocks(ARBITRARY_CLOCK_INITIALIZATION_INFO) .pokeAutoTimeDetectionEnabled(false); - int phoneId = ARBITRARY_PHONE_ID; - PhoneTimeSuggestion timeSuggestion = - mScript.generatePhoneTimeSuggestion(phoneId, ARBITRARY_TEST_TIME_MILLIS); + int slotIndex = ARBITRARY_SLOT_INDEX; + TelephonyTimeSuggestion timeSuggestion = + mScript.generateTelephonyTimeSuggestion(slotIndex, ARBITRARY_TEST_TIME_MILLIS); mScript.simulateTimePassing() - .simulatePhoneTimeSuggestion(timeSuggestion) + .simulateTelephonyTimeSuggestion(timeSuggestion) .verifySystemClockWasNotSetAndResetCallTracking() - .assertLatestPhoneSuggestion(phoneId, timeSuggestion); + .assertLatestTelephonySuggestion(slotIndex, timeSuggestion); } @Test - public void testSuggestPhoneTime_invalidNitzReferenceTimesIgnored() { + public void testSuggestTelephonyTime_invalidNitzReferenceTimesIgnored() { final int systemClockUpdateThreshold = 2000; mScript.pokeFakeClocks(ARBITRARY_CLOCK_INITIALIZATION_INFO) .pokeThresholds(systemClockUpdateThreshold) .pokeAutoTimeDetectionEnabled(true); long testTimeMillis = ARBITRARY_TEST_TIME_MILLIS; - int phoneId = ARBITRARY_PHONE_ID; + int slotIndex = ARBITRARY_SLOT_INDEX; - PhoneTimeSuggestion timeSuggestion1 = - mScript.generatePhoneTimeSuggestion(phoneId, testTimeMillis); + TelephonyTimeSuggestion timeSuggestion1 = + mScript.generateTelephonyTimeSuggestion(slotIndex, testTimeMillis); TimestampedValue<Long> utcTime1 = timeSuggestion1.getUtcTime(); - // Initialize the strategy / device with a time set from a phone suggestion. + // Initialize the strategy / device with a time set from a telephony suggestion. mScript.simulateTimePassing(); long expectedSystemClockMillis1 = mScript.calculateTimeInMillisForNow(utcTime1); - mScript.simulatePhoneTimeSuggestion(timeSuggestion1) + mScript.simulateTelephonyTimeSuggestion(timeSuggestion1) .verifySystemClockWasSetAndResetCallTracking(expectedSystemClockMillis1) - .assertLatestPhoneSuggestion(phoneId, timeSuggestion1); + .assertLatestTelephonySuggestion(slotIndex, timeSuggestion1); // The UTC time increment should be larger than the system clock update threshold so we // know it shouldn't be ignored for other reasons. @@ -269,11 +269,11 @@ public class TimeDetectorStrategyImplTest { long referenceTimeBeforeLastSignalMillis = utcTime1.getReferenceTimeMillis() - 1; TimestampedValue<Long> utcTime2 = new TimestampedValue<>( referenceTimeBeforeLastSignalMillis, validUtcTimeMillis); - PhoneTimeSuggestion timeSuggestion2 = - createPhoneTimeSuggestion(phoneId, utcTime2); - mScript.simulatePhoneTimeSuggestion(timeSuggestion2) + TelephonyTimeSuggestion timeSuggestion2 = + createTelephonyTimeSuggestion(slotIndex, utcTime2); + mScript.simulateTelephonyTimeSuggestion(timeSuggestion2) .verifySystemClockWasNotSetAndResetCallTracking() - .assertLatestPhoneSuggestion(phoneId, timeSuggestion1); + .assertLatestTelephonySuggestion(slotIndex, timeSuggestion1); // Now supply a new signal that has an obviously bogus reference time : substantially in the // future. @@ -281,36 +281,36 @@ public class TimeDetectorStrategyImplTest { utcTime1.getReferenceTimeMillis() + Integer.MAX_VALUE + 1; TimestampedValue<Long> utcTime3 = new TimestampedValue<>( referenceTimeInFutureMillis, validUtcTimeMillis); - PhoneTimeSuggestion timeSuggestion3 = - createPhoneTimeSuggestion(phoneId, utcTime3); - mScript.simulatePhoneTimeSuggestion(timeSuggestion3) + TelephonyTimeSuggestion timeSuggestion3 = + createTelephonyTimeSuggestion(slotIndex, utcTime3); + mScript.simulateTelephonyTimeSuggestion(timeSuggestion3) .verifySystemClockWasNotSetAndResetCallTracking() - .assertLatestPhoneSuggestion(phoneId, timeSuggestion1); + .assertLatestTelephonySuggestion(slotIndex, timeSuggestion1); // Just to prove validUtcTimeMillis is valid. long validReferenceTimeMillis = utcTime1.getReferenceTimeMillis() + 100; TimestampedValue<Long> utcTime4 = new TimestampedValue<>( validReferenceTimeMillis, validUtcTimeMillis); long expectedSystemClockMillis4 = mScript.calculateTimeInMillisForNow(utcTime4); - PhoneTimeSuggestion timeSuggestion4 = - createPhoneTimeSuggestion(phoneId, utcTime4); - mScript.simulatePhoneTimeSuggestion(timeSuggestion4) + TelephonyTimeSuggestion timeSuggestion4 = + createTelephonyTimeSuggestion(slotIndex, utcTime4); + mScript.simulateTelephonyTimeSuggestion(timeSuggestion4) .verifySystemClockWasSetAndResetCallTracking(expectedSystemClockMillis4) - .assertLatestPhoneSuggestion(phoneId, timeSuggestion4); + .assertLatestTelephonySuggestion(slotIndex, timeSuggestion4); } @Test - public void testSuggestPhoneTime_timeDetectionToggled() { + public void testSuggestTelephonyTime_timeDetectionToggled() { final int clockIncrementMillis = 100; final int systemClockUpdateThreshold = 2000; mScript.pokeFakeClocks(ARBITRARY_CLOCK_INITIALIZATION_INFO) .pokeThresholds(systemClockUpdateThreshold) .pokeAutoTimeDetectionEnabled(false); - int phoneId = ARBITRARY_PHONE_ID; + int slotIndex = ARBITRARY_SLOT_INDEX; long testTimeMillis = ARBITRARY_TEST_TIME_MILLIS; - PhoneTimeSuggestion timeSuggestion1 = - mScript.generatePhoneTimeSuggestion(phoneId, testTimeMillis); + TelephonyTimeSuggestion timeSuggestion1 = + mScript.generateTelephonyTimeSuggestion(slotIndex, testTimeMillis); TimestampedValue<Long> utcTime1 = timeSuggestion1.getUtcTime(); // Simulate time passing. @@ -318,9 +318,9 @@ public class TimeDetectorStrategyImplTest { // Simulate the time signal being received. It should not be used because auto time // detection is off but it should be recorded. - mScript.simulatePhoneTimeSuggestion(timeSuggestion1) + mScript.simulateTelephonyTimeSuggestion(timeSuggestion1) .verifySystemClockWasNotSetAndResetCallTracking() - .assertLatestPhoneSuggestion(phoneId, timeSuggestion1); + .assertLatestTelephonySuggestion(slotIndex, timeSuggestion1); // Simulate more time passing. mScript.simulateTimePassing(clockIncrementMillis); @@ -330,17 +330,17 @@ public class TimeDetectorStrategyImplTest { // Turn on auto time detection. mScript.simulateAutoTimeDetectionToggle() .verifySystemClockWasSetAndResetCallTracking(expectedSystemClockMillis1) - .assertLatestPhoneSuggestion(phoneId, timeSuggestion1); + .assertLatestTelephonySuggestion(slotIndex, timeSuggestion1); // Turn off auto time detection. mScript.simulateAutoTimeDetectionToggle() .verifySystemClockWasNotSetAndResetCallTracking() - .assertLatestPhoneSuggestion(phoneId, timeSuggestion1); + .assertLatestTelephonySuggestion(slotIndex, timeSuggestion1); // Receive another valid time signal. // It should be on the threshold and accounting for the clock increments. - PhoneTimeSuggestion timeSuggestion2 = mScript.generatePhoneTimeSuggestion( - phoneId, mScript.peekSystemClockMillis() + systemClockUpdateThreshold); + TelephonyTimeSuggestion timeSuggestion2 = mScript.generateTelephonyTimeSuggestion( + slotIndex, mScript.peekSystemClockMillis() + systemClockUpdateThreshold); // Simulate more time passing. mScript.simulateTimePassing(clockIncrementMillis); @@ -350,45 +350,45 @@ public class TimeDetectorStrategyImplTest { // The new time, though valid, should not be set in the system clock because auto time is // disabled. - mScript.simulatePhoneTimeSuggestion(timeSuggestion2) + mScript.simulateTelephonyTimeSuggestion(timeSuggestion2) .verifySystemClockWasNotSetAndResetCallTracking() - .assertLatestPhoneSuggestion(phoneId, timeSuggestion2); + .assertLatestTelephonySuggestion(slotIndex, timeSuggestion2); // Turn on auto time detection. mScript.simulateAutoTimeDetectionToggle() .verifySystemClockWasSetAndResetCallTracking(expectedSystemClockMillis2) - .assertLatestPhoneSuggestion(phoneId, timeSuggestion2); + .assertLatestTelephonySuggestion(slotIndex, timeSuggestion2); } @Test - public void testSuggestPhoneTime_maxSuggestionAge() { + public void testSuggestTelephonyTime_maxSuggestionAge() { mScript.pokeFakeClocks(ARBITRARY_CLOCK_INITIALIZATION_INFO) .pokeAutoTimeDetectionEnabled(true); - int phoneId = ARBITRARY_PHONE_ID; + int slotIndex = ARBITRARY_SLOT_INDEX; long testTimeMillis = ARBITRARY_TEST_TIME_MILLIS; - PhoneTimeSuggestion phoneSuggestion = - mScript.generatePhoneTimeSuggestion(phoneId, testTimeMillis); + TelephonyTimeSuggestion telephonySuggestion = + mScript.generateTelephonyTimeSuggestion(slotIndex, testTimeMillis); mScript.simulateTimePassing(); long expectedSystemClockMillis = - mScript.calculateTimeInMillisForNow(phoneSuggestion.getUtcTime()); - mScript.simulatePhoneTimeSuggestion(phoneSuggestion) + mScript.calculateTimeInMillisForNow(telephonySuggestion.getUtcTime()); + mScript.simulateTelephonyTimeSuggestion(telephonySuggestion) .verifySystemClockWasSetAndResetCallTracking( expectedSystemClockMillis /* expectedNetworkBroadcast */) - .assertLatestPhoneSuggestion(phoneId, phoneSuggestion); + .assertLatestTelephonySuggestion(slotIndex, telephonySuggestion); - // Look inside and check what the strategy considers the current best phone suggestion. - assertEquals(phoneSuggestion, mScript.peekBestPhoneSuggestion()); + // Look inside and check what the strategy considers the current best telephony suggestion. + assertEquals(telephonySuggestion, mScript.peekBestTelephonySuggestion()); - // Simulate time passing, long enough that phoneSuggestion is now too old. + // Simulate time passing, long enough that telephonySuggestion is now too old. mScript.simulateTimePassing(TimeDetectorStrategyImpl.MAX_UTC_TIME_AGE_MILLIS); - // Look inside and check what the strategy considers the current best phone suggestion. It - // should still be the, it's just no longer used. - assertNull(mScript.peekBestPhoneSuggestion()); - mScript.assertLatestPhoneSuggestion(phoneId, phoneSuggestion); + // Look inside and check what the strategy considers the current best telephony suggestion. + // It should still be the, it's just no longer used. + assertNull(mScript.peekBestTelephonySuggestion()); + mScript.assertLatestTelephonySuggestion(slotIndex, telephonySuggestion); } @Test @@ -413,21 +413,21 @@ public class TimeDetectorStrategyImplTest { mScript.pokeFakeClocks(ARBITRARY_CLOCK_INITIALIZATION_INFO) .pokeAutoTimeDetectionEnabled(true); - int phoneId = ARBITRARY_PHONE_ID; + int slotIndex = ARBITRARY_SLOT_INDEX; - // Simulate a phone suggestion. + // Simulate a telephony suggestion. long testTimeMillis = ARBITRARY_TEST_TIME_MILLIS; - PhoneTimeSuggestion phoneTimeSuggestion = - mScript.generatePhoneTimeSuggestion(phoneId, testTimeMillis); + TelephonyTimeSuggestion telephonyTimeSuggestion = + mScript.generateTelephonyTimeSuggestion(slotIndex, testTimeMillis); // Simulate the passage of time. mScript.simulateTimePassing(); long expectedAutoClockMillis = - mScript.calculateTimeInMillisForNow(phoneTimeSuggestion.getUtcTime()); - mScript.simulatePhoneTimeSuggestion(phoneTimeSuggestion) + mScript.calculateTimeInMillisForNow(telephonyTimeSuggestion.getUtcTime()); + mScript.simulateTelephonyTimeSuggestion(telephonyTimeSuggestion) .verifySystemClockWasSetAndResetCallTracking(expectedAutoClockMillis) - .assertLatestPhoneSuggestion(phoneId, phoneTimeSuggestion); + .assertLatestTelephonySuggestion(slotIndex, telephonyTimeSuggestion); // Simulate the passage of time. mScript.simulateTimePassing(); @@ -435,7 +435,7 @@ public class TimeDetectorStrategyImplTest { // Switch to manual. mScript.simulateAutoTimeDetectionToggle() .verifySystemClockWasNotSetAndResetCallTracking() - .assertLatestPhoneSuggestion(phoneId, phoneTimeSuggestion); + .assertLatestTelephonySuggestion(slotIndex, telephonyTimeSuggestion); // Simulate the passage of time. mScript.simulateTimePassing(); @@ -450,7 +450,7 @@ public class TimeDetectorStrategyImplTest { mScript.calculateTimeInMillisForNow(manualTimeSuggestion.getUtcTime()); mScript.simulateManualTimeSuggestion(manualTimeSuggestion) .verifySystemClockWasSetAndResetCallTracking(expectedManualClockMillis) - .assertLatestPhoneSuggestion(phoneId, phoneTimeSuggestion); + .assertLatestTelephonySuggestion(slotIndex, telephonyTimeSuggestion); // Simulate the passage of time. mScript.simulateTimePassing(); @@ -459,14 +459,14 @@ public class TimeDetectorStrategyImplTest { mScript.simulateAutoTimeDetectionToggle(); expectedAutoClockMillis = - mScript.calculateTimeInMillisForNow(phoneTimeSuggestion.getUtcTime()); + mScript.calculateTimeInMillisForNow(telephonyTimeSuggestion.getUtcTime()); mScript.verifySystemClockWasSetAndResetCallTracking(expectedAutoClockMillis) - .assertLatestPhoneSuggestion(phoneId, phoneTimeSuggestion); + .assertLatestTelephonySuggestion(slotIndex, telephonyTimeSuggestion); // Switch back to manual - nothing should happen to the clock. mScript.simulateAutoTimeDetectionToggle() .verifySystemClockWasNotSetAndResetCallTracking() - .assertLatestPhoneSuggestion(phoneId, phoneTimeSuggestion); + .assertLatestTelephonySuggestion(slotIndex, telephonyTimeSuggestion); } /** @@ -515,19 +515,19 @@ public class TimeDetectorStrategyImplTest { } @Test - public void testSuggestNetworkTime_phoneSuggestionsBeatNetworkSuggestions() { + public void testSuggestNetworkTime_telephonySuggestionsBeatNetworkSuggestions() { mScript.pokeFakeClocks(ARBITRARY_CLOCK_INITIALIZATION_INFO) .pokeAutoTimeDetectionEnabled(true); // Three obviously different times that could not be mistaken for each other. long networkTimeMillis1 = ARBITRARY_TEST_TIME_MILLIS; long networkTimeMillis2 = ARBITRARY_TEST_TIME_MILLIS + Duration.ofDays(30).toMillis(); - long phoneTimeMillis = ARBITRARY_TEST_TIME_MILLIS + Duration.ofDays(60).toMillis(); + long telephonyTimeMillis = ARBITRARY_TEST_TIME_MILLIS + Duration.ofDays(60).toMillis(); // A small increment used to simulate the passage of time, but not enough to interfere with // macro-level time changes associated with suggestion age. final long smallTimeIncrementMillis = 101; - // A network suggestion is made. It should be used because there is no phone suggestion. + // A network suggestion is made. It should be used because there is no telephony suggestion. NetworkTimeSuggestion networkTimeSuggestion1 = mScript.generateNetworkTimeSuggestion(networkTimeMillis1); mScript.simulateTimePassing(smallTimeIncrementMillis) @@ -536,37 +536,37 @@ public class TimeDetectorStrategyImplTest { mScript.calculateTimeInMillisForNow(networkTimeSuggestion1.getUtcTime())); // Check internal state. - mScript.assertLatestPhoneSuggestion(ARBITRARY_PHONE_ID, null) + mScript.assertLatestTelephonySuggestion(ARBITRARY_SLOT_INDEX, null) .assertLatestNetworkSuggestion(networkTimeSuggestion1); assertEquals(networkTimeSuggestion1, mScript.peekLatestValidNetworkSuggestion()); - assertNull(mScript.peekBestPhoneSuggestion()); + assertNull(mScript.peekBestTelephonySuggestion()); // Simulate a little time passing. mScript.simulateTimePassing(smallTimeIncrementMillis) .verifySystemClockWasNotSetAndResetCallTracking(); - // Now a phone suggestion is made. Phone suggestions are prioritized over network + // Now a telephony suggestion is made. Telephony suggestions are prioritized over network // suggestions so it should "win". - PhoneTimeSuggestion phoneTimeSuggestion = - mScript.generatePhoneTimeSuggestion(ARBITRARY_PHONE_ID, phoneTimeMillis); + TelephonyTimeSuggestion telephonyTimeSuggestion = + mScript.generateTelephonyTimeSuggestion(ARBITRARY_SLOT_INDEX, telephonyTimeMillis); mScript.simulateTimePassing(smallTimeIncrementMillis) - .simulatePhoneTimeSuggestion(phoneTimeSuggestion) + .simulateTelephonyTimeSuggestion(telephonyTimeSuggestion) .verifySystemClockWasSetAndResetCallTracking( - mScript.calculateTimeInMillisForNow(phoneTimeSuggestion.getUtcTime())); + mScript.calculateTimeInMillisForNow(telephonyTimeSuggestion.getUtcTime())); // Check internal state. - mScript.assertLatestPhoneSuggestion(ARBITRARY_PHONE_ID, phoneTimeSuggestion) + mScript.assertLatestTelephonySuggestion(ARBITRARY_SLOT_INDEX, telephonyTimeSuggestion) .assertLatestNetworkSuggestion(networkTimeSuggestion1); assertEquals(networkTimeSuggestion1, mScript.peekLatestValidNetworkSuggestion()); - assertEquals(phoneTimeSuggestion, mScript.peekBestPhoneSuggestion()); + assertEquals(telephonyTimeSuggestion, mScript.peekBestTelephonySuggestion()); // Simulate some significant time passing: half the time allowed before a time signal // becomes "too old to use". mScript.simulateTimePassing(TimeDetectorStrategyImpl.MAX_UTC_TIME_AGE_MILLIS / 2) .verifySystemClockWasNotSetAndResetCallTracking(); - // Now another network suggestion is made. Phone suggestions are prioritized over network - // suggestions so the latest phone suggestion should still "win". + // Now another network suggestion is made. Telephony suggestions are prioritized over + // network suggestions so the latest telephony suggestion should still "win". NetworkTimeSuggestion networkTimeSuggestion2 = mScript.generateNetworkTimeSuggestion(networkTimeMillis2); mScript.simulateTimePassing(smallTimeIncrementMillis) @@ -574,14 +574,14 @@ public class TimeDetectorStrategyImplTest { .verifySystemClockWasNotSetAndResetCallTracking(); // Check internal state. - mScript.assertLatestPhoneSuggestion(ARBITRARY_PHONE_ID, phoneTimeSuggestion) + mScript.assertLatestTelephonySuggestion(ARBITRARY_SLOT_INDEX, telephonyTimeSuggestion) .assertLatestNetworkSuggestion(networkTimeSuggestion2); assertEquals(networkTimeSuggestion2, mScript.peekLatestValidNetworkSuggestion()); - assertEquals(phoneTimeSuggestion, mScript.peekBestPhoneSuggestion()); + assertEquals(telephonyTimeSuggestion, mScript.peekBestTelephonySuggestion()); // Simulate some significant time passing: half the time allowed before a time signal - // becomes "too old to use". This should mean that phoneTimeSuggestion is now too old to be - // used but networkTimeSuggestion2 is not. + // becomes "too old to use". This should mean that telephonyTimeSuggestion is now too old to + // be used but networkTimeSuggestion2 is not. mScript.simulateTimePassing(TimeDetectorStrategyImpl.MAX_UTC_TIME_AGE_MILLIS / 2); // NOTE: The TimeDetectorStrategyImpl doesn't set an alarm for the point when the last @@ -591,10 +591,10 @@ public class TimeDetectorStrategyImplTest { mScript.verifySystemClockWasNotSetAndResetCallTracking(); // Check internal state. - mScript.assertLatestPhoneSuggestion(ARBITRARY_PHONE_ID, phoneTimeSuggestion) + mScript.assertLatestTelephonySuggestion(ARBITRARY_SLOT_INDEX, telephonyTimeSuggestion) .assertLatestNetworkSuggestion(networkTimeSuggestion2); assertEquals(networkTimeSuggestion2, mScript.peekLatestValidNetworkSuggestion()); - assertNull(mScript.peekBestPhoneSuggestion()); + assertNull(mScript.peekBestTelephonySuggestion()); // Toggle auto-time off and on to force the detection logic to run. mScript.simulateAutoTimeDetectionToggle() @@ -606,10 +606,10 @@ public class TimeDetectorStrategyImplTest { mScript.calculateTimeInMillisForNow(networkTimeSuggestion2.getUtcTime())); // Check internal state. - mScript.assertLatestPhoneSuggestion(ARBITRARY_PHONE_ID, phoneTimeSuggestion) + mScript.assertLatestTelephonySuggestion(ARBITRARY_SLOT_INDEX, telephonyTimeSuggestion) .assertLatestNetworkSuggestion(networkTimeSuggestion2); assertEquals(networkTimeSuggestion2, mScript.peekLatestValidNetworkSuggestion()); - assertNull(mScript.peekBestPhoneSuggestion()); + assertNull(mScript.peekBestTelephonySuggestion()); } /** @@ -760,8 +760,8 @@ public class TimeDetectorStrategyImplTest { return mFakeCallback.peekSystemClockMillis(); } - Script simulatePhoneTimeSuggestion(PhoneTimeSuggestion timeSuggestion) { - mTimeDetectorStrategy.suggestPhoneTime(timeSuggestion); + Script simulateTelephonyTimeSuggestion(TelephonyTimeSuggestion timeSuggestion) { + mTimeDetectorStrategy.suggestTelephonyTime(timeSuggestion); return this; } @@ -806,10 +806,10 @@ public class TimeDetectorStrategyImplTest { } /** - * White box test info: Asserts the latest suggestion for the phone ID is as expected. + * White box test info: Asserts the latest suggestion for the slotIndex is as expected. */ - Script assertLatestPhoneSuggestion(int phoneId, PhoneTimeSuggestion expected) { - assertEquals(expected, mTimeDetectorStrategy.getLatestPhoneSuggestion(phoneId)); + Script assertLatestTelephonySuggestion(int slotIndex, TelephonyTimeSuggestion expected) { + assertEquals(expected, mTimeDetectorStrategy.getLatestTelephonySuggestion(slotIndex)); return this; } @@ -822,11 +822,11 @@ public class TimeDetectorStrategyImplTest { } /** - * White box test info: Returns the phone suggestion that would be used, if any, given the - * current elapsed real time clock and regardless of origin prioritization. + * White box test info: Returns the telephony suggestion that would be used, if any, given + * the current elapsed real time clock and regardless of origin prioritization. */ - PhoneTimeSuggestion peekBestPhoneSuggestion() { - return mTimeDetectorStrategy.findBestPhoneSuggestionForTests(); + TelephonyTimeSuggestion peekBestTelephonySuggestion() { + return mTimeDetectorStrategy.findBestTelephonySuggestionForTests(); } /** @@ -848,15 +848,15 @@ public class TimeDetectorStrategyImplTest { } /** - * Generates a PhoneTimeSuggestion using the current elapsed realtime clock for the - * reference time. + * Generates a {@link TelephonyTimeSuggestion} using the current elapsed realtime clock for + * the reference time. */ - PhoneTimeSuggestion generatePhoneTimeSuggestion(int phoneId, Long timeMillis) { + TelephonyTimeSuggestion generateTelephonyTimeSuggestion(int slotIndex, Long timeMillis) { TimestampedValue<Long> time = null; if (timeMillis != null) { time = new TimestampedValue<>(peekElapsedRealtimeMillis(), timeMillis); } - return createPhoneTimeSuggestion(phoneId, time); + return createTelephonyTimeSuggestion(slotIndex, time); } /** @@ -878,9 +878,9 @@ public class TimeDetectorStrategyImplTest { } } - private static PhoneTimeSuggestion createPhoneTimeSuggestion(int phoneId, + private static TelephonyTimeSuggestion createTelephonyTimeSuggestion(int slotIndex, TimestampedValue<Long> utcTime) { - return new PhoneTimeSuggestion.Builder(phoneId) + return new TelephonyTimeSuggestion.Builder(slotIndex) .setUtcTime(utcTime) .build(); } diff --git a/services/tests/servicestests/src/com/android/server/timezonedetector/TimeZoneDetectorServiceTest.java b/services/tests/servicestests/src/com/android/server/timezonedetector/TimeZoneDetectorServiceTest.java index 3e7d40a0335a..039c2b4933e9 100644 --- a/services/tests/servicestests/src/com/android/server/timezonedetector/TimeZoneDetectorServiceTest.java +++ b/services/tests/servicestests/src/com/android/server/timezonedetector/TimeZoneDetectorServiceTest.java @@ -29,7 +29,7 @@ import static org.mockito.Mockito.verify; import static org.mockito.Mockito.when; import android.app.timezonedetector.ManualTimeZoneSuggestion; -import android.app.timezonedetector.PhoneTimeZoneSuggestion; +import android.app.timezonedetector.TelephonyTimeZoneSuggestion; import android.content.Context; import android.content.pm.PackageManager; import android.os.HandlerThread; @@ -76,35 +76,35 @@ public class TimeZoneDetectorServiceTest { } @Test(expected = SecurityException.class) - public void testSuggestPhoneTime_withoutPermission() { + public void testSuggestTelephonyTime_withoutPermission() { doThrow(new SecurityException("Mock")) .when(mMockContext).enforceCallingPermission(anyString(), any()); - PhoneTimeZoneSuggestion timeZoneSuggestion = createPhoneTimeZoneSuggestion(); + TelephonyTimeZoneSuggestion timeZoneSuggestion = createTelephonyTimeZoneSuggestion(); try { - mTimeZoneDetectorService.suggestPhoneTimeZone(timeZoneSuggestion); + mTimeZoneDetectorService.suggestTelephonyTimeZone(timeZoneSuggestion); fail(); } finally { verify(mMockContext).enforceCallingPermission( - eq(android.Manifest.permission.SUGGEST_PHONE_TIME_AND_ZONE), + eq(android.Manifest.permission.SUGGEST_TELEPHONY_TIME_AND_ZONE), anyString()); } } @Test - public void testSuggestPhoneTimeZone() throws Exception { + public void testSuggestTelephonyTimeZone() throws Exception { doNothing().when(mMockContext).enforceCallingPermission(anyString(), any()); - PhoneTimeZoneSuggestion timeZoneSuggestion = createPhoneTimeZoneSuggestion(); - mTimeZoneDetectorService.suggestPhoneTimeZone(timeZoneSuggestion); + TelephonyTimeZoneSuggestion timeZoneSuggestion = createTelephonyTimeZoneSuggestion(); + mTimeZoneDetectorService.suggestTelephonyTimeZone(timeZoneSuggestion); mTestHandler.assertTotalMessagesEnqueued(1); verify(mMockContext).enforceCallingPermission( - eq(android.Manifest.permission.SUGGEST_PHONE_TIME_AND_ZONE), + eq(android.Manifest.permission.SUGGEST_TELEPHONY_TIME_AND_ZONE), anyString()); mTestHandler.waitForMessagesToBeProcessed(); - mStubbedTimeZoneDetectorStrategy.verifySuggestPhoneTimeZoneCalled(timeZoneSuggestion); + mStubbedTimeZoneDetectorStrategy.verifySuggestTelephonyTimeZoneCalled(timeZoneSuggestion); } @Test(expected = SecurityException.class) @@ -165,12 +165,12 @@ public class TimeZoneDetectorServiceTest { mStubbedTimeZoneDetectorStrategy.verifyHandleAutoTimeZoneDetectionChangedCalled(); } - private static PhoneTimeZoneSuggestion createPhoneTimeZoneSuggestion() { + private static TelephonyTimeZoneSuggestion createTelephonyTimeZoneSuggestion() { int slotIndex = 1234; - return new PhoneTimeZoneSuggestion.Builder(slotIndex) + return new TelephonyTimeZoneSuggestion.Builder(slotIndex) .setZoneId("TestZoneId") - .setMatchType(PhoneTimeZoneSuggestion.MATCH_TYPE_NETWORK_COUNTRY_AND_OFFSET) - .setQuality(PhoneTimeZoneSuggestion.QUALITY_SINGLE_ZONE) + .setMatchType(TelephonyTimeZoneSuggestion.MATCH_TYPE_NETWORK_COUNTRY_AND_OFFSET) + .setQuality(TelephonyTimeZoneSuggestion.QUALITY_SINGLE_ZONE) .build(); } @@ -181,14 +181,14 @@ public class TimeZoneDetectorServiceTest { private static class StubbedTimeZoneDetectorStrategy implements TimeZoneDetectorStrategy { // Call tracking. - private PhoneTimeZoneSuggestion mLastPhoneSuggestion; + private TelephonyTimeZoneSuggestion mLastTelephonySuggestion; private ManualTimeZoneSuggestion mLastManualSuggestion; private boolean mHandleAutoTimeZoneDetectionChangedCalled; private boolean mDumpCalled; @Override - public void suggestPhoneTimeZone(PhoneTimeZoneSuggestion timeZoneSuggestion) { - mLastPhoneSuggestion = timeZoneSuggestion; + public void suggestTelephonyTimeZone(TelephonyTimeZoneSuggestion timeZoneSuggestion) { + mLastTelephonySuggestion = timeZoneSuggestion; } @Override @@ -207,14 +207,14 @@ public class TimeZoneDetectorServiceTest { } void resetCallTracking() { - mLastPhoneSuggestion = null; + mLastTelephonySuggestion = null; mLastManualSuggestion = null; mHandleAutoTimeZoneDetectionChangedCalled = false; mDumpCalled = false; } - void verifySuggestPhoneTimeZoneCalled(PhoneTimeZoneSuggestion expectedSuggestion) { - assertEquals(expectedSuggestion, mLastPhoneSuggestion); + void verifySuggestTelephonyTimeZoneCalled(TelephonyTimeZoneSuggestion expectedSuggestion) { + assertEquals(expectedSuggestion, mLastTelephonySuggestion); } public void verifySuggestManualTimeZoneCalled(ManualTimeZoneSuggestion expectedSuggestion) { diff --git a/services/tests/servicestests/src/com/android/server/timezonedetector/TimeZoneDetectorStrategyImplTest.java b/services/tests/servicestests/src/com/android/server/timezonedetector/TimeZoneDetectorStrategyImplTest.java index 1e387110ed43..ba309679e47a 100644 --- a/services/tests/servicestests/src/com/android/server/timezonedetector/TimeZoneDetectorStrategyImplTest.java +++ b/services/tests/servicestests/src/com/android/server/timezonedetector/TimeZoneDetectorStrategyImplTest.java @@ -16,20 +16,20 @@ package com.android.server.timezonedetector; -import static android.app.timezonedetector.PhoneTimeZoneSuggestion.MATCH_TYPE_EMULATOR_ZONE_ID; -import static android.app.timezonedetector.PhoneTimeZoneSuggestion.MATCH_TYPE_NETWORK_COUNTRY_AND_OFFSET; -import static android.app.timezonedetector.PhoneTimeZoneSuggestion.MATCH_TYPE_NETWORK_COUNTRY_ONLY; -import static android.app.timezonedetector.PhoneTimeZoneSuggestion.MATCH_TYPE_TEST_NETWORK_OFFSET_ONLY; -import static android.app.timezonedetector.PhoneTimeZoneSuggestion.QUALITY_MULTIPLE_ZONES_WITH_DIFFERENT_OFFSETS; -import static android.app.timezonedetector.PhoneTimeZoneSuggestion.QUALITY_MULTIPLE_ZONES_WITH_SAME_OFFSET; -import static android.app.timezonedetector.PhoneTimeZoneSuggestion.QUALITY_SINGLE_ZONE; - -import static com.android.server.timezonedetector.TimeZoneDetectorStrategyImpl.PHONE_SCORE_HIGH; -import static com.android.server.timezonedetector.TimeZoneDetectorStrategyImpl.PHONE_SCORE_HIGHEST; -import static com.android.server.timezonedetector.TimeZoneDetectorStrategyImpl.PHONE_SCORE_LOW; -import static com.android.server.timezonedetector.TimeZoneDetectorStrategyImpl.PHONE_SCORE_MEDIUM; -import static com.android.server.timezonedetector.TimeZoneDetectorStrategyImpl.PHONE_SCORE_NONE; -import static com.android.server.timezonedetector.TimeZoneDetectorStrategyImpl.PHONE_SCORE_USAGE_THRESHOLD; +import static android.app.timezonedetector.TelephonyTimeZoneSuggestion.MATCH_TYPE_EMULATOR_ZONE_ID; +import static android.app.timezonedetector.TelephonyTimeZoneSuggestion.MATCH_TYPE_NETWORK_COUNTRY_AND_OFFSET; +import static android.app.timezonedetector.TelephonyTimeZoneSuggestion.MATCH_TYPE_NETWORK_COUNTRY_ONLY; +import static android.app.timezonedetector.TelephonyTimeZoneSuggestion.MATCH_TYPE_TEST_NETWORK_OFFSET_ONLY; +import static android.app.timezonedetector.TelephonyTimeZoneSuggestion.QUALITY_MULTIPLE_ZONES_WITH_DIFFERENT_OFFSETS; +import static android.app.timezonedetector.TelephonyTimeZoneSuggestion.QUALITY_MULTIPLE_ZONES_WITH_SAME_OFFSET; +import static android.app.timezonedetector.TelephonyTimeZoneSuggestion.QUALITY_SINGLE_ZONE; + +import static com.android.server.timezonedetector.TimeZoneDetectorStrategyImpl.TELEPHONY_SCORE_HIGH; +import static com.android.server.timezonedetector.TimeZoneDetectorStrategyImpl.TELEPHONY_SCORE_HIGHEST; +import static com.android.server.timezonedetector.TimeZoneDetectorStrategyImpl.TELEPHONY_SCORE_LOW; +import static com.android.server.timezonedetector.TimeZoneDetectorStrategyImpl.TELEPHONY_SCORE_MEDIUM; +import static com.android.server.timezonedetector.TimeZoneDetectorStrategyImpl.TELEPHONY_SCORE_NONE; +import static com.android.server.timezonedetector.TimeZoneDetectorStrategyImpl.TELEPHONY_SCORE_USAGE_THRESHOLD; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertFalse; @@ -37,11 +37,11 @@ import static org.junit.Assert.assertNull; import static org.junit.Assert.assertTrue; import android.app.timezonedetector.ManualTimeZoneSuggestion; -import android.app.timezonedetector.PhoneTimeZoneSuggestion; -import android.app.timezonedetector.PhoneTimeZoneSuggestion.MatchType; -import android.app.timezonedetector.PhoneTimeZoneSuggestion.Quality; +import android.app.timezonedetector.TelephonyTimeZoneSuggestion; +import android.app.timezonedetector.TelephonyTimeZoneSuggestion.MatchType; +import android.app.timezonedetector.TelephonyTimeZoneSuggestion.Quality; -import com.android.server.timezonedetector.TimeZoneDetectorStrategyImpl.QualifiedPhoneTimeZoneSuggestion; +import com.android.server.timezonedetector.TimeZoneDetectorStrategyImpl.QualifiedTelephonyTimeZoneSuggestion; import org.junit.Before; import org.junit.Test; @@ -58,24 +58,24 @@ public class TimeZoneDetectorStrategyImplTest { /** A time zone used for initialization that does not occur elsewhere in tests. */ private static final String ARBITRARY_TIME_ZONE_ID = "Etc/UTC"; - private static final int PHONE1_ID = 10000; - private static final int PHONE2_ID = 20000; + private static final int SLOT_INDEX1 = 10000; + private static final int SLOT_INDEX2 = 20000; // Suggestion test cases are ordered so that each successive one is of the same or higher score // than the previous. private static final SuggestionTestCase[] TEST_CASES = new SuggestionTestCase[] { newTestCase(MATCH_TYPE_NETWORK_COUNTRY_ONLY, - QUALITY_MULTIPLE_ZONES_WITH_DIFFERENT_OFFSETS, PHONE_SCORE_LOW), + QUALITY_MULTIPLE_ZONES_WITH_DIFFERENT_OFFSETS, TELEPHONY_SCORE_LOW), newTestCase(MATCH_TYPE_NETWORK_COUNTRY_ONLY, QUALITY_MULTIPLE_ZONES_WITH_SAME_OFFSET, - PHONE_SCORE_MEDIUM), + TELEPHONY_SCORE_MEDIUM), newTestCase(MATCH_TYPE_NETWORK_COUNTRY_AND_OFFSET, - QUALITY_MULTIPLE_ZONES_WITH_SAME_OFFSET, PHONE_SCORE_MEDIUM), - newTestCase(MATCH_TYPE_NETWORK_COUNTRY_ONLY, QUALITY_SINGLE_ZONE, PHONE_SCORE_HIGH), + QUALITY_MULTIPLE_ZONES_WITH_SAME_OFFSET, TELEPHONY_SCORE_MEDIUM), + newTestCase(MATCH_TYPE_NETWORK_COUNTRY_ONLY, QUALITY_SINGLE_ZONE, TELEPHONY_SCORE_HIGH), newTestCase(MATCH_TYPE_NETWORK_COUNTRY_AND_OFFSET, QUALITY_SINGLE_ZONE, - PHONE_SCORE_HIGH), + TELEPHONY_SCORE_HIGH), newTestCase(MATCH_TYPE_TEST_NETWORK_OFFSET_ONLY, - QUALITY_MULTIPLE_ZONES_WITH_SAME_OFFSET, PHONE_SCORE_HIGHEST), - newTestCase(MATCH_TYPE_EMULATOR_ZONE_ID, QUALITY_SINGLE_ZONE, PHONE_SCORE_HIGHEST), + QUALITY_MULTIPLE_ZONES_WITH_SAME_OFFSET, TELEPHONY_SCORE_HIGHEST), + newTestCase(MATCH_TYPE_EMULATOR_ZONE_ID, QUALITY_SINGLE_ZONE, TELEPHONY_SCORE_HIGHEST), }; private TimeZoneDetectorStrategyImpl mTimeZoneDetectorStrategy; @@ -89,76 +89,82 @@ public class TimeZoneDetectorStrategyImplTest { } @Test - public void testEmptyPhoneSuggestions() { - PhoneTimeZoneSuggestion phone1TimeZoneSuggestion = createEmptyPhone1Suggestion(); - PhoneTimeZoneSuggestion phone2TimeZoneSuggestion = createEmptyPhone2Suggestion(); + public void testEmptyTelephonySuggestions() { + TelephonyTimeZoneSuggestion slotIndex1TimeZoneSuggestion = + createEmptySlotIndex1Suggestion(); + TelephonyTimeZoneSuggestion slotIndex2TimeZoneSuggestion = + createEmptySlotIndex2Suggestion(); Script script = new Script() .initializeAutoTimeZoneDetection(true) .initializeTimeZoneSetting(ARBITRARY_TIME_ZONE_ID); - script.suggestPhoneTimeZone(phone1TimeZoneSuggestion) + script.suggestTelephonyTimeZone(slotIndex1TimeZoneSuggestion) .verifyTimeZoneNotSet(); // Assert internal service state. - QualifiedPhoneTimeZoneSuggestion expectedPhone1ScoredSuggestion = - new QualifiedPhoneTimeZoneSuggestion(phone1TimeZoneSuggestion, PHONE_SCORE_NONE); - assertEquals(expectedPhone1ScoredSuggestion, - mTimeZoneDetectorStrategy.getLatestPhoneSuggestion(PHONE1_ID)); - assertNull(mTimeZoneDetectorStrategy.getLatestPhoneSuggestion(PHONE2_ID)); - assertEquals(expectedPhone1ScoredSuggestion, - mTimeZoneDetectorStrategy.findBestPhoneSuggestionForTests()); - - script.suggestPhoneTimeZone(phone2TimeZoneSuggestion) + QualifiedTelephonyTimeZoneSuggestion expectedSlotIndex1ScoredSuggestion = + new QualifiedTelephonyTimeZoneSuggestion(slotIndex1TimeZoneSuggestion, + TELEPHONY_SCORE_NONE); + assertEquals(expectedSlotIndex1ScoredSuggestion, + mTimeZoneDetectorStrategy.getLatestTelephonySuggestion(SLOT_INDEX1)); + assertNull(mTimeZoneDetectorStrategy.getLatestTelephonySuggestion(SLOT_INDEX2)); + assertEquals(expectedSlotIndex1ScoredSuggestion, + mTimeZoneDetectorStrategy.findBestTelephonySuggestionForTests()); + + script.suggestTelephonyTimeZone(slotIndex2TimeZoneSuggestion) .verifyTimeZoneNotSet(); // Assert internal service state. - QualifiedPhoneTimeZoneSuggestion expectedPhone2ScoredSuggestion = - new QualifiedPhoneTimeZoneSuggestion(phone2TimeZoneSuggestion, PHONE_SCORE_NONE); - assertEquals(expectedPhone1ScoredSuggestion, - mTimeZoneDetectorStrategy.getLatestPhoneSuggestion(PHONE1_ID)); - assertEquals(expectedPhone2ScoredSuggestion, - mTimeZoneDetectorStrategy.getLatestPhoneSuggestion(PHONE2_ID)); - // Phone 1 should always beat phone 2, all other things being equal. - assertEquals(expectedPhone1ScoredSuggestion, - mTimeZoneDetectorStrategy.findBestPhoneSuggestionForTests()); + QualifiedTelephonyTimeZoneSuggestion expectedSlotIndex2ScoredSuggestion = + new QualifiedTelephonyTimeZoneSuggestion(slotIndex2TimeZoneSuggestion, + TELEPHONY_SCORE_NONE); + assertEquals(expectedSlotIndex1ScoredSuggestion, + mTimeZoneDetectorStrategy.getLatestTelephonySuggestion(SLOT_INDEX1)); + assertEquals(expectedSlotIndex2ScoredSuggestion, + mTimeZoneDetectorStrategy.getLatestTelephonySuggestion(SLOT_INDEX2)); + // SlotIndex1 should always beat slotIndex2, all other things being equal. + assertEquals(expectedSlotIndex1ScoredSuggestion, + mTimeZoneDetectorStrategy.findBestTelephonySuggestionForTests()); } @Test - public void testFirstPlausiblePhoneSuggestionAcceptedWhenTimeZoneUninitialized() { + public void testFirstPlausibleTelephonySuggestionAcceptedWhenTimeZoneUninitialized() { SuggestionTestCase testCase = newTestCase(MATCH_TYPE_NETWORK_COUNTRY_ONLY, - QUALITY_MULTIPLE_ZONES_WITH_DIFFERENT_OFFSETS, PHONE_SCORE_LOW); - PhoneTimeZoneSuggestion lowQualitySuggestion = - testCase.createSuggestion(PHONE1_ID, "America/New_York"); + QUALITY_MULTIPLE_ZONES_WITH_DIFFERENT_OFFSETS, TELEPHONY_SCORE_LOW); + TelephonyTimeZoneSuggestion lowQualitySuggestion = + testCase.createSuggestion(SLOT_INDEX1, "America/New_York"); // The device time zone setting is left uninitialized. Script script = new Script() .initializeAutoTimeZoneDetection(true); // The very first suggestion will be taken. - script.suggestPhoneTimeZone(lowQualitySuggestion) + script.suggestTelephonyTimeZone(lowQualitySuggestion) .verifyTimeZoneSetAndReset(lowQualitySuggestion); // Assert internal service state. - QualifiedPhoneTimeZoneSuggestion expectedScoredSuggestion = - new QualifiedPhoneTimeZoneSuggestion(lowQualitySuggestion, testCase.expectedScore); + QualifiedTelephonyTimeZoneSuggestion expectedScoredSuggestion = + new QualifiedTelephonyTimeZoneSuggestion( + lowQualitySuggestion, testCase.expectedScore); assertEquals(expectedScoredSuggestion, - mTimeZoneDetectorStrategy.getLatestPhoneSuggestion(PHONE1_ID)); + mTimeZoneDetectorStrategy.getLatestTelephonySuggestion(SLOT_INDEX1)); assertEquals(expectedScoredSuggestion, - mTimeZoneDetectorStrategy.findBestPhoneSuggestionForTests()); + mTimeZoneDetectorStrategy.findBestTelephonySuggestionForTests()); // Another low quality suggestion will be ignored now that the setting is initialized. - PhoneTimeZoneSuggestion lowQualitySuggestion2 = - testCase.createSuggestion(PHONE1_ID, "America/Los_Angeles"); - script.suggestPhoneTimeZone(lowQualitySuggestion2) + TelephonyTimeZoneSuggestion lowQualitySuggestion2 = + testCase.createSuggestion(SLOT_INDEX1, "America/Los_Angeles"); + script.suggestTelephonyTimeZone(lowQualitySuggestion2) .verifyTimeZoneNotSet(); // Assert internal service state. - QualifiedPhoneTimeZoneSuggestion expectedScoredSuggestion2 = - new QualifiedPhoneTimeZoneSuggestion(lowQualitySuggestion2, testCase.expectedScore); + QualifiedTelephonyTimeZoneSuggestion expectedScoredSuggestion2 = + new QualifiedTelephonyTimeZoneSuggestion( + lowQualitySuggestion2, testCase.expectedScore); assertEquals(expectedScoredSuggestion2, - mTimeZoneDetectorStrategy.getLatestPhoneSuggestion(PHONE1_ID)); + mTimeZoneDetectorStrategy.getLatestTelephonySuggestion(SLOT_INDEX1)); assertEquals(expectedScoredSuggestion2, - mTimeZoneDetectorStrategy.findBestPhoneSuggestionForTests()); + mTimeZoneDetectorStrategy.findBestTelephonySuggestionForTests()); } /** @@ -174,28 +180,28 @@ public class TimeZoneDetectorStrategyImplTest { script.initializeAutoTimeZoneDetection(false) .initializeTimeZoneSetting(ARBITRARY_TIME_ZONE_ID); - PhoneTimeZoneSuggestion suggestion = - testCase.createSuggestion(PHONE1_ID, "Europe/London"); - script.suggestPhoneTimeZone(suggestion); + TelephonyTimeZoneSuggestion suggestion = + testCase.createSuggestion(SLOT_INDEX1, "Europe/London"); + script.suggestTelephonyTimeZone(suggestion); // When time zone detection is not enabled, the time zone suggestion will not be set // regardless of the score. script.verifyTimeZoneNotSet(); // Assert internal service state. - QualifiedPhoneTimeZoneSuggestion expectedScoredSuggestion = - new QualifiedPhoneTimeZoneSuggestion(suggestion, testCase.expectedScore); + QualifiedTelephonyTimeZoneSuggestion expectedScoredSuggestion = + new QualifiedTelephonyTimeZoneSuggestion(suggestion, testCase.expectedScore); assertEquals(expectedScoredSuggestion, - mTimeZoneDetectorStrategy.getLatestPhoneSuggestion(PHONE1_ID)); + mTimeZoneDetectorStrategy.getLatestTelephonySuggestion(SLOT_INDEX1)); assertEquals(expectedScoredSuggestion, - mTimeZoneDetectorStrategy.findBestPhoneSuggestionForTests()); + mTimeZoneDetectorStrategy.findBestTelephonySuggestionForTests()); // Toggling the time zone setting on should cause the device setting to be set. script.autoTimeZoneDetectionEnabled(true); // When time zone detection is already enabled the suggestion (if it scores highly // enough) should be set immediately. - if (testCase.expectedScore >= PHONE_SCORE_USAGE_THRESHOLD) { + if (testCase.expectedScore >= TELEPHONY_SCORE_USAGE_THRESHOLD) { script.verifyTimeZoneSetAndReset(suggestion); } else { script.verifyTimeZoneNotSet(); @@ -203,9 +209,9 @@ public class TimeZoneDetectorStrategyImplTest { // Assert internal service state. assertEquals(expectedScoredSuggestion, - mTimeZoneDetectorStrategy.getLatestPhoneSuggestion(PHONE1_ID)); + mTimeZoneDetectorStrategy.getLatestTelephonySuggestion(SLOT_INDEX1)); assertEquals(expectedScoredSuggestion, - mTimeZoneDetectorStrategy.findBestPhoneSuggestionForTests()); + mTimeZoneDetectorStrategy.findBestTelephonySuggestionForTests()); // Toggling the time zone setting should off should do nothing. script.autoTimeZoneDetectionEnabled(false) @@ -213,20 +219,20 @@ public class TimeZoneDetectorStrategyImplTest { // Assert internal service state. assertEquals(expectedScoredSuggestion, - mTimeZoneDetectorStrategy.getLatestPhoneSuggestion(PHONE1_ID)); + mTimeZoneDetectorStrategy.getLatestTelephonySuggestion(SLOT_INDEX1)); assertEquals(expectedScoredSuggestion, - mTimeZoneDetectorStrategy.findBestPhoneSuggestionForTests()); + mTimeZoneDetectorStrategy.findBestTelephonySuggestionForTests()); } } @Test - public void testPhoneSuggestionsSinglePhone() { + public void testTelephonySuggestionsSingleSlotId() { Script script = new Script() .initializeAutoTimeZoneDetection(true) .initializeTimeZoneSetting(ARBITRARY_TIME_ZONE_ID); for (SuggestionTestCase testCase : TEST_CASES) { - makePhone1SuggestionAndCheckState(script, testCase); + makeSlotIndex1SuggestionAndCheckState(script, testCase); } /* @@ -241,125 +247,128 @@ public class TimeZoneDetectorStrategyImplTest { Collections.reverse(descendingCasesByScore); for (SuggestionTestCase testCase : descendingCasesByScore) { - makePhone1SuggestionAndCheckState(script, testCase); + makeSlotIndex1SuggestionAndCheckState(script, testCase); } } - private void makePhone1SuggestionAndCheckState(Script script, SuggestionTestCase testCase) { + private void makeSlotIndex1SuggestionAndCheckState(Script script, SuggestionTestCase testCase) { // Give the next suggestion a different zone from the currently set device time zone; String currentZoneId = mFakeTimeZoneDetectorStrategyCallback.getDeviceTimeZone(); String suggestionZoneId = "Europe/London".equals(currentZoneId) ? "Europe/Paris" : "Europe/London"; - PhoneTimeZoneSuggestion zonePhone1Suggestion = - testCase.createSuggestion(PHONE1_ID, suggestionZoneId); - QualifiedPhoneTimeZoneSuggestion expectedZonePhone1ScoredSuggestion = - new QualifiedPhoneTimeZoneSuggestion(zonePhone1Suggestion, testCase.expectedScore); - - script.suggestPhoneTimeZone(zonePhone1Suggestion); - if (testCase.expectedScore >= PHONE_SCORE_USAGE_THRESHOLD) { - script.verifyTimeZoneSetAndReset(zonePhone1Suggestion); + TelephonyTimeZoneSuggestion zoneSlotIndex1Suggestion = + testCase.createSuggestion(SLOT_INDEX1, suggestionZoneId); + QualifiedTelephonyTimeZoneSuggestion expectedZoneSlotIndex1ScoredSuggestion = + new QualifiedTelephonyTimeZoneSuggestion( + zoneSlotIndex1Suggestion, testCase.expectedScore); + + script.suggestTelephonyTimeZone(zoneSlotIndex1Suggestion); + if (testCase.expectedScore >= TELEPHONY_SCORE_USAGE_THRESHOLD) { + script.verifyTimeZoneSetAndReset(zoneSlotIndex1Suggestion); } else { script.verifyTimeZoneNotSet(); } // Assert internal service state. - assertEquals(expectedZonePhone1ScoredSuggestion, - mTimeZoneDetectorStrategy.getLatestPhoneSuggestion(PHONE1_ID)); - assertEquals(expectedZonePhone1ScoredSuggestion, - mTimeZoneDetectorStrategy.findBestPhoneSuggestionForTests()); + assertEquals(expectedZoneSlotIndex1ScoredSuggestion, + mTimeZoneDetectorStrategy.getLatestTelephonySuggestion(SLOT_INDEX1)); + assertEquals(expectedZoneSlotIndex1ScoredSuggestion, + mTimeZoneDetectorStrategy.findBestTelephonySuggestionForTests()); } /** - * Tries a set of test cases to see if the phone with the lowest ID is given preference. This - * test also confirms that the time zone setting would only be set if a suggestion is of - * sufficient quality. + * Tries a set of test cases to see if the slotIndex with the lowest numeric value is given + * preference. This test also confirms that the time zone setting would only be set if a + * suggestion is of sufficient quality. */ @Test - public void testMultiplePhoneSuggestionScoringAndPhoneIdBias() { + public void testMultipleSlotIndexSuggestionScoringAndSlotIndexBias() { String[] zoneIds = { "Europe/London", "Europe/Paris" }; - PhoneTimeZoneSuggestion emptyPhone1Suggestion = createEmptyPhone1Suggestion(); - PhoneTimeZoneSuggestion emptyPhone2Suggestion = createEmptyPhone2Suggestion(); - QualifiedPhoneTimeZoneSuggestion expectedEmptyPhone1ScoredSuggestion = - new QualifiedPhoneTimeZoneSuggestion(emptyPhone1Suggestion, PHONE_SCORE_NONE); - QualifiedPhoneTimeZoneSuggestion expectedEmptyPhone2ScoredSuggestion = - new QualifiedPhoneTimeZoneSuggestion(emptyPhone2Suggestion, PHONE_SCORE_NONE); + TelephonyTimeZoneSuggestion emptySlotIndex1Suggestion = createEmptySlotIndex1Suggestion(); + TelephonyTimeZoneSuggestion emptySlotIndex2Suggestion = createEmptySlotIndex2Suggestion(); + QualifiedTelephonyTimeZoneSuggestion expectedEmptySlotIndex1ScoredSuggestion = + new QualifiedTelephonyTimeZoneSuggestion(emptySlotIndex1Suggestion, + TELEPHONY_SCORE_NONE); + QualifiedTelephonyTimeZoneSuggestion expectedEmptySlotIndex2ScoredSuggestion = + new QualifiedTelephonyTimeZoneSuggestion(emptySlotIndex2Suggestion, + TELEPHONY_SCORE_NONE); Script script = new Script() .initializeAutoTimeZoneDetection(true) .initializeTimeZoneSetting(ARBITRARY_TIME_ZONE_ID) // Initialize the latest suggestions as empty so we don't need to worry about nulls // below for the first loop. - .suggestPhoneTimeZone(emptyPhone1Suggestion) - .suggestPhoneTimeZone(emptyPhone2Suggestion) + .suggestTelephonyTimeZone(emptySlotIndex1Suggestion) + .suggestTelephonyTimeZone(emptySlotIndex2Suggestion) .resetState(); for (SuggestionTestCase testCase : TEST_CASES) { - PhoneTimeZoneSuggestion zonePhone1Suggestion = - testCase.createSuggestion(PHONE1_ID, zoneIds[0]); - PhoneTimeZoneSuggestion zonePhone2Suggestion = - testCase.createSuggestion(PHONE2_ID, zoneIds[1]); - QualifiedPhoneTimeZoneSuggestion expectedZonePhone1ScoredSuggestion = - new QualifiedPhoneTimeZoneSuggestion(zonePhone1Suggestion, + TelephonyTimeZoneSuggestion zoneSlotIndex1Suggestion = + testCase.createSuggestion(SLOT_INDEX1, zoneIds[0]); + TelephonyTimeZoneSuggestion zoneSlotIndex2Suggestion = + testCase.createSuggestion(SLOT_INDEX2, zoneIds[1]); + QualifiedTelephonyTimeZoneSuggestion expectedZoneSlotIndex1ScoredSuggestion = + new QualifiedTelephonyTimeZoneSuggestion(zoneSlotIndex1Suggestion, testCase.expectedScore); - QualifiedPhoneTimeZoneSuggestion expectedZonePhone2ScoredSuggestion = - new QualifiedPhoneTimeZoneSuggestion(zonePhone2Suggestion, + QualifiedTelephonyTimeZoneSuggestion expectedZoneSlotIndex2ScoredSuggestion = + new QualifiedTelephonyTimeZoneSuggestion(zoneSlotIndex2Suggestion, testCase.expectedScore); - // Start the test by making a suggestion for phone 1. - script.suggestPhoneTimeZone(zonePhone1Suggestion); - if (testCase.expectedScore >= PHONE_SCORE_USAGE_THRESHOLD) { - script.verifyTimeZoneSetAndReset(zonePhone1Suggestion); + // Start the test by making a suggestion for slotIndex1. + script.suggestTelephonyTimeZone(zoneSlotIndex1Suggestion); + if (testCase.expectedScore >= TELEPHONY_SCORE_USAGE_THRESHOLD) { + script.verifyTimeZoneSetAndReset(zoneSlotIndex1Suggestion); } else { script.verifyTimeZoneNotSet(); } // Assert internal service state. - assertEquals(expectedZonePhone1ScoredSuggestion, - mTimeZoneDetectorStrategy.getLatestPhoneSuggestion(PHONE1_ID)); - assertEquals(expectedEmptyPhone2ScoredSuggestion, - mTimeZoneDetectorStrategy.getLatestPhoneSuggestion(PHONE2_ID)); - assertEquals(expectedZonePhone1ScoredSuggestion, - mTimeZoneDetectorStrategy.findBestPhoneSuggestionForTests()); - - // Phone 2 then makes an alternative suggestion with an identical score. Phone 1's + assertEquals(expectedZoneSlotIndex1ScoredSuggestion, + mTimeZoneDetectorStrategy.getLatestTelephonySuggestion(SLOT_INDEX1)); + assertEquals(expectedEmptySlotIndex2ScoredSuggestion, + mTimeZoneDetectorStrategy.getLatestTelephonySuggestion(SLOT_INDEX2)); + assertEquals(expectedZoneSlotIndex1ScoredSuggestion, + mTimeZoneDetectorStrategy.findBestTelephonySuggestionForTests()); + + // SlotIndex2 then makes an alternative suggestion with an identical score. SlotIndex1's // suggestion should still "win" if it is above the required threshold. - script.suggestPhoneTimeZone(zonePhone2Suggestion); + script.suggestTelephonyTimeZone(zoneSlotIndex2Suggestion); script.verifyTimeZoneNotSet(); // Assert internal service state. - assertEquals(expectedZonePhone1ScoredSuggestion, - mTimeZoneDetectorStrategy.getLatestPhoneSuggestion(PHONE1_ID)); - assertEquals(expectedZonePhone2ScoredSuggestion, - mTimeZoneDetectorStrategy.getLatestPhoneSuggestion(PHONE2_ID)); - // Phone 1 should always beat phone 2, all other things being equal. - assertEquals(expectedZonePhone1ScoredSuggestion, - mTimeZoneDetectorStrategy.findBestPhoneSuggestionForTests()); - - // Withdrawing phone 1's suggestion should leave phone 2 as the new winner. Since the - // zoneId is different, the time zone setting should be updated if the score is high + assertEquals(expectedZoneSlotIndex1ScoredSuggestion, + mTimeZoneDetectorStrategy.getLatestTelephonySuggestion(SLOT_INDEX1)); + assertEquals(expectedZoneSlotIndex2ScoredSuggestion, + mTimeZoneDetectorStrategy.getLatestTelephonySuggestion(SLOT_INDEX2)); + // SlotIndex1 should always beat slotIndex2, all other things being equal. + assertEquals(expectedZoneSlotIndex1ScoredSuggestion, + mTimeZoneDetectorStrategy.findBestTelephonySuggestionForTests()); + + // Withdrawing slotIndex1's suggestion should leave slotIndex2 as the new winner. Since + // the zoneId is different, the time zone setting should be updated if the score is high // enough. - script.suggestPhoneTimeZone(emptyPhone1Suggestion); - if (testCase.expectedScore >= PHONE_SCORE_USAGE_THRESHOLD) { - script.verifyTimeZoneSetAndReset(zonePhone2Suggestion); + script.suggestTelephonyTimeZone(emptySlotIndex1Suggestion); + if (testCase.expectedScore >= TELEPHONY_SCORE_USAGE_THRESHOLD) { + script.verifyTimeZoneSetAndReset(zoneSlotIndex2Suggestion); } else { script.verifyTimeZoneNotSet(); } // Assert internal service state. - assertEquals(expectedEmptyPhone1ScoredSuggestion, - mTimeZoneDetectorStrategy.getLatestPhoneSuggestion(PHONE1_ID)); - assertEquals(expectedZonePhone2ScoredSuggestion, - mTimeZoneDetectorStrategy.getLatestPhoneSuggestion(PHONE2_ID)); - assertEquals(expectedZonePhone2ScoredSuggestion, - mTimeZoneDetectorStrategy.findBestPhoneSuggestionForTests()); + assertEquals(expectedEmptySlotIndex1ScoredSuggestion, + mTimeZoneDetectorStrategy.getLatestTelephonySuggestion(SLOT_INDEX1)); + assertEquals(expectedZoneSlotIndex2ScoredSuggestion, + mTimeZoneDetectorStrategy.getLatestTelephonySuggestion(SLOT_INDEX2)); + assertEquals(expectedZoneSlotIndex2ScoredSuggestion, + mTimeZoneDetectorStrategy.findBestTelephonySuggestionForTests()); // Reset the state for the next loop. - script.suggestPhoneTimeZone(emptyPhone2Suggestion) + script.suggestTelephonyTimeZone(emptySlotIndex2Suggestion) .verifyTimeZoneNotSet(); - assertEquals(expectedEmptyPhone1ScoredSuggestion, - mTimeZoneDetectorStrategy.getLatestPhoneSuggestion(PHONE1_ID)); - assertEquals(expectedEmptyPhone2ScoredSuggestion, - mTimeZoneDetectorStrategy.getLatestPhoneSuggestion(PHONE2_ID)); + assertEquals(expectedEmptySlotIndex1ScoredSuggestion, + mTimeZoneDetectorStrategy.getLatestTelephonySuggestion(SLOT_INDEX1)); + assertEquals(expectedEmptySlotIndex2ScoredSuggestion, + mTimeZoneDetectorStrategy.getLatestTelephonySuggestion(SLOT_INDEX2)); } } @@ -375,21 +384,21 @@ public class TimeZoneDetectorStrategyImplTest { SuggestionTestCase testCase = newTestCase(MATCH_TYPE_NETWORK_COUNTRY_AND_OFFSET, QUALITY_SINGLE_ZONE, - PHONE_SCORE_HIGH); - PhoneTimeZoneSuggestion losAngelesSuggestion = - testCase.createSuggestion(PHONE1_ID, "America/Los_Angeles"); - PhoneTimeZoneSuggestion newYorkSuggestion = - testCase.createSuggestion(PHONE1_ID, "America/New_York"); + TELEPHONY_SCORE_HIGH); + TelephonyTimeZoneSuggestion losAngelesSuggestion = + testCase.createSuggestion(SLOT_INDEX1, "America/Los_Angeles"); + TelephonyTimeZoneSuggestion newYorkSuggestion = + testCase.createSuggestion(SLOT_INDEX1, "America/New_York"); // Initialization. - script.suggestPhoneTimeZone(losAngelesSuggestion) + script.suggestTelephonyTimeZone(losAngelesSuggestion) .verifyTimeZoneSetAndReset(losAngelesSuggestion); // Suggest it again - it should not be set because it is already set. - script.suggestPhoneTimeZone(losAngelesSuggestion) + script.suggestTelephonyTimeZone(losAngelesSuggestion) .verifyTimeZoneNotSet(); // Toggling time zone detection should set the device time zone only if the current setting - // value is different from the most recent phone suggestion. + // value is different from the most recent telephony suggestion. script.autoTimeZoneDetectionEnabled(false) .verifyTimeZoneNotSet() .autoTimeZoneDetectionEnabled(true) @@ -398,7 +407,7 @@ public class TimeZoneDetectorStrategyImplTest { // Simulate a user turning auto detection off, a new suggestion being made while auto // detection is off, and the user turning it on again. script.autoTimeZoneDetectionEnabled(false) - .suggestPhoneTimeZone(newYorkSuggestion) + .suggestTelephonyTimeZone(newYorkSuggestion) .verifyTimeZoneNotSet(); // Latest suggestion should be used. script.autoTimeZoneDetectionEnabled(true) @@ -433,12 +442,12 @@ public class TimeZoneDetectorStrategyImplTest { return new ManualTimeZoneSuggestion(zoneId); } - private static PhoneTimeZoneSuggestion createEmptyPhone1Suggestion() { - return new PhoneTimeZoneSuggestion.Builder(PHONE1_ID).build(); + private static TelephonyTimeZoneSuggestion createEmptySlotIndex1Suggestion() { + return new TelephonyTimeZoneSuggestion.Builder(SLOT_INDEX1).build(); } - private static PhoneTimeZoneSuggestion createEmptyPhone2Suggestion() { - return new PhoneTimeZoneSuggestion.Builder(PHONE2_ID).build(); + private static TelephonyTimeZoneSuggestion createEmptySlotIndex2Suggestion() { + return new TelephonyTimeZoneSuggestion.Builder(SLOT_INDEX2).build(); } static class FakeTimeZoneDetectorStrategyCallback @@ -565,9 +574,11 @@ public class TimeZoneDetectorStrategyImplTest { return this; } - /** Simulates the time zone detection strategy receiving a phone-originated suggestion. */ - Script suggestPhoneTimeZone(PhoneTimeZoneSuggestion phoneTimeZoneSuggestion) { - mTimeZoneDetectorStrategy.suggestPhoneTimeZone(phoneTimeZoneSuggestion); + /** + * Simulates the time zone detection strategy receiving a telephony-originated suggestion. + */ + Script suggestTelephonyTimeZone(TelephonyTimeZoneSuggestion timeZoneSuggestion) { + mTimeZoneDetectorStrategy.suggestTelephonyTimeZone(timeZoneSuggestion); return this; } @@ -582,7 +593,7 @@ public class TimeZoneDetectorStrategyImplTest { return this; } - Script verifyTimeZoneSetAndReset(PhoneTimeZoneSuggestion suggestion) { + Script verifyTimeZoneSetAndReset(TelephonyTimeZoneSuggestion suggestion) { mFakeTimeZoneDetectorStrategyCallback.assertTimeZoneSet(suggestion.getZoneId()); mFakeTimeZoneDetectorStrategyCallback.commitAllChanges(); return this; @@ -611,8 +622,8 @@ public class TimeZoneDetectorStrategyImplTest { this.expectedScore = expectedScore; } - private PhoneTimeZoneSuggestion createSuggestion(int phoneId, String zoneId) { - return new PhoneTimeZoneSuggestion.Builder(phoneId) + private TelephonyTimeZoneSuggestion createSuggestion(int slotIndex, String zoneId) { + return new TelephonyTimeZoneSuggestion.Builder(slotIndex) .setZoneId(zoneId) .setMatchType(matchType) .setQuality(quality) |