Loading core/api/current.txt +1 −0 Original line number Diff line number Diff line Loading @@ -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(); core/api/test-current.txt +53 −0 Original line number Diff line number Diff line Loading @@ -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); Loading Loading @@ -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 { Loading core/api/test-lint-baseline.txt +6 −0 Original line number Diff line number Diff line Loading @@ -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(): Loading Loading @@ -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: Loading core/java/android/app/AutomaticZenRule.java +94 −4 Original line number Diff line number Diff line Loading @@ -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; Loading @@ -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; /** Loading Loading @@ -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; Loading @@ -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 Loading Loading @@ -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(); } } Loading Loading @@ -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; } Loading Loading @@ -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; Loading Loading @@ -503,6 +560,7 @@ public final class AutomaticZenRule implements Parcelable { dest.writeInt(mIconResId); dest.writeString(mTriggerDescription); dest.writeInt(mType); dest.writeInt(mUserModifiedFields); } } Loading @@ -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; Loading @@ -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; } Loading @@ -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); Loading Loading @@ -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(); Loading @@ -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) { Loading Loading @@ -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); Loading @@ -782,6 +871,7 @@ public final class AutomaticZenRule implements Parcelable { rule.mIconResId = mIconResId; rule.mAllowManualInvocation = mAllowManualInvocation; rule.setPackageName(mPkg); rule.mUserModifiedFields = mUserModifiedFields; return rule; } Loading core/java/android/service/notification/ZenDeviceEffects.java +150 −9 Original line number Diff line number Diff line Loading @@ -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; Loading @@ -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; Loading @@ -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; Loading @@ -59,6 +136,7 @@ public final class ZenDeviceEffects implements Parcelable { mDisableTouch = disableTouch; mMinimizeRadioUsage = minimizeRadioUsage; mMaximizeDoze = maximizeDoze; mUserModifiedFields = userModifiedFields; } @Override Loading @@ -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 Loading @@ -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) + "}"; } /** Loading Loading @@ -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 Loading @@ -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; Loading @@ -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. */ Loading @@ -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). Loading @@ -260,6 +388,7 @@ public final class ZenDeviceEffects implements Parcelable { mDisableTouch = zenDeviceEffects.shouldDisableTouch(); mMinimizeRadioUsage = zenDeviceEffects.shouldMinimizeRadioUsage(); mMaximizeDoze = zenDeviceEffects.shouldMaximizeDoze(); mUserModifiedFields = zenDeviceEffects.mUserModifiedFields; } /** Loading Loading @@ -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
core/api/current.txt +1 −0 Original line number Diff line number Diff line Loading @@ -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();
core/api/test-current.txt +53 −0 Original line number Diff line number Diff line Loading @@ -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); Loading Loading @@ -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 { Loading
core/api/test-lint-baseline.txt +6 −0 Original line number Diff line number Diff line Loading @@ -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(): Loading Loading @@ -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: Loading
core/java/android/app/AutomaticZenRule.java +94 −4 Original line number Diff line number Diff line Loading @@ -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; Loading @@ -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; /** Loading Loading @@ -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; Loading @@ -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 Loading Loading @@ -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(); } } Loading Loading @@ -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; } Loading Loading @@ -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; Loading Loading @@ -503,6 +560,7 @@ public final class AutomaticZenRule implements Parcelable { dest.writeInt(mIconResId); dest.writeString(mTriggerDescription); dest.writeInt(mType); dest.writeInt(mUserModifiedFields); } } Loading @@ -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; Loading @@ -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; } Loading @@ -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); Loading Loading @@ -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(); Loading @@ -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) { Loading Loading @@ -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); Loading @@ -782,6 +871,7 @@ public final class AutomaticZenRule implements Parcelable { rule.mIconResId = mIconResId; rule.mAllowManualInvocation = mAllowManualInvocation; rule.setPackageName(mPkg); rule.mUserModifiedFields = mUserModifiedFields; return rule; } Loading
core/java/android/service/notification/ZenDeviceEffects.java +150 −9 Original line number Diff line number Diff line Loading @@ -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; Loading @@ -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; Loading @@ -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; Loading @@ -59,6 +136,7 @@ public final class ZenDeviceEffects implements Parcelable { mDisableTouch = disableTouch; mMinimizeRadioUsage = minimizeRadioUsage; mMaximizeDoze = maximizeDoze; mUserModifiedFields = userModifiedFields; } @Override Loading @@ -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 Loading @@ -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) + "}"; } /** Loading Loading @@ -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 Loading @@ -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; Loading @@ -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. */ Loading @@ -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). Loading @@ -260,6 +388,7 @@ public final class ZenDeviceEffects implements Parcelable { mDisableTouch = zenDeviceEffects.shouldDisableTouch(); mMinimizeRadioUsage = zenDeviceEffects.shouldMinimizeRadioUsage(); mMaximizeDoze = zenDeviceEffects.shouldMaximizeDoze(); mUserModifiedFields = zenDeviceEffects.mUserModifiedFields; } /** Loading Loading @@ -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); } } }