Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 7e4d446c authored by Neil Fuller's avatar Neil Fuller Committed by Android (Google) Code Review
Browse files

Merge "Add "Use location" state to TimeZoneCapabilities"

parents 91f6cdac c3b2e0bf
Loading
Loading
Loading
Loading
+38 −0
Original line number Diff line number Diff line
@@ -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,
+43 −0
Original line number Diff line number Diff line
@@ -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();
+2 −0
Original line number Diff line number Diff line
@@ -243,6 +243,8 @@ public final class ConfigurationInternal {
        }
        builder.setConfigureAutoDetectionEnabledCapability(configureAutoDetectionEnabledCapability);

        builder.setUseLocationEnabled(mLocationEnabledSetting);

        boolean deviceHasLocationTimeZoneDetection = isGeoDetectionSupported();
        boolean deviceHasTelephonyDetection = isTelephonyDetectionSupported();