From fc4f2ce81d676acc749c40bd781d5a66ccc787a7 Mon Sep 17 00:00:00 2001 From: Neil Fuller Date: Thu, 26 Jan 2023 14:28:55 +0000 Subject: [PATCH 1/2] 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( From 37996acd7c4e86973da2050c92e0e6b88343adde Mon Sep 17 00:00:00 2001 From: Neil Fuller Date: Thu, 26 Jan 2023 15:08:06 +0000 Subject: [PATCH 2/2] Further status logic tweaks Change the SettingsUI logic slightly: All other things being equal, pick the "worst" location dependency status to show. Some renaming and annotations for clarity. Also fixes the mocking behavior in the tests around resources, which were accidentally using the real strings and therefore dependent on real resource string values. Tests are made more explicit. Bug: 266921482 Test: atest tests/robotests/src/com/android/settings/datetime/LocationProviderStatusPreferenceControllerTest.java Change-Id: Ifd96c543dad692884be23bf94e3f1294eed291d5 --- ...ionProviderStatusPreferenceController.java | 65 ++++++++++------ ...roviderStatusPreferenceControllerTest.java | 77 ++++++++++--------- 2 files changed, 80 insertions(+), 62 deletions(-) diff --git a/src/com/android/settings/datetime/LocationProviderStatusPreferenceController.java b/src/com/android/settings/datetime/LocationProviderStatusPreferenceController.java index eeece12f0de..f45fe880dc9 100644 --- a/src/com/android/settings/datetime/LocationProviderStatusPreferenceController.java +++ b/src/com/android/settings/datetime/LocationProviderStatusPreferenceController.java @@ -91,17 +91,14 @@ public class LocationProviderStatusPreferenceController // only one LTZP on a device, the primary. The UI here only reports status for one // LTZP. This UI logic prioritizes the primary if there is a "bad" status for both. @Nullable - private TimeZoneProviderStatus getLtzpStatus() { + private TimeZoneProviderStatus getLtzpStatusToReport() { LocationTimeZoneAlgorithmStatus status = mTimeManager.getTimeZoneCapabilitiesAndConfig().getDetectorStatus() .getLocationTimeZoneAlgorithmStatus(); - TimeZoneProviderStatus primary = status.getPrimaryProviderReportedStatus(); - TimeZoneProviderStatus secondary = status.getSecondaryProviderReportedStatus(); + @Nullable TimeZoneProviderStatus primary = status.getPrimaryProviderReportedStatus(); + @Nullable TimeZoneProviderStatus secondary = status.getSecondaryProviderReportedStatus(); if (primary != null && secondary != null) { - if (primary.getLocationDetectionDependencyStatus() == DEPENDENCY_STATUS_OK) { - return secondary; - } - return primary; + return pickWorstLtzpStatus(primary, secondary); } else if (primary != null) { return primary; } else { @@ -109,6 +106,23 @@ public class LocationProviderStatusPreferenceController } } + private static TimeZoneProviderStatus pickWorstLtzpStatus( + TimeZoneProviderStatus primary, TimeZoneProviderStatus secondary) { + int primaryScore = scoreLtzpStatus(primary); + int secondaryScore = scoreLtzpStatus(secondary); + return primaryScore >= secondaryScore ? primary : secondary; + } + + private static int scoreLtzpStatus(TimeZoneProviderStatus providerStatus) { + @DependencyStatus int locationStatus = + providerStatus.getLocationDetectionDependencyStatus(); + if (locationStatus <= DEPENDENCY_STATUS_OK) { + return 0; + } + // The enum values currently correspond well to severity. + return providerStatus.getLocationDetectionDependencyStatus(); + } + @Override public void onChange() { if (mPreference != null) { @@ -128,33 +142,36 @@ public class LocationProviderStatusPreferenceController if (!timeZoneCapabilities.isUseLocationEnabled() && hasLocationTimeZoneNoTelephonyFallback(detectorStatus)) { - return mContext.getResources().getString( + return mContext.getString( R.string.location_time_zone_detection_status_summary_blocked_by_settings); } - TimeZoneProviderStatus ltzpStatus = getLtzpStatus(); + TimeZoneProviderStatus ltzpStatus = getLtzpStatusToReport(); if (ltzpStatus == null) { return ""; } - @DependencyStatus int status = ltzpStatus.getLocationDetectionDependencyStatus(); + @DependencyStatus int locationStatus = ltzpStatus.getLocationDetectionDependencyStatus(); - if (status == TimeZoneProviderStatus.DEPENDENCY_STATUS_BLOCKED_BY_ENVIRONMENT) { - return mContext.getResources().getString( - R.string.location_time_zone_detection_status_summary_blocked_by_environment); - } - if (status == TimeZoneProviderStatus.DEPENDENCY_STATUS_DEGRADED_BY_SETTINGS) { - return mContext.getResources().getString( - R.string.location_time_zone_detection_status_summary_degraded_by_settings); - } - if (status == TimeZoneProviderStatus.DEPENDENCY_STATUS_TEMPORARILY_UNAVAILABLE) { - return mContext.getResources().getString( - R.string.location_time_zone_detection_status_summary_temporarily_unavailable); - } - if (status == TimeZoneProviderStatus.DEPENDENCY_STATUS_BLOCKED_BY_SETTINGS) { - return mContext.getResources().getString( + if (locationStatus == TimeZoneProviderStatus.DEPENDENCY_STATUS_BLOCKED_BY_SETTINGS) { + return mContext.getString( R.string.location_time_zone_detection_status_summary_blocked_by_settings); } + if (locationStatus == TimeZoneProviderStatus.DEPENDENCY_STATUS_DEGRADED_BY_SETTINGS) { + return mContext.getString( + R.string.location_time_zone_detection_status_summary_degraded_by_settings); + } + if (locationStatus == TimeZoneProviderStatus.DEPENDENCY_STATUS_BLOCKED_BY_ENVIRONMENT) { + return mContext.getString( + R.string.location_time_zone_detection_status_summary_blocked_by_environment); + } + if (locationStatus == TimeZoneProviderStatus.DEPENDENCY_STATUS_TEMPORARILY_UNAVAILABLE) { + return mContext.getString( + R.string.location_time_zone_detection_status_summary_temporarily_unavailable); + } + + // LTZP-reported network connectivity and time zone resolution statuses are currently + // ignored. Partners can tweak this logic if they also want to report these to users. return ""; } diff --git a/tests/robotests/src/com/android/settings/datetime/LocationProviderStatusPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/datetime/LocationProviderStatusPreferenceControllerTest.java index 1da5e7c8aa1..9ace56387b8 100644 --- a/tests/robotests/src/com/android/settings/datetime/LocationProviderStatusPreferenceControllerTest.java +++ b/tests/robotests/src/com/android/settings/datetime/LocationProviderStatusPreferenceControllerTest.java @@ -21,6 +21,7 @@ import static android.app.time.DetectorStatusTypes.DETECTOR_STATUS_RUNNING; import static android.app.time.LocationTimeZoneAlgorithmStatus.PROVIDER_STATUS_IS_CERTAIN; import static android.app.time.LocationTimeZoneAlgorithmStatus.PROVIDER_STATUS_IS_UNCERTAIN; import static android.service.timezone.TimeZoneProviderStatus.DEPENDENCY_STATUS_BLOCKED_BY_SETTINGS; +import static android.service.timezone.TimeZoneProviderStatus.DEPENDENCY_STATUS_DEGRADED_BY_SETTINGS; import static android.service.timezone.TimeZoneProviderStatus.DEPENDENCY_STATUS_OK; import static com.google.common.truth.Truth.assertThat; @@ -72,44 +73,9 @@ public class LocationProviderStatusPreferenceControllerTest { when(mContext.getString( R.string.location_time_zone_detection_status_summary_blocked_by_settings)) .thenReturn("BBS"); - } - - @Test - public void testCapabilityStatus() { - LocationProviderStatusPreferenceController controller = - new LocationProviderStatusPreferenceController(mContext, "LPSPC"); - - TimeZoneCapabilitiesAndConfig capabilitiesAndConfig = createCapabilitiesAndConfig(false, - 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, - 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_UNCERTAIN, DEPENDENCY_STATUS_BLOCKED_BY_SETTINGS, - PROVIDER_STATUS_IS_CERTAIN, DEPENDENCY_STATUS_OK); - when(mTimeManager.getTimeZoneCapabilitiesAndConfig()).thenReturn(capabilitiesAndConfig); - - assertThat(controller.getAvailabilityStatus()).isEqualTo( - BasePreferenceController.AVAILABLE_UNSEARCHABLE); - - capabilitiesAndConfig = createCapabilitiesAndConfig(true, - PROVIDER_STATUS_IS_UNCERTAIN, DEPENDENCY_STATUS_BLOCKED_BY_SETTINGS, - PROVIDER_STATUS_IS_CERTAIN, DEPENDENCY_STATUS_OK); - when(mTimeManager.getTimeZoneCapabilitiesAndConfig()).thenReturn(capabilitiesAndConfig); - - assertThat(controller.getAvailabilityStatus()).isEqualTo( - BasePreferenceController.AVAILABLE_UNSEARCHABLE); + when(mContext.getString( + R.string.location_time_zone_detection_status_summary_degraded_by_settings)) + .thenReturn("DBS"); } @Test @@ -138,6 +104,41 @@ public class LocationProviderStatusPreferenceControllerTest { PROVIDER_STATUS_IS_UNCERTAIN, DEPENDENCY_STATUS_BLOCKED_BY_SETTINGS); when(mTimeManager.getTimeZoneCapabilitiesAndConfig()).thenReturn(capabilitiesAndConfig); + assertThat(controller.getAvailabilityStatus()).isEqualTo( + BasePreferenceController.AVAILABLE_UNSEARCHABLE); + + // Test whether reportable statuses that can still result in the LTZP being "certain" are + // reported. + + capabilitiesAndConfig = createCapabilitiesAndConfig(false, + PROVIDER_STATUS_IS_CERTAIN, DEPENDENCY_STATUS_DEGRADED_BY_SETTINGS, + PROVIDER_STATUS_IS_CERTAIN, DEPENDENCY_STATUS_OK); + when(mTimeManager.getTimeZoneCapabilitiesAndConfig()).thenReturn(capabilitiesAndConfig); + + assertThat(controller.getAvailabilityStatus()).isEqualTo( + BasePreferenceController.AVAILABLE_UNSEARCHABLE); + + capabilitiesAndConfig = createCapabilitiesAndConfig(false, + PROVIDER_STATUS_IS_CERTAIN, DEPENDENCY_STATUS_DEGRADED_BY_SETTINGS, + PROVIDER_STATUS_IS_CERTAIN, DEPENDENCY_STATUS_DEGRADED_BY_SETTINGS); + when(mTimeManager.getTimeZoneCapabilitiesAndConfig()).thenReturn(capabilitiesAndConfig); + + assertThat(controller.getAvailabilityStatus()).isEqualTo( + BasePreferenceController.AVAILABLE_UNSEARCHABLE); + + capabilitiesAndConfig = createCapabilitiesAndConfig(false, + PROVIDER_STATUS_IS_CERTAIN, DEPENDENCY_STATUS_DEGRADED_BY_SETTINGS, + 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_DEGRADED_BY_SETTINGS); + when(mTimeManager.getTimeZoneCapabilitiesAndConfig()).thenReturn(capabilitiesAndConfig); + assertThat(controller.getAvailabilityStatus()).isEqualTo( BasePreferenceController.AVAILABLE_UNSEARCHABLE); }