Merge "Switch auto time setting to use APIs"

This commit is contained in:
Neil Fuller
2022-06-10 13:45:07 +00:00
committed by Android (Google) Code Review
8 changed files with 244 additions and 95 deletions

View File

@@ -16,17 +16,22 @@
package com.android.settings.datetime;
import static android.app.time.Capabilities.CAPABILITY_NOT_ALLOWED;
import static android.app.time.Capabilities.CAPABILITY_NOT_APPLICABLE;
import static android.app.time.Capabilities.CAPABILITY_NOT_SUPPORTED;
import static android.app.time.Capabilities.CAPABILITY_POSSESSED;
import android.app.time.TimeCapabilities;
import android.app.time.TimeCapabilitiesAndConfig;
import android.app.time.TimeConfiguration;
import android.app.time.TimeManager;
import android.content.Context;
import android.os.UserHandle;
import android.os.UserManager;
import android.provider.Settings;
import androidx.preference.Preference;
import androidx.preference.SwitchPreference;
import com.android.internal.annotations.VisibleForTesting;
import com.android.settings.core.PreferenceControllerMixin;
import com.android.settingslib.RestrictedLockUtils;
import com.android.settingslib.RestrictedLockUtilsInternal;
import com.android.settingslib.RestrictedSwitchPreference;
import com.android.settingslib.core.AbstractPreferenceController;
public class AutoTimePreferenceController extends AbstractPreferenceController
@@ -34,27 +39,39 @@ public class AutoTimePreferenceController extends AbstractPreferenceController
private static final String KEY_AUTO_TIME = "auto_time";
private final UpdateTimeAndDateCallback mCallback;
private final TimeManager mTimeManager;
public AutoTimePreferenceController(Context context, UpdateTimeAndDateCallback callback) {
super(context);
mTimeManager = context.getSystemService(TimeManager.class);
mCallback = callback;
}
@Override
public boolean isAvailable() {
return true;
TimeCapabilities timeCapabilities =
getTimeCapabilitiesAndConfig().getCapabilities();
int capability = timeCapabilities.getConfigureAutoDetectionEnabledCapability();
// The preference only has two states: present and not present. The preference is never
// present but disabled.
if (capability == CAPABILITY_NOT_SUPPORTED
|| capability == CAPABILITY_NOT_ALLOWED
|| capability == CAPABILITY_NOT_APPLICABLE) {
return false;
} else if (capability == CAPABILITY_POSSESSED) {
return true;
} else {
throw new IllegalStateException("Unknown capability=" + capability);
}
}
@Override
public void updateState(Preference preference) {
if (!(preference instanceof RestrictedSwitchPreference)) {
if (!(preference instanceof SwitchPreference)) {
return;
}
if (!((RestrictedSwitchPreference) preference).isDisabledByAdmin()) {
((RestrictedSwitchPreference) preference).setDisabledByAdmin(
getEnforcedAdminProperty());
}
((RestrictedSwitchPreference) preference).setChecked(isEnabled());
((SwitchPreference) preference).setChecked(isEnabled());
}
@Override
@@ -64,21 +81,24 @@ public class AutoTimePreferenceController extends AbstractPreferenceController
@Override
public boolean onPreferenceChange(Preference preference, Object newValue) {
boolean autoEnabled = (Boolean) newValue;
Settings.Global.putInt(mContext.getContentResolver(), Settings.Global.AUTO_TIME,
autoEnabled ? 1 : 0);
boolean autoTimeEnabled = (Boolean) newValue;
TimeConfiguration configuration = new TimeConfiguration.Builder()
.setAutoDetectionEnabled(autoTimeEnabled)
.build();
boolean result = mTimeManager.updateTimeConfiguration(configuration);
mCallback.updateTimeAndDateDisplay(mContext);
return true;
return result;
}
/** Returns whether the preference should be "checked", i.e. set to the "on" position. */
@VisibleForTesting
public boolean isEnabled() {
return Settings.Global.getInt(mContext.getContentResolver(),
Settings.Global.AUTO_TIME, 0) > 0;
TimeConfiguration config = getTimeCapabilitiesAndConfig().getConfiguration();
return config.isAutoDetectionEnabled();
}
private RestrictedLockUtils.EnforcedAdmin getEnforcedAdminProperty() {
return RestrictedLockUtilsInternal.checkIfRestrictionEnforced(
mContext, UserManager.DISALLOW_CONFIG_DATE_TIME,
UserHandle.myUserId());
private TimeCapabilitiesAndConfig getTimeCapabilitiesAndConfig() {
return mTimeManager.getTimeCapabilitiesAndConfig();
}
}

View File

@@ -16,8 +16,12 @@
package com.android.settings.datetime;
import static android.app.time.Capabilities.CAPABILITY_POSSESSED;
import android.app.Activity;
import android.app.DatePickerDialog;
import android.app.time.TimeCapabilities;
import android.app.time.TimeManager;
import android.app.timedetector.ManualTimeSuggestion;
import android.app.timedetector.TimeDetector;
import android.content.Context;
@@ -46,13 +50,12 @@ public class DatePreferenceController extends AbstractPreferenceController
private static final String KEY_DATE = "date";
private final DatePreferenceHost mHost;
private final AutoTimePreferenceController mAutoTimePreferenceController;
private final TimeManager mTimeManager;
public DatePreferenceController(Context context, DatePreferenceHost host,
AutoTimePreferenceController autoTimePreferenceController) {
public DatePreferenceController(Context context, DatePreferenceHost host) {
super(context);
mHost = host;
mAutoTimePreferenceController = autoTimePreferenceController;
mTimeManager = context.getSystemService(TimeManager.class);
}
@Override
@@ -68,7 +71,8 @@ public class DatePreferenceController extends AbstractPreferenceController
final Calendar now = Calendar.getInstance();
preference.setSummary(DateFormat.getLongDateFormat(mContext).format(now.getTime()));
if (!((RestrictedPreference) preference).isDisabledByAdmin()) {
preference.setEnabled(!mAutoTimePreferenceController.isEnabled());
boolean enableManualDateSelection = isEnabled();
preference.setEnabled(enableManualDateSelection);
}
}
@@ -126,4 +130,16 @@ public class DatePreferenceController extends AbstractPreferenceController
timeDetector.suggestManualTime(manualTimeSuggestion);
}
}
/**
* Returns whether selecting the preference should prompt for the user to enter the date
* manually. Exposed as public so that the time controller can easily share the same logic as
* the rules are identical for time.
*/
public boolean isEnabled() {
TimeCapabilities timeZoneCapabilities =
mTimeManager.getTimeCapabilitiesAndConfig().getCapabilities();
int suggestManualTimeCapability = timeZoneCapabilities.getSuggestManualTimeCapability();
return suggestManualTimeCapability == CAPABILITY_POSSESSED;
}
}

