Show pop-up banner when Location is off and user tries to enable GeoTZ.

As of now GeoTZ state remains unchanged even if user enables
Location toggle.

Bug: 152746236
Test: m -j30 RunSettingsRoboTests ROBOTEST_FILTER="com.android.settings.datetime.LocationTimeZoneDetectionPreferenceControllerTest"
Test: checked manually that dialog opens Location settings page
Change-Id: I5fd3288e9d5a7aac3bc82da6944b4ccd6bb9e0f5
This commit is contained in:
Almaz Mingaleev
2021-03-18 10:30:04 +00:00
parent 8a2e489ac8
commit fcf1fcfe9b
5 changed files with 122 additions and 8 deletions

View File

@@ -31,6 +31,7 @@ import androidx.preference.Preference;
import androidx.preference.PreferenceScreen;
import com.android.settings.R;
import com.android.settings.core.InstrumentedPreferenceFragment;
import com.android.settings.core.TogglePreferenceController;
import com.android.settingslib.core.lifecycle.LifecycleObserver;
import com.android.settingslib.core.lifecycle.events.OnStart;
@@ -46,17 +47,24 @@ public class LocationTimeZoneDetectionPreferenceController
extends TogglePreferenceController
implements LifecycleObserver, OnStart, OnStop, TimeManager.TimeZoneDetectorListener {
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;
public LocationTimeZoneDetectionPreferenceController(Context context, String key) {
super(context, key);
public LocationTimeZoneDetectionPreferenceController(Context context) {
super(context, TAG);
mTimeManager = context.getSystemService(TimeManager.class);
mLocationManager = context.getSystemService(LocationManager.class);
}
void setFragment(InstrumentedPreferenceFragment fragment) {
mFragment = fragment;
}
@Override
public boolean isChecked() {
TimeZoneCapabilitiesAndConfig capabilitiesAndConfig =
@@ -67,10 +75,17 @@ public class LocationTimeZoneDetectionPreferenceController
@Override
public boolean setChecked(boolean isChecked) {
TimeZoneConfiguration configuration = new TimeZoneConfiguration.Builder()
.setGeoDetectionEnabled(isChecked)
.build();
return mTimeManager.updateTimeZoneConfiguration(configuration);
if (isChecked && !mLocationManager.isLocationEnabled()) {
new LocationToggleDisabledDialogFragment(mContext)
.show(mFragment.getFragmentManager(), TAG);
// Toggle status is not updated.
return false;
} else {
TimeZoneConfiguration configuration = new TimeZoneConfiguration.Builder()
.setGeoDetectionEnabled(isChecked)
.build();
return mTimeManager.updateTimeZoneConfiguration(configuration);
}
}
@Override