From 0813e0e2caa4bf6f45ff3b7c93dcca6bfd9378c7 Mon Sep 17 00:00:00 2001 From: Neil Fuller Date: Thu, 6 Feb 2020 15:32:53 +0000 Subject: [PATCH] Misc tidy up before adding geolocation classes Misc tidy up / corrections before adding geolocation time zone detection classes. Bug: 149014708 Test: treehugger Change-Id: Ia25d9f6bbf5c7c03e2cbb570b6b07e61bc0aa1d9 --- .../ManualTimeZoneSuggestion.java | 4 +- .../timezonedetector/TimeZoneDetector.java | 18 ++-- .../TimeZoneDetectorImpl.java | 24 ++--- .../TelephonyTimeZoneSuggestionTest.java | 2 +- .../TimeZoneDetectorStrategy.java | 12 ++- .../TimeZoneDetectorServiceTest.java | 95 +++++++++---------- 6 files changed, 79 insertions(+), 76 deletions(-) diff --git a/core/java/android/app/timezonedetector/ManualTimeZoneSuggestion.java b/core/java/android/app/timezonedetector/ManualTimeZoneSuggestion.java index 3a9adc72aab16..9679d7ff4f3fc 100644 --- a/core/java/android/app/timezonedetector/ManualTimeZoneSuggestion.java +++ b/core/java/android/app/timezonedetector/ManualTimeZoneSuggestion.java @@ -28,7 +28,7 @@ import java.util.List; import java.util.Objects; /** - * A time signal from a manual (user provided) source. + * A time zone suggestion from a manual (user provided) source. * *

{@code zoneId} contains the suggested time zone ID, e.g. "America/Los_Angeles". * @@ -122,7 +122,7 @@ public final class ManualTimeZoneSuggestion implements Parcelable { @Override public String toString() { - return "ManualTimeSuggestion{" + return "ManualTimeZoneSuggestion{" + "mZoneId=" + mZoneId + ", mDebugInfo=" + mDebugInfo + '}'; diff --git a/core/java/android/app/timezonedetector/TimeZoneDetector.java b/core/java/android/app/timezonedetector/TimeZoneDetector.java index 20761ad2d447a..34a7586192fe5 100644 --- a/core/java/android/app/timezonedetector/TimeZoneDetector.java +++ b/core/java/android/app/timezonedetector/TimeZoneDetector.java @@ -40,6 +40,15 @@ public interface TimeZoneDetector { return suggestion; } + /** + * Suggests the current time zone, determined using the user's manually entered information, to + * the detector. The detector may ignore the signal based on system settings. + * + * @hide + */ + @RequiresPermission(android.Manifest.permission.SUGGEST_MANUAL_TIME_AND_ZONE) + void suggestManualTimeZone(@NonNull ManualTimeZoneSuggestion timeZoneSuggestion); + /** * Suggests the current time zone, determined using telephony signals, to the detector. The * detector may ignore the signal based on system settings, whether better information is @@ -49,13 +58,4 @@ public interface TimeZoneDetector { */ @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 - * detector. The detector may ignore the signal based on system settings. - * - * @hide - */ - @RequiresPermission(android.Manifest.permission.SUGGEST_MANUAL_TIME_AND_ZONE) - void suggestManualTimeZone(@NonNull ManualTimeZoneSuggestion timeZoneSuggestion); } diff --git a/core/java/android/app/timezonedetector/TimeZoneDetectorImpl.java b/core/java/android/app/timezonedetector/TimeZoneDetectorImpl.java index 0ada885001934..54cf1f380d971 100644 --- a/core/java/android/app/timezonedetector/TimeZoneDetectorImpl.java +++ b/core/java/android/app/timezonedetector/TimeZoneDetectorImpl.java @@ -39,18 +39,6 @@ public final class TimeZoneDetectorImpl implements TimeZoneDetector { ServiceManager.getServiceOrThrow(Context.TIME_ZONE_DETECTOR_SERVICE)); } - @Override - public void suggestTelephonyTimeZone(@NonNull TelephonyTimeZoneSuggestion timeZoneSuggestion) { - if (DEBUG) { - Log.d(TAG, "suggestTelephonyTimeZone called: " + timeZoneSuggestion); - } - try { - mITimeZoneDetectorService.suggestTelephonyTimeZone(timeZoneSuggestion); - } catch (RemoteException e) { - throw e.rethrowFromSystemServer(); - } - } - @Override public void suggestManualTimeZone(@NonNull ManualTimeZoneSuggestion timeZoneSuggestion) { if (DEBUG) { @@ -62,4 +50,16 @@ public final class TimeZoneDetectorImpl implements TimeZoneDetector { throw e.rethrowFromSystemServer(); } } + + @Override + public void suggestTelephonyTimeZone(@NonNull TelephonyTimeZoneSuggestion timeZoneSuggestion) { + if (DEBUG) { + Log.d(TAG, "suggestTelephonyTimeZone called: " + timeZoneSuggestion); + } + try { + mITimeZoneDetectorService.suggestTelephonyTimeZone(timeZoneSuggestion); + } catch (RemoteException e) { + throw e.rethrowFromSystemServer(); + } + } } diff --git a/core/tests/coretests/src/android/app/timezonedetector/TelephonyTimeZoneSuggestionTest.java b/core/tests/coretests/src/android/app/timezonedetector/TelephonyTimeZoneSuggestionTest.java index 59d55b79157ce..83bfd278d5696 100644 --- a/core/tests/coretests/src/android/app/timezonedetector/TelephonyTimeZoneSuggestionTest.java +++ b/core/tests/coretests/src/android/app/timezonedetector/TelephonyTimeZoneSuggestionTest.java @@ -123,7 +123,7 @@ public class TelephonyTimeZoneSuggestionTest { } @Test(expected = RuntimeException.class) - public void testBuilderValidates_emptyZone_badMatchType() { + public void testBuilderValidates_nullZone_badMatchType() { TelephonyTimeZoneSuggestion.Builder builder = new TelephonyTimeZoneSuggestion.Builder(SLOT_INDEX); // No zone ID, so match type should be left unset. diff --git a/services/core/java/com/android/server/timezonedetector/TimeZoneDetectorStrategy.java b/services/core/java/com/android/server/timezonedetector/TimeZoneDetectorStrategy.java index 0eb27cc5cff0d..e0b3ad526f350 100644 --- a/services/core/java/com/android/server/timezonedetector/TimeZoneDetectorStrategy.java +++ b/services/core/java/com/android/server/timezonedetector/TimeZoneDetectorStrategy.java @@ -22,9 +22,12 @@ import android.app.timezonedetector.TelephonyTimeZoneSuggestion; import java.io.PrintWriter; /** - * The interface for the class that implement the time detection algorithm used by the + * The interface for the class that implements the time detection algorithm used by the * {@link TimeZoneDetectorService}. * + *

The strategy uses suggestions to decide whether to modify the device's time zone setting + * and what to set it to. + * *

Most calls will be handled by a single thread but that is not true for all calls. For example * {@link #dump(PrintWriter, String[])}) may be called on a different thread so implementations must * handle thread safety. @@ -33,7 +36,9 @@ import java.io.PrintWriter; */ public interface TimeZoneDetectorStrategy { - /** Process the suggested manually-entered (i.e. user sourced) time zone. */ + /** + * Suggests a time zone for the device using manually-entered (i.e. user sourced) information. + */ void suggestManualTimeZone(@NonNull ManualTimeZoneSuggestion suggestion); /** @@ -41,8 +46,7 @@ public interface TimeZoneDetectorStrategy { * {@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. + * suggestion. */ void suggestTelephonyTimeZone(@NonNull TelephonyTimeZoneSuggestion suggestion); 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 039c2b4933e90..da34e1b792c16 100644 --- a/services/tests/servicestests/src/com/android/server/timezonedetector/TimeZoneDetectorServiceTest.java +++ b/services/tests/servicestests/src/com/android/server/timezonedetector/TimeZoneDetectorServiceTest.java @@ -76,39 +76,7 @@ public class TimeZoneDetectorServiceTest { } @Test(expected = SecurityException.class) - public void testSuggestTelephonyTime_withoutPermission() { - doThrow(new SecurityException("Mock")) - .when(mMockContext).enforceCallingPermission(anyString(), any()); - TelephonyTimeZoneSuggestion timeZoneSuggestion = createTelephonyTimeZoneSuggestion(); - - try { - mTimeZoneDetectorService.suggestTelephonyTimeZone(timeZoneSuggestion); - fail(); - } finally { - verify(mMockContext).enforceCallingPermission( - eq(android.Manifest.permission.SUGGEST_TELEPHONY_TIME_AND_ZONE), - anyString()); - } - } - - @Test - public void testSuggestTelephonyTimeZone() throws Exception { - doNothing().when(mMockContext).enforceCallingPermission(anyString(), any()); - - TelephonyTimeZoneSuggestion timeZoneSuggestion = createTelephonyTimeZoneSuggestion(); - mTimeZoneDetectorService.suggestTelephonyTimeZone(timeZoneSuggestion); - mTestHandler.assertTotalMessagesEnqueued(1); - - verify(mMockContext).enforceCallingPermission( - eq(android.Manifest.permission.SUGGEST_TELEPHONY_TIME_AND_ZONE), - anyString()); - - mTestHandler.waitForMessagesToBeProcessed(); - mStubbedTimeZoneDetectorStrategy.verifySuggestTelephonyTimeZoneCalled(timeZoneSuggestion); - } - - @Test(expected = SecurityException.class) - public void testSuggestManualTime_withoutPermission() { + public void testSuggestManualTimeZone_withoutPermission() { doThrow(new SecurityException("Mock")) .when(mMockContext).enforceCallingOrSelfPermission(anyString(), any()); ManualTimeZoneSuggestion timeZoneSuggestion = createManualTimeZoneSuggestion(); @@ -139,6 +107,38 @@ public class TimeZoneDetectorServiceTest { mStubbedTimeZoneDetectorStrategy.verifySuggestManualTimeZoneCalled(timeZoneSuggestion); } + @Test(expected = SecurityException.class) + public void testSuggestTelephonyTimeZone_withoutPermission() { + doThrow(new SecurityException("Mock")) + .when(mMockContext).enforceCallingPermission(anyString(), any()); + TelephonyTimeZoneSuggestion timeZoneSuggestion = createTelephonyTimeZoneSuggestion(); + + try { + mTimeZoneDetectorService.suggestTelephonyTimeZone(timeZoneSuggestion); + fail(); + } finally { + verify(mMockContext).enforceCallingPermission( + eq(android.Manifest.permission.SUGGEST_TELEPHONY_TIME_AND_ZONE), + anyString()); + } + } + + @Test + public void testSuggestTelephonyTimeZone() throws Exception { + doNothing().when(mMockContext).enforceCallingPermission(anyString(), any()); + + TelephonyTimeZoneSuggestion timeZoneSuggestion = createTelephonyTimeZoneSuggestion(); + mTimeZoneDetectorService.suggestTelephonyTimeZone(timeZoneSuggestion); + mTestHandler.assertTotalMessagesEnqueued(1); + + verify(mMockContext).enforceCallingPermission( + eq(android.Manifest.permission.SUGGEST_TELEPHONY_TIME_AND_ZONE), + anyString()); + + mTestHandler.waitForMessagesToBeProcessed(); + mStubbedTimeZoneDetectorStrategy.verifySuggestTelephonyTimeZoneCalled(timeZoneSuggestion); + } + @Test public void testDump() { when(mMockContext.checkCallingOrSelfPermission(android.Manifest.permission.DUMP)) @@ -165,6 +165,10 @@ public class TimeZoneDetectorServiceTest { mStubbedTimeZoneDetectorStrategy.verifyHandleAutoTimeZoneDetectionChangedCalled(); } + private static ManualTimeZoneSuggestion createManualTimeZoneSuggestion() { + return new ManualTimeZoneSuggestion("TestZoneId"); + } + private static TelephonyTimeZoneSuggestion createTelephonyTimeZoneSuggestion() { int slotIndex = 1234; return new TelephonyTimeZoneSuggestion.Builder(slotIndex) @@ -174,26 +178,22 @@ public class TimeZoneDetectorServiceTest { .build(); } - private static ManualTimeZoneSuggestion createManualTimeZoneSuggestion() { - return new ManualTimeZoneSuggestion("TestZoneId"); - } - private static class StubbedTimeZoneDetectorStrategy implements TimeZoneDetectorStrategy { // Call tracking. - private TelephonyTimeZoneSuggestion mLastTelephonySuggestion; private ManualTimeZoneSuggestion mLastManualSuggestion; + private TelephonyTimeZoneSuggestion mLastTelephonySuggestion; private boolean mHandleAutoTimeZoneDetectionChangedCalled; private boolean mDumpCalled; @Override - public void suggestTelephonyTimeZone(TelephonyTimeZoneSuggestion timeZoneSuggestion) { - mLastTelephonySuggestion = timeZoneSuggestion; + public void suggestManualTimeZone(ManualTimeZoneSuggestion timeZoneSuggestion) { + mLastManualSuggestion = timeZoneSuggestion; } @Override - public void suggestManualTimeZone(ManualTimeZoneSuggestion timeZoneSuggestion) { - mLastManualSuggestion = timeZoneSuggestion; + public void suggestTelephonyTimeZone(TelephonyTimeZoneSuggestion timeZoneSuggestion) { + mLastTelephonySuggestion = timeZoneSuggestion; } @Override @@ -207,18 +207,18 @@ public class TimeZoneDetectorServiceTest { } void resetCallTracking() { - mLastTelephonySuggestion = null; mLastManualSuggestion = null; + mLastTelephonySuggestion = null; mHandleAutoTimeZoneDetectionChangedCalled = false; mDumpCalled = false; } - void verifySuggestTelephonyTimeZoneCalled(TelephonyTimeZoneSuggestion expectedSuggestion) { - assertEquals(expectedSuggestion, mLastTelephonySuggestion); + void verifySuggestManualTimeZoneCalled(ManualTimeZoneSuggestion expectedSuggestion) { + assertEquals(expectedSuggestion, mLastManualSuggestion); } - public void verifySuggestManualTimeZoneCalled(ManualTimeZoneSuggestion expectedSuggestion) { - assertEquals(expectedSuggestion, mLastManualSuggestion); + void verifySuggestTelephonyTimeZoneCalled(TelephonyTimeZoneSuggestion expectedSuggestion) { + assertEquals(expectedSuggestion, mLastTelephonySuggestion); } void verifyHandleAutoTimeZoneDetectionChangedCalled() { @@ -229,5 +229,4 @@ public class TimeZoneDetectorServiceTest { assertTrue(mDumpCalled); } } - }