Merge changes Ifd96c543,I1a0faa44
* changes: Further status logic tweaks Tweak status display logic and tests
This commit is contained in:
@@ -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;
|
||||
@@ -89,28 +91,36 @@ 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();
|
||||
if (primary == null && secondary == null) {
|
||||
return null;
|
||||
}
|
||||
|
||||
if (primary == null) {
|
||||
return secondary;
|
||||
} else if (secondary == null) {
|
||||
@Nullable TimeZoneProviderStatus primary = status.getPrimaryProviderReportedStatus();
|
||||
@Nullable TimeZoneProviderStatus secondary = status.getSecondaryProviderReportedStatus();
|
||||
if (primary != null && secondary != null) {
|
||||
return pickWorstLtzpStatus(primary, secondary);
|
||||
} else if (primary != null) {
|
||||
return primary;
|
||||
}
|
||||
|
||||
if (status.getPrimaryProviderStatus()
|
||||
!= LocationTimeZoneAlgorithmStatus.PROVIDER_STATUS_IS_CERTAIN) {
|
||||
} else {
|
||||
return secondary;
|
||||
}
|
||||
}
|
||||
|
||||
return primary;
|
||||
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
|
||||
@@ -132,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 "";
|
||||
}
|
||||
|
@@ -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,42 +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,
|
||||
DEPENDENCY_STATUS_OK, DEPENDENCY_STATUS_OK);
|
||||
when(mTimeManager.getTimeZoneCapabilitiesAndConfig()).thenReturn(capabilitiesAndConfig);
|
||||
|
||||
assertThat(controller.getAvailabilityStatus()).isEqualTo(
|
||||
BasePreferenceController.CONDITIONALLY_UNAVAILABLE);
|
||||
|
||||
capabilitiesAndConfig = createCapabilitiesAndConfig(true, DEPENDENCY_STATUS_OK,
|
||||
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_CERTAIN, DEPENDENCY_STATUS_OK);
|
||||
when(mTimeManager.getTimeZoneCapabilitiesAndConfig()).thenReturn(capabilitiesAndConfig);
|
||||
|
||||
assertThat(controller.getAvailabilityStatus()).isEqualTo(
|
||||
BasePreferenceController.AVAILABLE_UNSEARCHABLE);
|
||||
|
||||
capabilitiesAndConfig = createCapabilitiesAndConfig(true,
|
||||
PROVIDER_STATUS_IS_CERTAIN, 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
|
||||
@@ -124,7 +92,26 @@ 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_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);
|
||||
|
||||
// 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);
|
||||
|
||||
@@ -132,20 +119,28 @@ public class LocationProviderStatusPreferenceControllerTest {
|
||||
BasePreferenceController.AVAILABLE_UNSEARCHABLE);
|
||||
|
||||
capabilitiesAndConfig = createCapabilitiesAndConfig(false,
|
||||
PROVIDER_STATUS_IS_CERTAIN, DEPENDENCY_STATUS_OK,
|
||||
PROVIDER_STATUS_IS_CERTAIN, DEPENDENCY_STATUS_BLOCKED_BY_SETTINGS);
|
||||
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.CONDITIONALLY_UNAVAILABLE);
|
||||
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_BLOCKED_BY_SETTINGS);
|
||||
PROVIDER_STATUS_IS_CERTAIN, DEPENDENCY_STATUS_DEGRADED_BY_SETTINGS);
|
||||
when(mTimeManager.getTimeZoneCapabilitiesAndConfig()).thenReturn(capabilitiesAndConfig);
|
||||
|
||||
assertThat(controller.getAvailabilityStatus()).isEqualTo(
|
||||
BasePreferenceController.CONDITIONALLY_UNAVAILABLE);
|
||||
BasePreferenceController.AVAILABLE_UNSEARCHABLE);
|
||||
}
|
||||
|
||||
@Test
|
||||
@@ -154,7 +149,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 +157,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 +173,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 +203,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(
|
||||
|
Reference in New Issue
Block a user