View File

@@ -69,27 +69,28 @@ public class DateTimeSettings extends DashboardFragment implements
final Intent intent = activity.getIntent();
final boolean isFromSUW = intent.getBooleanExtra(EXTRA_IS_FROM_SUW, false);
final AutoTimeZonePreferenceController autoTimeZonePreferenceController =
new AutoTimeZonePreferenceController(
activity, this /* UpdateTimeAndDateCallback */, isFromSUW);
final AutoTimePreferenceController autoTimePreferenceController =
new AutoTimePreferenceController(
activity, this /* UpdateTimeAndDateCallback */);
controllers.add(autoTimePreferenceController);
DatePreferenceController datePreferenceController = new DatePreferenceController(
activity, this /* UpdateTimeAndDateCallback */);
controllers.add(datePreferenceController);
controllers.add(new TimePreferenceController(
activity, this /* UpdateTimeAndDateCallback */, datePreferenceController));
final AutoTimeZonePreferenceController autoTimeZonePreferenceController =
new AutoTimeZonePreferenceController(
activity, this /* UpdateTimeAndDateCallback */, isFromSUW);
controllers.add(autoTimeZonePreferenceController);
controllers.add(new TimeZonePreferenceController(activity));
final AutoTimeFormatPreferenceController autoTimeFormatPreferenceController =
new AutoTimeFormatPreferenceController(
activity, this /* UpdateTimeAndDateCallback */);
controllers.add(autoTimeZonePreferenceController);
controllers.add(autoTimePreferenceController);
controllers.add(autoTimeFormatPreferenceController);
controllers.add(new TimeFormatPreferenceController(
activity, this /* UpdateTimeAndDateCallback */, isFromSUW));
controllers.add(new TimeZonePreferenceController(activity));
controllers.add(new TimePreferenceController(
activity, this /* UpdateTimeAndDateCallback */, autoTimePreferenceController));
controllers.add(new DatePreferenceController(
activity, this /* UpdateTimeAndDateCallback */, autoTimePreferenceController));
return controllers;
}

View File

@@ -44,16 +44,16 @@ public class TimePreferenceController extends AbstractPreferenceController
private static final String KEY_TIME = "time";
private final AutoTimePreferenceController mAutoTimePreferenceController;
private final DatePreferenceController mDatePreferenceController;
private final TimePreferenceHost mHost;
public TimePreferenceController(Context context,
TimePreferenceHost callback,
AutoTimePreferenceController autoTimePreferenceController) {
DatePreferenceController datePreferenceController) {
super(context);
mHost = callback;
mAutoTimePreferenceController = autoTimePreferenceController;
mDatePreferenceController = datePreferenceController;
}
@Override
@@ -69,7 +69,8 @@ public class TimePreferenceController extends AbstractPreferenceController
final Calendar now = Calendar.getInstance();
preference.setSummary(DateFormat.getTimeFormat(mContext).format(now.getTime()));
if (!((RestrictedPreference) preference).isDisabledByAdmin()) {
preference.setEnabled(!mAutoTimePreferenceController.isEnabled());
boolean enableManualTimeSelection = mDatePreferenceController.isEnabled();
preference.setEnabled(enableManualTimeSelection);
}
}