Merge "Add "Use location" state to TimeZoneCapabilities"
This commit is contained in:
@@ -19,10 +19,12 @@ import android.app.time.DetectorStatusTypes;
|
||||
import android.app.time.LocationTimeZoneAlgorithmStatus;
|
||||
import android.app.time.TelephonyTimeZoneAlgorithmStatus;
|
||||
import android.app.time.TimeManager;
|
||||
import android.app.time.TimeZoneCapabilities;
|
||||
import android.app.time.TimeZoneCapabilitiesAndConfig;
|
||||
import android.app.time.TimeZoneDetectorStatus;
|
||||
import android.content.Context;
|
||||
import android.location.LocationManager;
|
||||
import android.service.timezone.TimeZoneProviderStatus;
|
||||
import android.service.timezone.TimeZoneProviderStatus.DependencyStatus;
|
||||
import android.text.TextUtils;
|
||||
|
||||
import androidx.annotation.Nullable;
|
||||
@@ -43,14 +45,12 @@ import java.util.concurrent.Executor;
|
||||
public class LocationProviderStatusPreferenceController
|
||||
extends BasePreferenceController implements TimeManager.TimeZoneDetectorListener {
|
||||
private final TimeManager mTimeManager;
|
||||
private final LocationManager mLocationManager;
|
||||
|
||||
private BannerMessagePreference mPreference = null;
|
||||
|
||||
public LocationProviderStatusPreferenceController(Context context, String preferenceKey) {
|
||||
super(context, preferenceKey);
|
||||
mTimeManager = context.getSystemService(TimeManager.class);
|
||||
mLocationManager = context.getSystemService(LocationManager.class);
|
||||
|
||||
Executor mainExecutor = context.getMainExecutor();
|
||||
mTimeManager.addTimeZoneDetectorListener(mainExecutor, this);
|
||||
@@ -123,11 +123,15 @@ public class LocationProviderStatusPreferenceController
|
||||
|
||||
@Override
|
||||
public CharSequence getSummary() {
|
||||
boolean locationEnabled = mLocationManager.isLocationEnabled();
|
||||
final TimeZoneCapabilitiesAndConfig timeZoneCapabilitiesAndConfig =
|
||||
mTimeManager.getTimeZoneCapabilitiesAndConfig();
|
||||
final TimeZoneDetectorStatus detectorStatus =
|
||||
mTimeManager.getTimeZoneCapabilitiesAndConfig().getDetectorStatus();
|
||||
timeZoneCapabilitiesAndConfig.getDetectorStatus();
|
||||
final TimeZoneCapabilities timeZoneCapabilities =
|
||||
timeZoneCapabilitiesAndConfig.getCapabilities();
|
||||
|
||||
if (!locationEnabled && hasLocationTimeZoneNoTelephonyFallback(detectorStatus)) {
|
||||
if (!timeZoneCapabilities.isUseLocationEnabled()
|
||||
&& hasLocationTimeZoneNoTelephonyFallback(detectorStatus)) {
|
||||
return mContext.getResources().getString(
|
||||
R.string.location_time_zone_detection_status_summary_blocked_by_settings);
|
||||
}
|
||||
@@ -137,7 +141,7 @@ public class LocationProviderStatusPreferenceController
|
||||
return "";
|
||||
}
|
||||
|
||||
int status = ltzpStatus.getLocationDetectionDependencyStatus();
|
||||
@DependencyStatus int status = ltzpStatus.getLocationDetectionDependencyStatus();
|
||||
|
||||
if (status == TimeZoneProviderStatus.DEPENDENCY_STATUS_BLOCKED_BY_ENVIRONMENT) {
|
||||
return mContext.getResources().getString(
|
||||
|
@@ -25,7 +25,6 @@ import android.app.time.TimeZoneCapabilities;
|
||||
import android.app.time.TimeZoneCapabilitiesAndConfig;
|
||||
import android.app.time.TimeZoneConfiguration;
|
||||
import android.content.Context;
|
||||
import android.location.LocationManager;
|
||||
|
||||
import androidx.preference.Preference;
|
||||
import androidx.preference.PreferenceScreen;
|
||||
@@ -50,7 +49,6 @@ public class LocationTimeZoneDetectionPreferenceController
|
||||
private static final String TAG = "location_time_zone_detection";
|
||||
|
||||
private final TimeManager mTimeManager;
|
||||
private final LocationManager mLocationManager;
|
||||
private TimeZoneCapabilitiesAndConfig mTimeZoneCapabilitiesAndConfig;
|
||||
private InstrumentedPreferenceFragment mFragment;
|
||||
private Preference mPreference;
|
||||
@@ -58,7 +56,6 @@ public class LocationTimeZoneDetectionPreferenceController
|
||||
public LocationTimeZoneDetectionPreferenceController(Context context) {
|
||||
super(context, TAG);
|
||||
mTimeManager = context.getSystemService(TimeManager.class);
|
||||
mLocationManager = context.getSystemService(LocationManager.class);
|
||||
}
|
||||
|
||||
void setFragment(InstrumentedPreferenceFragment fragment) {
|
||||
@@ -68,14 +65,18 @@ public class LocationTimeZoneDetectionPreferenceController
|
||||
@Override
|
||||
public boolean isChecked() {
|
||||
TimeZoneCapabilitiesAndConfig capabilitiesAndConfig =
|
||||
mTimeManager.getTimeZoneCapabilitiesAndConfig();
|
||||
getTimeZoneCapabilitiesAndConfig(/*forceRefresh=*/false);
|
||||
TimeZoneConfiguration configuration = capabilitiesAndConfig.getConfiguration();
|
||||
return configuration.isGeoDetectionEnabled();
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean setChecked(boolean isChecked) {
|
||||
if (isChecked && !mLocationManager.isLocationEnabled()) {
|
||||
TimeZoneCapabilitiesAndConfig timeZoneCapabilitiesAndConfig =
|
||||
getTimeZoneCapabilitiesAndConfig(/*forceRefresh=*/false);
|
||||
boolean isLocationEnabled =
|
||||
timeZoneCapabilitiesAndConfig.getCapabilities().isUseLocationEnabled();
|
||||
if (isChecked && !isLocationEnabled) {
|
||||
new LocationToggleDisabledDialogFragment(mContext)
|
||||
.show(mFragment.getFragmentManager(), TAG);
|
||||
// Toggle status is not updated.
|
||||
@@ -157,11 +158,13 @@ public class LocationTimeZoneDetectionPreferenceController
|
||||
// The preference should not be visible, but text is referenced in case this changes.
|
||||
summaryResId = R.string.location_time_zone_detection_not_allowed;
|
||||
} else if (configureGeoDetectionEnabledCapability == CAPABILITY_NOT_APPLICABLE) {
|
||||
// The TimeZoneCapabilities deliberately doesn't provide information about why the user
|
||||
// doesn't have the capability, but the user's "location enabled" being off and the
|
||||
// global automatic detection setting will always be considered overriding reasons why
|
||||
// location time zone detection cannot be used.
|
||||
if (!mLocationManager.isLocationEnabled()) {
|
||||
boolean isLocationEnabled =
|
||||
timeZoneCapabilitiesAndConfig.getCapabilities().isUseLocationEnabled();
|
||||
// The TimeZoneCapabilities cannot provide implementation-specific information about why
|
||||
// the user doesn't have the capability, but the user's "location enabled" being off and
|
||||
// the global automatic detection setting will always be considered overriding reasons
|
||||
// why location time zone detection cannot be used.
|
||||
if (!isLocationEnabled) {
|
||||
summaryResId = R.string.location_app_permission_summary_location_off;
|
||||
} else if (!configuration.isAutoDetectionEnabled()) {
|
||||
summaryResId = R.string.location_time_zone_detection_auto_is_off;
|
||||
@@ -184,6 +187,10 @@ public class LocationTimeZoneDetectionPreferenceController
|
||||
return mContext.getString(summaryResId);
|
||||
}
|
||||
|
||||
/**
|
||||
* Implementation of {@link TimeManager.TimeZoneDetectorListener#onChange()}. Called by the
|
||||
* system server after a change that affects {@link TimeZoneCapabilitiesAndConfig}.
|
||||
*/
|
||||
@Override
|
||||
public void onChange() {
|
||||
refreshUi();
|
||||
|
Reference in New Issue
Block a user