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

Commit e0c5ca85 authored by Alexander Roederer's avatar Alexander Roederer Committed by Android (Google) Code Review
Browse files

Merge "Add bitmask to ZenRule tracking user changes" into main

parents ff17547e 2ba3e989
Loading
Loading
Loading
Loading
+1 −0
Original line number Diff line number Diff line
@@ -5316,6 +5316,7 @@ package android.app {
    ctor @Deprecated public AutomaticZenRule(String, android.content.ComponentName, android.net.Uri, int, boolean);
    ctor public AutomaticZenRule(@NonNull String, @Nullable android.content.ComponentName, @Nullable android.content.ComponentName, @NonNull android.net.Uri, @Nullable android.service.notification.ZenPolicy, int, boolean);
    ctor public AutomaticZenRule(android.os.Parcel);
    method @FlaggedApi("android.app.modes_api") public boolean canUpdate();
    method public int describeContents();
    method public android.net.Uri getConditionId();
    method @Nullable public android.content.ComponentName getConfigurationActivity();
+53 −0
Original line number Diff line number Diff line
@@ -284,6 +284,16 @@ package android.app {
    method public default void onOpActiveChanged(@NonNull String, int, @NonNull String, @Nullable String, boolean, int, int);
  }

  public final class AutomaticZenRule implements android.os.Parcelable {
    method @FlaggedApi("android.app.modes_api") public int getUserModifiedFields();
    field @FlaggedApi("android.app.modes_api") public static final int FIELD_INTERRUPTION_FILTER = 2; // 0x2
    field @FlaggedApi("android.app.modes_api") public static final int FIELD_NAME = 1; // 0x1
  }

  @FlaggedApi("android.app.modes_api") public static final class AutomaticZenRule.Builder {
    method @FlaggedApi("android.app.modes_api") @NonNull public android.app.AutomaticZenRule.Builder setUserModifiedFields(int);
  }

  public class BroadcastOptions extends android.app.ComponentOptions {
    ctor public BroadcastOptions();
    ctor public BroadcastOptions(@NonNull android.os.Bundle);
@@ -3007,6 +3017,49 @@ package android.service.notification {
    method @Deprecated public boolean isBound();
  }

  @FlaggedApi("android.app.modes_api") public final class ZenDeviceEffects implements android.os.Parcelable {
    method public int getUserModifiedFields();
    field public static final int FIELD_DIM_WALLPAPER = 4; // 0x4
    field public static final int FIELD_DISABLE_AUTO_BRIGHTNESS = 16; // 0x10
    field public static final int FIELD_DISABLE_TAP_TO_WAKE = 32; // 0x20
    field public static final int FIELD_DISABLE_TILT_TO_WAKE = 64; // 0x40
    field public static final int FIELD_DISABLE_TOUCH = 128; // 0x80
    field public static final int FIELD_GRAYSCALE = 1; // 0x1
    field public static final int FIELD_MAXIMIZE_DOZE = 512; // 0x200
    field public static final int FIELD_MINIMIZE_RADIO_USAGE = 256; // 0x100
    field public static final int FIELD_NIGHT_MODE = 8; // 0x8
    field public static final int FIELD_SUPPRESS_AMBIENT_DISPLAY = 2; // 0x2
  }

  @FlaggedApi("android.app.modes_api") public static final class ZenDeviceEffects.Builder {
    method @NonNull public android.service.notification.ZenDeviceEffects.Builder setUserModifiedFields(int);
  }

  public final class ZenPolicy implements android.os.Parcelable {
    method @FlaggedApi("android.app.modes_api") public int getUserModifiedFields();
    field @FlaggedApi("android.app.modes_api") public static final int FIELD_ALLOW_CHANNELS = 8; // 0x8
    field @FlaggedApi("android.app.modes_api") public static final int FIELD_CALLS = 2; // 0x2
    field @FlaggedApi("android.app.modes_api") public static final int FIELD_CONVERSATIONS = 4; // 0x4
    field @FlaggedApi("android.app.modes_api") public static final int FIELD_MESSAGES = 1; // 0x1
    field @FlaggedApi("android.app.modes_api") public static final int FIELD_PRIORITY_CATEGORY_ALARMS = 128; // 0x80
    field @FlaggedApi("android.app.modes_api") public static final int FIELD_PRIORITY_CATEGORY_EVENTS = 32; // 0x20
    field @FlaggedApi("android.app.modes_api") public static final int FIELD_PRIORITY_CATEGORY_MEDIA = 256; // 0x100
    field @FlaggedApi("android.app.modes_api") public static final int FIELD_PRIORITY_CATEGORY_REPEAT_CALLERS = 64; // 0x40
    field @FlaggedApi("android.app.modes_api") public static final int FIELD_PRIORITY_CATEGORY_SYSTEM = 512; // 0x200
    field @FlaggedApi("android.app.modes_api") public static final int FIELD_VISUAL_EFFECT_AMBIENT = 32768; // 0x8000
    field @FlaggedApi("android.app.modes_api") public static final int FIELD_VISUAL_EFFECT_BADGE = 16384; // 0x4000
    field @FlaggedApi("android.app.modes_api") public static final int FIELD_VISUAL_EFFECT_FULL_SCREEN_INTENT = 1024; // 0x400
    field @FlaggedApi("android.app.modes_api") public static final int FIELD_VISUAL_EFFECT_LIGHTS = 2048; // 0x800
    field @FlaggedApi("android.app.modes_api") public static final int FIELD_VISUAL_EFFECT_NOTIFICATION_LIST = 65536; // 0x10000
    field @FlaggedApi("android.app.modes_api") public static final int FIELD_VISUAL_EFFECT_PEEK = 4096; // 0x1000
    field @FlaggedApi("android.app.modes_api") public static final int FIELD_VISUAL_EFFECT_STATUS_BAR = 8192; // 0x2000
  }

  public static final class ZenPolicy.Builder {
    ctor public ZenPolicy.Builder(@Nullable android.service.notification.ZenPolicy);
    method @FlaggedApi("android.app.modes_api") @NonNull public android.service.notification.ZenPolicy.Builder setUserModifiedFields(int);
  }

}

package android.service.quickaccesswallet {
+6 −0
Original line number Diff line number Diff line
@@ -535,6 +535,10 @@ MissingNullability: android.widget.ImageView#isDefaultFocusHighlightNeeded(andro
    Missing nullability on parameter `foreground` in method `isDefaultFocusHighlightNeeded`


OptionalBuilderConstructorArgument: android.service.notification.ZenPolicy.Builder#Builder(android.service.notification.ZenPolicy) parameter #0:
    Builder constructor arguments must be mandatory (i.e. not @Nullable): parameter policy in android.service.notification.ZenPolicy.Builder(android.service.notification.ZenPolicy policy)


ProtectedMember: android.app.AppDetailsActivity#onCreate(android.os.Bundle):
    Protected methods not allowed; must be public: method android.app.AppDetailsActivity.onCreate(android.os.Bundle)}
ProtectedMember: android.view.ViewGroup#resetResolvedDrawables():
@@ -2143,6 +2147,8 @@ UnflaggedApi: android.service.notification.NotificationRankingUpdate#PARCELABLE_
    New API must be flagged with @FlaggedApi: field android.service.notification.NotificationRankingUpdate.PARCELABLE_WRITE_RETURN_VALUE
UnflaggedApi: android.service.notification.NotificationRankingUpdate#isFdNotNullAndClosed():
    New API must be flagged with @FlaggedApi: method android.service.notification.NotificationRankingUpdate.isFdNotNullAndClosed()
UnflaggedApi: android.service.notification.ZenPolicy.Builder#Builder(android.service.notification.ZenPolicy):
    New API must be flagged with @FlaggedApi: constructor android.service.notification.ZenPolicy.Builder(android.service.notification.ZenPolicy)
UnflaggedApi: android.telephony.TelephonyManager#HAL_SERVICE_SATELLITE:
    New API must be flagged with @FlaggedApi: field android.telephony.TelephonyManager.HAL_SERVICE_SATELLITE
UnflaggedApi: android.telephony.ims.feature.MmTelFeature.MmTelCapabilities:
+94 −4
Original line number Diff line number Diff line
@@ -23,6 +23,7 @@ import android.annotation.FlaggedApi;
import android.annotation.IntDef;
import android.annotation.NonNull;
import android.annotation.Nullable;
import android.annotation.TestApi;
import android.app.NotificationManager.InterruptionFilter;
import android.content.ComponentName;
import android.net.Uri;
@@ -35,6 +36,7 @@ import android.view.WindowInsetsController;

import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.util.ArrayList;
import java.util.Objects;

/**
@@ -111,6 +113,30 @@ public final class AutomaticZenRule implements Parcelable {
    @Retention(RetentionPolicy.SOURCE)
    public @interface Type {}

    /** Used to track which rule variables have been modified by the user.
     * Should be checked against the bitmask {@link #getUserModifiedFields()}.
     * @hide
     */
    @IntDef(flag = true, prefix = { "FIELD_" }, value = {
            FIELD_NAME,
            FIELD_INTERRUPTION_FILTER,
    })
    @Retention(RetentionPolicy.SOURCE)
    public @interface ModifiableField {}

    /**
     * @hide
     */
    @FlaggedApi(Flags.FLAG_MODES_API)
    @TestApi
    public static final int FIELD_NAME = 1 << 0;
    /**
     * @hide
     */
    @FlaggedApi(Flags.FLAG_MODES_API)
    @TestApi
    public static final int FIELD_INTERRUPTION_FILTER = 1 << 1;

    private boolean enabled;
    private String name;
    private @InterruptionFilter int interruptionFilter;
@@ -120,12 +146,14 @@ public final class AutomaticZenRule implements Parcelable {
    private long creationTime;
    private ZenPolicy mZenPolicy;
    private ZenDeviceEffects mDeviceEffects;
    // TODO: b/310620812 - Remove this once FLAG_MODES_API is inlined.
    private boolean mModified = false;
    private String mPkg;
    private int mType = TYPE_UNKNOWN;
    private int mType = Flags.modesApi() ? TYPE_UNKNOWN : 0;
    private int mIconResId;
    private String mTriggerDescription;
    private boolean mAllowManualInvocation;
    private @ModifiableField int mUserModifiedFields; // Bitwise representation

    /**
     * The maximum string length for any string contained in this automatic zen rule. This pertains
@@ -228,6 +256,7 @@ public final class AutomaticZenRule implements Parcelable {
            mIconResId = source.readInt();
            mTriggerDescription = getTrimmedString(source.readString(), MAX_DESC_LENGTH);
            mType = source.readInt();
            mUserModifiedFields = source.readInt();
        }
    }

@@ -278,6 +307,8 @@ public final class AutomaticZenRule implements Parcelable {
     * Returns whether this rule's name has been modified by the user.
     * @hide
     */
    // TODO: b/310620812 - Replace with mUserModifiedFields & FIELD_NAME once
    //  FLAG_MODES_API is inlined.
    public boolean isModified() {
        return mModified;
    }
@@ -475,6 +506,32 @@ public final class AutomaticZenRule implements Parcelable {
        return type;
    }

    /**
     * Gets the bitmask representing which fields are user modified. Bits are set using
     * {@link ModifiableField}.
     * @hide
     */
    @FlaggedApi(Flags.FLAG_MODES_API)
    @TestApi
    public @ModifiableField int getUserModifiedFields() {
        return mUserModifiedFields;
    }

    /**
     * Returns {@code true} if the {@link AutomaticZenRule} can be updated.
     * When this returns {@code false}, calls to
     * {@link NotificationManager#updateAutomaticZenRule(String, AutomaticZenRule)}) with this rule
     * will ignore changes to user-configurable fields.
     */
    @FlaggedApi(Flags.FLAG_MODES_API)
    public boolean canUpdate() {
        // The rule is considered updateable if its bitmask has no user modifications, and
        // the bitmasks of the policy and device effects have no modification.
        return mUserModifiedFields == 0
                && (mZenPolicy == null || mZenPolicy.getUserModifiedFields() == 0)
                && (mDeviceEffects == null || mDeviceEffects.getUserModifiedFields() == 0);
    }

    @Override
    public int describeContents() {
        return 0;
@@ -503,6 +560,7 @@ public final class AutomaticZenRule implements Parcelable {
            dest.writeInt(mIconResId);
            dest.writeString(mTriggerDescription);
            dest.writeInt(mType);
            dest.writeInt(mUserModifiedFields);
        }
    }

@@ -524,12 +582,26 @@ public final class AutomaticZenRule implements Parcelable {
                    .append(",allowManualInvocation=").append(mAllowManualInvocation)
                    .append(",iconResId=").append(mIconResId)
                    .append(",triggerDescription=").append(mTriggerDescription)
                    .append(",type=").append(mType);
                    .append(",type=").append(mType)
                    .append(",userModifiedFields=")
                    .append(modifiedFieldsToString(mUserModifiedFields));
        }

        return sb.append(']').toString();
    }

    @FlaggedApi(Flags.FLAG_MODES_API)
    private String modifiedFieldsToString(int bitmask) {
        ArrayList<String> modified = new ArrayList<>();
        if ((bitmask & FIELD_NAME) != 0) {
            modified.add("FIELD_NAME");
        }
        if ((bitmask & FIELD_INTERRUPTION_FILTER) != 0) {
            modified.add("FIELD_INTERRUPTION_FILTER");
        }
        return "{" + String.join(",", modified) + "}";
    }

    @Override
    public boolean equals(@Nullable Object o) {
        if (!(o instanceof AutomaticZenRule)) return false;
@@ -551,7 +623,8 @@ public final class AutomaticZenRule implements Parcelable {
                    && other.mAllowManualInvocation == mAllowManualInvocation
                    && other.mIconResId == mIconResId
                    && Objects.equals(other.mTriggerDescription, mTriggerDescription)
                    && other.mType == mType;
                    && other.mType == mType
                    && other.mUserModifiedFields == mUserModifiedFields;
        }
        return finalEquals;
    }
@@ -561,7 +634,8 @@ public final class AutomaticZenRule implements Parcelable {
        if (Flags.modesApi()) {
            return Objects.hash(enabled, name, interruptionFilter, conditionId, owner,
                    configurationActivity, mZenPolicy, mDeviceEffects, mModified, creationTime,
                    mPkg, mAllowManualInvocation, mIconResId, mTriggerDescription, mType);
                    mPkg, mAllowManualInvocation, mIconResId, mTriggerDescription, mType,
                    mUserModifiedFields);
        }
        return Objects.hash(enabled, name, interruptionFilter, conditionId, owner,
                configurationActivity, mZenPolicy, mModified, creationTime, mPkg);
@@ -630,6 +704,7 @@ public final class AutomaticZenRule implements Parcelable {
        private boolean mAllowManualInvocation;
        private long mCreationTime;
        private String mPkg;
        private @ModifiableField int mUserModifiedFields;

        public Builder(@NonNull AutomaticZenRule rule) {
            mName = rule.getName();
@@ -646,6 +721,7 @@ public final class AutomaticZenRule implements Parcelable {
            mAllowManualInvocation = rule.isManualInvocationAllowed();
            mCreationTime = rule.getCreationTime();
            mPkg = rule.getPackageName();
            mUserModifiedFields = rule.mUserModifiedFields;
        }

        public Builder(@NonNull String name, @NonNull Uri conditionId) {
@@ -772,6 +848,19 @@ public final class AutomaticZenRule implements Parcelable {
            return this;
        }

        /**
         * Sets the bitmask representing which fields have been user-modified.
         * This method should not be used outside of tests. The value of userModifiedFields
         * should be set based on what values are changed when a rule is populated or updated..
         * @hide
         */
        @FlaggedApi(Flags.FLAG_MODES_API)
        @TestApi
        public @NonNull Builder setUserModifiedFields(@ModifiableField int userModifiedFields) {
            mUserModifiedFields = userModifiedFields;
            return this;
        }

        public @NonNull AutomaticZenRule build() {
            AutomaticZenRule rule = new AutomaticZenRule(mName, mOwner, mConfigurationActivity,
                    mConditionId, mPolicy, mInterruptionFilter, mEnabled);
@@ -782,6 +871,7 @@ public final class AutomaticZenRule implements Parcelable {
            rule.mIconResId = mIconResId;
            rule.mAllowManualInvocation = mAllowManualInvocation;
            rule.setPackageName(mPkg);
            rule.mUserModifiedFields = mUserModifiedFields;

            return rule;
        }
+150 −9
Original line number Diff line number Diff line
@@ -17,12 +17,16 @@
package android.service.notification;

import android.annotation.FlaggedApi;
import android.annotation.IntDef;
import android.annotation.NonNull;
import android.annotation.Nullable;
import android.annotation.TestApi;
import android.app.Flags;
import android.os.Parcel;
import android.os.Parcelable;

import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.util.ArrayList;
import java.util.Objects;

@@ -33,6 +37,76 @@ import java.util.Objects;
@FlaggedApi(Flags.FLAG_MODES_API)
public final class ZenDeviceEffects implements Parcelable {

    /** Used to track which rule variables have been modified by the user.
     * Should be checked against the bitmask {@link #getUserModifiedFields()}.
     * @hide
     */
    @IntDef(flag = true, prefix = { "FIELD_" }, value = {
            FIELD_GRAYSCALE,
            FIELD_SUPPRESS_AMBIENT_DISPLAY,
            FIELD_DIM_WALLPAPER,
            FIELD_NIGHT_MODE,
            FIELD_DISABLE_AUTO_BRIGHTNESS,
            FIELD_DISABLE_TAP_TO_WAKE,
            FIELD_DISABLE_TILT_TO_WAKE,
            FIELD_DISABLE_TOUCH,
            FIELD_MINIMIZE_RADIO_USAGE,
            FIELD_MAXIMIZE_DOZE,
    })
    @Retention(RetentionPolicy.SOURCE)
    public @interface ModifiableField {}

    /**
     * @hide
     */
    @TestApi
    public static final int FIELD_GRAYSCALE = 1 << 0;
    /**
     * @hide
     */
    @TestApi
    public static final int FIELD_SUPPRESS_AMBIENT_DISPLAY = 1 << 1;
    /**
     * @hide
     */
    @TestApi
    public static final int FIELD_DIM_WALLPAPER = 1 << 2;
    /**
     * @hide
     */
    @TestApi
    public static final int FIELD_NIGHT_MODE = 1 << 3;
    /**
     * @hide
     */
    @TestApi
    public static final int FIELD_DISABLE_AUTO_BRIGHTNESS = 1 << 4;
    /**
     * @hide
     */
    @TestApi
    public static final int FIELD_DISABLE_TAP_TO_WAKE = 1 << 5;
    /**
     * @hide
     */
    @TestApi
    public static final int FIELD_DISABLE_TILT_TO_WAKE = 1 << 6;
    /**
     * @hide
     */
    @TestApi
    public static final int FIELD_DISABLE_TOUCH = 1 << 7;
    /**
     * @hide
     */
    @TestApi
    public static final int FIELD_MINIMIZE_RADIO_USAGE = 1 << 8;
    /**
     * @hide
     */
    @TestApi
    public static final int FIELD_MAXIMIZE_DOZE = 1 << 9;

    private final boolean mGrayscale;
    private final boolean mSuppressAmbientDisplay;
    private final boolean mDimWallpaper;
@@ -45,10 +119,13 @@ public final class ZenDeviceEffects implements Parcelable {
    private final boolean mMinimizeRadioUsage;
    private final boolean mMaximizeDoze;

    private final @ModifiableField int mUserModifiedFields; // Bitwise representation

    private ZenDeviceEffects(boolean grayscale, boolean suppressAmbientDisplay,
            boolean dimWallpaper, boolean nightMode, boolean disableAutoBrightness,
            boolean disableTapToWake, boolean disableTiltToWake, boolean disableTouch,
            boolean minimizeRadioUsage, boolean maximizeDoze) {
            boolean minimizeRadioUsage, boolean maximizeDoze,
            @ModifiableField int userModifiedFields) {
        mGrayscale = grayscale;
        mSuppressAmbientDisplay = suppressAmbientDisplay;
        mDimWallpaper = dimWallpaper;
@@ -59,6 +136,7 @@ public final class ZenDeviceEffects implements Parcelable {
        mDisableTouch = disableTouch;
        mMinimizeRadioUsage = minimizeRadioUsage;
        mMaximizeDoze = maximizeDoze;
        mUserModifiedFields = userModifiedFields;
    }

    @Override
@@ -75,14 +153,15 @@ public final class ZenDeviceEffects implements Parcelable {
                && this.mDisableTiltToWake == that.mDisableTiltToWake
                && this.mDisableTouch == that.mDisableTouch
                && this.mMinimizeRadioUsage == that.mMinimizeRadioUsage
                && this.mMaximizeDoze == that.mMaximizeDoze;
                && this.mMaximizeDoze == that.mMaximizeDoze
                && this.mUserModifiedFields == that.mUserModifiedFields;
    }

    @Override
    public int hashCode() {
        return Objects.hash(mGrayscale, mSuppressAmbientDisplay, mDimWallpaper, mNightMode,
                mDisableAutoBrightness, mDisableTapToWake, mDisableTiltToWake, mDisableTouch,
                mMinimizeRadioUsage, mMaximizeDoze);
                mMinimizeRadioUsage, mMaximizeDoze, mUserModifiedFields);
    }

    @Override
@@ -98,7 +177,43 @@ public final class ZenDeviceEffects implements Parcelable {
        if (mDisableTouch) effects.add("disableTouch");
        if (mMinimizeRadioUsage) effects.add("minimizeRadioUsage");
        if (mMaximizeDoze) effects.add("maximizeDoze");
        return "[" + String.join(", ", effects) + "]";
        return "[" + String.join(", ", effects) + "]"
                + " userModifiedFields: " + modifiedFieldsToString(mUserModifiedFields);
    }

    private String modifiedFieldsToString(int bitmask) {
        ArrayList<String> modified = new ArrayList<>();
        if ((bitmask & FIELD_GRAYSCALE) != 0) {
            modified.add("FIELD_GRAYSCALE");
        }
        if ((bitmask & FIELD_SUPPRESS_AMBIENT_DISPLAY) != 0) {
            modified.add("FIELD_SUPPRESS_AMBIENT_DISPLAY");
        }
        if ((bitmask & FIELD_DIM_WALLPAPER) != 0) {
            modified.add("FIELD_DIM_WALLPAPER");
        }
        if ((bitmask & FIELD_NIGHT_MODE) != 0) {
            modified.add("FIELD_NIGHT_MODE");
        }
        if ((bitmask & FIELD_DISABLE_AUTO_BRIGHTNESS) != 0) {
            modified.add("FIELD_DISABLE_AUTO_BRIGHTNESS");
        }
        if ((bitmask & FIELD_DISABLE_TAP_TO_WAKE) != 0) {
            modified.add("FIELD_DISABLE_TAP_TO_WAKE");
        }
        if ((bitmask & FIELD_DISABLE_TILT_TO_WAKE) != 0) {
            modified.add("FIELD_DISABLE_TILT_TO_WAKE");
        }
        if ((bitmask & FIELD_DISABLE_TOUCH) != 0) {
            modified.add("FIELD_DISABLE_TOUCH");
        }
        if ((bitmask & FIELD_MINIMIZE_RADIO_USAGE) != 0) {
            modified.add("FIELD_MINIMIZE_RADIO_USAGE");
        }
        if ((bitmask & FIELD_MAXIMIZE_DOZE) != 0) {
            modified.add("FIELD_MAXIMIZE_DOZE");
        }
        return "{" + String.join(",", modified) + "}";
    }

    /**
@@ -194,9 +309,10 @@ public final class ZenDeviceEffects implements Parcelable {
    public static final Creator<ZenDeviceEffects> CREATOR = new Creator<ZenDeviceEffects>() {
        @Override
        public ZenDeviceEffects createFromParcel(Parcel in) {
            return new ZenDeviceEffects(in.readBoolean(), in.readBoolean(), in.readBoolean(),
            return new ZenDeviceEffects(in.readBoolean(),
                    in.readBoolean(), in.readBoolean(), in.readBoolean(), in.readBoolean(),
                    in.readBoolean(), in.readBoolean(), in.readBoolean());
                    in.readBoolean(), in.readBoolean(), in.readBoolean(), in.readBoolean(),
                    in.readBoolean(), in.readInt());
        }

        @Override
@@ -205,6 +321,16 @@ public final class ZenDeviceEffects implements Parcelable {
        }
    };

    /**
     * Gets the bitmask representing which fields are user modified. Bits are set using
     * {@link ModifiableField}.
     * @hide
     */
    @TestApi
    public @ModifiableField int getUserModifiedFields() {
        return mUserModifiedFields;
    }

    @Override
    public int describeContents() {
        return 0;
@@ -222,6 +348,7 @@ public final class ZenDeviceEffects implements Parcelable {
        dest.writeBoolean(mDisableTouch);
        dest.writeBoolean(mMinimizeRadioUsage);
        dest.writeBoolean(mMaximizeDoze);
        dest.writeInt(mUserModifiedFields);
    }

    /** Builder class for {@link ZenDeviceEffects} objects. */
@@ -238,6 +365,7 @@ public final class ZenDeviceEffects implements Parcelable {
        private boolean mDisableTouch;
        private boolean mMinimizeRadioUsage;
        private boolean mMaximizeDoze;
        private @ModifiableField int mUserModifiedFields;

        /**
         * Instantiates a new {@link ZenPolicy.Builder} with all effects set to default (disabled).
@@ -260,6 +388,7 @@ public final class ZenDeviceEffects implements Parcelable {
            mDisableTouch = zenDeviceEffects.shouldDisableTouch();
            mMinimizeRadioUsage = zenDeviceEffects.shouldMinimizeRadioUsage();
            mMaximizeDoze = zenDeviceEffects.shouldMaximizeDoze();
            mUserModifiedFields = zenDeviceEffects.mUserModifiedFields;
        }

        /**
@@ -381,12 +510,24 @@ public final class ZenDeviceEffects implements Parcelable {
            return this;
        }

        /**
         * Sets the bitmask representing which fields are user modified. See the FIELD_ constants.
         * @hide
         */
        @TestApi
        @NonNull
        public Builder setUserModifiedFields(@ModifiableField int userModifiedFields) {
            mUserModifiedFields = userModifiedFields;
            return this;
        }

        /** Builds a {@link ZenDeviceEffects} object based on the builder's state. */
        @NonNull
        public ZenDeviceEffects build() {
            return new ZenDeviceEffects(mGrayscale, mSuppressAmbientDisplay, mDimWallpaper,
                    mNightMode, mDisableAutoBrightness, mDisableTapToWake, mDisableTiltToWake,
                    mDisableTouch, mMinimizeRadioUsage, mMaximizeDoze);
            return new ZenDeviceEffects(mGrayscale,
                    mSuppressAmbientDisplay, mDimWallpaper, mNightMode, mDisableAutoBrightness,
                    mDisableTapToWake, mDisableTiltToWake, mDisableTouch, mMinimizeRadioUsage,
                    mMaximizeDoze, mUserModifiedFields);
        }
    }
}
Loading