Merge "(Re)Introduce "enabled by admin" UI state"

This commit is contained in:
Neil Fuller
2023-02-03 10:14:03 +00:00
committed by Android (Google) Code Review
2 changed files with 41 additions and 21 deletions

View File

@@ -53,16 +53,25 @@ public class AutoTimePreferenceController extends AbstractPreferenceController
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);
// The preference has three states: visible, not visible, and visible but disabled.
// This method handles the "is visible?" check.
switch (capability) {
case CAPABILITY_NOT_SUPPORTED:
return false;
case CAPABILITY_POSSESSED:
return true;
case CAPABILITY_NOT_ALLOWED:
// This case is expected for enterprise restrictions, where the toggle should be
// present but disabled. Disabling is handled declaratively via the
// settings:userRestriction attribute in .xml. The client-side logic is expected to
// concur with the capabilities logic in the system server.
return true;
case CAPABILITY_NOT_APPLICABLE:
// CAPABILITY_NOT_APPLICABLE is not currently expected, so this is return value is
// arbitrary.
return true;
default:
throw new IllegalStateException("Unknown capability=" + capability);
}
}
@@ -71,6 +80,7 @@ public class AutoTimePreferenceController extends AbstractPreferenceController
if (!(preference instanceof SwitchPreference)) {
return;
}
((SwitchPreference) preference).setChecked(isEnabled());
}

View File

@@ -27,11 +27,11 @@ import android.app.time.TimeZoneCapabilitiesAndConfig;
import android.app.time.TimeZoneConfiguration;
import android.content.Context;
import androidx.annotation.VisibleForTesting;
import androidx.preference.Preference;
import androidx.preference.PreferenceScreen;
import androidx.preference.SwitchPreference;
import com.android.internal.annotations.VisibleForTesting;
import com.android.settings.R;
import com.android.settings.core.PreferenceControllerMixin;
import com.android.settingslib.core.AbstractPreferenceController;
@@ -63,16 +63,25 @@ public class AutoTimeZonePreferenceController extends AbstractPreferenceControll
getTimeZoneCapabilitiesAndConfig().getCapabilities();
int capability = timeZoneCapabilities.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);
// The preference has three states: visible, not visible, and visible but disabled.
// This method handles the "is visible?" check.
switch (capability) {
case CAPABILITY_NOT_SUPPORTED:
return false;
case CAPABILITY_POSSESSED:
return true;
case CAPABILITY_NOT_ALLOWED:
// This case is expected for enterprise restrictions, where the toggle should be
// present but disabled. Disabling is handled declaratively via the
// settings:userRestriction attribute in .xml. The client-side logic is expected to
// concur with the capabilities logic in the system server.
return true;
case CAPABILITY_NOT_APPLICABLE:
// CAPABILITY_NOT_APPLICABLE is not currently expected, so this is return value is
// arbitrary.
return true;
default:
throw new IllegalStateException("Unknown capability=" + capability);
}
}
@@ -86,6 +95,7 @@ public class AutoTimeZonePreferenceController extends AbstractPreferenceControll
if (!(preference instanceof SwitchPreference)) {
return;
}
((SwitchPreference) preference).setChecked(isEnabled());
}