From fc4f2ce81d676acc749c40bd781d5a66ccc787a7 Mon Sep 17 00:00:00 2001 From: Neil Fuller Date: Thu, 26 Jan 2023 14:28:55 +0000 Subject: [PATCH] Tweak status display logic and tests The existing logic and tests looks incorrect. Tests have been tidied up to reflect real cases. For example, it's not really possible for the provider to report being "blocked", but for it to report it is "certain" at the same time. Bug: 266921482 Test: atest tests/robotests/src/com/android/settings/datetime/LocationProviderStatusPreferenceControllerTest.java Change-Id: I1a0faa44ed7dd09828ff758db9e40f5d5e010ab0 --- ...ionProviderStatusPreferenceController.java | 22 ++--- ...roviderStatusPreferenceControllerTest.java | 99 ++++++++++--------- 2 files changed, 60 insertions(+), 61 deletions(-) diff --git a/src/com/android/settings/datetime/LocationProviderStatusPreferenceController.java b/src/com/android/settings/datetime/LocationProviderStatusPreferenceController.java index a64273bc9f1..eeece12f0de 100644 --- a/src/com/android/settings/datetime/LocationProviderStatusPreferenceController.java +++ b/src/com/android/settings/datetime/LocationProviderStatusPreferenceController.java @@ -15,6 +15,8 @@ */ package com.android.settings.datetime; +import static android.service.timezone.TimeZoneProviderStatus.DEPENDENCY_STATUS_OK; + import android.app.time.DetectorStatusTypes; import android.app.time.LocationTimeZoneAlgorithmStatus; import android.app.time.TelephonyTimeZoneAlgorithmStatus; @@ -95,22 +97,16 @@ public class LocationProviderStatusPreferenceController .getLocationTimeZoneAlgorithmStatus(); TimeZoneProviderStatus primary = status.getPrimaryProviderReportedStatus(); TimeZoneProviderStatus secondary = status.getSecondaryProviderReportedStatus(); - if (primary == null && secondary == null) { - return null; - } - - if (primary == null) { - return secondary; - } else if (secondary == null) { + if (primary != null && secondary != null) { + if (primary.getLocationDetectionDependencyStatus() == DEPENDENCY_STATUS_OK) { + return secondary; + } return primary; - } - - if (status.getPrimaryProviderStatus() - != LocationTimeZoneAlgorithmStatus.PROVIDER_STATUS_IS_CERTAIN) { + } else if (primary != null) { + return primary; + } else { return secondary; } - - return primary; } @Override diff --git a/tests/robotests/src/com/android/settings/datetime/LocationProviderStatusPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/datetime/LocationProviderStatusPreferenceControllerTest.java index b838355d2fd..1da5e7c8aa1 100644 --- a/tests/robotests/src/com/android/settings/datetime/LocationProviderStatusPreferenceControllerTest.java +++ b/tests/robotests/src/com/android/settings/datetime/LocationProviderStatusPreferenceControllerTest.java @@ -80,21 +80,23 @@ public class LocationProviderStatusPreferenceControllerTest { new LocationProviderStatusPreferenceController(mContext, "LPSPC"); TimeZoneCapabilitiesAndConfig capabilitiesAndConfig = createCapabilitiesAndConfig(false, - DEPENDENCY_STATUS_OK, DEPENDENCY_STATUS_OK); + PROVIDER_STATUS_IS_CERTAIN, DEPENDENCY_STATUS_OK, + PROVIDER_STATUS_IS_CERTAIN, DEPENDENCY_STATUS_OK); when(mTimeManager.getTimeZoneCapabilitiesAndConfig()).thenReturn(capabilitiesAndConfig); assertThat(controller.getAvailabilityStatus()).isEqualTo( BasePreferenceController.CONDITIONALLY_UNAVAILABLE); - capabilitiesAndConfig = createCapabilitiesAndConfig(true, DEPENDENCY_STATUS_OK, - DEPENDENCY_STATUS_OK); + capabilitiesAndConfig = createCapabilitiesAndConfig(true, + PROVIDER_STATUS_IS_CERTAIN, DEPENDENCY_STATUS_OK, + PROVIDER_STATUS_IS_CERTAIN, DEPENDENCY_STATUS_OK); when(mTimeManager.getTimeZoneCapabilitiesAndConfig()).thenReturn(capabilitiesAndConfig); assertThat(controller.getAvailabilityStatus()).isEqualTo( BasePreferenceController.CONDITIONALLY_UNAVAILABLE); capabilitiesAndConfig = createCapabilitiesAndConfig(false, - PROVIDER_STATUS_IS_CERTAIN, DEPENDENCY_STATUS_BLOCKED_BY_SETTINGS, + PROVIDER_STATUS_IS_UNCERTAIN, DEPENDENCY_STATUS_BLOCKED_BY_SETTINGS, PROVIDER_STATUS_IS_CERTAIN, DEPENDENCY_STATUS_OK); when(mTimeManager.getTimeZoneCapabilitiesAndConfig()).thenReturn(capabilitiesAndConfig); @@ -102,7 +104,7 @@ public class LocationProviderStatusPreferenceControllerTest { BasePreferenceController.AVAILABLE_UNSEARCHABLE); capabilitiesAndConfig = createCapabilitiesAndConfig(true, - PROVIDER_STATUS_IS_CERTAIN, DEPENDENCY_STATUS_BLOCKED_BY_SETTINGS, + PROVIDER_STATUS_IS_UNCERTAIN, DEPENDENCY_STATUS_BLOCKED_BY_SETTINGS, PROVIDER_STATUS_IS_CERTAIN, DEPENDENCY_STATUS_OK); when(mTimeManager.getTimeZoneCapabilitiesAndConfig()).thenReturn(capabilitiesAndConfig); @@ -124,28 +126,20 @@ public class LocationProviderStatusPreferenceControllerTest { BasePreferenceController.CONDITIONALLY_UNAVAILABLE); capabilitiesAndConfig = createCapabilitiesAndConfig(false, - PROVIDER_STATUS_IS_CERTAIN, DEPENDENCY_STATUS_BLOCKED_BY_SETTINGS, - PROVIDER_STATUS_IS_CERTAIN, DEPENDENCY_STATUS_OK); + PROVIDER_STATUS_IS_CERTAIN, DEPENDENCY_STATUS_OK, + PROVIDER_STATUS_IS_UNCERTAIN, DEPENDENCY_STATUS_OK); + when(mTimeManager.getTimeZoneCapabilitiesAndConfig()).thenReturn(capabilitiesAndConfig); + + assertThat(controller.getAvailabilityStatus()).isEqualTo( + BasePreferenceController.CONDITIONALLY_UNAVAILABLE); + + capabilitiesAndConfig = createCapabilitiesAndConfig(false, + PROVIDER_STATUS_IS_CERTAIN, DEPENDENCY_STATUS_OK, + PROVIDER_STATUS_IS_UNCERTAIN, DEPENDENCY_STATUS_BLOCKED_BY_SETTINGS); when(mTimeManager.getTimeZoneCapabilitiesAndConfig()).thenReturn(capabilitiesAndConfig); assertThat(controller.getAvailabilityStatus()).isEqualTo( BasePreferenceController.AVAILABLE_UNSEARCHABLE); - - capabilitiesAndConfig = createCapabilitiesAndConfig(false, - PROVIDER_STATUS_IS_CERTAIN, DEPENDENCY_STATUS_OK, - PROVIDER_STATUS_IS_CERTAIN, DEPENDENCY_STATUS_BLOCKED_BY_SETTINGS); - when(mTimeManager.getTimeZoneCapabilitiesAndConfig()).thenReturn(capabilitiesAndConfig); - - assertThat(controller.getAvailabilityStatus()).isEqualTo( - BasePreferenceController.CONDITIONALLY_UNAVAILABLE); - - capabilitiesAndConfig = createCapabilitiesAndConfig(false, - PROVIDER_STATUS_IS_CERTAIN, DEPENDENCY_STATUS_OK, - PROVIDER_STATUS_IS_CERTAIN, DEPENDENCY_STATUS_BLOCKED_BY_SETTINGS); - when(mTimeManager.getTimeZoneCapabilitiesAndConfig()).thenReturn(capabilitiesAndConfig); - - assertThat(controller.getAvailabilityStatus()).isEqualTo( - BasePreferenceController.CONDITIONALLY_UNAVAILABLE); } @Test @@ -154,7 +148,7 @@ public class LocationProviderStatusPreferenceControllerTest { new LocationProviderStatusPreferenceController(mContext, "LPSPC"); TimeZoneCapabilitiesAndConfig capabilitiesAndConfig = createCapabilitiesAndConfig(false, - PROVIDER_STATUS_IS_CERTAIN, DEPENDENCY_STATUS_OK, + PROVIDER_STATUS_IS_UNCERTAIN, DEPENDENCY_STATUS_OK, PROVIDER_STATUS_IS_CERTAIN, DEPENDENCY_STATUS_OK); when(mTimeManager.getTimeZoneCapabilitiesAndConfig()).thenReturn(capabilitiesAndConfig); @@ -162,7 +156,15 @@ public class LocationProviderStatusPreferenceControllerTest { BasePreferenceController.CONDITIONALLY_UNAVAILABLE); capabilitiesAndConfig = createCapabilitiesAndConfig(false, - PROVIDER_STATUS_IS_CERTAIN, DEPENDENCY_STATUS_BLOCKED_BY_SETTINGS, + PROVIDER_STATUS_IS_UNCERTAIN, DEPENDENCY_STATUS_OK, + PROVIDER_STATUS_IS_UNCERTAIN, DEPENDENCY_STATUS_BLOCKED_BY_SETTINGS); + when(mTimeManager.getTimeZoneCapabilitiesAndConfig()).thenReturn(capabilitiesAndConfig); + + assertThat(controller.getAvailabilityStatus()).isEqualTo( + BasePreferenceController.AVAILABLE_UNSEARCHABLE); + + capabilitiesAndConfig = createCapabilitiesAndConfig(false, + PROVIDER_STATUS_IS_UNCERTAIN, DEPENDENCY_STATUS_BLOCKED_BY_SETTINGS, PROVIDER_STATUS_IS_CERTAIN, DEPENDENCY_STATUS_OK); when(mTimeManager.getTimeZoneCapabilitiesAndConfig()).thenReturn(capabilitiesAndConfig); @@ -170,20 +172,20 @@ public class LocationProviderStatusPreferenceControllerTest { BasePreferenceController.AVAILABLE_UNSEARCHABLE); capabilitiesAndConfig = createCapabilitiesAndConfig(false, - PROVIDER_STATUS_IS_UNCERTAIN, DEPENDENCY_STATUS_OK, - PROVIDER_STATUS_IS_CERTAIN, DEPENDENCY_STATUS_BLOCKED_BY_SETTINGS); + PROVIDER_STATUS_IS_UNCERTAIN, DEPENDENCY_STATUS_BLOCKED_BY_SETTINGS, + PROVIDER_STATUS_IS_UNCERTAIN, DEPENDENCY_STATUS_OK); when(mTimeManager.getTimeZoneCapabilitiesAndConfig()).thenReturn(capabilitiesAndConfig); assertThat(controller.getAvailabilityStatus()).isEqualTo( BasePreferenceController.AVAILABLE_UNSEARCHABLE); capabilitiesAndConfig = createCapabilitiesAndConfig(false, - PROVIDER_STATUS_IS_UNCERTAIN, DEPENDENCY_STATUS_OK, - PROVIDER_STATUS_IS_CERTAIN, DEPENDENCY_STATUS_OK); + PROVIDER_STATUS_IS_UNCERTAIN, DEPENDENCY_STATUS_BLOCKED_BY_SETTINGS, + PROVIDER_STATUS_IS_UNCERTAIN, DEPENDENCY_STATUS_BLOCKED_BY_SETTINGS); when(mTimeManager.getTimeZoneCapabilitiesAndConfig()).thenReturn(capabilitiesAndConfig); assertThat(controller.getAvailabilityStatus()).isEqualTo( - BasePreferenceController.CONDITIONALLY_UNAVAILABLE); + BasePreferenceController.AVAILABLE_UNSEARCHABLE); } @Test @@ -200,35 +202,36 @@ public class LocationProviderStatusPreferenceControllerTest { BasePreferenceController.CONDITIONALLY_UNAVAILABLE); capabilitiesAndConfig = createCapabilitiesAndConfig(false, - PROVIDER_STATUS_IS_CERTAIN, DEPENDENCY_STATUS_BLOCKED_BY_SETTINGS, - PROVIDER_STATUS_IS_CERTAIN, null); - when(mTimeManager.getTimeZoneCapabilitiesAndConfig()).thenReturn(capabilitiesAndConfig); - - assertThat(controller.getAvailabilityStatus()).isEqualTo( - BasePreferenceController.AVAILABLE_UNSEARCHABLE); - - capabilitiesAndConfig = createCapabilitiesAndConfig(false, DEPENDENCY_STATUS_OK, null); + PROVIDER_STATUS_IS_CERTAIN, DEPENDENCY_STATUS_OK, + PROVIDER_STATUS_IS_UNCERTAIN, null); when(mTimeManager.getTimeZoneCapabilitiesAndConfig()).thenReturn(capabilitiesAndConfig); assertThat(controller.getAvailabilityStatus()).isEqualTo( BasePreferenceController.CONDITIONALLY_UNAVAILABLE); capabilitiesAndConfig = createCapabilitiesAndConfig(false, - PROVIDER_STATUS_IS_CERTAIN, null, - PROVIDER_STATUS_IS_CERTAIN, DEPENDENCY_STATUS_BLOCKED_BY_SETTINGS); + PROVIDER_STATUS_IS_CERTAIN, DEPENDENCY_STATUS_OK, + PROVIDER_STATUS_IS_CERTAIN, null); + when(mTimeManager.getTimeZoneCapabilitiesAndConfig()).thenReturn(capabilitiesAndConfig); + + assertThat(controller.getAvailabilityStatus()).isEqualTo( + BasePreferenceController.CONDITIONALLY_UNAVAILABLE); + + capabilitiesAndConfig = createCapabilitiesAndConfig(false, + PROVIDER_STATUS_IS_UNCERTAIN, DEPENDENCY_STATUS_BLOCKED_BY_SETTINGS, + PROVIDER_STATUS_IS_CERTAIN, null); when(mTimeManager.getTimeZoneCapabilitiesAndConfig()).thenReturn(capabilitiesAndConfig); assertThat(controller.getAvailabilityStatus()).isEqualTo( BasePreferenceController.AVAILABLE_UNSEARCHABLE); - } - private static TimeZoneCapabilitiesAndConfig createCapabilitiesAndConfig( - boolean userCanConfigureGeoDetection, - @Nullable @DependencyStatus Integer primaryProviderLocationStatus, - @Nullable @DependencyStatus Integer secondaryProviderLocationStatus) { - return createCapabilitiesAndConfig(userCanConfigureGeoDetection, - PROVIDER_STATUS_IS_CERTAIN, primaryProviderLocationStatus, - PROVIDER_STATUS_IS_CERTAIN, secondaryProviderLocationStatus); + capabilitiesAndConfig = createCapabilitiesAndConfig(false, + PROVIDER_STATUS_IS_CERTAIN, null, + PROVIDER_STATUS_IS_UNCERTAIN, DEPENDENCY_STATUS_BLOCKED_BY_SETTINGS); + when(mTimeManager.getTimeZoneCapabilitiesAndConfig()).thenReturn(capabilitiesAndConfig); + + assertThat(controller.getAvailabilityStatus()).isEqualTo( + BasePreferenceController.AVAILABLE_UNSEARCHABLE); } private static TimeZoneCapabilitiesAndConfig createCapabilitiesAndConfig(