Merge "Add "Use location" state to TimeZoneCapabilities"

This commit is contained in:
Neil Fuller
2023-01-31 15:57:41 +00:00
committed by Android (Google) Code Review
3 changed files with 83 additions and 0 deletions

View File

@@ -57,6 +57,16 @@ public final class TimeZoneCapabilities implements Parcelable {
*/
@NonNull private final UserHandle mUserHandle;
private final @CapabilityState int mConfigureAutoDetectionEnabledCapability;
/**
* The values of the user's "Use location" value, AKA the Master Location Switch.
*
* <p>This is only exposed for SettingsUI and so is not part of the SDK API.
*
* <p>This is not treated as a CapabilityState as it's a boolean value that all user's have.
*/
private final boolean mUseLocationEnabled;
private final @CapabilityState int mConfigureGeoDetectionEnabledCapability;
private final @CapabilityState int mSetManualTimeZoneCapability;
@@ -64,6 +74,7 @@ public final class TimeZoneCapabilities implements Parcelable {
this.mUserHandle = Objects.requireNonNull(builder.mUserHandle);
this.mConfigureAutoDetectionEnabledCapability =
builder.mConfigureAutoDetectionEnabledCapability;
this.mUseLocationEnabled = builder.mUseLocationEnabled;
this.mConfigureGeoDetectionEnabledCapability =
builder.mConfigureGeoDetectionEnabledCapability;
this.mSetManualTimeZoneCapability = builder.mSetManualTimeZoneCapability;
@@ -74,6 +85,7 @@ public final class TimeZoneCapabilities implements Parcelable {
UserHandle userHandle = UserHandle.readFromParcel(in);
return new TimeZoneCapabilities.Builder(userHandle)
.setConfigureAutoDetectionEnabledCapability(in.readInt())
.setUseLocationEnabled(in.readBoolean())
.setConfigureGeoDetectionEnabledCapability(in.readInt())
.setSetManualTimeZoneCapability(in.readInt())
.build();
@@ -83,6 +95,7 @@ public final class TimeZoneCapabilities implements Parcelable {
public void writeToParcel(@NonNull Parcel dest, int flags) {
UserHandle.writeToParcel(mUserHandle, dest);
dest.writeInt(mConfigureAutoDetectionEnabledCapability);
dest.writeBoolean(mUseLocationEnabled);
dest.writeInt(mConfigureGeoDetectionEnabledCapability);
dest.writeInt(mSetManualTimeZoneCapability);
}
@@ -97,6 +110,20 @@ public final class TimeZoneCapabilities implements Parcelable {
return mConfigureAutoDetectionEnabledCapability;
}
/**
* Returns {@code true} if the device's location can be used by the Android system, and
* therefore the platform components running on behalf of the user. At the time of writing, the
* user can change this via the "Use location" setting on the Location settings screen.
*
* Not part of the SDK API because it is intended for use by SettingsUI, which can display
* text about needing it to be on for location-based time zone detection.
* @hide
*
*/
public boolean isUseLocationEnabled() {
return mUseLocationEnabled;
}
/**
* Returns the capability state associated with the user's ability to modify the geolocation
* detection setting. The setting can be updated via {@link
@@ -167,6 +194,7 @@ public final class TimeZoneCapabilities implements Parcelable {
return mUserHandle.equals(that.mUserHandle)
&& mConfigureAutoDetectionEnabledCapability
== that.mConfigureAutoDetectionEnabledCapability
&& mUseLocationEnabled == that.mUseLocationEnabled
&& mConfigureGeoDetectionEnabledCapability
== that.mConfigureGeoDetectionEnabledCapability
&& mSetManualTimeZoneCapability == that.mSetManualTimeZoneCapability;
@@ -184,6 +212,7 @@ public final class TimeZoneCapabilities implements Parcelable {
+ "mUserHandle=" + mUserHandle
+ ", mConfigureAutoDetectionEnabledCapability="
+ mConfigureAutoDetectionEnabledCapability
+ ", mUseLocationEnabled=" + mUseLocationEnabled
+ ", mConfigureGeoDetectionEnabledCapability="
+ mConfigureGeoDetectionEnabledCapability
+ ", mSetManualTimeZoneCapability=" + mSetManualTimeZoneCapability
@@ -199,6 +228,7 @@ public final class TimeZoneCapabilities implements Parcelable {
@NonNull private UserHandle mUserHandle;
private @CapabilityState int mConfigureAutoDetectionEnabledCapability;
private Boolean mUseLocationEnabled;
private @CapabilityState int mConfigureGeoDetectionEnabledCapability;
private @CapabilityState int mSetManualTimeZoneCapability;
@@ -211,6 +241,7 @@ public final class TimeZoneCapabilities implements Parcelable {
mUserHandle = capabilitiesToCopy.mUserHandle;
mConfigureAutoDetectionEnabledCapability =
capabilitiesToCopy.mConfigureAutoDetectionEnabledCapability;
mUseLocationEnabled = capabilitiesToCopy.mUseLocationEnabled;
mConfigureGeoDetectionEnabledCapability =
capabilitiesToCopy.mConfigureGeoDetectionEnabledCapability;
mSetManualTimeZoneCapability =
@@ -223,6 +254,12 @@ public final class TimeZoneCapabilities implements Parcelable {
return this;
}
/** Sets the values for "use location". See {@link #isUseLocationEnabled()}. */
public Builder setUseLocationEnabled(boolean useLocation) {
mUseLocationEnabled = useLocation;
return this;
}
/**
* Sets the value for the "configure geolocation time zone detection enabled" capability.
*/
@@ -242,6 +279,7 @@ public final class TimeZoneCapabilities implements Parcelable {
public TimeZoneCapabilities build() {
verifyCapabilitySet(mConfigureAutoDetectionEnabledCapability,
"configureAutoDetectionEnabledCapability");
Objects.requireNonNull(mUseLocationEnabled, "useLocationEnabled");
verifyCapabilitySet(mConfigureGeoDetectionEnabledCapability,
"configureGeoDetectionEnabledCapability");
verifyCapabilitySet(mSetManualTimeZoneCapability,

View File

@@ -44,10 +44,12 @@ public class TimeZoneCapabilitiesTest {
public void testEquals() {
TimeZoneCapabilities.Builder builder1 = new TimeZoneCapabilities.Builder(TEST_USER_HANDLE)
.setConfigureAutoDetectionEnabledCapability(CAPABILITY_POSSESSED)
.setUseLocationEnabled(true)
.setConfigureGeoDetectionEnabledCapability(CAPABILITY_POSSESSED)
.setSetManualTimeZoneCapability(CAPABILITY_POSSESSED);
TimeZoneCapabilities.Builder builder2 = new TimeZoneCapabilities.Builder(TEST_USER_HANDLE)
.setConfigureAutoDetectionEnabledCapability(CAPABILITY_POSSESSED)
.setUseLocationEnabled(true)
.setConfigureGeoDetectionEnabledCapability(CAPABILITY_POSSESSED)
.setSetManualTimeZoneCapability(CAPABILITY_POSSESSED);
{
@@ -70,6 +72,20 @@ public class TimeZoneCapabilitiesTest {
assertEquals(one, two);
}
builder2.setUseLocationEnabled(false);
{
TimeZoneCapabilities one = builder1.build();
TimeZoneCapabilities two = builder2.build();
assertNotEquals(one, two);
}
builder1.setUseLocationEnabled(false);
{
TimeZoneCapabilities one = builder1.build();
TimeZoneCapabilities two = builder2.build();
assertEquals(one, two);
}
builder2.setConfigureGeoDetectionEnabledCapability(CAPABILITY_NOT_ALLOWED);
{
TimeZoneCapabilities one = builder1.build();
@@ -103,6 +119,7 @@ public class TimeZoneCapabilitiesTest {
public void testParcelable() {
TimeZoneCapabilities.Builder builder = new TimeZoneCapabilities.Builder(TEST_USER_HANDLE)
.setConfigureAutoDetectionEnabledCapability(CAPABILITY_POSSESSED)
.setUseLocationEnabled(true)
.setConfigureGeoDetectionEnabledCapability(CAPABILITY_POSSESSED)
.setSetManualTimeZoneCapability(CAPABILITY_POSSESSED);
assertRoundTripParcelable(builder.build());
@@ -110,6 +127,9 @@ public class TimeZoneCapabilitiesTest {
builder.setConfigureAutoDetectionEnabledCapability(CAPABILITY_NOT_ALLOWED);
assertRoundTripParcelable(builder.build());
builder.setUseLocationEnabled(false);
assertRoundTripParcelable(builder.build());
builder.setConfigureGeoDetectionEnabledCapability(CAPABILITY_NOT_ALLOWED);
assertRoundTripParcelable(builder.build());
@@ -126,6 +146,7 @@ public class TimeZoneCapabilitiesTest {
.build();
TimeZoneCapabilities capabilities = new TimeZoneCapabilities.Builder(TEST_USER_HANDLE)
.setConfigureAutoDetectionEnabledCapability(CAPABILITY_POSSESSED)
.setUseLocationEnabled(true)
.setConfigureGeoDetectionEnabledCapability(CAPABILITY_POSSESSED)
.setSetManualTimeZoneCapability(CAPABILITY_POSSESSED)
.build();
@@ -149,6 +170,7 @@ public class TimeZoneCapabilitiesTest {
.build();
TimeZoneCapabilities capabilities = new TimeZoneCapabilities.Builder(TEST_USER_HANDLE)
.setConfigureAutoDetectionEnabledCapability(CAPABILITY_NOT_ALLOWED)
.setUseLocationEnabled(true)
.setConfigureGeoDetectionEnabledCapability(CAPABILITY_NOT_ALLOWED)
.setSetManualTimeZoneCapability(CAPABILITY_NOT_ALLOWED)
.build();
@@ -164,6 +186,7 @@ public class TimeZoneCapabilitiesTest {
public void copyBuilder_copiesAllFields() {
TimeZoneCapabilities capabilities = new TimeZoneCapabilities.Builder(TEST_USER_HANDLE)
.setConfigureAutoDetectionEnabledCapability(CAPABILITY_NOT_ALLOWED)
.setUseLocationEnabled(true)
.setConfigureGeoDetectionEnabledCapability(CAPABILITY_NOT_ALLOWED)
.setSetManualTimeZoneCapability(CAPABILITY_NOT_ALLOWED)
.build();
@@ -176,6 +199,24 @@ public class TimeZoneCapabilitiesTest {
TimeZoneCapabilities expectedCapabilities =
new TimeZoneCapabilities.Builder(TEST_USER_HANDLE)
.setConfigureAutoDetectionEnabledCapability(CAPABILITY_POSSESSED)
.setUseLocationEnabled(true)
.setConfigureGeoDetectionEnabledCapability(CAPABILITY_NOT_ALLOWED)
.setSetManualTimeZoneCapability(CAPABILITY_NOT_ALLOWED)
.build();
assertThat(updatedCapabilities).isEqualTo(expectedCapabilities);
}
{
TimeZoneCapabilities updatedCapabilities =
new TimeZoneCapabilities.Builder(capabilities)
.setUseLocationEnabled(false)
.build();
TimeZoneCapabilities expectedCapabilities =
new TimeZoneCapabilities.Builder(TEST_USER_HANDLE)
.setConfigureAutoDetectionEnabledCapability(CAPABILITY_NOT_ALLOWED)
.setUseLocationEnabled(false)
.setConfigureGeoDetectionEnabledCapability(CAPABILITY_NOT_ALLOWED)
.setSetManualTimeZoneCapability(CAPABILITY_NOT_ALLOWED)
.build();
@@ -192,6 +233,7 @@ public class TimeZoneCapabilitiesTest {
TimeZoneCapabilities expectedCapabilities =
new TimeZoneCapabilities.Builder(TEST_USER_HANDLE)
.setConfigureAutoDetectionEnabledCapability(CAPABILITY_NOT_ALLOWED)
.setUseLocationEnabled(true)
.setConfigureGeoDetectionEnabledCapability(CAPABILITY_POSSESSED)
.setSetManualTimeZoneCapability(CAPABILITY_NOT_ALLOWED)
.build();
@@ -208,6 +250,7 @@ public class TimeZoneCapabilitiesTest {
TimeZoneCapabilities expectedCapabilities =
new TimeZoneCapabilities.Builder(TEST_USER_HANDLE)
.setConfigureAutoDetectionEnabledCapability(CAPABILITY_NOT_ALLOWED)
.setUseLocationEnabled(true)
.setConfigureGeoDetectionEnabledCapability(CAPABILITY_NOT_ALLOWED)
.setSetManualTimeZoneCapability(CAPABILITY_POSSESSED)
.build();

View File

@@ -243,6 +243,8 @@ public final class ConfigurationInternal {
}
builder.setConfigureAutoDetectionEnabledCapability(configureAutoDetectionEnabledCapability);
builder.setUseLocationEnabled(mLocationEnabledSetting);
boolean deviceHasLocationTimeZoneDetection = isGeoDetectionSupported();
boolean deviceHasTelephonyDetection = isTelephonyDetectionSupported();