Loading res/xml/date_time_prefs.xml +17 −10 Original line number Original line Diff line number Diff line Loading @@ -24,19 +24,22 @@ android:key="auto_time" android:key="auto_time" android:title="@string/date_time_auto" android:title="@string/date_time_auto" settings:useAdditionalSummary="true" settings:useAdditionalSummary="true" settings:userRestriction="no_config_date_time"/> settings:userRestriction="no_config_date_time" settings:controller="com.android.settings.datetime.AutoTimePreferenceController" /> <com.android.settingslib.RestrictedPreference <com.android.settingslib.RestrictedPreference android:key="date" android:key="date" android:title="@string/date_time_set_date_title" android:title="@string/date_time_set_date_title" android:summary="@string/summary_placeholder" android:summary="@string/summary_placeholder" settings:userRestriction="no_config_date_time"/> settings:userRestriction="no_config_date_time" settings:controller="com.android.settings.datetime.DatePreferenceController" /> <com.android.settingslib.RestrictedPreference <com.android.settingslib.RestrictedPreference android:key="time" android:key="time" android:title="@string/date_time_set_time_title" android:title="@string/date_time_set_time_title" android:summary="@string/summary_placeholder" android:summary="@string/summary_placeholder" settings:userRestriction="no_config_date_time"/> settings:userRestriction="no_config_date_time" settings:controller="com.android.settings.datetime.TimePreferenceController" /> <PreferenceCategory <PreferenceCategory android:key="timezone_preference_category" android:key="timezone_preference_category" Loading @@ -45,7 +48,8 @@ <com.android.settingslib.RestrictedSwitchPreference <com.android.settingslib.RestrictedSwitchPreference android:key="auto_zone" android:key="auto_zone" android:title="@string/zone_auto_title" android:title="@string/zone_auto_title" settings:userRestriction="no_config_date_time"/> settings:userRestriction="no_config_date_time" settings:controller="com.android.settings.datetime.AutoTimeZonePreferenceController" /> <com.android.settingslib.widget.BannerMessagePreference <com.android.settingslib.widget.BannerMessagePreference android:key="location_time_zone_detection_status" android:key="location_time_zone_detection_status" Loading @@ -53,7 +57,7 @@ settings:controller="com.android.settings.datetime.LocationProviderStatusPreferenceController"/> settings:controller="com.android.settings.datetime.LocationProviderStatusPreferenceController"/> <!-- This preference gets removed if location-based time zone detection is not supported --> <!-- This preference gets removed if location-based time zone detection is not supported --> <SwitchPreferenceCompat <SwitchPreference android:key="location_time_zone_detection" android:key="location_time_zone_detection" android:title="@string/location_time_zone_detection_toggle_title" android:title="@string/location_time_zone_detection_toggle_title" settings:controller="com.android.settings.datetime.LocationTimeZoneDetectionPreferenceController"/> settings:controller="com.android.settings.datetime.LocationTimeZoneDetectionPreferenceController"/> Loading @@ -64,7 +68,8 @@ android:summary="@string/summary_placeholder" android:summary="@string/summary_placeholder" android:fragment="com.android.settings.datetime.timezone.TimeZoneSettings" android:fragment="com.android.settings.datetime.timezone.TimeZoneSettings" settings:userRestriction="no_config_date_time" settings:userRestriction="no_config_date_time" settings:keywords="@string/keywords_time_zone"/> settings:keywords="@string/keywords_time_zone" settings:controller="com.android.settings.datetime.TimeZonePreferenceController" /> </PreferenceCategory> </PreferenceCategory> Loading @@ -72,13 +77,15 @@ android:key="time_format_preference_category" android:key="time_format_preference_category" android:title="@string/time_format_category_title" android:title="@string/time_format_category_title" settings:keywords="@string/keywords_time_format"> settings:keywords="@string/keywords_time_format"> <SwitchPreferenceCompat <SwitchPreference android:key="auto_24hour" android:key="auto_24hour" android:title="@string/date_time_24hour_auto"/> android:title="@string/date_time_24hour_auto" settings:controller="com.android.settings.datetime.AutoTimeFormatPreferenceController" /> <SwitchPreferenceCompat <SwitchPreference android:key="24 hour" android:key="24 hour" android:title="@string/date_time_24hour" /> android:title="@string/date_time_24hour" settings:controller="com.android.settings.datetime.TimeFormatPreferenceController" /> </PreferenceCategory> </PreferenceCategory> </PreferenceScreen> </PreferenceScreen> src/com/android/settings/datetime/AutoTimeFormatPreferenceController.java +16 −31 Original line number Original line Diff line number Diff line Loading @@ -19,53 +19,33 @@ package com.android.settings.datetime; import android.content.Context; import android.content.Context; import android.provider.Settings; import android.provider.Settings; import android.provider.Settings.System; import android.provider.Settings.System; import android.text.TextUtils; import android.text.format.DateFormat; import android.text.format.DateFormat; import androidx.preference.Preference; import com.android.settings.R; import androidx.preference.TwoStatePreference; import com.android.settings.core.TogglePreferenceController; import com.android.settings.core.PreferenceControllerMixin; import com.android.settingslib.core.AbstractPreferenceController; import java.util.Locale; import java.util.Locale; public class AutoTimeFormatPreferenceController extends AbstractPreferenceController public class AutoTimeFormatPreferenceController extends TogglePreferenceController { implements PreferenceControllerMixin { private static final String KEY_AUTO_24_HOUR = "auto_24hour"; public AutoTimeFormatPreferenceController(Context context, UpdateTimeAndDateCallback callback) { public AutoTimeFormatPreferenceController(Context context, String preferenceKey) { super(context); super(context, preferenceKey); } } @Override @Override public boolean isAvailable() { public int getAvailabilityStatus() { return true; return AVAILABLE; } } @Override @Override public String getPreferenceKey() { public boolean isChecked() { return KEY_AUTO_24_HOUR; return isAutoTimeFormatSelection(mContext); } } @Override @Override public void updateState(Preference preference) { public boolean setChecked(boolean isChecked) { if (!(preference instanceof TwoStatePreference)) { return; } ((TwoStatePreference) preference).setChecked(isAutoTimeFormatSelection(mContext)); } @Override public boolean handlePreferenceTreeClick(Preference preference) { if (!(preference instanceof TwoStatePreference) || !TextUtils.equals(KEY_AUTO_24_HOUR, preference.getKey())) { return false; } boolean auto24HourEnabled = ((TwoStatePreference) preference).isChecked(); Boolean is24Hour; Boolean is24Hour; if (auto24HourEnabled) { if (isChecked) { is24Hour = null; is24Hour = null; } else { } else { is24Hour = is24HourLocale(mContext.getResources().getConfiguration().locale); is24Hour = is24HourLocale(mContext.getResources().getConfiguration().locale); Loading @@ -74,6 +54,11 @@ public class AutoTimeFormatPreferenceController extends AbstractPreferenceContro return true; return true; } } @Override public int getSliceHighlightMenuRes() { return R.string.menu_key_system; } boolean is24HourLocale(Locale locale) { boolean is24HourLocale(Locale locale) { return DateFormat.is24HourLocale(locale); return DateFormat.is24HourLocale(locale); } } Loading src/com/android/settings/datetime/AutoTimePreferenceController.java +21 −30 Original line number Original line Diff line number Diff line Loading @@ -27,28 +27,26 @@ import android.app.time.TimeConfiguration; import android.app.time.TimeManager; import android.app.time.TimeManager; import android.content.Context; import android.content.Context; import androidx.preference.Preference; import androidx.preference.TwoStatePreference; import com.android.internal.annotations.VisibleForTesting; import com.android.internal.annotations.VisibleForTesting; import com.android.settings.core.PreferenceControllerMixin; import com.android.settings.R; import com.android.settingslib.core.AbstractPreferenceController; import com.android.settings.core.TogglePreferenceController; public class AutoTimePreferenceController extends AbstractPreferenceController public class AutoTimePreferenceController extends TogglePreferenceController { implements PreferenceControllerMixin, Preference.OnPreferenceChangeListener { private static final String KEY_AUTO_TIME = "auto_time"; private UpdateTimeAndDateCallback mCallback; private final UpdateTimeAndDateCallback mCallback; private final TimeManager mTimeManager; private final TimeManager mTimeManager; public AutoTimePreferenceController(Context context, UpdateTimeAndDateCallback callback) { public AutoTimePreferenceController(Context context, String preferenceKey) { super(context); super(context, preferenceKey); mTimeManager = context.getSystemService(TimeManager.class); mTimeManager = context.getSystemService(TimeManager.class); } public void setDateAndTimeCallback(UpdateTimeAndDateCallback callback) { mCallback = callback; mCallback = callback; } } @Override @Override public boolean isAvailable() { public int getAvailabilityStatus() { TimeCapabilities timeCapabilities = TimeCapabilities timeCapabilities = getTimeCapabilitiesAndConfig().getCapabilities(); getTimeCapabilitiesAndConfig().getCapabilities(); int capability = timeCapabilities.getConfigureAutoDetectionEnabledCapability(); int capability = timeCapabilities.getConfigureAutoDetectionEnabledCapability(); Loading @@ -57,43 +55,31 @@ public class AutoTimePreferenceController extends AbstractPreferenceController // This method handles the "is visible?" check. // This method handles the "is visible?" check. switch (capability) { switch (capability) { case CAPABILITY_NOT_SUPPORTED: case CAPABILITY_NOT_SUPPORTED: return false; return DISABLED_DEPENDENT_SETTING; case CAPABILITY_POSSESSED: case CAPABILITY_POSSESSED: return true; case CAPABILITY_NOT_ALLOWED: case CAPABILITY_NOT_ALLOWED: // This case is expected for enterprise restrictions, where the toggle should be // This case is expected for enterprise restrictions, where the toggle should be // present but disabled. Disabling is handled declaratively via the // present but disabled. Disabling is handled declaratively via the // settings:userRestriction attribute in .xml. The client-side logic is expected to // settings:userRestriction attribute in .xml. The client-side logic is expected to // concur with the capabilities logic in the system server. // concur with the capabilities logic in the system server. return true; case CAPABILITY_NOT_APPLICABLE: case CAPABILITY_NOT_APPLICABLE: // CAPABILITY_NOT_APPLICABLE is not currently expected, so this is return value is // CAPABILITY_NOT_APPLICABLE is not currently expected, so this is return value is // arbitrary. // arbitrary. return true; return AVAILABLE; default: default: throw new IllegalStateException("Unknown capability=" + capability); throw new IllegalStateException("Unknown capability=" + capability); } } } } @Override @Override public void updateState(Preference preference) { public boolean isChecked() { if (!(preference instanceof TwoStatePreference)) { return isEnabled(); return; } ((TwoStatePreference) preference).setChecked(isEnabled()); } } @Override @Override public String getPreferenceKey() { public boolean setChecked(boolean isChecked) { return KEY_AUTO_TIME; } @Override public boolean onPreferenceChange(Preference preference, Object newValue) { boolean autoTimeEnabled = (Boolean) newValue; TimeConfiguration configuration = new TimeConfiguration.Builder() TimeConfiguration configuration = new TimeConfiguration.Builder() .setAutoDetectionEnabled(autoTimeEnabled) .setAutoDetectionEnabled(isChecked) .build(); .build(); boolean result = mTimeManager.updateTimeConfiguration(configuration); boolean result = mTimeManager.updateTimeConfiguration(configuration); Loading @@ -101,6 +87,11 @@ public class AutoTimePreferenceController extends AbstractPreferenceController return result; return result; } } @Override public int getSliceHighlightMenuRes() { return R.string.menu_key_system; } /** Returns whether the preference should be "checked", i.e. set to the "on" position. */ /** Returns whether the preference should be "checked", i.e. set to the "on" position. */ @VisibleForTesting @VisibleForTesting public boolean isEnabled() { public boolean isEnabled() { Loading src/com/android/settings/datetime/AutoTimeZonePreferenceController.java +34 −41 Original line number Original line Diff line number Diff line Loading @@ -27,36 +27,42 @@ import android.app.time.TimeZoneCapabilitiesAndConfig; import android.app.time.TimeZoneConfiguration; import android.app.time.TimeZoneConfiguration; import android.content.Context; import android.content.Context; import androidx.preference.Preference; import androidx.preference.PreferenceScreen; import androidx.preference.TwoStatePreference; import com.android.internal.annotations.VisibleForTesting; import com.android.internal.annotations.VisibleForTesting; import com.android.settings.R; import com.android.settings.R; import com.android.settings.core.PreferenceControllerMixin; import com.android.settings.core.TogglePreferenceController; import com.android.settingslib.core.AbstractPreferenceController; public class AutoTimeZonePreferenceController extends AbstractPreferenceController implements PreferenceControllerMixin, Preference.OnPreferenceChangeListener { private static final String KEY_AUTO_TIME_ZONE = "auto_zone"; public class AutoTimeZonePreferenceController extends TogglePreferenceController { private final boolean mIsFromSUW; private boolean mIsFromSUW; private final UpdateTimeAndDateCallback mCallback; private UpdateTimeAndDateCallback mCallback; private final TimeManager mTimeManager; private final TimeManager mTimeManager; public AutoTimeZonePreferenceController(Context context, UpdateTimeAndDateCallback callback, public AutoTimeZonePreferenceController(Context context, String preferenceKey) { boolean isFromSUW) { super(context, preferenceKey); super(context); mTimeManager = context.getSystemService(TimeManager.class); mTimeManager = context.getSystemService(TimeManager.class); } /** * Set the Time and Date callback */ public AutoTimeZonePreferenceController setTimeAndDateCallback( UpdateTimeAndDateCallback callback) { mCallback = callback; mCallback = callback; return this; } /** * Set if current fragment is launched via SUW */ public AutoTimeZonePreferenceController setFromSUW(boolean isFromSUW) { mIsFromSUW = isFromSUW; mIsFromSUW = isFromSUW; return this; } } @Override @Override public boolean isAvailable() { public int getAvailabilityStatus() { if (mIsFromSUW) { if (mIsFromSUW) { return false; return DISABLED_DEPENDENT_SETTING; } } TimeZoneCapabilities timeZoneCapabilities = TimeZoneCapabilities timeZoneCapabilities = Loading @@ -67,43 +73,31 @@ public class AutoTimeZonePreferenceController extends AbstractPreferenceControll // This method handles the "is visible?" check. // This method handles the "is visible?" check. switch (capability) { switch (capability) { case CAPABILITY_NOT_SUPPORTED: case CAPABILITY_NOT_SUPPORTED: return false; return DISABLED_DEPENDENT_SETTING; case CAPABILITY_POSSESSED: case CAPABILITY_POSSESSED: return true; case CAPABILITY_NOT_ALLOWED: case CAPABILITY_NOT_ALLOWED: // This case is expected for enterprise restrictions, where the toggle should be // This case is expected for enterprise restrictions, where the toggle should be // present but disabled. Disabling is handled declaratively via the // present but disabled. Disabling is handled declaratively via the // settings:userRestriction attribute in .xml. The client-side logic is expected to // settings:userRestriction attribute in .xml. The client-side logic is expected to // concur with the capabilities logic in the system server. // concur with the capabilities logic in the system server. return true; case CAPABILITY_NOT_APPLICABLE: case CAPABILITY_NOT_APPLICABLE: // CAPABILITY_NOT_APPLICABLE is not currently expected, so this is return value is // CAPABILITY_NOT_APPLICABLE is not currently expected, so this is return value is // arbitrary. // arbitrary. return true; return AVAILABLE; default: default: throw new IllegalStateException("Unknown capability=" + capability); throw new IllegalStateException("Unknown capability=" + capability); } } } } @Override @Override public String getPreferenceKey() { public boolean isChecked() { return KEY_AUTO_TIME_ZONE; return isEnabled(); } } @Override @Override public void updateState(Preference preference) { public boolean setChecked(boolean isChecked) { if (!(preference instanceof TwoStatePreference)) { return; } ((TwoStatePreference) preference).setChecked(isEnabled()); } @Override public boolean onPreferenceChange(Preference preference, Object newValue) { boolean autoZoneEnabled = (Boolean) newValue; TimeZoneConfiguration configuration = new TimeZoneConfiguration.Builder() TimeZoneConfiguration configuration = new TimeZoneConfiguration.Builder() .setAutoDetectionEnabled(autoZoneEnabled) .setAutoDetectionEnabled(isChecked) .build(); .build(); boolean result = mTimeManager.updateTimeZoneConfiguration(configuration); boolean result = mTimeManager.updateTimeZoneConfiguration(configuration); Loading @@ -111,6 +105,11 @@ public class AutoTimeZonePreferenceController extends AbstractPreferenceControll return result; return result; } } @Override public int getSliceHighlightMenuRes() { return R.string.menu_key_system; } @Override @Override public CharSequence getSummary() { public CharSequence getSummary() { // If auto time zone cannot enable telephony fallback and is capable of location, then auto // If auto time zone cannot enable telephony fallback and is capable of location, then auto Loading @@ -124,12 +123,6 @@ public class AutoTimeZonePreferenceController extends AbstractPreferenceControll return ""; return ""; } } @Override public void displayPreference(PreferenceScreen screen) { super.displayPreference(screen); refreshSummary(screen.findPreference(getPreferenceKey())); } @VisibleForTesting @VisibleForTesting boolean isEnabled() { boolean isEnabled() { TimeZoneConfiguration config = getTimeZoneCapabilitiesAndConfig().getConfiguration(); TimeZoneConfiguration config = getTimeZoneCapabilitiesAndConfig().getConfiguration(); Loading src/com/android/settings/datetime/DatePreferenceController.java +21 −27 Original line number Original line Diff line number Diff line Loading @@ -33,14 +33,12 @@ import android.widget.DatePicker; import androidx.annotation.VisibleForTesting; import androidx.annotation.VisibleForTesting; import androidx.preference.Preference; import androidx.preference.Preference; import com.android.settings.core.PreferenceControllerMixin; import com.android.settings.core.BasePreferenceController; import com.android.settingslib.RestrictedPreference; import com.android.settingslib.core.AbstractPreferenceController; import java.util.Calendar; import java.util.Calendar; public class DatePreferenceController extends AbstractPreferenceController public class DatePreferenceController extends BasePreferenceController implements PreferenceControllerMixin, DatePickerDialog.OnDateSetListener { implements DatePickerDialog.OnDateSetListener { public interface DatePreferenceHost extends UpdateTimeAndDateCallback { public interface DatePreferenceHost extends UpdateTimeAndDateCallback { void showDatePicker(); void showDatePicker(); Loading @@ -49,49 +47,45 @@ public class DatePreferenceController extends AbstractPreferenceController public static final int DIALOG_DATEPICKER = 0; public static final int DIALOG_DATEPICKER = 0; private static final String TAG = "DatePreferenceController"; private static final String TAG = "DatePreferenceController"; private static final String KEY_DATE = "date"; private final DatePreferenceHost mHost; private DatePreferenceHost mHost; private final TimeManager mTimeManager; private final TimeManager mTimeManager; public DatePreferenceController(Context context, DatePreferenceHost host) { public DatePreferenceController(Context context, String preferenceKey) { super(context); super(context, preferenceKey); mHost = host; mTimeManager = context.getSystemService(TimeManager.class); mTimeManager = context.getSystemService(TimeManager.class); } } public void setHost(DatePreferenceHost host) { mHost = host; } @Override @Override public boolean isAvailable() { public int getAvailabilityStatus() { return true; return isEnabled() ? AVAILABLE : DISABLED_DEPENDENT_SETTING; } } @Override @Override public void updateState(Preference preference) { public void updateState(Preference preference) { if (!(preference instanceof RestrictedPreference)) { super.updateState(preference); return; preference.setEnabled(isEnabled()); } final Calendar now = Calendar.getInstance(); preference.setSummary(DateFormat.getLongDateFormat(mContext).format(now.getTime())); if (!((RestrictedPreference) preference).isDisabledByAdmin()) { boolean enableManualDateSelection = isEnabled(); preference.setEnabled(enableManualDateSelection); } } @Override public CharSequence getSummary() { Calendar now = Calendar.getInstance(); return DateFormat.getLongDateFormat(mContext).format(now.getTime()); } } @Override @Override public boolean handlePreferenceTreeClick(Preference preference) { public boolean handlePreferenceTreeClick(Preference preference) { if (!TextUtils.equals(preference.getKey(), KEY_DATE)) { if (!TextUtils.equals(getPreferenceKey(), preference.getKey())) { return false; return false; } } mHost.showDatePicker(); mHost.showDatePicker(); return true; return true; } } @Override public String getPreferenceKey() { return KEY_DATE; } @Override @Override public void onDateSet(DatePicker view, int year, int month, int day) { public void onDateSet(DatePicker view, int year, int month, int day) { setDate(year, month, day); setDate(year, month, day); Loading Loading
res/xml/date_time_prefs.xml +17 −10 Original line number Original line Diff line number Diff line Loading @@ -24,19 +24,22 @@ android:key="auto_time" android:key="auto_time" android:title="@string/date_time_auto" android:title="@string/date_time_auto" settings:useAdditionalSummary="true" settings:useAdditionalSummary="true" settings:userRestriction="no_config_date_time"/> settings:userRestriction="no_config_date_time" settings:controller="com.android.settings.datetime.AutoTimePreferenceController" /> <com.android.settingslib.RestrictedPreference <com.android.settingslib.RestrictedPreference android:key="date" android:key="date" android:title="@string/date_time_set_date_title" android:title="@string/date_time_set_date_title" android:summary="@string/summary_placeholder" android:summary="@string/summary_placeholder" settings:userRestriction="no_config_date_time"/> settings:userRestriction="no_config_date_time" settings:controller="com.android.settings.datetime.DatePreferenceController" /> <com.android.settingslib.RestrictedPreference <com.android.settingslib.RestrictedPreference android:key="time" android:key="time" android:title="@string/date_time_set_time_title" android:title="@string/date_time_set_time_title" android:summary="@string/summary_placeholder" android:summary="@string/summary_placeholder" settings:userRestriction="no_config_date_time"/> settings:userRestriction="no_config_date_time" settings:controller="com.android.settings.datetime.TimePreferenceController" /> <PreferenceCategory <PreferenceCategory android:key="timezone_preference_category" android:key="timezone_preference_category" Loading @@ -45,7 +48,8 @@ <com.android.settingslib.RestrictedSwitchPreference <com.android.settingslib.RestrictedSwitchPreference android:key="auto_zone" android:key="auto_zone" android:title="@string/zone_auto_title" android:title="@string/zone_auto_title" settings:userRestriction="no_config_date_time"/> settings:userRestriction="no_config_date_time" settings:controller="com.android.settings.datetime.AutoTimeZonePreferenceController" /> <com.android.settingslib.widget.BannerMessagePreference <com.android.settingslib.widget.BannerMessagePreference android:key="location_time_zone_detection_status" android:key="location_time_zone_detection_status" Loading @@ -53,7 +57,7 @@ settings:controller="com.android.settings.datetime.LocationProviderStatusPreferenceController"/> settings:controller="com.android.settings.datetime.LocationProviderStatusPreferenceController"/> <!-- This preference gets removed if location-based time zone detection is not supported --> <!-- This preference gets removed if location-based time zone detection is not supported --> <SwitchPreferenceCompat <SwitchPreference android:key="location_time_zone_detection" android:key="location_time_zone_detection" android:title="@string/location_time_zone_detection_toggle_title" android:title="@string/location_time_zone_detection_toggle_title" settings:controller="com.android.settings.datetime.LocationTimeZoneDetectionPreferenceController"/> settings:controller="com.android.settings.datetime.LocationTimeZoneDetectionPreferenceController"/> Loading @@ -64,7 +68,8 @@ android:summary="@string/summary_placeholder" android:summary="@string/summary_placeholder" android:fragment="com.android.settings.datetime.timezone.TimeZoneSettings" android:fragment="com.android.settings.datetime.timezone.TimeZoneSettings" settings:userRestriction="no_config_date_time" settings:userRestriction="no_config_date_time" settings:keywords="@string/keywords_time_zone"/> settings:keywords="@string/keywords_time_zone" settings:controller="com.android.settings.datetime.TimeZonePreferenceController" /> </PreferenceCategory> </PreferenceCategory> Loading @@ -72,13 +77,15 @@ android:key="time_format_preference_category" android:key="time_format_preference_category" android:title="@string/time_format_category_title" android:title="@string/time_format_category_title" settings:keywords="@string/keywords_time_format"> settings:keywords="@string/keywords_time_format"> <SwitchPreferenceCompat <SwitchPreference android:key="auto_24hour" android:key="auto_24hour" android:title="@string/date_time_24hour_auto"/> android:title="@string/date_time_24hour_auto" settings:controller="com.android.settings.datetime.AutoTimeFormatPreferenceController" /> <SwitchPreferenceCompat <SwitchPreference android:key="24 hour" android:key="24 hour" android:title="@string/date_time_24hour" /> android:title="@string/date_time_24hour" settings:controller="com.android.settings.datetime.TimeFormatPreferenceController" /> </PreferenceCategory> </PreferenceCategory> </PreferenceScreen> </PreferenceScreen>
src/com/android/settings/datetime/AutoTimeFormatPreferenceController.java +16 −31 Original line number Original line Diff line number Diff line Loading @@ -19,53 +19,33 @@ package com.android.settings.datetime; import android.content.Context; import android.content.Context; import android.provider.Settings; import android.provider.Settings; import android.provider.Settings.System; import android.provider.Settings.System; import android.text.TextUtils; import android.text.format.DateFormat; import android.text.format.DateFormat; import androidx.preference.Preference; import com.android.settings.R; import androidx.preference.TwoStatePreference; import com.android.settings.core.TogglePreferenceController; import com.android.settings.core.PreferenceControllerMixin; import com.android.settingslib.core.AbstractPreferenceController; import java.util.Locale; import java.util.Locale; public class AutoTimeFormatPreferenceController extends AbstractPreferenceController public class AutoTimeFormatPreferenceController extends TogglePreferenceController { implements PreferenceControllerMixin { private static final String KEY_AUTO_24_HOUR = "auto_24hour"; public AutoTimeFormatPreferenceController(Context context, UpdateTimeAndDateCallback callback) { public AutoTimeFormatPreferenceController(Context context, String preferenceKey) { super(context); super(context, preferenceKey); } } @Override @Override public boolean isAvailable() { public int getAvailabilityStatus() { return true; return AVAILABLE; } } @Override @Override public String getPreferenceKey() { public boolean isChecked() { return KEY_AUTO_24_HOUR; return isAutoTimeFormatSelection(mContext); } } @Override @Override public void updateState(Preference preference) { public boolean setChecked(boolean isChecked) { if (!(preference instanceof TwoStatePreference)) { return; } ((TwoStatePreference) preference).setChecked(isAutoTimeFormatSelection(mContext)); } @Override public boolean handlePreferenceTreeClick(Preference preference) { if (!(preference instanceof TwoStatePreference) || !TextUtils.equals(KEY_AUTO_24_HOUR, preference.getKey())) { return false; } boolean auto24HourEnabled = ((TwoStatePreference) preference).isChecked(); Boolean is24Hour; Boolean is24Hour; if (auto24HourEnabled) { if (isChecked) { is24Hour = null; is24Hour = null; } else { } else { is24Hour = is24HourLocale(mContext.getResources().getConfiguration().locale); is24Hour = is24HourLocale(mContext.getResources().getConfiguration().locale); Loading @@ -74,6 +54,11 @@ public class AutoTimeFormatPreferenceController extends AbstractPreferenceContro return true; return true; } } @Override public int getSliceHighlightMenuRes() { return R.string.menu_key_system; } boolean is24HourLocale(Locale locale) { boolean is24HourLocale(Locale locale) { return DateFormat.is24HourLocale(locale); return DateFormat.is24HourLocale(locale); } } Loading
src/com/android/settings/datetime/AutoTimePreferenceController.java +21 −30 Original line number Original line Diff line number Diff line Loading @@ -27,28 +27,26 @@ import android.app.time.TimeConfiguration; import android.app.time.TimeManager; import android.app.time.TimeManager; import android.content.Context; import android.content.Context; import androidx.preference.Preference; import androidx.preference.TwoStatePreference; import com.android.internal.annotations.VisibleForTesting; import com.android.internal.annotations.VisibleForTesting; import com.android.settings.core.PreferenceControllerMixin; import com.android.settings.R; import com.android.settingslib.core.AbstractPreferenceController; import com.android.settings.core.TogglePreferenceController; public class AutoTimePreferenceController extends AbstractPreferenceController public class AutoTimePreferenceController extends TogglePreferenceController { implements PreferenceControllerMixin, Preference.OnPreferenceChangeListener { private static final String KEY_AUTO_TIME = "auto_time"; private UpdateTimeAndDateCallback mCallback; private final UpdateTimeAndDateCallback mCallback; private final TimeManager mTimeManager; private final TimeManager mTimeManager; public AutoTimePreferenceController(Context context, UpdateTimeAndDateCallback callback) { public AutoTimePreferenceController(Context context, String preferenceKey) { super(context); super(context, preferenceKey); mTimeManager = context.getSystemService(TimeManager.class); mTimeManager = context.getSystemService(TimeManager.class); } public void setDateAndTimeCallback(UpdateTimeAndDateCallback callback) { mCallback = callback; mCallback = callback; } } @Override @Override public boolean isAvailable() { public int getAvailabilityStatus() { TimeCapabilities timeCapabilities = TimeCapabilities timeCapabilities = getTimeCapabilitiesAndConfig().getCapabilities(); getTimeCapabilitiesAndConfig().getCapabilities(); int capability = timeCapabilities.getConfigureAutoDetectionEnabledCapability(); int capability = timeCapabilities.getConfigureAutoDetectionEnabledCapability(); Loading @@ -57,43 +55,31 @@ public class AutoTimePreferenceController extends AbstractPreferenceController // This method handles the "is visible?" check. // This method handles the "is visible?" check. switch (capability) { switch (capability) { case CAPABILITY_NOT_SUPPORTED: case CAPABILITY_NOT_SUPPORTED: return false; return DISABLED_DEPENDENT_SETTING; case CAPABILITY_POSSESSED: case CAPABILITY_POSSESSED: return true; case CAPABILITY_NOT_ALLOWED: case CAPABILITY_NOT_ALLOWED: // This case is expected for enterprise restrictions, where the toggle should be // This case is expected for enterprise restrictions, where the toggle should be // present but disabled. Disabling is handled declaratively via the // present but disabled. Disabling is handled declaratively via the // settings:userRestriction attribute in .xml. The client-side logic is expected to // settings:userRestriction attribute in .xml. The client-side logic is expected to // concur with the capabilities logic in the system server. // concur with the capabilities logic in the system server. return true; case CAPABILITY_NOT_APPLICABLE: case CAPABILITY_NOT_APPLICABLE: // CAPABILITY_NOT_APPLICABLE is not currently expected, so this is return value is // CAPABILITY_NOT_APPLICABLE is not currently expected, so this is return value is // arbitrary. // arbitrary. return true; return AVAILABLE; default: default: throw new IllegalStateException("Unknown capability=" + capability); throw new IllegalStateException("Unknown capability=" + capability); } } } } @Override @Override public void updateState(Preference preference) { public boolean isChecked() { if (!(preference instanceof TwoStatePreference)) { return isEnabled(); return; } ((TwoStatePreference) preference).setChecked(isEnabled()); } } @Override @Override public String getPreferenceKey() { public boolean setChecked(boolean isChecked) { return KEY_AUTO_TIME; } @Override public boolean onPreferenceChange(Preference preference, Object newValue) { boolean autoTimeEnabled = (Boolean) newValue; TimeConfiguration configuration = new TimeConfiguration.Builder() TimeConfiguration configuration = new TimeConfiguration.Builder() .setAutoDetectionEnabled(autoTimeEnabled) .setAutoDetectionEnabled(isChecked) .build(); .build(); boolean result = mTimeManager.updateTimeConfiguration(configuration); boolean result = mTimeManager.updateTimeConfiguration(configuration); Loading @@ -101,6 +87,11 @@ public class AutoTimePreferenceController extends AbstractPreferenceController return result; return result; } } @Override public int getSliceHighlightMenuRes() { return R.string.menu_key_system; } /** Returns whether the preference should be "checked", i.e. set to the "on" position. */ /** Returns whether the preference should be "checked", i.e. set to the "on" position. */ @VisibleForTesting @VisibleForTesting public boolean isEnabled() { public boolean isEnabled() { Loading
src/com/android/settings/datetime/AutoTimeZonePreferenceController.java +34 −41 Original line number Original line Diff line number Diff line Loading @@ -27,36 +27,42 @@ import android.app.time.TimeZoneCapabilitiesAndConfig; import android.app.time.TimeZoneConfiguration; import android.app.time.TimeZoneConfiguration; import android.content.Context; import android.content.Context; import androidx.preference.Preference; import androidx.preference.PreferenceScreen; import androidx.preference.TwoStatePreference; import com.android.internal.annotations.VisibleForTesting; import com.android.internal.annotations.VisibleForTesting; import com.android.settings.R; import com.android.settings.R; import com.android.settings.core.PreferenceControllerMixin; import com.android.settings.core.TogglePreferenceController; import com.android.settingslib.core.AbstractPreferenceController; public class AutoTimeZonePreferenceController extends AbstractPreferenceController implements PreferenceControllerMixin, Preference.OnPreferenceChangeListener { private static final String KEY_AUTO_TIME_ZONE = "auto_zone"; public class AutoTimeZonePreferenceController extends TogglePreferenceController { private final boolean mIsFromSUW; private boolean mIsFromSUW; private final UpdateTimeAndDateCallback mCallback; private UpdateTimeAndDateCallback mCallback; private final TimeManager mTimeManager; private final TimeManager mTimeManager; public AutoTimeZonePreferenceController(Context context, UpdateTimeAndDateCallback callback, public AutoTimeZonePreferenceController(Context context, String preferenceKey) { boolean isFromSUW) { super(context, preferenceKey); super(context); mTimeManager = context.getSystemService(TimeManager.class); mTimeManager = context.getSystemService(TimeManager.class); } /** * Set the Time and Date callback */ public AutoTimeZonePreferenceController setTimeAndDateCallback( UpdateTimeAndDateCallback callback) { mCallback = callback; mCallback = callback; return this; } /** * Set if current fragment is launched via SUW */ public AutoTimeZonePreferenceController setFromSUW(boolean isFromSUW) { mIsFromSUW = isFromSUW; mIsFromSUW = isFromSUW; return this; } } @Override @Override public boolean isAvailable() { public int getAvailabilityStatus() { if (mIsFromSUW) { if (mIsFromSUW) { return false; return DISABLED_DEPENDENT_SETTING; } } TimeZoneCapabilities timeZoneCapabilities = TimeZoneCapabilities timeZoneCapabilities = Loading @@ -67,43 +73,31 @@ public class AutoTimeZonePreferenceController extends AbstractPreferenceControll // This method handles the "is visible?" check. // This method handles the "is visible?" check. switch (capability) { switch (capability) { case CAPABILITY_NOT_SUPPORTED: case CAPABILITY_NOT_SUPPORTED: return false; return DISABLED_DEPENDENT_SETTING; case CAPABILITY_POSSESSED: case CAPABILITY_POSSESSED: return true; case CAPABILITY_NOT_ALLOWED: case CAPABILITY_NOT_ALLOWED: // This case is expected for enterprise restrictions, where the toggle should be // This case is expected for enterprise restrictions, where the toggle should be // present but disabled. Disabling is handled declaratively via the // present but disabled. Disabling is handled declaratively via the // settings:userRestriction attribute in .xml. The client-side logic is expected to // settings:userRestriction attribute in .xml. The client-side logic is expected to // concur with the capabilities logic in the system server. // concur with the capabilities logic in the system server. return true; case CAPABILITY_NOT_APPLICABLE: case CAPABILITY_NOT_APPLICABLE: // CAPABILITY_NOT_APPLICABLE is not currently expected, so this is return value is // CAPABILITY_NOT_APPLICABLE is not currently expected, so this is return value is // arbitrary. // arbitrary. return true; return AVAILABLE; default: default: throw new IllegalStateException("Unknown capability=" + capability); throw new IllegalStateException("Unknown capability=" + capability); } } } } @Override @Override public String getPreferenceKey() { public boolean isChecked() { return KEY_AUTO_TIME_ZONE; return isEnabled(); } } @Override @Override public void updateState(Preference preference) { public boolean setChecked(boolean isChecked) { if (!(preference instanceof TwoStatePreference)) { return; } ((TwoStatePreference) preference).setChecked(isEnabled()); } @Override public boolean onPreferenceChange(Preference preference, Object newValue) { boolean autoZoneEnabled = (Boolean) newValue; TimeZoneConfiguration configuration = new TimeZoneConfiguration.Builder() TimeZoneConfiguration configuration = new TimeZoneConfiguration.Builder() .setAutoDetectionEnabled(autoZoneEnabled) .setAutoDetectionEnabled(isChecked) .build(); .build(); boolean result = mTimeManager.updateTimeZoneConfiguration(configuration); boolean result = mTimeManager.updateTimeZoneConfiguration(configuration); Loading @@ -111,6 +105,11 @@ public class AutoTimeZonePreferenceController extends AbstractPreferenceControll return result; return result; } } @Override public int getSliceHighlightMenuRes() { return R.string.menu_key_system; } @Override @Override public CharSequence getSummary() { public CharSequence getSummary() { // If auto time zone cannot enable telephony fallback and is capable of location, then auto // If auto time zone cannot enable telephony fallback and is capable of location, then auto Loading @@ -124,12 +123,6 @@ public class AutoTimeZonePreferenceController extends AbstractPreferenceControll return ""; return ""; } } @Override public void displayPreference(PreferenceScreen screen) { super.displayPreference(screen); refreshSummary(screen.findPreference(getPreferenceKey())); } @VisibleForTesting @VisibleForTesting boolean isEnabled() { boolean isEnabled() { TimeZoneConfiguration config = getTimeZoneCapabilitiesAndConfig().getConfiguration(); TimeZoneConfiguration config = getTimeZoneCapabilitiesAndConfig().getConfiguration(); Loading
src/com/android/settings/datetime/DatePreferenceController.java +21 −27 Original line number Original line Diff line number Diff line Loading @@ -33,14 +33,12 @@ import android.widget.DatePicker; import androidx.annotation.VisibleForTesting; import androidx.annotation.VisibleForTesting; import androidx.preference.Preference; import androidx.preference.Preference; import com.android.settings.core.PreferenceControllerMixin; import com.android.settings.core.BasePreferenceController; import com.android.settingslib.RestrictedPreference; import com.android.settingslib.core.AbstractPreferenceController; import java.util.Calendar; import java.util.Calendar; public class DatePreferenceController extends AbstractPreferenceController public class DatePreferenceController extends BasePreferenceController implements PreferenceControllerMixin, DatePickerDialog.OnDateSetListener { implements DatePickerDialog.OnDateSetListener { public interface DatePreferenceHost extends UpdateTimeAndDateCallback { public interface DatePreferenceHost extends UpdateTimeAndDateCallback { void showDatePicker(); void showDatePicker(); Loading @@ -49,49 +47,45 @@ public class DatePreferenceController extends AbstractPreferenceController public static final int DIALOG_DATEPICKER = 0; public static final int DIALOG_DATEPICKER = 0; private static final String TAG = "DatePreferenceController"; private static final String TAG = "DatePreferenceController"; private static final String KEY_DATE = "date"; private final DatePreferenceHost mHost; private DatePreferenceHost mHost; private final TimeManager mTimeManager; private final TimeManager mTimeManager; public DatePreferenceController(Context context, DatePreferenceHost host) { public DatePreferenceController(Context context, String preferenceKey) { super(context); super(context, preferenceKey); mHost = host; mTimeManager = context.getSystemService(TimeManager.class); mTimeManager = context.getSystemService(TimeManager.class); } } public void setHost(DatePreferenceHost host) { mHost = host; } @Override @Override public boolean isAvailable() { public int getAvailabilityStatus() { return true; return isEnabled() ? AVAILABLE : DISABLED_DEPENDENT_SETTING; } } @Override @Override public void updateState(Preference preference) { public void updateState(Preference preference) { if (!(preference instanceof RestrictedPreference)) { super.updateState(preference); return; preference.setEnabled(isEnabled()); } final Calendar now = Calendar.getInstance(); preference.setSummary(DateFormat.getLongDateFormat(mContext).format(now.getTime())); if (!((RestrictedPreference) preference).isDisabledByAdmin()) { boolean enableManualDateSelection = isEnabled(); preference.setEnabled(enableManualDateSelection); } } @Override public CharSequence getSummary() { Calendar now = Calendar.getInstance(); return DateFormat.getLongDateFormat(mContext).format(now.getTime()); } } @Override @Override public boolean handlePreferenceTreeClick(Preference preference) { public boolean handlePreferenceTreeClick(Preference preference) { if (!TextUtils.equals(preference.getKey(), KEY_DATE)) { if (!TextUtils.equals(getPreferenceKey(), preference.getKey())) { return false; return false; } } mHost.showDatePicker(); mHost.showDatePicker(); return true; return true; } } @Override public String getPreferenceKey() { return KEY_DATE; } @Override @Override public void onDateSet(DatePicker view, int year, int month, int day) { public void onDateSet(DatePicker view, int year, int month, int day) { setDate(year, month, day); setDate(year, month, day); Loading