From ee2feb56e1ed6aa33f1dbf300ee8c91fbaba49d6 Mon Sep 17 00:00:00 2001 From: Neil Fuller Date: Tue, 20 Apr 2021 13:43:58 +0100 Subject: [PATCH] Fix "location_time_zone_detection_enabled" Fix "location_time_zone_detection_enabled" user restriction handling. This setting impacts user privacy so it is not being restricted like the ability to set the time / time zone manually & change the auto time / time zone toggles. Bug: 166579161 Test: Manual testing with the restriction enabled via TestDPC Test: atest services/tests/servicestests/src/com/android/server/timezonedetector/ConfigurationInternalTest.java Test: atest services/tests/servicestests/src/com/android/server/timezonedetector/TimeZoneDetectorStrategyImplTest.java Change-Id: I07eb49a4aaa3392aefdb733465b27d671b3e227d --- .../ConfigurationInternal.java | 5 ++-- .../ConfigurationInternalTest.java | 28 ++++++++++--------- .../TimeZoneDetectorStrategyImplTest.java | 13 ++++++--- 3 files changed, 27 insertions(+), 19 deletions(-) diff --git a/services/core/java/com/android/server/timezonedetector/ConfigurationInternal.java b/services/core/java/com/android/server/timezonedetector/ConfigurationInternal.java index b4aa201307917..22814b31a156c 100644 --- a/services/core/java/com/android/server/timezonedetector/ConfigurationInternal.java +++ b/services/core/java/com/android/server/timezonedetector/ConfigurationInternal.java @@ -148,11 +148,12 @@ public final class ConfigurationInternal { builder.setConfigureAutoDetectionEnabledCapability(configureAutoDetectionEnabledCapability); boolean deviceHasLocationTimeZoneDetection = isGeoDetectionSupported(); + // Note: allowConfigDateTime does not restrict the ability to change location time zone + // detection enabled. This is intentional as it has user privacy implications and so it + // makes sense to leave this under a user's control. final int configureGeolocationDetectionEnabledCapability; if (!deviceHasLocationTimeZoneDetection) { configureGeolocationDetectionEnabledCapability = CAPABILITY_NOT_SUPPORTED; - } else if (!allowConfigDateTime) { - configureGeolocationDetectionEnabledCapability = CAPABILITY_NOT_ALLOWED; } else if (!mAutoDetectionEnabled || !isLocationEnabled()) { configureGeolocationDetectionEnabledCapability = CAPABILITY_NOT_APPLICABLE; } else { diff --git a/services/tests/servicestests/src/com/android/server/timezonedetector/ConfigurationInternalTest.java b/services/tests/servicestests/src/com/android/server/timezonedetector/ConfigurationInternalTest.java index aa46e7ef658f3..117680b928f23 100644 --- a/services/tests/servicestests/src/com/android/server/timezonedetector/ConfigurationInternalTest.java +++ b/services/tests/servicestests/src/com/android/server/timezonedetector/ConfigurationInternalTest.java @@ -67,10 +67,10 @@ public class ConfigurationInternalTest { TimeZoneCapabilities capabilities = capabilitiesAndConfig.getCapabilities(); assertEquals(CAPABILITY_POSSESSED, capabilities.getConfigureAutoDetectionEnabledCapability()); - assertEquals(CAPABILITY_POSSESSED, - capabilities.getConfigureGeoDetectionEnabledCapability()); assertEquals(CAPABILITY_NOT_APPLICABLE, capabilities.getSuggestManualTimeZoneCapability()); + assertEquals(CAPABILITY_POSSESSED, + capabilities.getConfigureGeoDetectionEnabledCapability()); TimeZoneConfiguration configuration = capabilitiesAndConfig.getConfiguration(); assertTrue(configuration.isAutoDetectionEnabled()); @@ -92,10 +92,10 @@ public class ConfigurationInternalTest { TimeZoneCapabilities capabilities = capabilitiesAndConfig.getCapabilities(); assertEquals(CAPABILITY_POSSESSED, capabilities.getConfigureAutoDetectionEnabledCapability()); - assertEquals(CAPABILITY_NOT_APPLICABLE, - capabilities.getConfigureGeoDetectionEnabledCapability()); assertEquals(CAPABILITY_POSSESSED, capabilities.getSuggestManualTimeZoneCapability()); + assertEquals(CAPABILITY_NOT_APPLICABLE, + capabilities.getConfigureGeoDetectionEnabledCapability()); TimeZoneConfiguration configuration = capabilitiesAndConfig.getConfiguration(); assertFalse(configuration.isAutoDetectionEnabled()); @@ -129,10 +129,11 @@ public class ConfigurationInternalTest { TimeZoneCapabilities capabilities = capabilitiesAndConfig.getCapabilities(); assertEquals(CAPABILITY_NOT_ALLOWED, capabilities.getConfigureAutoDetectionEnabledCapability()); - assertEquals(CAPABILITY_NOT_ALLOWED, - capabilities.getConfigureGeoDetectionEnabledCapability()); assertEquals(CAPABILITY_NOT_ALLOWED, capabilities.getSuggestManualTimeZoneCapability()); + // This has user privacy implications so it is not restricted in the same way as others. + assertEquals(CAPABILITY_POSSESSED, + capabilities.getConfigureGeoDetectionEnabledCapability()); TimeZoneConfiguration configuration = capabilitiesAndConfig.getConfiguration(); assertTrue(configuration.isAutoDetectionEnabled()); @@ -154,10 +155,11 @@ public class ConfigurationInternalTest { TimeZoneCapabilities capabilities = capabilitiesAndConfig.getCapabilities(); assertEquals(CAPABILITY_NOT_ALLOWED, capabilities.getConfigureAutoDetectionEnabledCapability()); - assertEquals(CAPABILITY_NOT_ALLOWED, - capabilities.getConfigureGeoDetectionEnabledCapability()); assertEquals(CAPABILITY_NOT_ALLOWED, capabilities.getSuggestManualTimeZoneCapability()); + // This has user privacy implications so it is not restricted in the same way as others. + assertEquals(CAPABILITY_NOT_APPLICABLE, + capabilities.getConfigureGeoDetectionEnabledCapability()); TimeZoneConfiguration configuration = capabilitiesAndConfig.getConfiguration(); assertFalse(configuration.isAutoDetectionEnabled()); @@ -191,9 +193,9 @@ public class ConfigurationInternalTest { TimeZoneCapabilities capabilities = capabilitiesAndConfig.getCapabilities(); assertEquals(CAPABILITY_NOT_SUPPORTED, capabilities.getConfigureAutoDetectionEnabledCapability()); + assertEquals(CAPABILITY_POSSESSED, capabilities.getSuggestManualTimeZoneCapability()); assertEquals(CAPABILITY_NOT_SUPPORTED, capabilities.getConfigureGeoDetectionEnabledCapability()); - assertEquals(CAPABILITY_POSSESSED, capabilities.getSuggestManualTimeZoneCapability()); TimeZoneConfiguration configuration = capabilitiesAndConfig.getConfiguration(); assertTrue(configuration.isAutoDetectionEnabled()); @@ -214,9 +216,9 @@ public class ConfigurationInternalTest { TimeZoneCapabilities capabilities = capabilitiesAndConfig.getCapabilities(); assertEquals(CAPABILITY_NOT_SUPPORTED, capabilities.getConfigureAutoDetectionEnabledCapability()); + assertEquals(CAPABILITY_POSSESSED, capabilities.getSuggestManualTimeZoneCapability()); assertEquals(CAPABILITY_NOT_SUPPORTED, capabilities.getConfigureGeoDetectionEnabledCapability()); - assertEquals(CAPABILITY_POSSESSED, capabilities.getSuggestManualTimeZoneCapability()); TimeZoneConfiguration configuration = capabilitiesAndConfig.getConfiguration(); assertFalse(configuration.isAutoDetectionEnabled()); @@ -253,10 +255,10 @@ public class ConfigurationInternalTest { TimeZoneCapabilities capabilities = capabilitiesAndConfig.getCapabilities(); assertEquals(CAPABILITY_POSSESSED, capabilities.getConfigureAutoDetectionEnabledCapability()); - assertEquals(CAPABILITY_NOT_SUPPORTED, - capabilities.getConfigureGeoDetectionEnabledCapability()); assertEquals(CAPABILITY_NOT_APPLICABLE, capabilities.getSuggestManualTimeZoneCapability()); + assertEquals(CAPABILITY_NOT_SUPPORTED, + capabilities.getConfigureGeoDetectionEnabledCapability()); TimeZoneConfiguration configuration = capabilitiesAndConfig.getConfiguration(); assertTrue(configuration.isAutoDetectionEnabled()); @@ -277,9 +279,9 @@ public class ConfigurationInternalTest { TimeZoneCapabilities capabilities = capabilitiesAndConfig.getCapabilities(); assertEquals(CAPABILITY_POSSESSED, capabilities.getConfigureAutoDetectionEnabledCapability()); + assertEquals(CAPABILITY_POSSESSED, capabilities.getSuggestManualTimeZoneCapability()); assertEquals(CAPABILITY_NOT_SUPPORTED, capabilities.getConfigureGeoDetectionEnabledCapability()); - assertEquals(CAPABILITY_POSSESSED, capabilities.getSuggestManualTimeZoneCapability()); TimeZoneConfiguration configuration = capabilitiesAndConfig.getConfiguration(); assertFalse(configuration.isAutoDetectionEnabled()); 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 f91ce87e8f08b..47475a66c0d52 100644 --- a/services/tests/servicestests/src/com/android/server/timezonedetector/TimeZoneDetectorStrategyImplTest.java +++ b/services/tests/servicestests/src/com/android/server/timezonedetector/TimeZoneDetectorStrategyImplTest.java @@ -237,12 +237,17 @@ public class TimeZoneDetectorStrategyImplTest { // The settings should not have been changed: user shouldn't have the capabilities. script.verifyConfigurationNotChanged(); - // Try to update the configuration to enable geolocation time zone detection. + // Try to update the configuration to enable geolocation time zone detection: this should + // succeed, the geolocation time zone detection setting is not covered by the restriction). script.simulateUpdateConfiguration( - USER_ID, CONFIG_GEO_DETECTION_ENABLED, false /* expectedResult */); + USER_ID, CONFIG_GEO_DETECTION_DISABLED, true /* expectedResult */); - // The settings should not have been changed: user shouldn't have the capabilities. - script.verifyConfigurationNotChanged(); + // The settings should have been changed. + ConfigurationInternal expectedConfig = new ConfigurationInternal.Builder( + CONFIG_INT_USER_RESTRICTED_AUTO_ENABLED) + .setGeoDetectionEnabled(false) + .build(); + script.verifyConfigurationChangedAndReset(expectedConfig); } @Test