diff options
author | 2025-02-13 09:43:01 -0800 | |
---|---|---|
committer | 2025-02-13 09:43:01 -0800 | |
commit | 54d06ac3e4b2bac1cc510457b90d1ae3b505e62b (patch) | |
tree | 182e8f1d00956a38c9a733b3f4a85dfeeccdb0c0 | |
parent | 06333ce9f9378190511e3038406616d1239322f2 (diff) | |
parent | 787314ed22d859e510163327dd6c58b215c2f7f9 (diff) |
Merge "Inline MODES_API flag" into main
47 files changed, 925 insertions, 2055 deletions
diff --git a/core/api/current.txt b/core/api/current.txt index e1c26adb2275..006b907ef283 100644 --- a/core/api/current.txt +++ b/core/api/current.txt @@ -5488,37 +5488,37 @@ package android.app { method public android.net.Uri getConditionId(); method @Nullable public android.content.ComponentName getConfigurationActivity(); method public long getCreationTime(); - method @FlaggedApi("android.app.modes_api") @Nullable public android.service.notification.ZenDeviceEffects getDeviceEffects(); - method @FlaggedApi("android.app.modes_api") @DrawableRes public int getIconResId(); + method @Nullable public android.service.notification.ZenDeviceEffects getDeviceEffects(); + method @DrawableRes public int getIconResId(); method public int getInterruptionFilter(); method public String getName(); method public android.content.ComponentName getOwner(); - method @FlaggedApi("android.app.modes_api") @Nullable public String getTriggerDescription(); - method @FlaggedApi("android.app.modes_api") public int getType(); + method @Nullable public String getTriggerDescription(); + method public int getType(); method @Nullable public android.service.notification.ZenPolicy getZenPolicy(); method public boolean isEnabled(); - method @FlaggedApi("android.app.modes_api") public boolean isManualInvocationAllowed(); + method public boolean isManualInvocationAllowed(); method public void setConditionId(android.net.Uri); method public void setConfigurationActivity(@Nullable android.content.ComponentName); - method @FlaggedApi("android.app.modes_api") public void setDeviceEffects(@Nullable android.service.notification.ZenDeviceEffects); + method public void setDeviceEffects(@Nullable android.service.notification.ZenDeviceEffects); method public void setEnabled(boolean); method public void setInterruptionFilter(int); method public void setName(String); method public void setZenPolicy(@Nullable android.service.notification.ZenPolicy); method public void writeToParcel(android.os.Parcel, int); field @NonNull public static final android.os.Parcelable.Creator<android.app.AutomaticZenRule> CREATOR; - field @FlaggedApi("android.app.modes_api") public static final int TYPE_BEDTIME = 3; // 0x3 - field @FlaggedApi("android.app.modes_api") public static final int TYPE_DRIVING = 4; // 0x4 - field @FlaggedApi("android.app.modes_api") public static final int TYPE_IMMERSIVE = 5; // 0x5 - field @FlaggedApi("android.app.modes_api") public static final int TYPE_MANAGED = 7; // 0x7 - field @FlaggedApi("android.app.modes_api") public static final int TYPE_OTHER = 0; // 0x0 - field @FlaggedApi("android.app.modes_api") public static final int TYPE_SCHEDULE_CALENDAR = 2; // 0x2 - field @FlaggedApi("android.app.modes_api") public static final int TYPE_SCHEDULE_TIME = 1; // 0x1 - field @FlaggedApi("android.app.modes_api") public static final int TYPE_THEATER = 6; // 0x6 - field @FlaggedApi("android.app.modes_api") public static final int TYPE_UNKNOWN = -1; // 0xffffffff - } - - @FlaggedApi("android.app.modes_api") public static final class AutomaticZenRule.Builder { + field public static final int TYPE_BEDTIME = 3; // 0x3 + field public static final int TYPE_DRIVING = 4; // 0x4 + field public static final int TYPE_IMMERSIVE = 5; // 0x5 + field public static final int TYPE_MANAGED = 7; // 0x7 + field public static final int TYPE_OTHER = 0; // 0x0 + field public static final int TYPE_SCHEDULE_CALENDAR = 2; // 0x2 + field public static final int TYPE_SCHEDULE_TIME = 1; // 0x1 + field public static final int TYPE_THEATER = 6; // 0x6 + field public static final int TYPE_UNKNOWN = -1; // 0xffffffff + } + + public static final class AutomaticZenRule.Builder { ctor public AutomaticZenRule.Builder(@NonNull android.app.AutomaticZenRule); ctor public AutomaticZenRule.Builder(@NonNull String, @NonNull android.net.Uri); method @NonNull public android.app.AutomaticZenRule build(); @@ -7136,7 +7136,7 @@ package android.app { public class NotificationManager { method public String addAutomaticZenRule(android.app.AutomaticZenRule); - method @FlaggedApi("android.app.modes_api") public boolean areAutomaticZenRulesUserManaged(); + method public boolean areAutomaticZenRulesUserManaged(); method @Deprecated public boolean areBubblesAllowed(); method public boolean areBubblesEnabled(); method public boolean areNotificationsEnabled(); @@ -7156,7 +7156,7 @@ package android.app { method public void deleteNotificationChannelGroup(String); method public android.service.notification.StatusBarNotification[] getActiveNotifications(); method public android.app.AutomaticZenRule getAutomaticZenRule(String); - method @FlaggedApi("android.app.modes_api") public int getAutomaticZenRuleState(@NonNull String); + method public int getAutomaticZenRuleState(@NonNull String); method public java.util.Map<java.lang.String,android.app.AutomaticZenRule> getAutomaticZenRules(); method public int getBubblePreference(); method @NonNull public android.app.NotificationManager.Policy getConsolidatedNotificationPolicy(); @@ -7185,14 +7185,14 @@ package android.app { field public static final String ACTION_APP_BLOCK_STATE_CHANGED = "android.app.action.APP_BLOCK_STATE_CHANGED"; field public static final String ACTION_AUTOMATIC_ZEN_RULE = "android.app.action.AUTOMATIC_ZEN_RULE"; field public static final String ACTION_AUTOMATIC_ZEN_RULE_STATUS_CHANGED = "android.app.action.AUTOMATIC_ZEN_RULE_STATUS_CHANGED"; - field @FlaggedApi("android.app.modes_api") public static final String ACTION_CONSOLIDATED_NOTIFICATION_POLICY_CHANGED = "android.app.action.CONSOLIDATED_NOTIFICATION_POLICY_CHANGED"; + field public static final String ACTION_CONSOLIDATED_NOTIFICATION_POLICY_CHANGED = "android.app.action.CONSOLIDATED_NOTIFICATION_POLICY_CHANGED"; field public static final String ACTION_INTERRUPTION_FILTER_CHANGED = "android.app.action.INTERRUPTION_FILTER_CHANGED"; field public static final String ACTION_NOTIFICATION_CHANNEL_BLOCK_STATE_CHANGED = "android.app.action.NOTIFICATION_CHANNEL_BLOCK_STATE_CHANGED"; field public static final String ACTION_NOTIFICATION_CHANNEL_GROUP_BLOCK_STATE_CHANGED = "android.app.action.NOTIFICATION_CHANNEL_GROUP_BLOCK_STATE_CHANGED"; field public static final String ACTION_NOTIFICATION_POLICY_ACCESS_GRANTED_CHANGED = "android.app.action.NOTIFICATION_POLICY_ACCESS_GRANTED_CHANGED"; field public static final String ACTION_NOTIFICATION_POLICY_CHANGED = "android.app.action.NOTIFICATION_POLICY_CHANGED"; - field @FlaggedApi("android.app.modes_api") public static final int AUTOMATIC_RULE_STATUS_ACTIVATED = 4; // 0x4 - field @FlaggedApi("android.app.modes_api") public static final int AUTOMATIC_RULE_STATUS_DEACTIVATED = 5; // 0x5 + field public static final int AUTOMATIC_RULE_STATUS_ACTIVATED = 4; // 0x4 + field public static final int AUTOMATIC_RULE_STATUS_DEACTIVATED = 5; // 0x5 field public static final int AUTOMATIC_RULE_STATUS_DISABLED = 2; // 0x2 field public static final int AUTOMATIC_RULE_STATUS_ENABLED = 1; // 0x1 field public static final int AUTOMATIC_RULE_STATUS_REMOVED = 3; // 0x3 @@ -7206,7 +7206,7 @@ package android.app { field public static final String EXTRA_BLOCKED_STATE = "android.app.extra.BLOCKED_STATE"; field public static final String EXTRA_NOTIFICATION_CHANNEL_GROUP_ID = "android.app.extra.NOTIFICATION_CHANNEL_GROUP_ID"; field public static final String EXTRA_NOTIFICATION_CHANNEL_ID = "android.app.extra.NOTIFICATION_CHANNEL_ID"; - field @FlaggedApi("android.app.modes_api") public static final String EXTRA_NOTIFICATION_POLICY = "android.app.extra.NOTIFICATION_POLICY"; + field public static final String EXTRA_NOTIFICATION_POLICY = "android.app.extra.NOTIFICATION_POLICY"; field public static final int IMPORTANCE_DEFAULT = 3; // 0x3 field public static final int IMPORTANCE_HIGH = 4; // 0x4 field public static final int IMPORTANCE_LOW = 2; // 0x2 @@ -38280,7 +38280,7 @@ package android.provider { field public static final String ACTION_APP_OPEN_BY_DEFAULT_SETTINGS = "android.settings.APP_OPEN_BY_DEFAULT_SETTINGS"; field public static final String ACTION_APP_SEARCH_SETTINGS = "android.settings.APP_SEARCH_SETTINGS"; field public static final String ACTION_APP_USAGE_SETTINGS = "android.settings.action.APP_USAGE_SETTINGS"; - field @FlaggedApi("android.app.modes_api") public static final String ACTION_AUTOMATIC_ZEN_RULE_SETTINGS = "android.settings.AUTOMATIC_ZEN_RULE_SETTINGS"; + field public static final String ACTION_AUTOMATIC_ZEN_RULE_SETTINGS = "android.settings.AUTOMATIC_ZEN_RULE_SETTINGS"; field public static final String ACTION_AUTO_ROTATE_SETTINGS = "android.settings.AUTO_ROTATE_SETTINGS"; field public static final String ACTION_BATTERY_SAVER_SETTINGS = "android.settings.BATTERY_SAVER_SETTINGS"; field public static final String ACTION_BIOMETRIC_ENROLL = "android.settings.BIOMETRIC_ENROLL"; @@ -38374,7 +38374,7 @@ package android.provider { field public static final String EXTRA_AIRPLANE_MODE_ENABLED = "airplane_mode_enabled"; field public static final String EXTRA_APP_PACKAGE = "android.provider.extra.APP_PACKAGE"; field public static final String EXTRA_AUTHORITIES = "authorities"; - field @FlaggedApi("android.app.modes_api") public static final String EXTRA_AUTOMATIC_ZEN_RULE_ID = "android.provider.extra.AUTOMATIC_ZEN_RULE_ID"; + field public static final String EXTRA_AUTOMATIC_ZEN_RULE_ID = "android.provider.extra.AUTOMATIC_ZEN_RULE_ID"; field public static final String EXTRA_BATTERY_SAVER_MODE_ENABLED = "android.settings.extra.battery_saver_mode_enabled"; field public static final String EXTRA_BIOMETRIC_AUTHENTICATORS_ALLOWED = "android.provider.extra.BIOMETRIC_AUTHENTICATORS_ALLOWED"; field public static final String EXTRA_CHANNEL_FILTER_LIST = "android.provider.extra.CHANNEL_FILTER_LIST"; @@ -42166,9 +42166,9 @@ package android.service.notification { public final class Condition implements android.os.Parcelable { ctor public Condition(android.net.Uri, String, int); - ctor @FlaggedApi("android.app.modes_api") public Condition(@Nullable android.net.Uri, @Nullable String, int, int); + ctor public Condition(@Nullable android.net.Uri, @Nullable String, int, int); ctor public Condition(android.net.Uri, String, String, String, int, int, int); - ctor @FlaggedApi("android.app.modes_api") public Condition(@Nullable android.net.Uri, @Nullable String, @Nullable String, @Nullable String, int, int, int, int); + ctor public Condition(@Nullable android.net.Uri, @Nullable String, @Nullable String, @Nullable String, int, int, int, int); ctor public Condition(android.os.Parcel); method public android.service.notification.Condition copy(); method public int describeContents(); @@ -42181,10 +42181,10 @@ package android.service.notification { field public static final int FLAG_RELEVANT_ALWAYS = 2; // 0x2 field public static final int FLAG_RELEVANT_NOW = 1; // 0x1 field public static final String SCHEME = "condition"; - field @FlaggedApi("android.app.modes_api") public static final int SOURCE_CONTEXT = 3; // 0x3 - field @FlaggedApi("android.app.modes_api") public static final int SOURCE_SCHEDULE = 2; // 0x2 - field @FlaggedApi("android.app.modes_api") public static final int SOURCE_UNKNOWN = 0; // 0x0 - field @FlaggedApi("android.app.modes_api") public static final int SOURCE_USER_ACTION = 1; // 0x1 + field public static final int SOURCE_CONTEXT = 3; // 0x3 + field public static final int SOURCE_SCHEDULE = 2; // 0x2 + field public static final int SOURCE_UNKNOWN = 0; // 0x0 + field public static final int SOURCE_USER_ACTION = 1; // 0x1 field public static final int STATE_ERROR = 3; // 0x3 field public static final int STATE_FALSE = 0; // 0x0 field public static final int STATE_TRUE = 1; // 0x1 @@ -42194,7 +42194,7 @@ package android.service.notification { field public final android.net.Uri id; field public final String line1; field public final String line2; - field @FlaggedApi("android.app.modes_api") public final int source; + field public final int source; field public final int state; field public final String summary; } @@ -42365,7 +42365,7 @@ package android.service.notification { field @NonNull public static final android.os.Parcelable.Creator<android.service.notification.StatusBarNotification> CREATOR; } - @FlaggedApi("android.app.modes_api") public final class ZenDeviceEffects implements android.os.Parcelable { + public final class ZenDeviceEffects implements android.os.Parcelable { method public int describeContents(); method public boolean shouldDimWallpaper(); method public boolean shouldDisplayGrayscale(); @@ -42375,7 +42375,7 @@ package android.service.notification { field @NonNull public static final android.os.Parcelable.Creator<android.service.notification.ZenDeviceEffects> CREATOR; } - @FlaggedApi("android.app.modes_api") public static final class ZenDeviceEffects.Builder { + public static final class ZenDeviceEffects.Builder { ctor public ZenDeviceEffects.Builder(); ctor public ZenDeviceEffects.Builder(@NonNull android.service.notification.ZenDeviceEffects); method @NonNull public android.service.notification.ZenDeviceEffects build(); @@ -42397,7 +42397,7 @@ package android.service.notification { method public int getPriorityCategoryReminders(); method public int getPriorityCategoryRepeatCallers(); method public int getPriorityCategorySystem(); - method @FlaggedApi("android.app.modes_api") public int getPriorityChannelsAllowed(); + method public int getPriorityChannelsAllowed(); method public int getPriorityConversationSenders(); method public int getPriorityMessageSenders(); method public int getVisualEffectAmbient(); @@ -42432,7 +42432,7 @@ package android.service.notification { method @NonNull public android.service.notification.ZenPolicy.Builder allowEvents(boolean); method @NonNull public android.service.notification.ZenPolicy.Builder allowMedia(boolean); method @NonNull public android.service.notification.ZenPolicy.Builder allowMessages(int); - method @FlaggedApi("android.app.modes_api") @NonNull public android.service.notification.ZenPolicy.Builder allowPriorityChannels(boolean); + method @NonNull public android.service.notification.ZenPolicy.Builder allowPriorityChannels(boolean); method @NonNull public android.service.notification.ZenPolicy.Builder allowReminders(boolean); method @NonNull public android.service.notification.ZenPolicy.Builder allowRepeatCallers(boolean); method @NonNull public android.service.notification.ZenPolicy.Builder allowSystem(boolean); diff --git a/core/api/test-current.txt b/core/api/test-current.txt index 9e9e3c2f13c1..ac5af908eb31 100644 --- a/core/api/test-current.txt +++ b/core/api/test-current.txt @@ -393,25 +393,25 @@ package android.app { } public class NotificationManager { - method @FlaggedApi("android.app.modes_api") @NonNull public String addAutomaticZenRule(@NonNull android.app.AutomaticZenRule, boolean); + method @NonNull public String addAutomaticZenRule(@NonNull android.app.AutomaticZenRule, boolean); method @FlaggedApi("android.service.notification.notification_classification") public void allowAssistantAdjustment(@NonNull String); method public void cleanUpCallersAfter(long); method @FlaggedApi("android.service.notification.notification_classification") public void disallowAssistantAdjustment(@NonNull String); - method @FlaggedApi("android.app.modes_api") @NonNull public android.service.notification.ZenPolicy getDefaultZenPolicy(); + method @NonNull public android.service.notification.ZenPolicy getDefaultZenPolicy(); method public android.content.ComponentName getEffectsSuppressor(); method @FlaggedApi("android.service.notification.notification_classification") @NonNull public java.util.Set<java.lang.String> getUnsupportedAdjustmentTypes(); method public boolean isNotificationPolicyAccessGrantedForPackage(@NonNull String); - method @FlaggedApi("android.app.modes_api") public boolean removeAutomaticZenRule(@NonNull String, boolean); + method public boolean removeAutomaticZenRule(@NonNull String, boolean); method @FlaggedApi("android.service.notification.notification_classification") public void setAssistantAdjustmentKeyTypeState(int, boolean); method @FlaggedApi("android.app.api_rich_ongoing") public void setCanPostPromotedNotifications(@NonNull String, int, boolean); method @RequiresPermission(android.Manifest.permission.MANAGE_NOTIFICATION_LISTENERS) public void setNotificationListenerAccessGranted(@NonNull android.content.ComponentName, boolean, boolean); method @RequiresPermission(android.Manifest.permission.MANAGE_TOAST_RATE_LIMITING) public void setToastRateLimitingEnabled(boolean); - method @FlaggedApi("android.app.modes_api") public boolean updateAutomaticZenRule(@NonNull String, @NonNull android.app.AutomaticZenRule, boolean); + method public boolean updateAutomaticZenRule(@NonNull String, @NonNull android.app.AutomaticZenRule, boolean); method public void updateNotificationChannel(@NonNull String, int, @NonNull android.app.NotificationChannel); } public static class NotificationManager.Policy implements android.os.Parcelable { - method @FlaggedApi("android.app.modes_api") public boolean allowPriorityChannels(); + method public boolean allowPriorityChannels(); } public final class PendingIntent implements android.os.Parcelable { @@ -490,15 +490,15 @@ package android.app { } public class UiModeManager { - method @FlaggedApi("android.app.modes_api") @RequiresPermission(android.Manifest.permission.MODIFY_DAY_NIGHT_MODE) public int getAttentionModeThemeOverlay(); + method @RequiresPermission(android.Manifest.permission.MODIFY_DAY_NIGHT_MODE) public int getAttentionModeThemeOverlay(); method public boolean isNightModeLocked(); method public boolean isUiModeLocked(); method @RequiresPermission(value=android.Manifest.permission.TOGGLE_AUTOMOTIVE_PROJECTION, conditional=true) public boolean releaseProjection(int); method @RequiresPermission(value=android.Manifest.permission.TOGGLE_AUTOMOTIVE_PROJECTION, conditional=true) public boolean requestProjection(int); - field @FlaggedApi("android.app.modes_api") public static final int MODE_ATTENTION_THEME_OVERLAY_DAY = 1002; // 0x3ea - field @FlaggedApi("android.app.modes_api") public static final int MODE_ATTENTION_THEME_OVERLAY_NIGHT = 1001; // 0x3e9 - field @FlaggedApi("android.app.modes_api") public static final int MODE_ATTENTION_THEME_OVERLAY_OFF = 1000; // 0x3e8 - field @FlaggedApi("android.app.modes_api") public static final int MODE_ATTENTION_THEME_OVERLAY_UNKNOWN = -1; // 0xffffffff + field public static final int MODE_ATTENTION_THEME_OVERLAY_DAY = 1002; // 0x3ea + field public static final int MODE_ATTENTION_THEME_OVERLAY_NIGHT = 1001; // 0x3e9 + field public static final int MODE_ATTENTION_THEME_OVERLAY_OFF = 1000; // 0x3e8 + field public static final int MODE_ATTENTION_THEME_OVERLAY_UNKNOWN = -1; // 0xffffffff field public static final int PROJECTION_TYPE_ALL = -1; // 0xffffffff field public static final int PROJECTION_TYPE_AUTOMOTIVE = 1; // 0x1 field public static final int PROJECTION_TYPE_NONE = 0; // 0x0 @@ -1716,7 +1716,7 @@ package android.hardware.display { } public final class ColorDisplayManager { - method @FlaggedApi("android.app.modes_api") @RequiresPermission(android.Manifest.permission.CONTROL_DISPLAY_COLOR_TRANSFORMS) public boolean isSaturationActivated(); + method @RequiresPermission(android.Manifest.permission.CONTROL_DISPLAY_COLOR_TRANSFORMS) public boolean isSaturationActivated(); } public final class DisplayManager { @@ -3237,16 +3237,16 @@ package android.service.notification { method @Deprecated public boolean isBound(); } - @FlaggedApi("android.app.modes_api") public final class ZenDeviceEffects implements android.os.Parcelable { + public final class ZenDeviceEffects implements android.os.Parcelable { method @NonNull public java.util.Set<java.lang.String> getExtraEffects(); } - @FlaggedApi("android.app.modes_api") public static final class ZenDeviceEffects.Builder { + public static final class ZenDeviceEffects.Builder { method @NonNull public android.service.notification.ZenDeviceEffects.Builder setExtraEffects(@NonNull java.util.Set<java.lang.String>); } public final class ZenPolicy implements android.os.Parcelable { - method @FlaggedApi("android.app.modes_api") @NonNull public android.service.notification.ZenPolicy overwrittenWith(@Nullable android.service.notification.ZenPolicy); + method @NonNull public android.service.notification.ZenPolicy overwrittenWith(@Nullable android.service.notification.ZenPolicy); } public static final class ZenPolicy.Builder { diff --git a/core/java/android/app/AutomaticZenRule.java b/core/java/android/app/AutomaticZenRule.java index 9d1d9c7b69de..fa977c93113a 100644 --- a/core/java/android/app/AutomaticZenRule.java +++ b/core/java/android/app/AutomaticZenRule.java @@ -19,7 +19,6 @@ package android.app; import static com.android.internal.util.Preconditions.checkArgument; import android.annotation.DrawableRes; -import android.annotation.FlaggedApi; import android.annotation.IntDef; import android.annotation.NonNull; import android.annotation.Nullable; @@ -52,48 +51,40 @@ public final class AutomaticZenRule implements Parcelable { * and the value returned if the true type was added in an API level higher than the calling * app's targetSdk. */ - @FlaggedApi(Flags.FLAG_MODES_API) public static final int TYPE_UNKNOWN = -1; /** * Rule is of a known type, but not one of the specific types. */ - @FlaggedApi(Flags.FLAG_MODES_API) public static final int TYPE_OTHER = 0; /** * The type for rules triggered according to a time-based schedule. */ - @FlaggedApi(Flags.FLAG_MODES_API) public static final int TYPE_SCHEDULE_TIME = 1; /** * The type for rules triggered by calendar events. */ - @FlaggedApi(Flags.FLAG_MODES_API) public static final int TYPE_SCHEDULE_CALENDAR = 2; /** * The type for rules triggered by bedtime/sleeping, like time of day, or snore detection. * * <p>Only the 'Wellbeing' app may own rules of this type. */ - @FlaggedApi(Flags.FLAG_MODES_API) public static final int TYPE_BEDTIME = 3; /** * The type for rules triggered by driving detection, like Bluetooth connections or vehicle * sounds. */ - @FlaggedApi(Flags.FLAG_MODES_API) public static final int TYPE_DRIVING = 4; /** * The type for rules triggered by the user entering an immersive activity, like opening an app * using {@link WindowInsetsController#hide(int)}. */ - @FlaggedApi(Flags.FLAG_MODES_API) public static final int TYPE_IMMERSIVE = 5; /** * The type for rules that have a {@link ZenPolicy} that implies that the * device should not make sound and potentially hide some visual effects; may be triggered * when entering a location where silence is requested, like a theater. */ - @FlaggedApi(Flags.FLAG_MODES_API) public static final int TYPE_THEATER = 6; /** * The type for rules created and managed by a device owner. These rules may not be fully @@ -101,7 +92,6 @@ public final class AutomaticZenRule implements Parcelable { * * <p>Only a 'Device Owner' app may own rules of this type. */ - @FlaggedApi(Flags.FLAG_MODES_API) public static final int TYPE_MANAGED = 7; /** @hide */ @@ -127,17 +117,14 @@ public final class AutomaticZenRule implements Parcelable { /** * @hide */ - @FlaggedApi(Flags.FLAG_MODES_API) public static final int FIELD_NAME = 1 << 0; /** * @hide */ - @FlaggedApi(Flags.FLAG_MODES_API) public static final int FIELD_INTERRUPTION_FILTER = 1 << 1; /** * @hide */ - @FlaggedApi(Flags.FLAG_MODES_API) public static final int FIELD_ICON = 1 << 2; private boolean enabled; @@ -149,10 +136,8 @@ 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 = Flags.modesApi() ? TYPE_UNKNOWN : 0; + private int mType = TYPE_UNKNOWN; private int mIconResId; private String mTriggerDescription; private boolean mAllowManualInvocation; @@ -229,8 +214,10 @@ public final class AutomaticZenRule implements Parcelable { /** * @hide + * @deprecated Do not add new usages; will be removed soon. */ - // TODO: b/310620812 - Remove when the flag is inlined (all system callers should use Builder). + // TODO: b/368247671 - Remove when modes_ui is inlined (remaining usages are in obsolete tests) + @Deprecated public AutomaticZenRule(String name, ComponentName owner, ComponentName configurationActivity, Uri conditionId, ZenPolicy policy, int interruptionFilter, boolean enabled, long creationTime) { @@ -251,15 +238,12 @@ public final class AutomaticZenRule implements Parcelable { source.readParcelable(null, android.content.ComponentName.class)); creationTime = source.readLong(); mZenPolicy = source.readParcelable(null, ZenPolicy.class); - mModified = source.readInt() == ENABLED; mPkg = source.readString(); - if (Flags.modesApi()) { - mDeviceEffects = source.readParcelable(null, ZenDeviceEffects.class); - mAllowManualInvocation = source.readBoolean(); - mIconResId = source.readInt(); - mTriggerDescription = getTrimmedString(source.readString(), MAX_DESC_LENGTH); - mType = source.readInt(); - } + mDeviceEffects = source.readParcelable(null, ZenDeviceEffects.class); + mAllowManualInvocation = source.readBoolean(); + mIconResId = source.readInt(); + mTriggerDescription = getTrimmedString(source.readString(), MAX_DESC_LENGTH); + mType = source.readInt(); } /** @@ -306,15 +290,6 @@ public final class AutomaticZenRule implements Parcelable { } /** - * Returns whether this rule's name has been modified by the user. - * @hide - */ - // TODO: b/310620812 - Consider removing completely. Seems not be used anywhere except tests. - public boolean isModified() { - return mModified; - } - - /** * Gets the {@link ZenPolicy} applied if {@link #getInterruptionFilter()} is * {@link NotificationManager#INTERRUPTION_FILTER_PRIORITY}. */ @@ -325,7 +300,6 @@ public final class AutomaticZenRule implements Parcelable { /** Gets the {@link ZenDeviceEffects} of this rule. */ @Nullable - @FlaggedApi(Flags.FLAG_MODES_API) public ZenDeviceEffects getDeviceEffects() { return mDeviceEffects; } @@ -378,14 +352,6 @@ public final class AutomaticZenRule implements Parcelable { } /** - * Sets modified state of this rule. - * @hide - */ - public void setModified(boolean modified) { - this.mModified = modified; - } - - /** * Sets the {@link ZenPolicy} applied if {@link #getInterruptionFilter()} is * {@link NotificationManager#INTERRUPTION_FILTER_PRIORITY}. * @@ -404,7 +370,6 @@ public final class AutomaticZenRule implements Parcelable { * <p>When updating an existing rule via {@link NotificationManager#updateAutomaticZenRule}, * a {@code null} value here means the previous set of effects is retained. */ - @FlaggedApi(Flags.FLAG_MODES_API) public void setDeviceEffects(@Nullable ZenDeviceEffects deviceEffects) { mDeviceEffects = deviceEffects; } @@ -458,7 +423,6 @@ public final class AutomaticZenRule implements Parcelable { /** * Gets the type of the rule. */ - @FlaggedApi(Flags.FLAG_MODES_API) public @Type int getType() { return mType; } @@ -467,7 +431,6 @@ public final class AutomaticZenRule implements Parcelable { * Sets the type of the rule. * @hide */ - @FlaggedApi(Flags.FLAG_MODES_API) public void setType(@Type int type) { mType = checkValidType(type); } @@ -476,7 +439,6 @@ public final class AutomaticZenRule implements Parcelable { * Gets the user visible description of when this rule is active * (see {@link Condition#STATE_TRUE}). */ - @FlaggedApi(Flags.FLAG_MODES_API) public @Nullable String getTriggerDescription() { return mTriggerDescription; } @@ -489,7 +451,6 @@ public final class AutomaticZenRule implements Parcelable { * "When connected to [Car Name]". * @hide */ - @FlaggedApi(Flags.FLAG_MODES_API) public void setTriggerDescription(@Nullable String triggerDescription) { mTriggerDescription = triggerDescription; } @@ -497,7 +458,6 @@ public final class AutomaticZenRule implements Parcelable { /** * Gets the resource id of the drawable icon for this rule. */ - @FlaggedApi(Flags.FLAG_MODES_API) public @DrawableRes int getIconResId() { return mIconResId; } @@ -506,7 +466,6 @@ public final class AutomaticZenRule implements Parcelable { * Sets a resource id of a tintable vector drawable representing the rule in image form. * @hide */ - @FlaggedApi(Flags.FLAG_MODES_API) public void setIconResId(int iconResId) { mIconResId = iconResId; } @@ -515,7 +474,6 @@ public final class AutomaticZenRule implements Parcelable { * Gets whether this rule can be manually activated by the user even when the triggering * condition for the rule is not met. */ - @FlaggedApi(Flags.FLAG_MODES_API) public boolean isManualInvocationAllowed() { return mAllowManualInvocation; } @@ -525,23 +483,18 @@ public final class AutomaticZenRule implements Parcelable { * condition for the rule is not met. * @hide */ - @FlaggedApi(Flags.FLAG_MODES_API) public void setManualInvocationAllowed(boolean allowManualInvocation) { mAllowManualInvocation = allowManualInvocation; } /** @hide */ - @FlaggedApi(Flags.FLAG_MODES_API) public void validate() { - if (Flags.modesApi()) { - checkValidType(mType); - if (mDeviceEffects != null) { - mDeviceEffects.validate(); - } + checkValidType(mType); + if (mDeviceEffects != null) { + mDeviceEffects.validate(); } } - @FlaggedApi(Flags.FLAG_MODES_API) @Type private static int checkValidType(@Type int type) { checkArgument(type >= TYPE_UNKNOWN && type <= TYPE_MANAGED, @@ -571,39 +524,34 @@ public final class AutomaticZenRule implements Parcelable { dest.writeParcelable(configurationActivity, 0); dest.writeLong(creationTime); dest.writeParcelable(mZenPolicy, 0); - dest.writeInt(mModified ? ENABLED : DISABLED); dest.writeString(mPkg); - if (Flags.modesApi()) { - dest.writeParcelable(mDeviceEffects, 0); - dest.writeBoolean(mAllowManualInvocation); - dest.writeInt(mIconResId); - dest.writeString(mTriggerDescription); - dest.writeInt(mType); - } + dest.writeParcelable(mDeviceEffects, 0); + dest.writeBoolean(mAllowManualInvocation); + dest.writeInt(mIconResId); + dest.writeString(mTriggerDescription); + dest.writeInt(mType); } @Override public String toString() { - StringBuilder sb = new StringBuilder(AutomaticZenRule.class.getSimpleName()).append('[') + return new StringBuilder(AutomaticZenRule.class.getSimpleName()) + .append('[') .append("enabled=").append(enabled) .append(",name=").append(name) + .append(",type=").append(mType) .append(",interruptionFilter=").append(interruptionFilter) .append(",pkg=").append(mPkg) .append(",conditionId=").append(conditionId) .append(",owner=").append(owner) .append(",configActivity=").append(configurationActivity) .append(",creationTime=").append(creationTime) - .append(",mZenPolicy=").append(mZenPolicy); - - if (Flags.modesApi()) { - sb.append(",deviceEffects=").append(mDeviceEffects) - .append(",allowManualInvocation=").append(mAllowManualInvocation) - .append(",iconResId=").append(mIconResId) - .append(",triggerDescription=").append(mTriggerDescription) - .append(",type=").append(mType); - } - - return sb.append(']').toString(); + .append(",mZenPolicy=").append(mZenPolicy) + .append(",deviceEffects=").append(mDeviceEffects) + .append(",allowManualInvocation=").append(mAllowManualInvocation) + .append(",iconResId=").append(mIconResId) + .append(",triggerDescription=").append(mTriggerDescription) + .append(']') + .toString(); } /** @hide */ @@ -626,8 +574,7 @@ public final class AutomaticZenRule implements Parcelable { if (!(o instanceof AutomaticZenRule)) return false; if (o == this) return true; final AutomaticZenRule other = (AutomaticZenRule) o; - boolean finalEquals = other.enabled == enabled - && other.mModified == mModified + return other.enabled == enabled && Objects.equals(other.name, name) && other.interruptionFilter == interruptionFilter && Objects.equals(other.conditionId, conditionId) @@ -635,27 +582,19 @@ public final class AutomaticZenRule implements Parcelable { && Objects.equals(other.mZenPolicy, mZenPolicy) && Objects.equals(other.configurationActivity, configurationActivity) && Objects.equals(other.mPkg, mPkg) - && other.creationTime == creationTime; - if (Flags.modesApi()) { - return finalEquals - && Objects.equals(other.mDeviceEffects, mDeviceEffects) - && other.mAllowManualInvocation == mAllowManualInvocation - && other.mIconResId == mIconResId - && Objects.equals(other.mTriggerDescription, mTriggerDescription) - && other.mType == mType; - } - return finalEquals; + && other.creationTime == creationTime + && Objects.equals(other.mDeviceEffects, mDeviceEffects) + && other.mAllowManualInvocation == mAllowManualInvocation + && other.mIconResId == mIconResId + && Objects.equals(other.mTriggerDescription, mTriggerDescription) + && other.mType == mType; } @Override public int hashCode() { - if (Flags.modesApi()) { - return Objects.hash(enabled, name, interruptionFilter, conditionId, owner, - configurationActivity, mZenPolicy, mDeviceEffects, mModified, creationTime, - mPkg, mAllowManualInvocation, mIconResId, mTriggerDescription, mType); - } return Objects.hash(enabled, name, interruptionFilter, conditionId, owner, - configurationActivity, mZenPolicy, mModified, creationTime, mPkg); + configurationActivity, mZenPolicy, mDeviceEffects, creationTime, + mPkg, mAllowManualInvocation, mIconResId, mTriggerDescription, mType); } public static final @android.annotation.NonNull Parcelable.Creator<AutomaticZenRule> CREATOR @@ -705,7 +644,6 @@ public final class AutomaticZenRule implements Parcelable { return input; } - @FlaggedApi(Flags.FLAG_MODES_API) public static final class Builder { private String mName; private ComponentName mOwner; diff --git a/core/java/android/app/INotificationManager.aidl b/core/java/android/app/INotificationManager.aidl index b9255ecaf1b6..00df7246a300 100644 --- a/core/java/android/app/INotificationManager.aidl +++ b/core/java/android/app/INotificationManager.aidl @@ -225,8 +225,6 @@ interface INotificationManager ZenPolicy getDefaultZenPolicy(); AutomaticZenRule getAutomaticZenRule(String id); Map<String, AutomaticZenRule> getAutomaticZenRules(); - // TODO: b/310620812 - Remove getZenRules() when MODES_API is inlined. - List<ZenModeConfig.ZenRule> getZenRules(); String addAutomaticZenRule(in AutomaticZenRule automaticZenRule, String pkg, boolean fromUser); boolean updateAutomaticZenRule(String id, in AutomaticZenRule automaticZenRule, boolean fromUser); boolean removeAutomaticZenRule(String id, boolean fromUser); diff --git a/core/java/android/app/NotificationManager.java b/core/java/android/app/NotificationManager.java index 00f896deae4b..726999a08322 100644 --- a/core/java/android/app/NotificationManager.java +++ b/core/java/android/app/NotificationManager.java @@ -356,7 +356,6 @@ public class NotificationManager { * a DND component, the rule owner should activate any extra behavior that's part of that mode * in response to this broadcast. */ - @FlaggedApi(Flags.FLAG_MODES_API) public static final int AUTOMATIC_RULE_STATUS_ACTIVATED = 4; /** @@ -367,7 +366,6 @@ public class NotificationManager { * longer met) and then {@link Condition#STATE_TRUE} when the trigger criteria is freshly met, * or when the user re-activates it. */ - @FlaggedApi(Flags.FLAG_MODES_API) public static final int AUTOMATIC_RULE_STATUS_DEACTIVATED = 5; /** @@ -415,7 +413,6 @@ public class NotificationManager { * <p>This broadcast is only sent to registered receivers and receivers in packages that have * been granted Notification Policy access (see {@link #isNotificationPolicyAccessGranted()}). */ - @FlaggedApi(Flags.FLAG_MODES_API) @SdkConstant(SdkConstant.SdkConstantType.BROADCAST_INTENT_ACTION) public static final String ACTION_CONSOLIDATED_NOTIFICATION_POLICY_CHANGED = "android.app.action.CONSOLIDATED_NOTIFICATION_POLICY_CHANGED"; @@ -425,7 +422,6 @@ public class NotificationManager { * {@link #ACTION_CONSOLIDATED_NOTIFICATION_POLICY_CHANGED} containing the new * {@link Policy} value. */ - @FlaggedApi(Flags.FLAG_MODES_API) public static final String EXTRA_NOTIFICATION_POLICY = "android.app.extra.NOTIFICATION_POLICY"; @@ -1726,9 +1722,8 @@ public class NotificationManager { * rule management to system settings/uis via * {@link Settings#ACTION_AUTOMATIC_ZEN_RULE_SETTINGS}. */ - @FlaggedApi(Flags.FLAG_MODES_API) public boolean areAutomaticZenRulesUserManaged() { - if (Flags.modesApi() && Flags.modesUi()) { + if (Flags.modesUi()) { PackageManager pm = mContext.getPackageManager(); return !pm.hasSystemFeature(PackageManager.FEATURE_WATCH) && !pm.hasSystemFeature(PackageManager.FEATURE_AUTOMOTIVE) @@ -1748,21 +1743,7 @@ public class NotificationManager { public Map<String, AutomaticZenRule> getAutomaticZenRules() { INotificationManager service = service(); try { - if (Flags.modesApi()) { - return service.getAutomaticZenRules(); - } else { - List<ZenModeConfig.ZenRule> rules = service.getZenRules(); - Map<String, AutomaticZenRule> ruleMap = new HashMap<>(); - for (ZenModeConfig.ZenRule rule : rules) { - AutomaticZenRule azr = new AutomaticZenRule(rule.name, rule.component, - rule.configurationActivity, rule.conditionId, rule.zenPolicy, - zenModeToInterruptionFilter(rule.zenMode), rule.enabled, - rule.creationTime); - azr.setPackageName(rule.pkg); - ruleMap.put(rule.id, azr); - } - return ruleMap; - } + return service.getAutomaticZenRules(); } catch (RemoteException e) { throw e.rethrowFromSystemServer(); } @@ -1804,7 +1785,6 @@ public class NotificationManager { /** @hide */ @TestApi - @FlaggedApi(Flags.FLAG_MODES_API) @NonNull public String addAutomaticZenRule(@NonNull AutomaticZenRule automaticZenRule, boolean fromUser) { @@ -1840,7 +1820,6 @@ public class NotificationManager { /** @hide */ @TestApi - @FlaggedApi(Flags.FLAG_MODES_API) public boolean updateAutomaticZenRule(@NonNull String id, @NonNull AutomaticZenRule automaticZenRule, boolean fromUser) { INotificationManager service = service(); @@ -1860,7 +1839,6 @@ public class NotificationManager { * @param id The id of the rule * @return the state of the rule. */ - @FlaggedApi(Flags.FLAG_MODES_API) @Condition.State public int getAutomaticZenRuleState(@NonNull String id) { INotificationManager service = service(); @@ -1935,7 +1913,6 @@ public class NotificationManager { /** @hide */ @TestApi - @FlaggedApi(Flags.FLAG_MODES_API) public boolean removeAutomaticZenRule(@NonNull String id, boolean fromUser) { INotificationManager service = service(); try { @@ -2326,7 +2303,6 @@ public class NotificationManager { * @hide */ @TestApi - @FlaggedApi(Flags.FLAG_MODES_API) public @NonNull ZenPolicy getDefaultZenPolicy() { INotificationManager service = service(); try { @@ -2693,7 +2669,7 @@ public class NotificationManager { /** * @hide */ - public static final int STATE_CHANNELS_BYPASSING_DND = 1 << 0; + public static final int STATE_HAS_PRIORITY_CHANNELS = 1 << 0; /** * Whether the policy indicates that even priority channels are NOT permitted to bypass DND. @@ -2918,7 +2894,7 @@ public class NotificationManager { @Override public String toString() { - StringBuilder sb = new StringBuilder().append("NotificationManager.Policy[") + return new StringBuilder().append("NotificationManager.Policy[") .append("priorityCategories=") .append(priorityCategoriesToString(priorityCategories)) .append(",priorityCallSenders=") @@ -2928,24 +2904,19 @@ public class NotificationManager { .append(",priorityConvSenders=") .append(conversationSendersToString(priorityConversationSenders)) .append(",suppressedVisualEffects=") - .append(suppressedEffectsToString(suppressedVisualEffects)); - if (Flags.modesApi()) { - sb.append(",hasPriorityChannels="); - } else { - sb.append(",areChannelsBypassingDnd="); - } - sb.append((state == STATE_UNSET - ? "unset" - : ((state & STATE_CHANNELS_BYPASSING_DND) != 0) - ? "true" - : "false")); - if (Flags.modesApi()) { - sb.append(",allowPriorityChannels=") - .append((state == STATE_UNSET - ? "unset" - : (allowPriorityChannels() ? "true" : "false"))); - } - return sb.append("]").toString(); + .append(suppressedEffectsToString(suppressedVisualEffects)) + .append(",hasPriorityChannels=") + .append((state == STATE_UNSET + ? "unset" + : ((state & STATE_HAS_PRIORITY_CHANNELS) != 0) + ? "true" + : "false")) + .append(",allowPriorityChannels=") + .append((state == STATE_UNSET + ? "unset" + : (allowPriorityChannels() ? "true" : "false"))) + .append("]") + .toString(); } /** @hide */ @@ -3220,7 +3191,6 @@ public class NotificationManager { } /** @hide **/ - @FlaggedApi(Flags.FLAG_MODES_API) @TestApi // so CTS tests can read this state without having to use implementation detail public boolean allowPriorityChannels() { if (state == STATE_UNSET) { @@ -3230,17 +3200,15 @@ public class NotificationManager { } /** @hide */ - @FlaggedApi(Flags.FLAG_MODES_API) public boolean hasPriorityChannels() { - return (state & STATE_CHANNELS_BYPASSING_DND) != 0; + return (state & STATE_HAS_PRIORITY_CHANNELS) != 0; } /** @hide **/ - @FlaggedApi(Flags.FLAG_MODES_API) public static int policyState(boolean hasPriorityChannels, boolean allowPriorityChannels) { int state = 0; if (hasPriorityChannels) { - state |= STATE_CHANNELS_BYPASSING_DND; + state |= STATE_HAS_PRIORITY_CHANNELS; } if (!allowPriorityChannels) { state |= STATE_PRIORITY_CHANNELS_BLOCKED; diff --git a/core/java/android/app/UiModeManager.java b/core/java/android/app/UiModeManager.java index f6c789d51aee..33466dd79be1 100644 --- a/core/java/android/app/UiModeManager.java +++ b/core/java/android/app/UiModeManager.java @@ -312,7 +312,6 @@ public class UiModeManager { * #getAttentionModeThemeOverlay()}: Keeps night mode as set by {@link #setNightMode(int)}. * @hide */ - @FlaggedApi(Flags.FLAG_MODES_API) @TestApi public static final int MODE_ATTENTION_THEME_OVERLAY_OFF = 1000; @@ -321,7 +320,6 @@ public class UiModeManager { * #getAttentionModeThemeOverlay()}: Maintains night mode always on. * @hide */ - @FlaggedApi(Flags.FLAG_MODES_API) @TestApi public static final int MODE_ATTENTION_THEME_OVERLAY_NIGHT = 1001; @@ -330,7 +328,6 @@ public class UiModeManager { * #getAttentionModeThemeOverlay()}: Maintains night mode always off (Light). * @hide */ - @FlaggedApi(Flags.FLAG_MODES_API) @TestApi public static final int MODE_ATTENTION_THEME_OVERLAY_DAY = 1002; @@ -338,7 +335,6 @@ public class UiModeManager { * Constant for {@link #getAttentionModeThemeOverlay()}: Error communication with server. * @hide */ - @FlaggedApi(Flags.FLAG_MODES_API) @TestApi public static final int MODE_ATTENTION_THEME_OVERLAY_UNKNOWN = -1; @@ -940,7 +936,6 @@ public class UiModeManager { * {@code AttentionModeThemeOverlayType}. * @hide */ - @FlaggedApi(Flags.FLAG_MODES_API) @RequiresPermission(android.Manifest.permission.MODIFY_DAY_NIGHT_MODE) public void setAttentionModeThemeOverlay( @AttentionModeThemeOverlayType int attentionModeThemeOverlayType) { @@ -967,7 +962,6 @@ public class UiModeManager { * * @hide */ - @FlaggedApi(Flags.FLAG_MODES_API) @TestApi @RequiresPermission(android.Manifest.permission.MODIFY_DAY_NIGHT_MODE) public @AttentionModeThemeOverlayReturnType int getAttentionModeThemeOverlay() { diff --git a/core/java/android/app/notification.aconfig b/core/java/android/app/notification.aconfig index c9f5872994fa..bb4f556532f7 100644 --- a/core/java/android/app/notification.aconfig +++ b/core/java/android/app/notification.aconfig @@ -26,6 +26,7 @@ flag { bug: "378660052" } +# Flag for finalized API: In Nextfood but exported (and therefore must stay). flag { name: "modes_api" is_exported: true diff --git a/core/java/android/hardware/display/ColorDisplayManager.java b/core/java/android/hardware/display/ColorDisplayManager.java index 0d9db1fa3c91..7debab946bc0 100644 --- a/core/java/android/hardware/display/ColorDisplayManager.java +++ b/core/java/android/hardware/display/ColorDisplayManager.java @@ -17,7 +17,6 @@ package android.hardware.display; import android.Manifest; -import android.annotation.FlaggedApi; import android.annotation.IntDef; import android.annotation.IntRange; import android.annotation.NonNull; @@ -401,7 +400,6 @@ public final class ColorDisplayManager { * @hide */ @TestApi - @FlaggedApi(android.app.Flags.FLAG_MODES_API) @RequiresPermission(Manifest.permission.CONTROL_DISPLAY_COLOR_TRANSFORMS) public boolean isSaturationActivated() { return mManager.isSaturationActivated(); diff --git a/core/java/android/provider/Settings.java b/core/java/android/provider/Settings.java index 670709846d4c..1a9b42e46a1c 100644 --- a/core/java/android/provider/Settings.java +++ b/core/java/android/provider/Settings.java @@ -2119,7 +2119,6 @@ public final class Settings { * <p> * Output: Nothing. */ - @FlaggedApi(android.app.Flags.FLAG_MODES_API) @SdkConstant(SdkConstantType.ACTIVITY_INTENT_ACTION) public static final String ACTION_AUTOMATIC_ZEN_RULE_SETTINGS = "android.settings.AUTOMATIC_ZEN_RULE_SETTINGS"; @@ -2129,7 +2128,6 @@ public final class Settings { * <p> * This must be passed as an extra field to the {@link #ACTION_AUTOMATIC_ZEN_RULE_SETTINGS}. */ - @FlaggedApi(android.app.Flags.FLAG_MODES_API) public static final String EXTRA_AUTOMATIC_ZEN_RULE_ID = "android.provider.extra.AUTOMATIC_ZEN_RULE_ID"; diff --git a/core/java/android/service/notification/Condition.java b/core/java/android/service/notification/Condition.java index 6e771f8f0ffe..c375cfb900ac 100644 --- a/core/java/android/service/notification/Condition.java +++ b/core/java/android/service/notification/Condition.java @@ -18,11 +18,9 @@ package android.service.notification; import static com.android.internal.util.Preconditions.checkArgument; -import android.annotation.FlaggedApi; import android.annotation.IntDef; import android.annotation.NonNull; import android.annotation.Nullable; -import android.app.Flags; import android.content.Context; import android.net.Uri; import android.os.Parcel; @@ -105,20 +103,15 @@ public final class Condition implements Parcelable { public @interface Source {} /** The state is changing due to an unknown reason. */ - @FlaggedApi(Flags.FLAG_MODES_API) public static final int SOURCE_UNKNOWN = 0; /** The state is changing due to an explicit user action. */ - @FlaggedApi(Flags.FLAG_MODES_API) public static final int SOURCE_USER_ACTION = 1; /** The state is changing due to an automatic schedule (alarm, set time, etc). */ - @FlaggedApi(Flags.FLAG_MODES_API) public static final int SOURCE_SCHEDULE = 2; /** The state is changing due to a change in context (such as detected driving or sleeping). */ - @FlaggedApi(Flags.FLAG_MODES_API) public static final int SOURCE_CONTEXT = 3; /** The source of, or reason for, the state change represented by this Condition. **/ - @FlaggedApi(Flags.FLAG_MODES_API) public final @Source int source; // default = SOURCE_UNKNOWN /** @@ -145,7 +138,6 @@ public final class Condition implements Parcelable { * @param state whether the mode should be activated or deactivated * @param source the source of, or reason for, the state change represented by this Condition */ - @FlaggedApi(Flags.FLAG_MODES_API) public Condition(@Nullable Uri id, @Nullable String summary, @State int state, @Source int source) { this(id, summary, "", "", -1, state, source, FLAG_RELEVANT_ALWAYS); @@ -168,7 +160,6 @@ public final class Condition implements Parcelable { * @param source the source of, or reason for, the state change represented by this Condition * @param flags flags on this condition */ - @FlaggedApi(Flags.FLAG_MODES_API) public Condition(@Nullable Uri id, @Nullable String summary, @Nullable String line1, @Nullable String line2, int icon, @State int state, @Source int source, int flags) { @@ -195,15 +186,13 @@ public final class Condition implements Parcelable { source.readString(), source.readInt(), source.readInt(), - Flags.modesApi() ? source.readInt() : SOURCE_UNKNOWN, + source.readInt(), source.readInt()); } /** @hide */ public void validate() { - if (Flags.modesApi()) { - checkValidSource(source); - } + checkValidSource(source); } private static boolean isValidState(int state) { @@ -211,11 +200,9 @@ public final class Condition implements Parcelable { } private static int checkValidSource(@Source int source) { - if (Flags.modesApi()) { - checkArgument(source >= SOURCE_UNKNOWN && source <= SOURCE_CONTEXT, - "Condition source must be one of SOURCE_UNKNOWN, SOURCE_USER_ACTION, " - + "SOURCE_SCHEDULE, or SOURCE_CONTEXT"); - } + checkArgument(source >= SOURCE_UNKNOWN && source <= SOURCE_CONTEXT, + "Condition source must be one of SOURCE_UNKNOWN, SOURCE_USER_ACTION, " + + "SOURCE_SCHEDULE, or SOURCE_CONTEXT"); return source; } @@ -227,25 +214,21 @@ public final class Condition implements Parcelable { dest.writeString(line2); dest.writeInt(icon); dest.writeInt(state); - if (Flags.modesApi()) { - dest.writeInt(this.source); - } + dest.writeInt(this.source); dest.writeInt(this.flags); } @Override public String toString() { - StringBuilder sb = new StringBuilder(Condition.class.getSimpleName()).append('[') + return new StringBuilder(Condition.class.getSimpleName()).append('[') .append("state=").append(stateToString(state)) .append(",id=").append(id) .append(",summary=").append(summary) .append(",line1=").append(line1) .append(",line2=").append(line2) - .append(",icon=").append(icon); - if (Flags.modesApi()) { - sb.append(",source=").append(sourceToString(source)); - } - return sb.append(",flags=").append(flags) + .append(",icon=").append(icon) + .append(",source=").append(sourceToString(source)) + .append(",flags=").append(flags) .append(']').toString(); } @@ -279,7 +262,6 @@ public final class Condition implements Parcelable { * Provides a human-readable string version of the Source enum. * @hide */ - @FlaggedApi(Flags.FLAG_MODES_API) public static @NonNull String sourceToString(@Source int source) { if (source == SOURCE_UNKNOWN) return "SOURCE_UNKNOWN"; if (source == SOURCE_USER_ACTION) return "SOURCE_USER_ACTION"; @@ -301,25 +283,19 @@ public final class Condition implements Parcelable { if (!(o instanceof Condition)) return false; if (o == this) return true; final Condition other = (Condition) o; - boolean finalEquals = Objects.equals(other.id, id) + return Objects.equals(other.id, id) && Objects.equals(other.summary, summary) && Objects.equals(other.line1, line1) && Objects.equals(other.line2, line2) && other.icon == icon && other.state == state - && other.flags == flags; - if (Flags.modesApi()) { - return finalEquals && other.source == source; - } - return finalEquals; + && other.flags == flags + && other.source == source; } @Override public int hashCode() { - if (Flags.modesApi()) { - return Objects.hash(id, summary, line1, line2, icon, state, source, flags); - } - return Objects.hash(id, summary, line1, line2, icon, state, flags); + return Objects.hash(id, summary, line1, line2, icon, state, source, flags); } @Override diff --git a/core/java/android/service/notification/SystemZenRules.java b/core/java/android/service/notification/SystemZenRules.java index f11ce1621f93..fbee06e113fc 100644 --- a/core/java/android/service/notification/SystemZenRules.java +++ b/core/java/android/service/notification/SystemZenRules.java @@ -16,7 +16,6 @@ package android.service.notification; -import android.annotation.FlaggedApi; import android.annotation.NonNull; import android.annotation.Nullable; import android.annotation.StringRes; @@ -47,7 +46,6 @@ public final class SystemZenRules { public static final String PACKAGE_ANDROID = "android"; /** Updates existing system-owned rules to use the new Modes fields (type, etc). */ - @FlaggedApi(Flags.FLAG_MODES_API) public static void maybeUpgradeRules(Context context, ZenModeConfig config) { for (ZenRule rule : config.automaticRules.values()) { if (isSystemOwnedRule(rule)) { @@ -69,7 +67,6 @@ public final class SystemZenRules { return PACKAGE_ANDROID.equals(rule.pkg); } - @FlaggedApi(Flags.FLAG_MODES_API) private static void upgradeSystemProviderRule(Context context, ZenRule rule) { ScheduleInfo scheduleInfo = ZenModeConfig.tryParseScheduleConditionId(rule.conditionId); if (scheduleInfo != null) { diff --git a/core/java/android/service/notification/ZenAdapters.java b/core/java/android/service/notification/ZenAdapters.java index a122b7155b18..4f53bfa841ef 100644 --- a/core/java/android/service/notification/ZenAdapters.java +++ b/core/java/android/service/notification/ZenAdapters.java @@ -17,7 +17,6 @@ package android.service.notification; import android.annotation.NonNull; -import android.app.Flags; import android.app.NotificationManager.Policy; /** @@ -50,7 +49,8 @@ public class ZenAdapters { : ZenPolicy.PEOPLE_TYPE_NONE) .allowReminders(policy.allowReminders()) .allowRepeatCallers(policy.allowRepeatCallers()) - .allowSystem(policy.allowSystem()); + .allowSystem(policy.allowSystem()) + .allowPriorityChannels(policy.allowPriorityChannels()); if (policy.suppressedVisualEffects != Policy.SUPPRESSED_EFFECTS_UNSET) { zenPolicyBuilder.showBadges(policy.showBadges()) @@ -62,10 +62,6 @@ public class ZenAdapters { .showStatusBarIcons(policy.showStatusBarIcons()); } - if (Flags.modesApi()) { - zenPolicyBuilder.allowPriorityChannels(policy.allowPriorityChannels()); - } - return zenPolicyBuilder.build(); } diff --git a/core/java/android/service/notification/ZenDeviceEffects.java b/core/java/android/service/notification/ZenDeviceEffects.java index 06bd2555c2f8..d88fb3e35b1e 100644 --- a/core/java/android/service/notification/ZenDeviceEffects.java +++ b/core/java/android/service/notification/ZenDeviceEffects.java @@ -16,12 +16,10 @@ 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; @@ -37,7 +35,6 @@ import java.util.Set; * Represents the set of device effects (affecting display and device behavior in general) that * are applied whenever an {@link android.app.AutomaticZenRule} is active. */ -@FlaggedApi(Flags.FLAG_MODES_API) public final class ZenDeviceEffects implements Parcelable { /** @@ -157,7 +154,6 @@ public final class ZenDeviceEffects implements Parcelable { } /** @hide */ - @FlaggedApi(Flags.FLAG_MODES_API) public void validate() { int extraEffectsLength = 0; for (String extraEffect : mExtraEffects) { @@ -435,7 +431,6 @@ public final class ZenDeviceEffects implements Parcelable { } /** Builder class for {@link ZenDeviceEffects} objects. */ - @FlaggedApi(Flags.FLAG_MODES_API) public static final class Builder { private boolean mGrayscale; diff --git a/core/java/android/service/notification/ZenModeConfig.java b/core/java/android/service/notification/ZenModeConfig.java index 4f459aa9131a..4011574da879 100644 --- a/core/java/android/service/notification/ZenModeConfig.java +++ b/core/java/android/service/notification/ZenModeConfig.java @@ -228,7 +228,7 @@ public class ZenModeConfig implements Parcelable { private static final boolean DEFAULT_ALLOW_CONV = true; private static final int DEFAULT_ALLOW_CONV_FROM = ZenPolicy.CONVERSATION_SENDERS_IMPORTANT; private static final boolean DEFAULT_ALLOW_PRIORITY_CHANNELS = true; - private static final boolean DEFAULT_CHANNELS_BYPASSING_DND = false; + private static final boolean DEFAULT_HAS_PRIORITY_CHANNELS = false; // Default setting here is 010011101 = 157 private static final int DEFAULT_SUPPRESSED_VISUAL_EFFECTS = SUPPRESSED_EFFECT_SCREEN_OFF | SUPPRESSED_EFFECT_FULL_SCREEN_INTENT @@ -242,9 +242,6 @@ public class ZenModeConfig implements Parcelable { public static final int XML_VERSION_MODES_API = 11; public static final int XML_VERSION_MODES_UI = 12; - // TODO: b/310620812, b/344831624 - Update XML_VERSION and update default_zen_config.xml - // accordingly when modes_api / modes_ui are inlined. - private static final int XML_VERSION_PRE_MODES = 10; public static final String ZEN_TAG = "zen"; private static final String ZEN_ATT_VERSION = "version"; private static final String ZEN_ATT_USER = "user"; @@ -269,7 +266,7 @@ public class ZenModeConfig implements Parcelable { private static final String DISALLOW_TAG = "disallow"; private static final String DISALLOW_ATT_VISUAL_EFFECTS = "visualEffects"; private static final String STATE_TAG = "state"; - private static final String STATE_ATT_CHANNELS_BYPASSING_DND = "areChannelsBypassingDnd"; + private static final String STATE_HAS_PRIORITY_CHANNELS = "areChannelsBypassingDnd"; // zen policy visual effects attributes private static final String SHOW_ATT_FULL_SCREEN_INTENT = "showFullScreenIntent"; @@ -303,7 +300,6 @@ public class ZenModeConfig implements Parcelable { private static final String RULE_ATT_CONDITION_ID = "conditionId"; private static final String RULE_ATT_CREATION_TIME = "creationTime"; private static final String RULE_ATT_ENABLER = "enabler"; - private static final String RULE_ATT_MODIFIED = "modified"; private static final String RULE_ATT_ALLOW_MANUAL = "userInvokable"; private static final String RULE_ATT_TYPE = "type"; private static final String RULE_ATT_USER_MODIFIED_FIELDS = "userModifiedFields"; @@ -348,11 +344,11 @@ public class ZenModeConfig implements Parcelable { public int allowConversationsFrom = DEFAULT_ALLOW_CONV_FROM; public int user = UserHandle.USER_SYSTEM; public int suppressedVisualEffects = DEFAULT_SUPPRESSED_VISUAL_EFFECTS; - // Note that when the modes_api flag is true, the areChannelsBypassingDnd boolean only tracks - // whether the current user has any priority channels. These channels may bypass DND when - // allowPriorityChannels is true. - // TODO: b/310620812 - Rename to be more accurate when modes_api flag is inlined. - public boolean areChannelsBypassingDnd = DEFAULT_CHANNELS_BYPASSING_DND; + /** + * Whether the current user has any priority channels. These channels may bypass DND when + * {@link #allowPriorityChannels} is true. + */ + public boolean hasPriorityChannels = DEFAULT_HAS_PRIORITY_CHANNELS; public boolean allowPriorityChannels = DEFAULT_ALLOW_PRIORITY_CHANNELS; public int version; @@ -384,22 +380,18 @@ public class ZenModeConfig implements Parcelable { user = source.readInt(); manualRule = source.readParcelable(null, ZenRule.class); readRulesFromParcel(automaticRules, source); - if (Flags.modesApi()) { - readRulesFromParcel(deletedRules, source); - } + readRulesFromParcel(deletedRules, source); if (!Flags.modesUi()) { allowAlarms = source.readInt() == 1; allowMedia = source.readInt() == 1; allowSystem = source.readInt() == 1; suppressedVisualEffects = source.readInt(); } - areChannelsBypassingDnd = source.readInt() == 1; + hasPriorityChannels = source.readInt() == 1; if (!Flags.modesUi()) { allowConversations = source.readBoolean(); allowConversationsFrom = source.readInt(); - if (Flags.modesApi()) { - allowPriorityChannels = source.readBoolean(); - } + allowPriorityChannels = source.readBoolean(); } } @@ -493,22 +485,18 @@ public class ZenModeConfig implements Parcelable { dest.writeInt(user); dest.writeParcelable(manualRule, 0); writeRulesToParcel(automaticRules, dest); - if (Flags.modesApi()) { - writeRulesToParcel(deletedRules, dest); - } + writeRulesToParcel(deletedRules, dest); if (!Flags.modesUi()) { dest.writeInt(allowAlarms ? 1 : 0); dest.writeInt(allowMedia ? 1 : 0); dest.writeInt(allowSystem ? 1 : 0); dest.writeInt(suppressedVisualEffects); } - dest.writeInt(areChannelsBypassingDnd ? 1 : 0); + dest.writeInt(hasPriorityChannels ? 1 : 0); if (!Flags.modesUi()) { dest.writeBoolean(allowConversations); dest.writeInt(allowConversationsFrom); - if (Flags.modesApi()) { - dest.writeBoolean(allowPriorityChannels); - } + dest.writeBoolean(allowPriorityChannels); } } @@ -549,17 +537,13 @@ public class ZenModeConfig implements Parcelable { (allowConversationsFrom)) .append("\nsuppressedVisualEffects=").append(suppressedVisualEffects); } - if (Flags.modesApi()) { - sb.append("\nhasPriorityChannels=").append(areChannelsBypassingDnd); - sb.append(",allowPriorityChannels=").append(allowPriorityChannels); - } else { - sb.append("\nareChannelsBypassingDnd=").append(areChannelsBypassingDnd); - } + + sb.append("\nhasPriorityChannels=").append(hasPriorityChannels); + sb.append(",allowPriorityChannels=").append(allowPriorityChannels); sb.append(",\nautomaticRules=").append(rulesToString(automaticRules)); sb.append(",\nmanualRule=").append(manualRule); - if (Flags.modesApi()) { - sb.append(",\ndeletedRules=").append(rulesToString(deletedRules)); - } + sb.append(",\ndeletedRules=").append(rulesToString(deletedRules)); + return sb.append(']').toString(); } @@ -854,7 +838,7 @@ public class ZenModeConfig implements Parcelable { final ZenModeConfig other = (ZenModeConfig) o; // The policy fields that live on config are compared directly because the fields will // contain data until MODES_UI is rolled out/cleaned up. - boolean eq = other.allowAlarms == allowAlarms + return other.allowAlarms == allowAlarms && other.allowMedia == allowMedia && other.allowSystem == allowSystem && other.allowCalls == allowCalls @@ -868,35 +852,23 @@ public class ZenModeConfig implements Parcelable { && Objects.equals(other.automaticRules, automaticRules) && Objects.equals(other.manualRule, manualRule) && other.suppressedVisualEffects == suppressedVisualEffects - && other.areChannelsBypassingDnd == areChannelsBypassingDnd + && other.hasPriorityChannels == hasPriorityChannels && other.allowConversations == allowConversations - && other.allowConversationsFrom == allowConversationsFrom; - if (Flags.modesApi()) { - return eq - && Objects.equals(other.deletedRules, deletedRules) - && other.allowPriorityChannels == allowPriorityChannels; - } - return eq; + && other.allowConversationsFrom == allowConversationsFrom + && Objects.equals(other.deletedRules, deletedRules) + && other.allowPriorityChannels == allowPriorityChannels; } @Override public int hashCode() { // The policy fields that live on config are compared directly because the fields will // contain data until MODES_UI is rolled out/cleaned up. - if (Flags.modesApi()) { - return Objects.hash(allowAlarms, allowMedia, allowSystem, allowCalls, - allowRepeatCallers, allowMessages, - allowCallsFrom, allowMessagesFrom, allowReminders, allowEvents, - user, automaticRules, manualRule, - suppressedVisualEffects, areChannelsBypassingDnd, allowConversations, - allowConversationsFrom, allowPriorityChannels); - } return Objects.hash(allowAlarms, allowMedia, allowSystem, allowCalls, allowRepeatCallers, allowMessages, allowCallsFrom, allowMessagesFrom, allowReminders, allowEvents, user, automaticRules, manualRule, - suppressedVisualEffects, areChannelsBypassingDnd, allowConversations, - allowConversationsFrom); + suppressedVisualEffects, hasPriorityChannels, allowConversations, + allowConversationsFrom, allowPriorityChannels); } private static String toDayList(int[] days) { @@ -952,10 +924,8 @@ public class ZenModeConfig implements Parcelable { public static int getCurrentXmlVersion() { if (Flags.modesUi()) { return XML_VERSION_MODES_UI; - } else if (Flags.modesApi()) { - return XML_VERSION_MODES_API; } else { - return XML_VERSION_PRE_MODES; + return XML_VERSION_MODES_API; } } @@ -1006,10 +976,8 @@ public class ZenModeConfig implements Parcelable { rt.allowMedia = safeBoolean(parser, ALLOW_ATT_MEDIA, DEFAULT_ALLOW_MEDIA); rt.allowSystem = safeBoolean(parser, ALLOW_ATT_SYSTEM, DEFAULT_ALLOW_SYSTEM); - if (Flags.modesApi()) { - rt.allowPriorityChannels = safeBoolean(parser, ALLOW_ATT_CHANNELS, - DEFAULT_ALLOW_PRIORITY_CHANNELS); - } + rt.allowPriorityChannels = safeBoolean(parser, ALLOW_ATT_CHANNELS, + DEFAULT_ALLOW_PRIORITY_CHANNELS); // migrate old suppressed visual effects fields, if they still exist in the xml Boolean allowWhenScreenOff = unsafeBoolean(parser, ALLOW_ATT_SCREEN_OFF); @@ -1054,13 +1022,12 @@ public class ZenModeConfig implements Parcelable { } else { readRuleCount++; } - } else if (AUTOMATIC_TAG.equals(tag) - || (Flags.modesApi() && AUTOMATIC_DELETED_TAG.equals(tag))) { + } else if (AUTOMATIC_TAG.equals(tag) || AUTOMATIC_DELETED_TAG.equals(tag)) { final String id = parser.getAttributeValue(null, RULE_ATT_ID); if (id != null) { final ZenRule automaticRule = readRuleXml(parser); automaticRule.id = id; - if (Flags.modesApi() && AUTOMATIC_DELETED_TAG.equals(tag)) { + if (AUTOMATIC_DELETED_TAG.equals(tag)) { String deletedRuleKey = deletedRuleKey(automaticRule); if (deletedRuleKey != null) { rt.deletedRules.put(deletedRuleKey, automaticRule); @@ -1071,8 +1038,8 @@ public class ZenModeConfig implements Parcelable { } } } else if (STATE_TAG.equals(tag)) { - rt.areChannelsBypassingDnd = safeBoolean(parser, - STATE_ATT_CHANNELS_BYPASSING_DND, DEFAULT_CHANNELS_BYPASSING_DND); + rt.hasPriorityChannels = safeBoolean(parser, + STATE_HAS_PRIORITY_CHANNELS, DEFAULT_HAS_PRIORITY_CHANNELS); } } if (type == XmlPullParser.END_TAG && ZEN_TAG.equals(tag)) { @@ -1149,9 +1116,7 @@ public class ZenModeConfig implements Parcelable { out.attributeBoolean(null, ALLOW_ATT_SYSTEM, allowSystem); out.attributeBoolean(null, ALLOW_ATT_CONV, allowConversations); out.attributeInt(null, ALLOW_ATT_CONV_FROM, allowConversationsFrom); - if (Flags.modesApi()) { - out.attributeBoolean(null, ALLOW_ATT_CHANNELS, allowPriorityChannels); - } + out.attributeBoolean(null, ALLOW_ATT_CHANNELS, allowPriorityChannels); out.endTag(null, ALLOW_TAG); out.startTag(null, DISALLOW_TAG); @@ -1174,7 +1139,7 @@ public class ZenModeConfig implements Parcelable { out.endTag(null, AUTOMATIC_TAG); writtenRuleCount++; } - if (Flags.modesApi() && !forBackup) { + if (!forBackup) { for (int i = 0; i < deletedRules.size(); i++) { final ZenRule deletedRule = deletedRules.valueAt(i); out.startTag(null, AUTOMATIC_DELETED_TAG); @@ -1185,7 +1150,7 @@ public class ZenModeConfig implements Parcelable { } out.startTag(null, STATE_TAG); - out.attributeBoolean(null, STATE_ATT_CHANNELS_BYPASSING_DND, areChannelsBypassingDnd); + out.attributeBoolean(null, STATE_HAS_PRIORITY_CHANNELS, hasPriorityChannels); out.endTag(null, STATE_TAG); out.endTag(null, ZEN_TAG); @@ -1212,39 +1177,30 @@ public class ZenModeConfig implements Parcelable { rt.creationTime = safeLong(parser, RULE_ATT_CREATION_TIME, 0); rt.enabler = parser.getAttributeValue(null, RULE_ATT_ENABLER); rt.condition = readConditionXml(parser); - - if (!Flags.modesApi() && rt.zenMode != ZEN_MODE_IMPORTANT_INTERRUPTIONS - && Condition.isValidId(rt.conditionId, SYSTEM_AUTHORITY)) { - // all default rules and user created rules updated to zenMode important interruptions - Slog.i(TAG, "Updating zenMode of automatic rule " + rt.name); - rt.zenMode = ZEN_MODE_IMPORTANT_INTERRUPTIONS; - } - rt.modified = safeBoolean(parser, RULE_ATT_MODIFIED, false); rt.zenPolicy = readZenPolicyXml(parser); - if (Flags.modesApi()) { - rt.zenDeviceEffects = readZenDeviceEffectsXml(parser); - rt.allowManualInvocation = safeBoolean(parser, RULE_ATT_ALLOW_MANUAL, false); - rt.iconResName = parser.getAttributeValue(null, RULE_ATT_ICON); - rt.triggerDescription = parser.getAttributeValue(null, RULE_ATT_TRIGGER_DESC); - rt.type = safeInt(parser, RULE_ATT_TYPE, AutomaticZenRule.TYPE_UNKNOWN); - rt.userModifiedFields = safeInt(parser, RULE_ATT_USER_MODIFIED_FIELDS, 0); - rt.zenPolicyUserModifiedFields = safeInt(parser, POLICY_USER_MODIFIED_FIELDS, 0); - rt.zenDeviceEffectsUserModifiedFields = safeInt(parser, - DEVICE_EFFECT_USER_MODIFIED_FIELDS, 0); - Long deletionInstant = tryParseLong( - parser.getAttributeValue(null, RULE_ATT_DELETION_INSTANT), null); - if (deletionInstant != null) { - rt.deletionInstant = Instant.ofEpochMilli(deletionInstant); - } - if (Flags.modesUi()) { - rt.disabledOrigin = safeInt(parser, RULE_ATT_DISABLED_ORIGIN, - ORIGIN_UNKNOWN); - rt.legacySuppressedEffects = safeInt(parser, - RULE_ATT_LEGACY_SUPPRESSED_EFFECTS, 0); - rt.conditionOverride = safeInt(parser, RULE_ATT_CONDITION_OVERRIDE, - ZenRule.OVERRIDE_NONE); - } + rt.zenDeviceEffects = readZenDeviceEffectsXml(parser); + rt.allowManualInvocation = safeBoolean(parser, RULE_ATT_ALLOW_MANUAL, false); + rt.iconResName = parser.getAttributeValue(null, RULE_ATT_ICON); + rt.triggerDescription = parser.getAttributeValue(null, RULE_ATT_TRIGGER_DESC); + rt.type = safeInt(parser, RULE_ATT_TYPE, AutomaticZenRule.TYPE_UNKNOWN); + rt.userModifiedFields = safeInt(parser, RULE_ATT_USER_MODIFIED_FIELDS, 0); + rt.zenPolicyUserModifiedFields = safeInt(parser, POLICY_USER_MODIFIED_FIELDS, 0); + rt.zenDeviceEffectsUserModifiedFields = safeInt(parser, + DEVICE_EFFECT_USER_MODIFIED_FIELDS, 0); + Long deletionInstant = tryParseLong( + parser.getAttributeValue(null, RULE_ATT_DELETION_INSTANT), null); + if (deletionInstant != null) { + rt.deletionInstant = Instant.ofEpochMilli(deletionInstant); + } + if (Flags.modesUi()) { + rt.disabledOrigin = safeInt(parser, RULE_ATT_DISABLED_ORIGIN, + ORIGIN_UNKNOWN); + rt.legacySuppressedEffects = safeInt(parser, + RULE_ATT_LEGACY_SUPPRESSED_EFFECTS, 0); + rt.conditionOverride = safeInt(parser, RULE_ATT_CONDITION_OVERRIDE, + ZenRule.OVERRIDE_NONE); } + return rt; } @@ -1278,34 +1234,31 @@ public class ZenModeConfig implements Parcelable { if (rule.zenPolicy != null) { writeZenPolicyXml(rule.zenPolicy, out); } - if (Flags.modesApi() && rule.zenDeviceEffects != null) { + if (rule.zenDeviceEffects != null) { writeZenDeviceEffectsXml(rule.zenDeviceEffects, out); } - out.attributeBoolean(null, RULE_ATT_MODIFIED, rule.modified); - if (Flags.modesApi()) { - out.attributeBoolean(null, RULE_ATT_ALLOW_MANUAL, rule.allowManualInvocation); - if (rule.iconResName != null) { - out.attribute(null, RULE_ATT_ICON, rule.iconResName); - } - if (rule.triggerDescription != null) { - out.attribute(null, RULE_ATT_TRIGGER_DESC, rule.triggerDescription); - } - out.attributeInt(null, RULE_ATT_TYPE, rule.type); - out.attributeInt(null, RULE_ATT_USER_MODIFIED_FIELDS, rule.userModifiedFields); - out.attributeInt(null, POLICY_USER_MODIFIED_FIELDS, rule.zenPolicyUserModifiedFields); - out.attributeInt(null, DEVICE_EFFECT_USER_MODIFIED_FIELDS, - rule.zenDeviceEffectsUserModifiedFields); - if (rule.deletionInstant != null) { - out.attributeLong(null, RULE_ATT_DELETION_INSTANT, - rule.deletionInstant.toEpochMilli()); - } - if (Flags.modesUi()) { - out.attributeInt(null, RULE_ATT_DISABLED_ORIGIN, rule.disabledOrigin); - out.attributeInt(null, RULE_ATT_LEGACY_SUPPRESSED_EFFECTS, - rule.legacySuppressedEffects); - if (rule.conditionOverride == ZenRule.OVERRIDE_ACTIVATE && !forBackup) { - out.attributeInt(null, RULE_ATT_CONDITION_OVERRIDE, rule.conditionOverride); - } + out.attributeBoolean(null, RULE_ATT_ALLOW_MANUAL, rule.allowManualInvocation); + if (rule.iconResName != null) { + out.attribute(null, RULE_ATT_ICON, rule.iconResName); + } + if (rule.triggerDescription != null) { + out.attribute(null, RULE_ATT_TRIGGER_DESC, rule.triggerDescription); + } + out.attributeInt(null, RULE_ATT_TYPE, rule.type); + out.attributeInt(null, RULE_ATT_USER_MODIFIED_FIELDS, rule.userModifiedFields); + out.attributeInt(null, POLICY_USER_MODIFIED_FIELDS, rule.zenPolicyUserModifiedFields); + out.attributeInt(null, DEVICE_EFFECT_USER_MODIFIED_FIELDS, + rule.zenDeviceEffectsUserModifiedFields); + if (rule.deletionInstant != null) { + out.attributeLong(null, RULE_ATT_DELETION_INSTANT, + rule.deletionInstant.toEpochMilli()); + } + if (Flags.modesUi()) { + out.attributeInt(null, RULE_ATT_DISABLED_ORIGIN, rule.disabledOrigin); + out.attributeInt(null, RULE_ATT_LEGACY_SUPPRESSED_EFFECTS, + rule.legacySuppressedEffects); + if (rule.conditionOverride == ZenRule.OVERRIDE_ACTIVATE && !forBackup) { + out.attributeInt(null, RULE_ATT_CONDITION_OVERRIDE, rule.conditionOverride); } } } @@ -1320,12 +1273,8 @@ public class ZenModeConfig implements Parcelable { final int state = safeInt(parser, CONDITION_ATT_STATE, -1); final int flags = safeInt(parser, CONDITION_ATT_FLAGS, -1); try { - if (Flags.modesApi()) { - final int source = safeInt(parser, CONDITION_ATT_SOURCE, Condition.SOURCE_UNKNOWN); - return new Condition(id, summary, line1, line2, icon, state, source, flags); - } else { - return new Condition(id, summary, line1, line2, icon, state, flags); - } + final int source = safeInt(parser, CONDITION_ATT_SOURCE, Condition.SOURCE_UNKNOWN); + return new Condition(id, summary, line1, line2, icon, state, source, flags); } catch (IllegalArgumentException e) { Slog.w(TAG, "Unable to read condition xml", e); return null; @@ -1339,9 +1288,7 @@ public class ZenModeConfig implements Parcelable { out.attribute(null, CONDITION_ATT_LINE2, c.line2); out.attributeInt(null, CONDITION_ATT_ICON, c.icon); out.attributeInt(null, CONDITION_ATT_STATE, c.state); - if (Flags.modesApi()) { - out.attributeInt(null, CONDITION_ATT_SOURCE, c.source); - } + out.attributeInt(null, CONDITION_ATT_SOURCE, c.source); out.attributeInt(null, CONDITION_ATT_FLAGS, c.flags); } @@ -1363,12 +1310,11 @@ public class ZenModeConfig implements Parcelable { final int system = safeInt(parser, ALLOW_ATT_SYSTEM, ZenPolicy.STATE_UNSET); final int events = safeInt(parser, ALLOW_ATT_EVENTS, ZenPolicy.STATE_UNSET); final int reminders = safeInt(parser, ALLOW_ATT_REMINDERS, ZenPolicy.STATE_UNSET); - if (Flags.modesApi()) { - final int channels = safeInt(parser, ALLOW_ATT_CHANNELS, ZenPolicy.STATE_UNSET); - if (channels != ZenPolicy.STATE_UNSET) { - builder.allowPriorityChannels(channels == STATE_ALLOW); - policySet = true; - } + final int channels = safeInt(parser, ALLOW_ATT_CHANNELS, ZenPolicy.STATE_UNSET); + + if (channels != ZenPolicy.STATE_UNSET) { + builder.allowPriorityChannels(channels == STATE_ALLOW); + policySet = true; } if (calls != ZenPolicy.PEOPLE_TYPE_UNSET) { @@ -1478,10 +1424,7 @@ public class ZenModeConfig implements Parcelable { writeZenPolicyState(SHOW_ATT_AMBIENT, policy.getVisualEffectAmbient(), out); writeZenPolicyState(SHOW_ATT_NOTIFICATION_LIST, policy.getVisualEffectNotificationList(), out); - - if (Flags.modesApi()) { - writeZenPolicyState(ALLOW_ATT_CHANNELS, policy.getPriorityChannelsAllowed(), out); - } + writeZenPolicyState(ALLOW_ATT_CHANNELS, policy.getPriorityChannelsAllowed(), out); } private static void writeZenPolicyState(String attr, int val, TypedXmlSerializer out) @@ -1495,7 +1438,7 @@ public class ZenModeConfig implements Parcelable { if (val != ZenPolicy.CONVERSATION_SENDERS_UNSET) { out.attributeInt(null, attr, val); } - } else if (Flags.modesApi() && Objects.equals(attr, ALLOW_ATT_CHANNELS)) { + } else if (Objects.equals(attr, ALLOW_ATT_CHANNELS)) { if (val != ZenPolicy.STATE_UNSET) { out.attributeInt(null, attr, val); } @@ -1506,7 +1449,6 @@ public class ZenModeConfig implements Parcelable { } } - @FlaggedApi(Flags.FLAG_MODES_API) @Nullable private static ZenDeviceEffects readZenDeviceEffectsXml(TypedXmlPullParser parser) { ZenDeviceEffects deviceEffects = @@ -1539,7 +1481,6 @@ public class ZenModeConfig implements Parcelable { return deviceEffects.hasEffects() ? deviceEffects : null; } - @FlaggedApi(Flags.FLAG_MODES_API) private static void writeZenDeviceEffectsXml(ZenDeviceEffects deviceEffects, TypedXmlSerializer out) throws IOException { writeBooleanIfTrue(out, DEVICE_EFFECT_DISPLAY_GRAYSCALE, @@ -1732,9 +1673,7 @@ public class ZenModeConfig implements Parcelable { (suppressedVisualEffects & Policy.SUPPRESSED_EFFECT_NOTIFICATION_LIST) == 0); } - if (Flags.modesApi()) { - builder.allowPriorityChannels(allowPriorityChannels); - } + builder.allowPriorityChannels(allowPriorityChannels); return builder.build(); } @@ -1860,12 +1799,9 @@ public class ZenModeConfig implements Parcelable { suppressedVisualEffects |= Policy.SUPPRESSED_EFFECT_NOTIFICATION_LIST; } - int state = defaultPolicy.state; - if (Flags.modesApi()) { - state = Policy.policyState(defaultPolicy.hasPriorityChannels(), - ZenPolicy.stateToBoolean(zenPolicy.getPriorityChannelsAllowed(), - DEFAULT_ALLOW_PRIORITY_CHANNELS)); - } + int state = Policy.policyState(defaultPolicy.hasPriorityChannels(), + ZenPolicy.stateToBoolean(zenPolicy.getPriorityChannelsAllowed(), + DEFAULT_ALLOW_PRIORITY_CHANNELS)); return new NotificationManager.Policy(priorityCategories, callSenders, messageSenders, suppressedVisualEffects, state, conversationSenders); @@ -1930,7 +1866,7 @@ public class ZenModeConfig implements Parcelable { priorityMessageSenders = peopleTypeToPrioritySenders( manualRule.zenPolicy.getPriorityMessageSenders(), DEFAULT_SOURCE); - state = Policy.policyState(areChannelsBypassingDnd, + state = Policy.policyState(hasPriorityChannels, manualRule.zenPolicy.getPriorityChannelsAllowed() != STATE_DISALLOW); boolean suppressFullScreenIntent = !manualRule.zenPolicy.isVisualEffectAllowed( @@ -2030,10 +1966,7 @@ public class ZenModeConfig implements Parcelable { priorityConversationSenders = zenPolicyConversationSendersToNotificationPolicy( getAllowConversationsFrom(), priorityConversationSenders); - state = areChannelsBypassingDnd ? Policy.STATE_CHANNELS_BYPASSING_DND : 0; - if (Flags.modesApi()) { - state = Policy.policyState(areChannelsBypassingDnd, allowPriorityChannels); - } + state = Policy.policyState(hasPriorityChannels, allowPriorityChannels); suppressedVisualEffects = getSuppressedVisualEffects(); } @@ -2114,13 +2047,11 @@ public class ZenModeConfig implements Parcelable { policy.priorityConversationSenders, allowConversationsFrom); if (policy.state != Policy.STATE_UNSET) { - if (Flags.modesApi()) { - setAllowPriorityChannels(policy.allowPriorityChannels()); - } + setAllowPriorityChannels(policy.allowPriorityChannels()); } } if (policy.state != Policy.STATE_UNSET) { - areChannelsBypassingDnd = (policy.state & Policy.STATE_CHANNELS_BYPASSING_DND) != 0; + hasPriorityChannels = (policy.state & Policy.STATE_HAS_PRIORITY_CHANNELS) != 0; } } @@ -2618,8 +2549,9 @@ public class ZenModeConfig implements Parcelable { @UnsupportedAppUsage public boolean enabled; @UnsupportedAppUsage(maxTargetSdk = Build.VERSION_CODES.R, trackingBug = 170729553) + // TODO: b/368247671 - Obsolete with MODES_UI; delete when the flag is inlined @Deprecated - public boolean snoozing; // user manually disabled this instance. Obsolete with MODES_UI + public boolean snoozing; // user manually disabled this instance. @UnsupportedAppUsage(maxTargetSdk = Build.VERSION_CODES.R, trackingBug = 170729553) public String name; // required for automatic @UnsupportedAppUsage @@ -2635,9 +2567,7 @@ public class ZenModeConfig implements Parcelable { // package name, only used for manual rules when they have turned DND on. public String enabler; public ZenPolicy zenPolicy; - @FlaggedApi(Flags.FLAG_MODES_API) @Nullable public ZenDeviceEffects zenDeviceEffects; - public boolean modified; // rule has been modified from initial creation public String pkg; @AutomaticZenRule.Type public int type = AutomaticZenRule.TYPE_UNKNOWN; @@ -2689,27 +2619,22 @@ public class ZenModeConfig implements Parcelable { enabler = source.readString(); } zenPolicy = source.readParcelable(null, android.service.notification.ZenPolicy.class); - if (Flags.modesApi()) { - zenDeviceEffects = source.readParcelable(null, ZenDeviceEffects.class); - } - modified = source.readInt() == 1; + zenDeviceEffects = source.readParcelable(null, ZenDeviceEffects.class); pkg = source.readString(); - if (Flags.modesApi()) { - allowManualInvocation = source.readBoolean(); - iconResName = source.readString(); - triggerDescription = source.readString(); - type = source.readInt(); - userModifiedFields = source.readInt(); - zenPolicyUserModifiedFields = source.readInt(); - zenDeviceEffectsUserModifiedFields = source.readInt(); - if (source.readInt() == 1) { - deletionInstant = Instant.ofEpochMilli(source.readLong()); - } - if (Flags.modesUi()) { - disabledOrigin = source.readInt(); - legacySuppressedEffects = source.readInt(); - conditionOverride = source.readInt(); - } + allowManualInvocation = source.readBoolean(); + iconResName = source.readString(); + triggerDescription = source.readString(); + type = source.readInt(); + userModifiedFields = source.readInt(); + zenPolicyUserModifiedFields = source.readInt(); + zenDeviceEffectsUserModifiedFields = source.readInt(); + if (source.readInt() == 1) { + deletionInstant = Instant.ofEpochMilli(source.readLong()); + } + if (Flags.modesUi()) { + disabledOrigin = source.readInt(); + legacySuppressedEffects = source.readInt(); + conditionOverride = source.readInt(); } } @@ -2722,7 +2647,6 @@ public class ZenModeConfig implements Parcelable { * switches). * </ul> */ - @FlaggedApi(Flags.FLAG_MODES_API) public boolean canBeUpdatedByApp() { // The rule is considered updateable if its bitmask has no user modifications, and // the bitmasks of the policy and device effects have no modification. @@ -2765,30 +2689,25 @@ public class ZenModeConfig implements Parcelable { dest.writeInt(0); } dest.writeParcelable(zenPolicy, 0); - if (Flags.modesApi()) { - dest.writeParcelable(zenDeviceEffects, 0); - } - dest.writeInt(modified ? 1 : 0); + dest.writeParcelable(zenDeviceEffects, 0); dest.writeString(pkg); - if (Flags.modesApi()) { - dest.writeBoolean(allowManualInvocation); - dest.writeString(iconResName); - dest.writeString(triggerDescription); - dest.writeInt(type); - dest.writeInt(userModifiedFields); - dest.writeInt(zenPolicyUserModifiedFields); - dest.writeInt(zenDeviceEffectsUserModifiedFields); - if (deletionInstant != null) { - dest.writeInt(1); - dest.writeLong(deletionInstant.toEpochMilli()); - } else { - dest.writeInt(0); - } - if (Flags.modesUi()) { - dest.writeInt(disabledOrigin); - dest.writeInt(legacySuppressedEffects); - dest.writeInt(conditionOverride); - } + dest.writeBoolean(allowManualInvocation); + dest.writeString(iconResName); + dest.writeString(triggerDescription); + dest.writeInt(type); + dest.writeInt(userModifiedFields); + dest.writeInt(zenPolicyUserModifiedFields); + dest.writeInt(zenDeviceEffectsUserModifiedFields); + if (deletionInstant != null) { + dest.writeInt(1); + dest.writeLong(deletionInstant.toEpochMilli()); + } else { + dest.writeInt(0); + } + if (Flags.modesUi()) { + dest.writeInt(disabledOrigin); + dest.writeInt(legacySuppressedEffects); + dest.writeInt(conditionOverride); } } @@ -2816,35 +2735,31 @@ public class ZenModeConfig implements Parcelable { .append(",creationTime=").append(creationTime) .append(",enabler=").append(enabler) .append(",zenPolicy=").append(zenPolicy) - .append(",modified=").append(modified) - .append(",condition=").append(condition); - - if (Flags.modesApi()) { - sb.append(",deviceEffects=").append(zenDeviceEffects) - .append(",allowManualInvocation=").append(allowManualInvocation) - .append(",iconResName=").append(iconResName) - .append(",triggerDescription=").append(triggerDescription) - .append(",type=").append(type); - if (userModifiedFields != 0) { - sb.append(",userModifiedFields=") - .append(AutomaticZenRule.fieldsToString(userModifiedFields)); - } - if (zenPolicyUserModifiedFields != 0) { - sb.append(",zenPolicyUserModifiedFields=") - .append(ZenPolicy.fieldsToString(zenPolicyUserModifiedFields)); - } - if (zenDeviceEffectsUserModifiedFields != 0) { - sb.append(",zenDeviceEffectsUserModifiedFields=") - .append(ZenDeviceEffects.fieldsToString( - zenDeviceEffectsUserModifiedFields)); - } - if (deletionInstant != null) { - sb.append(",deletionInstant=").append(deletionInstant); - } - if (Flags.modesUi()) { - sb.append(",disabledOrigin=").append(disabledOrigin); - sb.append(",legacySuppressedEffects=").append(legacySuppressedEffects); - } + .append(",condition=").append(condition) + .append(",deviceEffects=").append(zenDeviceEffects) + .append(",allowManualInvocation=").append(allowManualInvocation) + .append(",iconResName=").append(iconResName) + .append(",triggerDescription=").append(triggerDescription) + .append(",type=").append(type); + if (userModifiedFields != 0) { + sb.append(",userModifiedFields=") + .append(AutomaticZenRule.fieldsToString(userModifiedFields)); + } + if (zenPolicyUserModifiedFields != 0) { + sb.append(",zenPolicyUserModifiedFields=") + .append(ZenPolicy.fieldsToString(zenPolicyUserModifiedFields)); + } + if (zenDeviceEffectsUserModifiedFields != 0) { + sb.append(",zenDeviceEffectsUserModifiedFields=") + .append(ZenDeviceEffects.fieldsToString( + zenDeviceEffectsUserModifiedFields)); + } + if (deletionInstant != null) { + sb.append(",deletionInstant=").append(deletionInstant); + } + if (Flags.modesUi()) { + sb.append(",disabledOrigin=").append(disabledOrigin); + sb.append(",legacySuppressedEffects=").append(legacySuppressedEffects); } return sb.append(']').toString(); @@ -2869,7 +2784,7 @@ public class ZenModeConfig implements Parcelable { proto.write(ZenRuleProto.CREATION_TIME_MS, creationTime); proto.write(ZenRuleProto.ENABLED, enabled); proto.write(ZenRuleProto.ENABLER, enabler); - if (Flags.modesApi() && Flags.modesUi()) { + if (Flags.modesUi()) { proto.write(ZenRuleProto.IS_SNOOZING, conditionOverride == OVERRIDE_DEACTIVATE); } else { proto.write(ZenRuleProto.IS_SNOOZING, snoozing); @@ -2887,7 +2802,6 @@ public class ZenModeConfig implements Parcelable { if (zenPolicy != null) { zenPolicy.dumpDebug(proto, ZenRuleProto.ZEN_POLICY); } - proto.write(ZenRuleProto.MODIFIED, modified); proto.end(token); } @@ -2908,27 +2822,22 @@ public class ZenModeConfig implements Parcelable { && Objects.equals(other.enabler, enabler) && Objects.equals(other.zenPolicy, zenPolicy) && Objects.equals(other.pkg, pkg) - && other.modified == modified; + && Objects.equals(other.zenDeviceEffects, zenDeviceEffects) + && other.allowManualInvocation == allowManualInvocation + && Objects.equals(other.iconResName, iconResName) + && Objects.equals(other.triggerDescription, triggerDescription) + && other.type == type + && other.userModifiedFields == userModifiedFields + && other.zenPolicyUserModifiedFields == zenPolicyUserModifiedFields + && other.zenDeviceEffectsUserModifiedFields + == zenDeviceEffectsUserModifiedFields + && Objects.equals(other.deletionInstant, deletionInstant); - if (Flags.modesApi()) { + if (Flags.modesUi()) { finalEquals = finalEquals - && Objects.equals(other.zenDeviceEffects, zenDeviceEffects) - && other.allowManualInvocation == allowManualInvocation - && Objects.equals(other.iconResName, iconResName) - && Objects.equals(other.triggerDescription, triggerDescription) - && other.type == type - && other.userModifiedFields == userModifiedFields - && other.zenPolicyUserModifiedFields == zenPolicyUserModifiedFields - && other.zenDeviceEffectsUserModifiedFields - == zenDeviceEffectsUserModifiedFields - && Objects.equals(other.deletionInstant, deletionInstant); - - if (Flags.modesUi()) { - finalEquals = finalEquals - && other.disabledOrigin == disabledOrigin - && other.legacySuppressedEffects == legacySuppressedEffects - && other.conditionOverride == conditionOverride; - } + && other.disabledOrigin == disabledOrigin + && other.legacySuppressedEffects == legacySuppressedEffects + && other.conditionOverride == conditionOverride; } return finalEquals; @@ -2936,26 +2845,22 @@ public class ZenModeConfig implements Parcelable { @Override public int hashCode() { - if (Flags.modesApi()) { - if (Flags.modesUi()) { - return Objects.hash(enabled, snoozing, name, zenMode, conditionId, condition, - component, configurationActivity, pkg, id, enabler, zenPolicy, - zenDeviceEffects, modified, allowManualInvocation, iconResName, - triggerDescription, type, userModifiedFields, - zenPolicyUserModifiedFields, zenDeviceEffectsUserModifiedFields, - deletionInstant, disabledOrigin, legacySuppressedEffects, - conditionOverride); - } else { - return Objects.hash(enabled, snoozing, name, zenMode, conditionId, condition, - component, configurationActivity, pkg, id, enabler, zenPolicy, - zenDeviceEffects, modified, allowManualInvocation, iconResName, - triggerDescription, type, userModifiedFields, - zenPolicyUserModifiedFields, zenDeviceEffectsUserModifiedFields, - deletionInstant); - } + if (Flags.modesUi()) { + return Objects.hash(enabled, snoozing, name, zenMode, conditionId, condition, + component, configurationActivity, pkg, id, enabler, zenPolicy, + zenDeviceEffects, allowManualInvocation, iconResName, + triggerDescription, type, userModifiedFields, + zenPolicyUserModifiedFields, zenDeviceEffectsUserModifiedFields, + deletionInstant, disabledOrigin, legacySuppressedEffects, + conditionOverride); + } else { + return Objects.hash(enabled, snoozing, name, zenMode, conditionId, condition, + component, configurationActivity, pkg, id, enabler, zenPolicy, + zenDeviceEffects, allowManualInvocation, iconResName, + triggerDescription, type, userModifiedFields, + zenPolicyUserModifiedFields, zenDeviceEffectsUserModifiedFields, + deletionInstant); } - return Objects.hash(enabled, snoozing, name, zenMode, conditionId, condition, - component, configurationActivity, pkg, id, enabler, zenPolicy, modified); } /** Returns a deep copy of the {@link ZenRule}. */ @@ -2971,7 +2876,7 @@ public class ZenModeConfig implements Parcelable { } public boolean isActive() { - if (Flags.modesApi() && Flags.modesUi()) { + if (Flags.modesUi()) { if (!enabled || getPkg() == null) { return false; } else if (conditionOverride == OVERRIDE_ACTIVATE) { @@ -2989,7 +2894,7 @@ public class ZenModeConfig implements Parcelable { @VisibleForTesting(otherwise = VisibleForTesting.NONE) @ConditionOverride public int getConditionOverride() { - if (Flags.modesApi() && Flags.modesUi()) { + if (Flags.modesUi()) { return conditionOverride; } else { return snoozing ? OVERRIDE_DEACTIVATE : OVERRIDE_NONE; @@ -2997,7 +2902,7 @@ public class ZenModeConfig implements Parcelable { } public void setConditionOverride(@ConditionOverride int value) { - if (Flags.modesApi() && Flags.modesUi()) { + if (Flags.modesUi()) { conditionOverride = value; } else { if (value == OVERRIDE_ACTIVATE) { @@ -3026,7 +2931,7 @@ public class ZenModeConfig implements Parcelable { * manual deactivation (which used to be called "snoozing"). */ public void reconsiderConditionOverride() { - if (Flags.modesApi() && Flags.modesUi()) { + if (Flags.modesUi()) { if (conditionOverride == OVERRIDE_ACTIVATE && isTrueOrUnknown()) { resetConditionOverride(); } else if (conditionOverride == OVERRIDE_DEACTIVATE && !isTrueOrUnknown()) { @@ -3085,11 +2990,8 @@ public class ZenModeConfig implements Parcelable { & NotificationManager.Policy.PRIORITY_CATEGORY_REPEAT_CALLERS) != 0; boolean allowConversations = (policy.priorityConversationSenders & Policy.PRIORITY_CATEGORY_CONVERSATIONS) != 0; - boolean areChannelsBypassingDnd = (policy.state & Policy.STATE_CHANNELS_BYPASSING_DND) != 0; - if (Flags.modesApi()) { - areChannelsBypassingDnd = policy.hasPriorityChannels() - && policy.allowPriorityChannels(); - } + boolean areChannelsBypassingDnd = + policy.hasPriorityChannels() && policy.allowPriorityChannels(); boolean allowSystem = (policy.priorityCategories & Policy.PRIORITY_CATEGORY_SYSTEM) != 0; return !allowReminders && !allowCalls && !allowMessages && !allowEvents && !allowRepeatCallers && !areChannelsBypassingDnd && !allowSystem @@ -3129,15 +3031,12 @@ public class ZenModeConfig implements Parcelable { && !policy.isCategoryAllowed(PRIORITY_CATEGORY_EVENTS, false) && !policy.isCategoryAllowed(PRIORITY_CATEGORY_REPEAT_CALLERS, false) && !policy.isCategoryAllowed(PRIORITY_CATEGORY_SYSTEM, false) - && !(config.areChannelsBypassingDnd && policy.getPriorityChannelsAllowed() + && !(config.hasPriorityChannels && policy.getPriorityChannelsAllowed() == STATE_ALLOW); } else { - boolean areChannelsBypassingDnd = config.areChannelsBypassingDnd; - if (Flags.modesApi()) { - areChannelsBypassingDnd = config.areChannelsBypassingDnd - && config.isAllowPriorityChannels(); - } + boolean areChannelsBypassingDnd = config.hasPriorityChannels + && config.isAllowPriorityChannels(); return !config.isAllowReminders() && !config.isAllowCalls() && !config.isAllowMessages() && !config.isAllowEvents() && !config.isAllowRepeatCallers() && !areChannelsBypassingDnd && !config.isAllowSystem(); diff --git a/core/java/android/service/notification/ZenModeDiff.java b/core/java/android/service/notification/ZenModeDiff.java index 31acd248dcc0..c159e4016095 100644 --- a/core/java/android/service/notification/ZenModeDiff.java +++ b/core/java/android/service/notification/ZenModeDiff.java @@ -16,7 +16,6 @@ package android.service.notification; -import android.annotation.FlaggedApi; import android.annotation.IntDef; import android.annotation.Nullable; import android.app.Flags; @@ -249,7 +248,7 @@ public class ZenModeDiff { public static final String FIELD_ALLOW_MESSAGES_FROM = "allowMessagesFrom"; public static final String FIELD_ALLOW_CONVERSATIONS_FROM = "allowConversationsFrom"; public static final String FIELD_SUPPRESSED_VISUAL_EFFECTS = "suppressedVisualEffects"; - public static final String FIELD_ARE_CHANNELS_BYPASSING_DND = "areChannelsBypassingDnd"; + public static final String FIELD_HAS_PRIORITY_CHANNELS = "hasPriorityChannels"; public static final String FIELD_ALLOW_PRIORITY_CHANNELS = "allowPriorityChannels"; private static final Set<String> PEOPLE_TYPE_FIELDS = Set.of(FIELD_ALLOW_CALLS_FROM, FIELD_ALLOW_MESSAGES_FROM); @@ -323,15 +322,13 @@ public class ZenModeDiff { addField(FIELD_SUPPRESSED_VISUAL_EFFECTS, new FieldDiff<>(from.suppressedVisualEffects, to.suppressedVisualEffects)); } - if (from.areChannelsBypassingDnd != to.areChannelsBypassingDnd) { - addField(FIELD_ARE_CHANNELS_BYPASSING_DND, - new FieldDiff<>(from.areChannelsBypassingDnd, to.areChannelsBypassingDnd)); + if (from.hasPriorityChannels != to.hasPriorityChannels) { + addField(FIELD_HAS_PRIORITY_CHANNELS, + new FieldDiff<>(from.hasPriorityChannels, to.hasPriorityChannels)); } - if (Flags.modesApi()) { - if (from.allowPriorityChannels != to.allowPriorityChannels) { - addField(FIELD_ALLOW_PRIORITY_CHANNELS, - new FieldDiff<>(from.allowPriorityChannels, to.allowPriorityChannels)); - } + if (from.allowPriorityChannels != to.allowPriorityChannels) { + addField(FIELD_ALLOW_PRIORITY_CHANNELS, + new FieldDiff<>(from.allowPriorityChannels, to.allowPriorityChannels)); } // Compare automatic and manual rules @@ -491,7 +488,6 @@ public class ZenModeDiff { public static final String FIELD_ENABLER = "enabler"; public static final String FIELD_ZEN_POLICY = "zenPolicy"; public static final String FIELD_ZEN_DEVICE_EFFECTS = "zenDeviceEffects"; - public static final String FIELD_MODIFIED = "modified"; public static final String FIELD_PKG = "pkg"; public static final String FIELD_ALLOW_MANUAL = "allowManualInvocation"; public static final String FIELD_ICON_RES = "iconResName"; @@ -532,7 +528,7 @@ public class ZenModeDiff { if (from.enabled != to.enabled) { addField(FIELD_ENABLED, new FieldDiff<>(from.enabled, to.enabled)); } - if (Flags.modesApi() && Flags.modesUi()) { + if (Flags.modesUi()) { if (from.conditionOverride != to.conditionOverride) { addField(FIELD_CONDITION_OVERRIDE, new FieldDiff<>(from.conditionOverride, to.conditionOverride)); @@ -572,51 +568,40 @@ public class ZenModeDiff { if (!Objects.equals(from.enabler, to.enabler)) { addField(FIELD_ENABLER, new FieldDiff<>(from.enabler, to.enabler)); } - if (android.app.Flags.modesApi()) { - PolicyDiff policyDiff = new PolicyDiff(from.zenPolicy, to.zenPolicy); - if (policyDiff.hasDiff()) { - addField(FIELD_ZEN_POLICY, new FieldDiff<>(from.zenPolicy, to.zenPolicy, - policyDiff)); - } - } else { - if (!Objects.equals(from.zenPolicy, to.zenPolicy)) { - addField(FIELD_ZEN_POLICY, new FieldDiff<>(from.zenPolicy, to.zenPolicy)); - } - } - if (from.modified != to.modified) { - addField(FIELD_MODIFIED, new FieldDiff<>(from.modified, to.modified)); + PolicyDiff policyDiff = new PolicyDiff(from.zenPolicy, to.zenPolicy); + if (policyDiff.hasDiff()) { + addField(FIELD_ZEN_POLICY, new FieldDiff<>(from.zenPolicy, to.zenPolicy, + policyDiff)); } if (!Objects.equals(from.pkg, to.pkg)) { addField(FIELD_PKG, new FieldDiff<>(from.pkg, to.pkg)); } - if (android.app.Flags.modesApi()) { - DeviceEffectsDiff deviceEffectsDiff = new DeviceEffectsDiff(from.zenDeviceEffects, - to.zenDeviceEffects); - if (deviceEffectsDiff.hasDiff()) { - addField(FIELD_ZEN_DEVICE_EFFECTS, - new FieldDiff<>(from.zenDeviceEffects, to.zenDeviceEffects, - deviceEffectsDiff)); - } - if (!Objects.equals(from.triggerDescription, to.triggerDescription)) { - addField(FIELD_TRIGGER_DESCRIPTION, - new FieldDiff<>(from.triggerDescription, to.triggerDescription)); - } - if (from.type != to.type) { - addField(FIELD_TYPE, new FieldDiff<>(from.type, to.type)); - } - if (from.allowManualInvocation != to.allowManualInvocation) { - addField(FIELD_ALLOW_MANUAL, - new FieldDiff<>(from.allowManualInvocation, to.allowManualInvocation)); - } - if (!Objects.equals(from.iconResName, to.iconResName)) { - addField(FIELD_ICON_RES, new FieldDiff<>(from.iconResName, to.iconResName)); - } - if (android.app.Flags.modesUi()) { - if (from.legacySuppressedEffects != to.legacySuppressedEffects) { - addField(FIELD_LEGACY_SUPPRESSED_EFFECTS, - new FieldDiff<>(from.legacySuppressedEffects, - to.legacySuppressedEffects)); - } + DeviceEffectsDiff deviceEffectsDiff = new DeviceEffectsDiff(from.zenDeviceEffects, + to.zenDeviceEffects); + if (deviceEffectsDiff.hasDiff()) { + addField(FIELD_ZEN_DEVICE_EFFECTS, + new FieldDiff<>(from.zenDeviceEffects, to.zenDeviceEffects, + deviceEffectsDiff)); + } + if (!Objects.equals(from.triggerDescription, to.triggerDescription)) { + addField(FIELD_TRIGGER_DESCRIPTION, + new FieldDiff<>(from.triggerDescription, to.triggerDescription)); + } + if (from.type != to.type) { + addField(FIELD_TYPE, new FieldDiff<>(from.type, to.type)); + } + if (from.allowManualInvocation != to.allowManualInvocation) { + addField(FIELD_ALLOW_MANUAL, + new FieldDiff<>(from.allowManualInvocation, to.allowManualInvocation)); + } + if (!Objects.equals(from.iconResName, to.iconResName)) { + addField(FIELD_ICON_RES, new FieldDiff<>(from.iconResName, to.iconResName)); + } + if (android.app.Flags.modesUi()) { + if (from.legacySuppressedEffects != to.legacySuppressedEffects) { + addField(FIELD_LEGACY_SUPPRESSED_EFFECTS, + new FieldDiff<>(from.legacySuppressedEffects, + to.legacySuppressedEffects)); } } } @@ -702,7 +687,6 @@ public class ZenModeDiff { * Diff class representing a change between two * {@link android.service.notification.ZenDeviceEffects}. */ - @FlaggedApi(Flags.FLAG_MODES_API) public static class DeviceEffectsDiff extends BaseDiff { public static final String FIELD_GRAYSCALE = "mGrayscale"; public static final String FIELD_SUPPRESS_AMBIENT_DISPLAY = "mSuppressAmbientDisplay"; @@ -843,7 +827,6 @@ public class ZenModeDiff { /** * Diff class representing a change between two {@link android.service.notification.ZenPolicy}. */ - @FlaggedApi(Flags.FLAG_MODES_API) public static class PolicyDiff extends BaseDiff { public static final String FIELD_PRIORITY_CATEGORY_REMINDERS = "mPriorityCategories_Reminders"; diff --git a/core/java/android/service/notification/ZenPolicy.java b/core/java/android/service/notification/ZenPolicy.java index 4cff67e24a0f..6b98c4144f91 100644 --- a/core/java/android/service/notification/ZenPolicy.java +++ b/core/java/android/service/notification/ZenPolicy.java @@ -16,13 +16,11 @@ package android.service.notification; -import android.annotation.FlaggedApi; import android.annotation.IntDef; import android.annotation.NonNull; import android.annotation.Nullable; import android.annotation.SuppressLint; import android.annotation.TestApi; -import android.app.Flags; import android.app.Notification; import android.app.NotificationChannel; import android.os.Parcel; @@ -78,91 +76,74 @@ public final class ZenPolicy implements Parcelable { * the same time. * @hide */ - @FlaggedApi(Flags.FLAG_MODES_API) public static final int FIELD_MESSAGES = 1 << 0; /** * Covers modifications to CALL_SENDERS and PRIORITY_CATEGORY_CALLS, which are set at * the same time. * @hide */ - @FlaggedApi(Flags.FLAG_MODES_API) public static final int FIELD_CALLS = 1 << 1; /** * Covers modifications to CONVERSATION_SENDERS and PRIORITY_CATEGORY_CONVERSATIONS, which are * set at the same time. * @hide */ - @FlaggedApi(Flags.FLAG_MODES_API) public static final int FIELD_CONVERSATIONS = 1 << 2; /** * @hide */ - @FlaggedApi(Flags.FLAG_MODES_API) public static final int FIELD_ALLOW_CHANNELS = 1 << 3; /** * @hide */ - @FlaggedApi(Flags.FLAG_MODES_API) public static final int FIELD_PRIORITY_CATEGORY_REMINDERS = 1 << 4; /** * @hide */ - @FlaggedApi(Flags.FLAG_MODES_API) public static final int FIELD_PRIORITY_CATEGORY_EVENTS = 1 << 5; /** * @hide */ - @FlaggedApi(Flags.FLAG_MODES_API) public static final int FIELD_PRIORITY_CATEGORY_REPEAT_CALLERS = 1 << 6; /** * @hide */ - @FlaggedApi(Flags.FLAG_MODES_API) public static final int FIELD_PRIORITY_CATEGORY_ALARMS = 1 << 7; /** * @hide */ - @FlaggedApi(Flags.FLAG_MODES_API) public static final int FIELD_PRIORITY_CATEGORY_MEDIA = 1 << 8; /** * @hide */ - @FlaggedApi(Flags.FLAG_MODES_API) public static final int FIELD_PRIORITY_CATEGORY_SYSTEM = 1 << 9; /** * @hide */ - @FlaggedApi(Flags.FLAG_MODES_API) public static final int FIELD_VISUAL_EFFECT_FULL_SCREEN_INTENT = 1 << 10; /** * @hide */ - @FlaggedApi(Flags.FLAG_MODES_API) public static final int FIELD_VISUAL_EFFECT_LIGHTS = 1 << 11; /** * @hide */ - @FlaggedApi(Flags.FLAG_MODES_API) public static final int FIELD_VISUAL_EFFECT_PEEK = 1 << 12; /** * @hide */ - @FlaggedApi(Flags.FLAG_MODES_API) public static final int FIELD_VISUAL_EFFECT_STATUS_BAR = 1 << 13; /** * @hide */ - @FlaggedApi(Flags.FLAG_MODES_API) public static final int FIELD_VISUAL_EFFECT_BADGE = 1 << 14; /** * @hide */ - @FlaggedApi(Flags.FLAG_MODES_API) public static final int FIELD_VISUAL_EFFECT_AMBIENT = 1 << 15; /** * @hide */ - @FlaggedApi(Flags.FLAG_MODES_API) public static final int FIELD_VISUAL_EFFECT_NOTIFICATION_LIST = 1 << 16; private List<Integer> mPriorityCategories; @@ -170,7 +151,6 @@ public final class ZenPolicy implements Parcelable { private @PeopleType int mPriorityMessages = PEOPLE_TYPE_UNSET; private @PeopleType int mPriorityCalls = PEOPLE_TYPE_UNSET; private @ConversationSenders int mConversationSenders = CONVERSATION_SENDERS_UNSET; - @FlaggedApi(Flags.FLAG_MODES_API) private @ChannelType int mAllowChannels = CHANNEL_POLICY_UNSET; /** @hide */ @@ -358,7 +338,6 @@ public final class ZenPolicy implements Parcelable { * * @hide */ - @FlaggedApi(Flags.FLAG_MODES_API) public static final int CHANNEL_POLICY_UNSET = 0; /** @@ -367,7 +346,6 @@ public final class ZenPolicy implements Parcelable { * * @hide */ - @FlaggedApi(Flags.FLAG_MODES_API) public static final int CHANNEL_POLICY_PRIORITY = 1; /** @@ -376,7 +354,6 @@ public final class ZenPolicy implements Parcelable { * * @hide */ - @FlaggedApi(Flags.FLAG_MODES_API) public static final int CHANNEL_POLICY_NONE = 2; /** @hide */ @@ -386,7 +363,6 @@ public final class ZenPolicy implements Parcelable { } /** @hide */ - @FlaggedApi(Flags.FLAG_MODES_API) public ZenPolicy(List<Integer> priorityCategories, List<Integer> visualEffects, @PeopleType int priorityMessages, @PeopleType int priorityCalls, @ConversationSenders int conversationSenders, @ChannelType int allowChannels) { @@ -409,7 +385,6 @@ public final class ZenPolicy implements Parcelable { * * @hide */ - @FlaggedApi(Flags.FLAG_MODES_API) public static ZenPolicy getBasePolicyInterruptionFilterAlarms() { return new ZenPolicy.Builder() .disallowAllSounds() @@ -430,7 +405,6 @@ public final class ZenPolicy implements Parcelable { * * @hide */ - @FlaggedApi(Flags.FLAG_MODES_API) public static ZenPolicy getBasePolicyInterruptionFilterNone() { return new ZenPolicy.Builder() .disallowAllSounds() @@ -628,7 +602,6 @@ public final class ZenPolicy implements Parcelable { * channels may bypass; if {@link #STATE_DISALLOW}, then even notifications from channels * with {@link NotificationChannel#canBypassDnd()} will be intercepted. */ - @FlaggedApi(Flags.FLAG_MODES_API) public @State int getPriorityChannelsAllowed() { switch (mAllowChannels) { case CHANNEL_POLICY_PRIORITY: @@ -695,14 +668,10 @@ public final class ZenPolicy implements Parcelable { * Builds the current ZenPolicy. */ public @NonNull ZenPolicy build() { - if (Flags.modesApi()) { - return new ZenPolicy(new ArrayList<>(mZenPolicy.mPriorityCategories), - new ArrayList<>(mZenPolicy.mVisualEffects), - mZenPolicy.mPriorityMessages, mZenPolicy.mPriorityCalls, - mZenPolicy.mConversationSenders, mZenPolicy.mAllowChannels); - } else { - return mZenPolicy.copy(); - } + return new ZenPolicy(new ArrayList<>(mZenPolicy.mPriorityCategories), + new ArrayList<>(mZenPolicy.mVisualEffects), + mZenPolicy.mPriorityMessages, mZenPolicy.mPriorityCalls, + mZenPolicy.mConversationSenders, mZenPolicy.mAllowChannels); } /** @@ -1054,7 +1023,6 @@ public final class ZenPolicy implements Parcelable { * Set whether priority channels are permitted to break through DND. */ @SuppressLint("BuilderSetStyle") - @FlaggedApi(Flags.FLAG_MODES_API) public @NonNull Builder allowPriorityChannels(boolean allow) { mZenPolicy.mAllowChannels = allow ? CHANNEL_POLICY_PRIORITY : CHANNEL_POLICY_NONE; return this; @@ -1079,38 +1047,21 @@ public final class ZenPolicy implements Parcelable { dest.writeInt(mPriorityMessages); dest.writeInt(mPriorityCalls); dest.writeInt(mConversationSenders); - if (Flags.modesApi()) { - dest.writeInt(mAllowChannels); - } + dest.writeInt(mAllowChannels); } public static final @NonNull Creator<ZenPolicy> CREATOR = new Creator<ZenPolicy>() { @Override public ZenPolicy createFromParcel(Parcel source) { - ZenPolicy policy; - if (Flags.modesApi()) { - policy = new ZenPolicy( - trimList(source.readArrayList(Integer.class.getClassLoader(), - Integer.class), NUM_PRIORITY_CATEGORIES), - trimList(source.readArrayList(Integer.class.getClassLoader(), - Integer.class), NUM_VISUAL_EFFECTS), - source.readInt(), source.readInt(), source.readInt(), - source.readInt() + return new ZenPolicy( + trimList(source.readArrayList(Integer.class.getClassLoader(), + Integer.class), NUM_PRIORITY_CATEGORIES), + trimList(source.readArrayList(Integer.class.getClassLoader(), + Integer.class), NUM_VISUAL_EFFECTS), + source.readInt(), source.readInt(), source.readInt(), + source.readInt() ); - } else { - policy = new ZenPolicy(); - policy.mPriorityCategories = - trimList(source.readArrayList(Integer.class.getClassLoader(), - Integer.class), NUM_PRIORITY_CATEGORIES); - policy.mVisualEffects = - trimList(source.readArrayList(Integer.class.getClassLoader(), - Integer.class), NUM_VISUAL_EFFECTS); - policy.mPriorityMessages = source.readInt(); - policy.mPriorityCalls = source.readInt(); - policy.mConversationSenders = source.readInt(); - } - return policy; } @Override @@ -1121,18 +1072,16 @@ public final class ZenPolicy implements Parcelable { @Override public String toString() { - StringBuilder sb = new StringBuilder(ZenPolicy.class.getSimpleName()) + return new StringBuilder(ZenPolicy.class.getSimpleName()) .append('{') .append("priorityCategories=[").append(priorityCategoriesToString()) .append("], visualEffects=[").append(visualEffectsToString()) .append("], priorityCallsSenders=").append(peopleTypeToString(mPriorityCalls)) .append(", priorityMessagesSenders=").append(peopleTypeToString(mPriorityMessages)) .append(", priorityConversationSenders=").append( - conversationTypeToString(mConversationSenders)); - if (Flags.modesApi()) { - sb.append(", allowChannels=").append(channelTypeToString(mAllowChannels)); - } - return sb.append('}').toString(); + conversationTypeToString(mConversationSenders)) + .append(", allowChannels=").append(channelTypeToString(mAllowChannels)) + .append('}').toString(); } /** @hide */ @@ -1325,7 +1274,6 @@ public final class ZenPolicy implements Parcelable { /** * @hide */ - @FlaggedApi(Flags.FLAG_MODES_API) public static String channelTypeToString(@ChannelType int channelType) { switch (channelType) { case CHANNEL_POLICY_UNSET: @@ -1344,25 +1292,18 @@ public final class ZenPolicy implements Parcelable { if (o == this) return true; final ZenPolicy other = (ZenPolicy) o; - boolean eq = Objects.equals(other.mPriorityCategories, mPriorityCategories) + return Objects.equals(other.mPriorityCategories, mPriorityCategories) && Objects.equals(other.mVisualEffects, mVisualEffects) && other.mPriorityCalls == mPriorityCalls && other.mPriorityMessages == mPriorityMessages - && other.mConversationSenders == mConversationSenders; - if (Flags.modesApi()) { - return eq && other.mAllowChannels == mAllowChannels; - } - return eq; + && other.mConversationSenders == mConversationSenders + && other.mAllowChannels == mAllowChannels; } @Override public int hashCode() { - if (Flags.modesApi()) { - return Objects.hash(mPriorityCategories, mVisualEffects, mPriorityCalls, - mPriorityMessages, mConversationSenders, mAllowChannels); - } - return Objects.hash(mPriorityCategories, mVisualEffects, mPriorityCalls, mPriorityMessages, - mConversationSenders); + return Objects.hash(mPriorityCategories, mVisualEffects, mPriorityCalls, + mPriorityMessages, mConversationSenders, mAllowChannels); } private @State int getZenPolicyPriorityCategoryState(@PriorityCategory int @@ -1480,13 +1421,10 @@ public final class ZenPolicy implements Parcelable { } } - // apply allowed channels - if (Flags.modesApi()) { - // if no channels are allowed, can't newly allow them - if (mAllowChannels != CHANNEL_POLICY_NONE - && policyToApply.mAllowChannels != CHANNEL_POLICY_UNSET) { - mAllowChannels = policyToApply.mAllowChannels; - } + // apply allowed channels -> if no channels are allowed, can't newly allow them + if (mAllowChannels != CHANNEL_POLICY_NONE + && policyToApply.mAllowChannels != CHANNEL_POLICY_UNSET) { + mAllowChannels = policyToApply.mAllowChannels; } } @@ -1499,7 +1437,6 @@ public final class ZenPolicy implements Parcelable { * @hide */ @TestApi - @FlaggedApi(Flags.FLAG_MODES_API) public @NonNull ZenPolicy overwrittenWith(@Nullable ZenPolicy newPolicy) { ZenPolicy result = this.copy(); @@ -1596,10 +1533,7 @@ public final class ZenPolicy implements Parcelable { proto.write(DNDPolicyProto.ALLOW_CALLS_FROM, getPriorityCallSenders()); proto.write(DNDPolicyProto.ALLOW_MESSAGES_FROM, getPriorityMessageSenders()); proto.write(DNDPolicyProto.ALLOW_CONVERSATIONS_FROM, getPriorityConversationSenders()); - - if (Flags.modesApi()) { - proto.write(DNDPolicyProto.ALLOW_CHANNELS, getPriorityChannelsAllowed()); - } + proto.write(DNDPolicyProto.ALLOW_CHANNELS, getPriorityChannelsAllowed()); proto.flush(); return bytes.toByteArray(); diff --git a/core/tests/coretests/src/android/app/AutomaticZenRuleTest.java b/core/tests/coretests/src/android/app/AutomaticZenRuleTest.java index 5765562e2383..6fe3b6ca0c6c 100644 --- a/core/tests/coretests/src/android/app/AutomaticZenRuleTest.java +++ b/core/tests/coretests/src/android/app/AutomaticZenRuleTest.java @@ -26,7 +26,6 @@ import static org.junit.Assert.assertThrows; import android.content.ComponentName; import android.net.Uri; import android.os.Parcel; -import android.platform.test.annotations.EnableFlags; import android.platform.test.annotations.Presubmit; import android.platform.test.flag.junit.SetFlagsRule; @@ -112,7 +111,6 @@ public class AutomaticZenRuleTest { } @Test - @EnableFlags(Flags.FLAG_MODES_API) public void testLongInputsFromParcel() { // Create a rule with long fields, set directly via reflection so that we can confirm that // a rule with too-long fields that comes in via a parcel has its fields truncated directly. @@ -169,7 +167,6 @@ public class AutomaticZenRuleTest { } @Test - @EnableFlags(Flags.FLAG_MODES_API) public void builderConstructor_nullInputs_throws() { assertThrows(NullPointerException.class, () -> new AutomaticZenRule.Builder(null, Uri.parse("condition"))); @@ -178,7 +175,6 @@ public class AutomaticZenRuleTest { } @Test - @EnableFlags(Flags.FLAG_MODES_API) public void constructor_defaultTypeUnknown() { AutomaticZenRule rule = new AutomaticZenRule("name", new ComponentName("pkg", "cps"), null, Uri.parse("conditionId"), null, NotificationManager.INTERRUPTION_FILTER_PRIORITY, @@ -188,7 +184,6 @@ public class AutomaticZenRuleTest { } @Test - @EnableFlags(Flags.FLAG_MODES_API) public void builder_defaultsAreSensible() { AutomaticZenRule rule = new AutomaticZenRule.Builder("name", Uri.parse("conditionId")).build(); @@ -200,7 +195,6 @@ public class AutomaticZenRuleTest { } @Test - @EnableFlags(Flags.FLAG_MODES_API) public void validate_builderWithValidType_succeeds() throws Exception { AutomaticZenRule rule = new AutomaticZenRule.Builder("rule", Uri.parse("uri")) .setType(AutomaticZenRule.TYPE_BEDTIME) @@ -209,14 +203,12 @@ public class AutomaticZenRuleTest { } @Test - @EnableFlags(Flags.FLAG_MODES_API) public void validate_builderWithoutType_succeeds() throws Exception { AutomaticZenRule rule = new AutomaticZenRule.Builder("rule", Uri.parse("uri")).build(); rule.validate(); // No exception. } @Test - @EnableFlags(Flags.FLAG_MODES_API) public void validate_constructorWithoutType_succeeds() throws Exception { AutomaticZenRule rule = new AutomaticZenRule("rule", new ComponentName("pkg", "cps"), new ComponentName("pkg", "activity"), Uri.parse("condition"), null, @@ -225,7 +217,6 @@ public class AutomaticZenRuleTest { } @Test - @EnableFlags(Flags.FLAG_MODES_API) public void validate_invalidType_throws() throws Exception { AutomaticZenRule rule = new AutomaticZenRule.Builder("rule", Uri.parse("uri")).build(); @@ -238,7 +229,6 @@ public class AutomaticZenRuleTest { } @Test - @EnableFlags(Flags.FLAG_MODES_API) public void setType_invalidType_throws() { AutomaticZenRule rule = new AutomaticZenRule.Builder("rule", Uri.parse("uri")).build(); @@ -246,7 +236,6 @@ public class AutomaticZenRuleTest { } @Test - @EnableFlags(Flags.FLAG_MODES_API) public void setTypeBuilder_invalidType_throws() { AutomaticZenRule.Builder builder = new AutomaticZenRule.Builder("rule", Uri.parse("uri")); diff --git a/core/tests/coretests/src/android/app/NotificationManagerTest.java b/core/tests/coretests/src/android/app/NotificationManagerTest.java index d816039d0d3c..250b9ce8d89d 100644 --- a/core/tests/coretests/src/android/app/NotificationManagerTest.java +++ b/core/tests/coretests/src/android/app/NotificationManagerTest.java @@ -521,7 +521,7 @@ public class NotificationManagerTest { } @Test - @EnableFlags({Flags.FLAG_MODES_API, Flags.FLAG_MODES_UI}) + @EnableFlags(Flags.FLAG_MODES_UI) public void areAutomaticZenRulesUserManaged_handheld_isTrue() { PackageManager pm = mock(PackageManager.class); when(pm.hasSystemFeature(any())).thenReturn(false); @@ -531,7 +531,7 @@ public class NotificationManagerTest { } @Test - @EnableFlags({Flags.FLAG_MODES_API, Flags.FLAG_MODES_UI}) + @EnableFlags(Flags.FLAG_MODES_UI) public void areAutomaticZenRulesUserManaged_auto_isFalse() { PackageManager pm = mock(PackageManager.class); when(pm.hasSystemFeature(eq(PackageManager.FEATURE_AUTOMOTIVE))).thenReturn(true); @@ -541,7 +541,7 @@ public class NotificationManagerTest { } @Test - @EnableFlags({Flags.FLAG_MODES_API, Flags.FLAG_MODES_UI}) + @EnableFlags(Flags.FLAG_MODES_UI) public void areAutomaticZenRulesUserManaged_tv_isFalse() { PackageManager pm = mock(PackageManager.class); when(pm.hasSystemFeature(eq(PackageManager.FEATURE_LEANBACK))).thenReturn(true); @@ -551,7 +551,7 @@ public class NotificationManagerTest { } @Test - @EnableFlags({Flags.FLAG_MODES_API, Flags.FLAG_MODES_UI}) + @EnableFlags(Flags.FLAG_MODES_UI) public void areAutomaticZenRulesUserManaged_watch_isFalse() { PackageManager pm = mock(PackageManager.class); when(pm.hasSystemFeature(eq(PackageManager.FEATURE_WATCH))).thenReturn(true); diff --git a/core/tests/coretests/src/android/service/notification/ConditionTest.java b/core/tests/coretests/src/android/service/notification/ConditionTest.java index e94273e1ada7..65c108a827ef 100644 --- a/core/tests/coretests/src/android/service/notification/ConditionTest.java +++ b/core/tests/coretests/src/android/service/notification/ConditionTest.java @@ -23,10 +23,8 @@ import static junit.framework.Assert.fail; import static org.junit.Assert.assertThrows; -import android.app.Flags; import android.net.Uri; import android.os.Parcel; -import android.platform.test.annotations.EnableFlags; import android.platform.test.flag.junit.SetFlagsRule; import androidx.test.ext.junit.runners.AndroidJUnit4; @@ -113,7 +111,6 @@ public class ConditionTest { @Test public void testLongFields_inConstructors() { - mSetFlagsRule.enableFlags(Flags.FLAG_MODES_API); String longString = Strings.repeat("A", 65536); Uri longUri = Uri.parse("uri://" + Strings.repeat("A", 65530)); @@ -136,7 +133,6 @@ public class ConditionTest { @Test public void testLongFields_viaParcel() throws Exception { - mSetFlagsRule.enableFlags(Flags.FLAG_MODES_API); // Set fields via reflection to force them to be long, then parcel and unparcel to make sure // it gets truncated upon unparcelling. Condition cond = new Condition(Uri.parse("uri://placeholder"), "placeholder", @@ -170,8 +166,6 @@ public class ConditionTest { @Test public void testEquals() { - mSetFlagsRule.enableFlags(Flags.FLAG_MODES_API); - Condition cond1 = new Condition(Uri.parse("uri://placeholder"), "placeholder", Condition.STATE_TRUE, Condition.SOURCE_USER_ACTION); Condition cond2 = new Condition(Uri.parse("uri://placeholder"), "placeholder", @@ -186,8 +180,6 @@ public class ConditionTest { @Test public void testParcelConstructor() { - mSetFlagsRule.enableFlags(Flags.FLAG_MODES_API); - Condition cond = new Condition(Uri.parse("uri://placeholder"), "placeholder", Condition.STATE_TRUE, Condition.SOURCE_USER_ACTION); @@ -200,28 +192,24 @@ public class ConditionTest { } @Test - @EnableFlags(Flags.FLAG_MODES_API) public void constructor_unspecifiedSource_succeeds() { new Condition(Uri.parse("id"), "Summary", Condition.STATE_TRUE); // No exception. } @Test - @EnableFlags(Flags.FLAG_MODES_API) public void constructor_validSource_succeeds() { new Condition(Uri.parse("id"), "Summary", Condition.STATE_TRUE, Condition.SOURCE_CONTEXT); // No exception. } @Test - @EnableFlags(Flags.FLAG_MODES_API) public void constructor_invalidSource_throws() { assertThrows(IllegalArgumentException.class, () -> new Condition(Uri.parse("uri"), "Summary", Condition.STATE_TRUE, 1000)); } @Test - @EnableFlags(Flags.FLAG_MODES_API) public void constructor_parcelWithInvalidSource_throws() { Condition original = new Condition(Uri.parse("condition"), "Summary", Condition.STATE_TRUE, Condition.SOURCE_SCHEDULE); @@ -237,7 +225,6 @@ public class ConditionTest { } @Test - @EnableFlags(Flags.FLAG_MODES_API) public void validate_invalidSource_throws() throws Exception { Condition condition = new Condition(Uri.parse("condition"), "Summary", Condition.STATE_TRUE, Condition.SOURCE_SCHEDULE); diff --git a/packages/SettingsLib/src/com/android/settingslib/notification/data/repository/ZenModeRepository.kt b/packages/SettingsLib/src/com/android/settingslib/notification/data/repository/ZenModeRepository.kt index f446bb8e32d1..c4e724554c04 100644 --- a/packages/SettingsLib/src/com/android/settingslib/notification/data/repository/ZenModeRepository.kt +++ b/packages/SettingsLib/src/com/android/settingslib/notification/data/repository/ZenModeRepository.kt @@ -93,10 +93,9 @@ class ZenModeRepositoryImpl( IntentFilter().apply { addAction(NotificationManager.ACTION_INTERRUPTION_FILTER_CHANGED) addAction(NotificationManager.ACTION_NOTIFICATION_POLICY_CHANGED) - if (android.app.Flags.modesApi()) - addAction( - NotificationManager.ACTION_CONSOLIDATED_NOTIFICATION_POLICY_CHANGED - ) + addAction( + NotificationManager.ACTION_CONSOLIDATED_NOTIFICATION_POLICY_CHANGED + ) }, /* broadcastPermission = */ null, /* scheduler = */ backgroundHandler, @@ -109,16 +108,13 @@ class ZenModeRepositoryImpl( } override val consolidatedNotificationPolicy: StateFlow<NotificationManager.Policy?> by lazy { - if (android.app.Flags.modesApi()) - flowFromBroadcast(NotificationManager.ACTION_CONSOLIDATED_NOTIFICATION_POLICY_CHANGED) { - // If available, get the value from extras to avoid a potential binder call. - it?.extras?.getParcelable(EXTRA_NOTIFICATION_POLICY) - ?: notificationManager.consolidatedNotificationPolicy - } - else - flowFromBroadcast(NotificationManager.ACTION_NOTIFICATION_POLICY_CHANGED) { - notificationManager.consolidatedNotificationPolicy - } + flowFromBroadcast(NotificationManager.ACTION_CONSOLIDATED_NOTIFICATION_POLICY_CHANGED) { + // If available, get the value from extras to avoid a potential binder call. + it?.extras?.getParcelable( + EXTRA_NOTIFICATION_POLICY, + NotificationManager.Policy::class.java + ) ?: notificationManager.consolidatedNotificationPolicy + } } override val globalZenMode: StateFlow<Int?> by lazy { diff --git a/packages/SettingsLib/src/com/android/settingslib/notification/modes/EnableDndDialogFactory.java b/packages/SettingsLib/src/com/android/settingslib/notification/modes/EnableDndDialogFactory.java index f0e7fb851d5f..52d62b6226b8 100644 --- a/packages/SettingsLib/src/com/android/settingslib/notification/modes/EnableDndDialogFactory.java +++ b/packages/SettingsLib/src/com/android/settingslib/notification/modes/EnableDndDialogFactory.java @@ -19,7 +19,6 @@ package com.android.settingslib.notification.modes; import android.app.ActivityManager; import android.app.AlarmManager; import android.app.AlertDialog; -import android.app.Flags; import android.app.NotificationManager; import android.content.Context; import android.content.DialogInterface; @@ -42,8 +41,6 @@ import android.widget.RadioGroup; import android.widget.ScrollView; import android.widget.TextView; -import androidx.annotation.Nullable; - import com.android.internal.annotations.VisibleForTesting; import com.android.internal.policy.PhoneWindow; import com.android.settingslib.R; @@ -80,7 +77,6 @@ public class EnableDndDialogFactory { private static final int SECONDS_MS = 1000; private static final int MINUTES_MS = 60 * SECONDS_MS; - @Nullable private final EnableDndDialogMetricsLogger mMetricsLogger; @VisibleForTesting @@ -152,16 +148,10 @@ public class EnableDndDialogFactory { Slog.d(TAG, "Invalid manual condition: " + tag.condition); } // always triggers priority-only dnd with chosen condition - if (Flags.modesApi()) { - mNotificationManager.setZenMode( - Settings.Global.ZEN_MODE_IMPORTANT_INTERRUPTIONS, - getRealConditionId(tag.condition), TAG, - /* fromUser= */ true); - } else { - mNotificationManager.setZenMode( - Settings.Global.ZEN_MODE_IMPORTANT_INTERRUPTIONS, - getRealConditionId(tag.condition), TAG); - } + mNotificationManager.setZenMode( + Settings.Global.ZEN_MODE_IMPORTANT_INTERRUPTIONS, + getRealConditionId(tag.condition), TAG, + /* fromUser= */ true); } }); diff --git a/packages/SettingsLib/tests/robotests/src/com/android/settingslib/notification/data/repository/ZenModeRepositoryTest.kt b/packages/SettingsLib/tests/robotests/src/com/android/settingslib/notification/data/repository/ZenModeRepositoryTest.kt index 388af61c6273..b364368df473 100644 --- a/packages/SettingsLib/tests/robotests/src/com/android/settingslib/notification/data/repository/ZenModeRepositoryTest.kt +++ b/packages/SettingsLib/tests/robotests/src/com/android/settingslib/notification/data/repository/ZenModeRepositoryTest.kt @@ -91,7 +91,6 @@ class ZenModeRepositoryTest { ) } - @EnableFlags(android.app.Flags.FLAG_MODES_API) @Test fun consolidatedPolicyChanges_repositoryEmits_flagsOn() { testScope.runTest { @@ -110,7 +109,6 @@ class ZenModeRepositoryTest { } } - @EnableFlags(android.app.Flags.FLAG_MODES_API) @Test fun consolidatedPolicyChanges_repositoryEmitsFromExtras() { testScope.runTest { diff --git a/packages/SystemUI/multivalentTests/src/com/android/systemui/statusbar/notification/emptyshade/ui/viewmodel/EmptyShadeViewModelTest.kt b/packages/SystemUI/multivalentTests/src/com/android/systemui/statusbar/notification/emptyshade/ui/viewmodel/EmptyShadeViewModelTest.kt index 5ba972def76d..7cbc839c0ab5 100644 --- a/packages/SystemUI/multivalentTests/src/com/android/systemui/statusbar/notification/emptyshade/ui/viewmodel/EmptyShadeViewModelTest.kt +++ b/packages/SystemUI/multivalentTests/src/com/android/systemui/statusbar/notification/emptyshade/ui/viewmodel/EmptyShadeViewModelTest.kt @@ -140,7 +140,7 @@ class EmptyShadeViewModelTest(flags: FlagsParameterization) : SysuiTestCase() { @Test @EnableFlags(ModesEmptyShadeFix.FLAG_NAME) - @DisableFlags(Flags.FLAG_MODES_UI, Flags.FLAG_MODES_API) + @DisableFlags(Flags.FLAG_MODES_UI) fun text_changesWhenNotifsHiddenInShade() = testScope.runTest { val text by collectLastValue(underTest.text) @@ -163,7 +163,7 @@ class EmptyShadeViewModelTest(flags: FlagsParameterization) : SysuiTestCase() { } @Test - @EnableFlags(ModesEmptyShadeFix.FLAG_NAME, Flags.FLAG_MODES_UI, Flags.FLAG_MODES_API) + @EnableFlags(ModesEmptyShadeFix.FLAG_NAME, Flags.FLAG_MODES_UI) fun text_changesWhenLocaleChanges() = testScope.runTest { val text by collectLastValue(underTest.text) @@ -186,7 +186,7 @@ class EmptyShadeViewModelTest(flags: FlagsParameterization) : SysuiTestCase() { } @Test - @EnableFlags(ModesEmptyShadeFix.FLAG_NAME, Flags.FLAG_MODES_UI, Flags.FLAG_MODES_API) + @EnableFlags(ModesEmptyShadeFix.FLAG_NAME, Flags.FLAG_MODES_UI) fun text_reflectsModesHidingNotifications() = testScope.runTest { val text by collectLastValue(underTest.text) @@ -250,7 +250,7 @@ class EmptyShadeViewModelTest(flags: FlagsParameterization) : SysuiTestCase() { } @Test - @EnableFlags(ModesEmptyShadeFix.FLAG_NAME, Flags.FLAG_MODES_UI, Flags.FLAG_MODES_API) + @EnableFlags(ModesEmptyShadeFix.FLAG_NAME, Flags.FLAG_MODES_UI) fun onClick_whenHistoryDisabled_leadsToSettingsPage() = testScope.runTest { val onClick by collectLastValue(underTest.onClick) @@ -264,7 +264,7 @@ class EmptyShadeViewModelTest(flags: FlagsParameterization) : SysuiTestCase() { } @Test - @EnableFlags(ModesEmptyShadeFix.FLAG_NAME, Flags.FLAG_MODES_UI, Flags.FLAG_MODES_API) + @EnableFlags(ModesEmptyShadeFix.FLAG_NAME, Flags.FLAG_MODES_UI) fun onClick_whenHistoryEnabled_leadsToHistoryPage() = testScope.runTest { val onClick by collectLastValue(underTest.onClick) @@ -279,7 +279,7 @@ class EmptyShadeViewModelTest(flags: FlagsParameterization) : SysuiTestCase() { } @Test - @EnableFlags(ModesEmptyShadeFix.FLAG_NAME, Flags.FLAG_MODES_UI, Flags.FLAG_MODES_API) + @EnableFlags(ModesEmptyShadeFix.FLAG_NAME, Flags.FLAG_MODES_UI) fun onClick_whenOneModeHidingNotifications_leadsToModeSettings() = testScope.runTest { val onClick by collectLastValue(underTest.onClick) @@ -305,7 +305,7 @@ class EmptyShadeViewModelTest(flags: FlagsParameterization) : SysuiTestCase() { } @Test - @EnableFlags(ModesEmptyShadeFix.FLAG_NAME, Flags.FLAG_MODES_UI, Flags.FLAG_MODES_API) + @EnableFlags(ModesEmptyShadeFix.FLAG_NAME, Flags.FLAG_MODES_UI) fun onClick_whenMultipleModesHidingNotifications_leadsToGeneralModesSettings() = testScope.runTest { val onClick by collectLastValue(underTest.onClick) diff --git a/packages/SystemUI/multivalentTests/src/com/android/systemui/statusbar/policy/domain/interactor/ZenModeInteractorTest.kt b/packages/SystemUI/multivalentTests/src/com/android/systemui/statusbar/policy/domain/interactor/ZenModeInteractorTest.kt index ff1ffccfb2de..22e28d883c97 100644 --- a/packages/SystemUI/multivalentTests/src/com/android/systemui/statusbar/policy/domain/interactor/ZenModeInteractorTest.kt +++ b/packages/SystemUI/multivalentTests/src/com/android/systemui/statusbar/policy/domain/interactor/ZenModeInteractorTest.kt @@ -469,7 +469,7 @@ class ZenModeInteractorTest : SysuiTestCase() { } @Test - @EnableFlags(ModesEmptyShadeFix.FLAG_NAME, Flags.FLAG_MODES_UI, Flags.FLAG_MODES_API) + @EnableFlags(ModesEmptyShadeFix.FLAG_NAME, Flags.FLAG_MODES_UI) fun modesHidingNotifications_onlyIncludesModesWithNotifListSuppression() = kosmos.runTest { val modesHidingNotifications by collectLastValue(underTest.modesHidingNotifications) diff --git a/packages/SystemUI/src/com/android/systemui/flags/FlagDependencies.kt b/packages/SystemUI/src/com/android/systemui/flags/FlagDependencies.kt index ebe228dab05a..26501596aa1a 100644 --- a/packages/SystemUI/src/com/android/systemui/flags/FlagDependencies.kt +++ b/packages/SystemUI/src/com/android/systemui/flags/FlagDependencies.kt @@ -45,7 +45,6 @@ class FlagDependencies @Inject constructor(featureFlags: FeatureFlagsClassic, ha // Internal notification backend dependencies crossAppPoliteNotifications dependsOn politeNotifications vibrateWhileUnlockedToken dependsOn politeNotifications - modesUi dependsOn modesApi // Internal notification frontend dependencies NotificationAvalancheSuppression.token dependsOn VisualInterruptionRefactor.token @@ -71,9 +70,6 @@ class FlagDependencies @Inject constructor(featureFlags: FeatureFlagsClassic, ha private inline val modesUi get() = FlagToken(android.app.Flags.FLAG_MODES_UI, android.app.Flags.modesUi()) - private inline val modesApi - get() = FlagToken(android.app.Flags.FLAG_MODES_API, android.app.Flags.modesApi()) - private inline val communalHub get() = FlagToken(FLAG_COMMUNAL_HUB, communalHub()) } diff --git a/packages/SystemUI/src/com/android/systemui/modes/shared/ModesUi.kt b/packages/SystemUI/src/com/android/systemui/modes/shared/ModesUi.kt index a0663d72a076..e293e202633e 100644 --- a/packages/SystemUI/src/com/android/systemui/modes/shared/ModesUi.kt +++ b/packages/SystemUI/src/com/android/systemui/modes/shared/ModesUi.kt @@ -25,7 +25,7 @@ object ModesUi { /** Is the refactor enabled */ @JvmStatic inline val isEnabled - get() = Flags.modesApi() && Flags.modesUi() + get() = Flags.modesUi() /** * Called to ensure code is only run when the flag is enabled. This protects users from the diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/policy/ZenModeControllerImpl.java b/packages/SystemUI/src/com/android/systemui/statusbar/policy/ZenModeControllerImpl.java index 9ad8619faacc..1d1826d532b7 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/policy/ZenModeControllerImpl.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/policy/ZenModeControllerImpl.java @@ -17,7 +17,6 @@ package com.android.systemui.statusbar.policy; import android.app.AlarmManager; -import android.app.Flags; import android.app.NotificationManager; import android.content.BroadcastReceiver; import android.content.ContentResolver; @@ -175,11 +174,7 @@ public class ZenModeControllerImpl implements ZenModeController, Dumpable { @Override public void setZen(int zen, Uri conditionId, String reason) { - if (Flags.modesApi()) { - mNoMan.setZenMode(zen, conditionId, reason, /* fromUser= */ true); - } else { - mNoMan.setZenMode(zen, conditionId, reason); - } + mNoMan.setZenMode(zen, conditionId, reason, /* fromUser= */ true); } @Override diff --git a/services/core/java/com/android/server/UiModeManagerService.java b/services/core/java/com/android/server/UiModeManagerService.java index 4976a63b016b..8eda17698b9b 100644 --- a/services/core/java/com/android/server/UiModeManagerService.java +++ b/services/core/java/com/android/server/UiModeManagerService.java @@ -18,7 +18,6 @@ package com.android.server; import static android.app.Flags.enableCurrentModeTypeBinderCache; import static android.app.Flags.enableNightModeBinderCache; -import static android.app.Flags.modesApi; import static android.app.UiModeManager.ContrastUtils.CONTRAST_DEFAULT_VALUE; import static android.app.UiModeManager.DEFAULT_PRIORITY; import static android.app.UiModeManager.FORCE_INVERT_TYPE_DARK; @@ -2208,14 +2207,12 @@ final class UiModeManagerService extends SystemService { appliedOverrides = true; } - if (modesApi()) { - // Computes final night mode values based on Attention Mode. - mComputedNightMode = switch (mAttentionModeThemeOverlay) { - case (UiModeManager.MODE_ATTENTION_THEME_OVERLAY_NIGHT) -> true; - case (UiModeManager.MODE_ATTENTION_THEME_OVERLAY_DAY) -> false; - default -> newComputedValue; // case OFF - }; - } + // Computes final night mode values based on Attention Mode. + mComputedNightMode = switch (mAttentionModeThemeOverlay) { + case (UiModeManager.MODE_ATTENTION_THEME_OVERLAY_NIGHT) -> true; + case (UiModeManager.MODE_ATTENTION_THEME_OVERLAY_DAY) -> false; + default -> newComputedValue; // case OFF + }; if (appliedOverrides) { return; diff --git a/services/core/java/com/android/server/notification/NotificationManagerService.java b/services/core/java/com/android/server/notification/NotificationManagerService.java index 09c8b5ba823e..6fddfb5f90a7 100644 --- a/services/core/java/com/android/server/notification/NotificationManagerService.java +++ b/services/core/java/com/android/server/notification/NotificationManagerService.java @@ -1208,7 +1208,7 @@ public class NotificationManagerService extends SystemService { } mAssistants.resetDefaultAssistantsIfNecessary(); - mPreferencesHelper.syncChannelsBypassingDnd(); + mPreferencesHelper.syncHasPriorityChannels(); } @VisibleForTesting @@ -2347,7 +2347,7 @@ public class NotificationManagerService extends SystemService { mConditionProviders.onUserSwitched(userId); mListeners.onUserSwitched(userId); mZenModeHelper.onUserSwitched(userId); - mPreferencesHelper.syncChannelsBypassingDnd(); + mPreferencesHelper.syncHasPriorityChannels(); } // assistant is the only thing that cares about managed profiles specifically mAssistants.onUserSwitched(userId); @@ -2371,7 +2371,7 @@ public class NotificationManagerService extends SystemService { mConditionProviders.onUserRemoved(userId); mAssistants.onUserRemoved(userId); mHistoryManager.onUserRemoved(userId); - mPreferencesHelper.syncChannelsBypassingDnd(); + mPreferencesHelper.syncHasPriorityChannels(); handleSavePolicyFile(); } else if (action.equals(Intent.ACTION_USER_UNLOCKED)) { final int userId = intent.getIntExtra(Intent.EXTRA_USER_HANDLE, USER_NULL); @@ -2380,9 +2380,6 @@ public class NotificationManagerService extends SystemService { if (!mUserProfiles.isProfileUser(userId, context)) { mConditionProviders.onUserUnlocked(userId); mListeners.onUserUnlocked(userId); - if (!android.app.Flags.modesApi()) { - mZenModeHelper.onUserUnlocked(userId); - } } } } @@ -2771,9 +2768,7 @@ public class NotificationManagerService extends SystemService { void onPolicyChanged(Policy newPolicy) { Binder.withCleanCallingIdentity(() -> { Intent intent = new Intent(ACTION_NOTIFICATION_POLICY_CHANGED); - if (android.app.Flags.modesApi()) { - intent.putExtra(EXTRA_NOTIFICATION_POLICY, newPolicy); - } + intent.putExtra(EXTRA_NOTIFICATION_POLICY, newPolicy); sendRegisteredOnlyBroadcast(intent); mRankingHandler.requestSort(); }); @@ -2782,11 +2777,10 @@ public class NotificationManagerService extends SystemService { @Override void onConsolidatedPolicyChanged(Policy newConsolidatedPolicy) { Binder.withCleanCallingIdentity(() -> { - if (android.app.Flags.modesApi()) { - Intent intent = new Intent(ACTION_CONSOLIDATED_NOTIFICATION_POLICY_CHANGED); - intent.putExtra(EXTRA_NOTIFICATION_POLICY, newConsolidatedPolicy); - sendRegisteredOnlyBroadcast(intent); - } + Intent intent = new Intent(ACTION_CONSOLIDATED_NOTIFICATION_POLICY_CHANGED); + intent.putExtra(EXTRA_NOTIFICATION_POLICY, newConsolidatedPolicy); + sendRegisteredOnlyBroadcast(intent); + mRankingHandler.requestSort(); }); } @@ -3372,7 +3366,7 @@ public class NotificationManagerService extends SystemService { migrateDefaultNAS(); maybeShowInitialReviewPermissionsNotification(); - if (android.app.Flags.modesApi() && !mZenModeHelper.hasDeviceEffectsApplier()) { + if (!mZenModeHelper.hasDeviceEffectsApplier()) { // Cannot be done earlier, as some services aren't ready until this point. mZenModeHelper.setDeviceEffectsApplier( new DefaultDeviceEffectsApplier(getContext())); @@ -3450,7 +3444,7 @@ public class NotificationManagerService extends SystemService { mConditionProviders.onUserSwitched(userId); mListeners.onUserSwitched(userId); mZenModeHelper.onUserSwitched(userId); - mPreferencesHelper.syncChannelsBypassingDnd(); + mPreferencesHelper.syncHasPriorityChannels(); } // assistant is the only thing that cares about managed profiles specifically mAssistants.onUserSwitched(userId); @@ -5240,11 +5234,8 @@ public class NotificationManagerService extends SystemService { @Override public boolean areChannelsBypassingDnd() { - if (android.app.Flags.modesApi()) { - return mZenModeHelper.getConsolidatedNotificationPolicy().allowPriorityChannels() - && mPreferencesHelper.areChannelsBypassingDnd(); - } - return mPreferencesHelper.areChannelsBypassingDnd(); + return mZenModeHelper.getConsolidatedNotificationPolicy().allowPriorityChannels() + && mPreferencesHelper.hasPriorityChannels(); } @Override @@ -6097,43 +6088,27 @@ public class NotificationManagerService extends SystemService { @Override public void requestInterruptionFilterFromListener(INotificationListener token, int interruptionFilter) throws RemoteException { - if (android.app.Flags.modesApi()) { - final int callingUid = Binder.getCallingUid(); - ManagedServiceInfo info; - synchronized (mNotificationLock) { - info = mListeners.checkServiceTokenLocked(token); - } + final int callingUid = Binder.getCallingUid(); + ManagedServiceInfo info; + synchronized (mNotificationLock) { + info = mListeners.checkServiceTokenLocked(token); + } - final int zenMode = zenModeFromInterruptionFilter(interruptionFilter, -1); - if (zenMode == -1) return; + final int zenMode = zenModeFromInterruptionFilter(interruptionFilter, -1); + if (zenMode == -1) return; - UserHandle zenUser = getCallingZenUser(); - if (!canManageGlobalZenPolicy(info.component.getPackageName(), callingUid)) { - mZenModeHelper.applyGlobalZenModeAsImplicitZenRule( - zenUser, info.component.getPackageName(), callingUid, zenMode); - } else { - int origin = computeZenOrigin(/* fromUser= */ false); - Binder.withCleanCallingIdentity(() -> { - mZenModeHelper.setManualZenMode(zenUser, zenMode, /* conditionId= */ null, - origin, "listener:" + info.component.flattenToShortString(), - /* caller= */ info.component.getPackageName(), - callingUid); - }); - } + UserHandle zenUser = getCallingZenUser(); + if (!canManageGlobalZenPolicy(info.component.getPackageName(), callingUid)) { + mZenModeHelper.applyGlobalZenModeAsImplicitZenRule( + zenUser, info.component.getPackageName(), callingUid, zenMode); } else { - final int callingUid = Binder.getCallingUid(); - final boolean isSystemOrSystemUi = isCallerSystemOrSystemUi(); - final long identity = Binder.clearCallingIdentity(); - try { - synchronized (mNotificationLock) { - final ManagedServiceInfo info = mListeners.checkServiceTokenLocked(token); - mZenModeHelper.requestFromListener(info.component, interruptionFilter, - callingUid, isSystemOrSystemUi); - updateInterruptionFilterLocked(); - } - } finally { - Binder.restoreCallingIdentity(identity); - } + int origin = computeZenOrigin(/* fromUser= */ false); + Binder.withCleanCallingIdentity(() -> { + mZenModeHelper.setManualZenMode(zenUser, zenMode, /* conditionId= */ null, + origin, "listener:" + info.component.flattenToShortString(), + /* caller= */ info.component.getPackageName(), + callingUid); + }); } } @@ -6182,19 +6157,8 @@ public class NotificationManagerService extends SystemService { } } - // TODO: b/310620812 - Remove getZenRules() when MODES_API is inlined. - @Override - public List<ZenModeConfig.ZenRule> getZenRules() throws RemoteException { - int callingUid = Binder.getCallingUid(); - enforcePolicyAccess(callingUid, "getZenRules"); - return mZenModeHelper.getZenRules(getCallingZenUser(), callingUid); - } - @Override public Map<String, AutomaticZenRule> getAutomaticZenRules() { - if (!android.app.Flags.modesApi()) { - throw new IllegalStateException("getAutomaticZenRules called with flag off!"); - } int callingUid = Binder.getCallingUid(); enforcePolicyAccess(callingUid, "getAutomaticZenRules"); return mZenModeHelper.getAutomaticZenRules(getCallingZenUser(), callingUid); @@ -6265,50 +6229,40 @@ public class NotificationManagerService extends SystemService { // Implicit rules have no ConditionProvider or Activity. We allow the user to customize // them (via Settings), but not the owner app. Should the app want to start using it as // a "normal" rule, it must provide a CP/ConfigActivity too. - if (android.app.Flags.modesApi()) { - boolean isImplicitRuleUpdateFromSystem = updateId != null - && ZenModeConfig.isImplicitRuleId(updateId) - && isCallerSystemOrSystemUi(); - if (!isImplicitRuleUpdateFromSystem - && rule.getOwner() == null - && rule.getConfigurationActivity() == null) { - throw new NullPointerException( - "Rule must have a ConditionProviderService and/or configuration " - + "activity"); - } - } else { - if (rule.getOwner() == null && rule.getConfigurationActivity() == null) { - throw new NullPointerException( - "Rule must have a ConditionProviderService and/or configuration " - + "activity"); - } + boolean isImplicitRuleUpdateFromSystem = updateId != null + && ZenModeConfig.isImplicitRuleId(updateId) + && isCallerSystemOrSystemUi(); + if (!isImplicitRuleUpdateFromSystem + && rule.getOwner() == null + && rule.getConfigurationActivity() == null) { + throw new NullPointerException( + "Rule must have a ConditionProviderService and/or configuration " + + "activity"); } Objects.requireNonNull(rule.getConditionId(), "ConditionId is null"); - if (android.app.Flags.modesApi()) { - if (isCallerSystemOrSystemUi()) { - return; // System callers can use any type. - } - int uid = Binder.getCallingUid(); - int userId = UserHandle.getUserId(uid); + if (isCallerSystemOrSystemUi()) { + return; // System callers can use any type. + } + int uid = Binder.getCallingUid(); + int userId = UserHandle.getUserId(uid); - if (rule.getType() == AutomaticZenRule.TYPE_MANAGED) { - boolean isDeviceOwner = Binder.withCleanCallingIdentity( - () -> mDpm.isActiveDeviceOwner(uid)); - if (!isDeviceOwner) { - throw new IllegalArgumentException( - "Only Device Owners can use AutomaticZenRules with TYPE_MANAGED"); - } - } else if (rule.getType() == AutomaticZenRule.TYPE_BEDTIME) { - String wellbeingPackage = getContext().getResources().getString( - com.android.internal.R.string.config_systemWellbeing); - boolean isCallerWellbeing = !TextUtils.isEmpty(wellbeingPackage) - && mPackageManagerInternal.isSameApp(wellbeingPackage, uid, userId); - if (!isCallerWellbeing) { - throw new IllegalArgumentException( - "Only the 'Wellbeing' package can use AutomaticZenRules with " - + "TYPE_BEDTIME"); - } + if (rule.getType() == AutomaticZenRule.TYPE_MANAGED) { + boolean isDeviceOwner = Binder.withCleanCallingIdentity( + () -> mDpm.isActiveDeviceOwner(uid)); + if (!isDeviceOwner) { + throw new IllegalArgumentException( + "Only Device Owners can use AutomaticZenRules with TYPE_MANAGED"); + } + } else if (rule.getType() == AutomaticZenRule.TYPE_BEDTIME) { + String wellbeingPackage = getContext().getResources().getString( + com.android.internal.R.string.config_systemWellbeing); + boolean isCallerWellbeing = !TextUtils.isEmpty(wellbeingPackage) + && mPackageManagerInternal.isSameApp(wellbeingPackage, uid, userId); + if (!isCallerWellbeing) { + throw new IllegalArgumentException( + "Only the 'Wellbeing' package can use AutomaticZenRules with " + + "TYPE_BEDTIME"); } } } @@ -6391,9 +6345,7 @@ public class NotificationManagerService extends SystemService { @ZenModeConfig.ConfigOrigin private int computeZenOrigin(boolean fromUser) { - // "fromUser" is introduced with MODES_API, so only consider it in that case. - // (Non-MODES_API behavior should also not depend at all on ORIGIN_USER_IN_X). - if (android.app.Flags.modesApi() && fromUser) { + if (fromUser) { if (isCallerSystemOrSystemUi()) { return ZenModeConfig.ORIGIN_USER_IN_SYSTEMUI; } else { @@ -6407,9 +6359,7 @@ public class NotificationManagerService extends SystemService { } private void enforceUserOriginOnlyFromSystem(boolean fromUser, String method) { - if (android.app.Flags.modesApi() - && fromUser - && !isCallerSystemOrSystemUiOrShell()) { + if (fromUser && !isCallerSystemOrSystemUiOrShell()) { throw new SecurityException(TextUtils.formatSimple( "Calling %s with fromUser == true is only allowed for system", method)); } @@ -6424,7 +6374,7 @@ public class NotificationManagerService extends SystemService { enforceUserOriginOnlyFromSystem(fromUser, "setInterruptionFilter"); UserHandle zenUser = getCallingZenUser(); - if (android.app.Flags.modesApi() && !canManageGlobalZenPolicy(pkg, callingUid)) { + if (!canManageGlobalZenPolicy(pkg, callingUid)) { mZenModeHelper.applyGlobalZenModeAsImplicitZenRule(zenUser, pkg, callingUid, zen); return; } @@ -6735,7 +6685,7 @@ public class NotificationManagerService extends SystemService { public Policy getNotificationPolicy(String pkg) { final int callingUid = Binder.getCallingUid(); UserHandle zenUser = getCallingZenUser(); - if (android.app.Flags.modesApi() && !canManageGlobalZenPolicy(pkg, callingUid)) { + if (!canManageGlobalZenPolicy(pkg, callingUid)) { return mZenModeHelper.getNotificationPolicyFromImplicitZenRule(zenUser, pkg); } final long identity = Binder.clearCallingIdentity(); @@ -6772,8 +6722,7 @@ public class NotificationManagerService extends SystemService { UserHandle zenUser = getCallingZenUser(); boolean isSystemCaller = isCallerSystemOrSystemUiOrShell(); - boolean shouldApplyAsImplicitRule = android.app.Flags.modesApi() - && !canManageGlobalZenPolicy(pkg, callingUid); + boolean shouldApplyAsImplicitRule = !canManageGlobalZenPolicy(pkg, callingUid); final long identity = Binder.clearCallingIdentity(); try { @@ -8232,9 +8181,6 @@ public class NotificationManagerService extends SystemService { @Override public void setDeviceEffectsApplier(DeviceEffectsApplier applier) { - if (!android.app.Flags.modesApi()) { - return; - } if (mZenModeHelper == null) { throw new IllegalStateException("ZenModeHelper is not yet ready!"); } diff --git a/services/core/java/com/android/server/notification/NotificationShellCmd.java b/services/core/java/com/android/server/notification/NotificationShellCmd.java index c305d66c24c1..bc987ed21251 100644 --- a/services/core/java/com/android/server/notification/NotificationShellCmd.java +++ b/services/core/java/com/android/server/notification/NotificationShellCmd.java @@ -183,13 +183,8 @@ public class NotificationShellCmd extends ShellCommand { interruptionFilter = INTERRUPTION_FILTER_ALL; } final int filter = interruptionFilter; - if (android.app.Flags.modesApi()) { - mBinderService.setInterruptionFilter(callingPackage, filter, - /* fromUser= */ true); - } else { - mBinderService.setInterruptionFilter(callingPackage, filter, - /* fromUser= */ false); - } + mBinderService.setInterruptionFilter(callingPackage, filter, + /* fromUser= */ true); } break; case "allow_dnd": { diff --git a/services/core/java/com/android/server/notification/PreferencesHelper.java b/services/core/java/com/android/server/notification/PreferencesHelper.java index 3974c839fd38..0fc182f3f1bb 100644 --- a/services/core/java/com/android/server/notification/PreferencesHelper.java +++ b/services/core/java/com/android/server/notification/PreferencesHelper.java @@ -233,11 +233,9 @@ public class PreferencesHelper implements RankingConfig { private SparseBooleanArray mLockScreenShowNotifications; private SparseBooleanArray mLockScreenPrivateNotifications; private boolean mIsMediaNotificationFilteringEnabled; - // When modes_api flag is enabled, this value only tracks whether the current user has any - // channels marked as "priority channels", but not necessarily whether they are permitted - // to bypass DND by current zen policy. - // TODO: b/310620812 - Rename to be more accurate when modes_api flag is inlined. - private boolean mCurrentUserHasChannelsBypassingDnd; + // Whether the current user has any channels marked as "priority channels" -- but not + // necessarily whether they are permitted to bypass DND by current zen policy. + private boolean mCurrentUserHasPriorityChannels; private boolean mHideSilentStatusBarIcons = DEFAULT_HIDE_SILENT_STATUS_BAR_ICONS; private final boolean mShowReviewPermissionsNotification; @@ -1063,7 +1061,7 @@ public class PreferencesHelper implements RankingConfig { r.groups.put(group.getId(), group); } if (needsDndChange) { - updateCurrentUserHasChannelsBypassingDnd(callingUid, fromSystemOrSystemUi); + updateCurrentUserHasPriorityChannels(callingUid, fromSystemOrSystemUi); } if (android.app.Flags.nmBinderPerfCacheChannels() && changed) { invalidateNotificationChannelGroupCache(); @@ -1150,7 +1148,7 @@ public class PreferencesHelper implements RankingConfig { existing.setBypassDnd(bypassDnd); needsPolicyFileChange = true; - if (bypassDnd != mCurrentUserHasChannelsBypassingDnd + if (bypassDnd != mCurrentUserHasPriorityChannels || previousExistingImportance != existing.getImportance()) { needsDndChange = true; } @@ -1214,7 +1212,7 @@ public class PreferencesHelper implements RankingConfig { } r.channels.put(channel.getId(), channel); - if (channel.canBypassDnd() != mCurrentUserHasChannelsBypassingDnd) { + if (channel.canBypassDnd() != mCurrentUserHasPriorityChannels) { needsDndChange = true; } MetricsLogger.action(getChannelLog(channel, pkg).setType( @@ -1224,7 +1222,7 @@ public class PreferencesHelper implements RankingConfig { } if (needsDndChange) { - updateCurrentUserHasChannelsBypassingDnd(callingUid, fromSystemOrSystemUi); + updateCurrentUserHasPriorityChannels(callingUid, fromSystemOrSystemUi); } if (android.app.Flags.nmBinderPerfCacheChannels() && needsPolicyFileChange) { @@ -1317,14 +1315,14 @@ public class PreferencesHelper implements RankingConfig { // relevantly affected without the parent channel already having been. } - if (updatedChannel.canBypassDnd() != mCurrentUserHasChannelsBypassingDnd + if (updatedChannel.canBypassDnd() != mCurrentUserHasPriorityChannels || channel.getImportance() != updatedChannel.getImportance()) { needsDndChange = true; changed = true; } } if (needsDndChange) { - updateCurrentUserHasChannelsBypassingDnd(callingUid, fromSystemOrSystemUi); + updateCurrentUserHasPriorityChannels(callingUid, fromSystemOrSystemUi); } if (changed) { if (android.app.Flags.nmBinderPerfCacheChannels()) { @@ -1550,7 +1548,7 @@ public class PreferencesHelper implements RankingConfig { } } if (channelBypassedDnd) { - updateCurrentUserHasChannelsBypassingDnd(callingUid, fromSystemOrSystemUi); + updateCurrentUserHasPriorityChannels(callingUid, fromSystemOrSystemUi); } if (android.app.Flags.nmBinderPerfCacheChannels() && deletedChannel) { @@ -1745,7 +1743,7 @@ public class PreferencesHelper implements RankingConfig { } } if (groupBypassedDnd) { - updateCurrentUserHasChannelsBypassingDnd(callingUid, fromSystemOrSystemUi); + updateCurrentUserHasPriorityChannels(callingUid, fromSystemOrSystemUi); } if (android.app.Flags.nmBinderPerfCacheChannels()) { if (deletedChannels.size() > 0) { @@ -1906,8 +1904,8 @@ public class PreferencesHelper implements RankingConfig { } } if (!deletedChannelIds.isEmpty()) { - if (mCurrentUserHasChannelsBypassingDnd) { - updateCurrentUserHasChannelsBypassingDnd(callingUid, fromSystemOrSystemUi); + if (mCurrentUserHasPriorityChannels) { + updateCurrentUserHasPriorityChannels(callingUid, fromSystemOrSystemUi); } if (android.app.Flags.nmBinderPerfCacheChannels()) { invalidateNotificationChannelCache(); @@ -2098,7 +2096,7 @@ public class PreferencesHelper implements RankingConfig { } /** - * Syncs {@link #mCurrentUserHasChannelsBypassingDnd} with the current user's notification + * Syncs {@link #mCurrentUserHasPriorityChannels} with the current user's notification * policy before updating. Must be called: * <ul> * <li>On system init, after channels and DND configurations are loaded. @@ -2106,22 +2104,23 @@ public class PreferencesHelper implements RankingConfig { * <li>If users are removed (the removed user could've been a profile of the current one). * </ul> */ - void syncChannelsBypassingDnd() { - mCurrentUserHasChannelsBypassingDnd = + void syncHasPriorityChannels() { + mCurrentUserHasPriorityChannels = (mZenModeHelper.getNotificationPolicy(UserHandle.CURRENT).state - & NotificationManager.Policy.STATE_CHANNELS_BYPASSING_DND) != 0; + & NotificationManager.Policy.STATE_HAS_PRIORITY_CHANNELS) != 0; - updateCurrentUserHasChannelsBypassingDnd(/* callingUid= */ Process.SYSTEM_UID, + updateCurrentUserHasPriorityChannels(/* callingUid= */ Process.SYSTEM_UID, /* fromSystemOrSystemUi= */ true); } /** * Updates the user's NotificationPolicy based on whether the current userId has channels - * bypassing DND. It should be called whenever a channel is created, updated, or deleted, or - * when the current user (or its profiles) change. + * marked as "priority" (which might bypass DND, depending on the zen rule details). It should + * be called whenever a channel is created, updated, or deleted, or when the current user (or + * its profiles) change. */ // TODO: b/368247671 - remove fromSystemOrSystemUi argument when modes_ui is inlined. - private void updateCurrentUserHasChannelsBypassingDnd(int callingUid, + private void updateCurrentUserHasPriorityChannels(int callingUid, boolean fromSystemOrSystemUi) { ArraySet<Pair<String, Integer>> candidatePkgs = new ArraySet<>(); @@ -2149,13 +2148,13 @@ public class PreferencesHelper implements RankingConfig { } } boolean haveBypassingApps = candidatePkgs.size() > 0; - if (mCurrentUserHasChannelsBypassingDnd != haveBypassingApps) { - mCurrentUserHasChannelsBypassingDnd = haveBypassingApps; + if (mCurrentUserHasPriorityChannels != haveBypassingApps) { + mCurrentUserHasPriorityChannels = haveBypassingApps; if (android.app.Flags.modesUi()) { mZenModeHelper.updateHasPriorityChannels(UserHandle.CURRENT, - mCurrentUserHasChannelsBypassingDnd); + mCurrentUserHasPriorityChannels); } else { - updateZenPolicy(mCurrentUserHasChannelsBypassingDnd, callingUid, + updateZenPolicy(mCurrentUserHasPriorityChannels, callingUid, fromSystemOrSystemUi); } } @@ -2188,16 +2187,20 @@ public class PreferencesHelper implements RankingConfig { policy.priorityCategories, policy.priorityCallSenders, policy.priorityMessageSenders, policy.suppressedVisualEffects, (areChannelsBypassingDnd - ? NotificationManager.Policy.STATE_CHANNELS_BYPASSING_DND : 0), + ? NotificationManager.Policy.STATE_HAS_PRIORITY_CHANNELS : 0), policy.priorityConversationSenders), fromSystemOrSystemUi ? ZenModeConfig.ORIGIN_SYSTEM : ZenModeConfig.ORIGIN_APP, callingUid); } - // TODO: b/310620812 - rename to hasPriorityChannels() when modes_api is inlined. - public boolean areChannelsBypassingDnd() { - return mCurrentUserHasChannelsBypassingDnd; + /** + * Whether the current user has any channels marked as "priority channels" + * ({@link NotificationChannel#canBypassDnd}), but not necessarily whether they are permitted + * to bypass the filters set by the current zen policy. + */ + public boolean hasPriorityChannels() { + return mCurrentUserHasPriorityChannels; } /** diff --git a/services/core/java/com/android/server/notification/ZenModeEventLogger.java b/services/core/java/com/android/server/notification/ZenModeEventLogger.java index fcc5e9771f94..ec9a2db52de9 100644 --- a/services/core/java/com/android/server/notification/ZenModeEventLogger.java +++ b/services/core/java/com/android/server/notification/ZenModeEventLogger.java @@ -16,7 +16,7 @@ package com.android.server.notification; -import static android.app.NotificationManager.Policy.STATE_CHANNELS_BYPASSING_DND; +import static android.app.NotificationManager.Policy.STATE_HAS_PRIORITY_CHANNELS; import static android.provider.Settings.Global.ZEN_MODE_OFF; import static android.service.notification.NotificationServiceProto.CHANNEL_POLICY_NONE; import static android.service.notification.NotificationServiceProto.CHANNEL_POLICY_PRIORITY; @@ -285,11 +285,10 @@ class ZenModeEventLogger { return true; } - if (Flags.modesApi() && hasActiveRuleCountDiff()) { - // Rules with INTERRUPTION_FILTER_ALL were always possible but before MODES_API - // they were completely useless; now they can apply effects, so we want to log - // when they become active/inactive, even though DND itself (as in "notification - // blocking") is off. + if (hasActiveRuleCountDiff()) { + // Rules with INTERRUPTION_FILTER_ALL can apply effects, so we want to log when they + // become active/inactive, even though DND itself (as in "notification blocking") + // is off. return true; } @@ -331,7 +330,7 @@ class ZenModeEventLogger { } } - if (Flags.modesApi() && mNewZenMode == ZEN_MODE_OFF) { + if (mNewZenMode == ZEN_MODE_OFF) { // If the mode is OFF -> OFF then there cannot be any *effective* change to policy. // (Note that, in theory, a policy diff is impossible since we don't merge the // policies of INTERRUPTION_FILTER_ALL rules; this is a "just in case" check). @@ -439,24 +438,14 @@ class ZenModeEventLogger { // Determine the number of (automatic & manual) rules active after the change takes place. int getNumRulesActive() { - if (!Flags.modesApi()) { - // If the zen mode has turned off, that means nothing can be active. - if (mNewZenMode == ZEN_MODE_OFF) { - return 0; - } - } return numActiveRulesInConfig(mNewConfig); } /** - * Return a list of the types of each of the active rules in the configuration. - * Only available when {@code MODES_API} is active; otherwise returns an empty list. + * Return a list of the types of each of the active rules in the configuration (sorted by + * the numerical value of the type, and including duplicates). */ int[] getActiveRuleTypes() { - if (!Flags.modesApi()) { - return new int[0]; - } - ArrayList<Integer> activeTypes = new ArrayList<>(); List<ZenRule> activeRules = activeRulesList(mNewConfig); if (activeRules.size() == 0) { @@ -476,77 +465,10 @@ class ZenModeEventLogger { return out; } - /** - * Return our best guess as to whether the changes observed are due to a user action. - * Note that this (before {@code MODES_API}) won't be 100% accurate as we can't necessarily - * distinguish between a system uid call indicating "user interacted with Settings" vs "a - * system app changed something automatically". - */ + /** Return whether the changes observed are due to a user action. */ boolean getIsUserAction() { - if (Flags.modesApi()) { - return mOrigin == ZenModeConfig.ORIGIN_USER_IN_SYSTEMUI - || mOrigin == ZenModeConfig.ORIGIN_USER_IN_APP; - } - - // Approach for pre-MODES_API: - // - if manual rule turned on or off, the calling UID is system, and the new manual - // rule does not have an enabler set, guess that this is likely to be a user action. - // This may represent a system app turning on DND automatically, but we guess "user" - // in this case. - // - note that this has a known failure mode of "manual rule turning off - // automatically after the default time runs out". We currently have no way - // of distinguishing this case from a user manually turning off the rule. - // - the reason for checking the enabler field is that a call may look like it's - // coming from a system UID, but if an enabler is set then the request came - // from an external source. "enabler" will be blank when manual rule is turned - // on from Quick Settings or Settings. - // - if an automatic rule's state changes in whether it is "enabled", then - // that is probably a user action. - // - if an automatic rule goes from "not snoozing" to "snoozing", that is probably - // a user action; that means that the user temporarily turned off DND associated - // with that rule. - // - if an automatic rule becomes active but does *not* change in its enabled state - // (covered by a previous case anyway), we guess that this is an automatic change. - // - if a rule is added or removed and the call comes from the system, we guess that - // this is a user action (as system rules can't be added or removed without a user - // action). - switch (getChangedRuleType()) { - case RULE_TYPE_MANUAL: - // TODO(b/278888961): Distinguish the automatically-turned-off state - return isFromSystemOrSystemUi() && (getNewManualRuleEnabler() == null); - case RULE_TYPE_AUTOMATIC: - for (ZenModeDiff.RuleDiff d : getChangedAutomaticRules().values()) { - if (d.wasAdded() || d.wasRemoved()) { - // If the change comes from system, a rule being added/removed indicates - // a likely user action. From an app, it's harder to know for sure. - return isFromSystemOrSystemUi(); - } - ZenModeDiff.FieldDiff enabled = d.getDiffForField( - ZenModeDiff.RuleDiff.FIELD_ENABLED); - if (enabled != null && enabled.hasDiff()) { - return true; - } - ZenModeDiff.FieldDiff snoozing = d.getDiffForField( - ZenModeDiff.RuleDiff.FIELD_SNOOZING); - if (snoozing != null && snoozing.hasDiff() && (boolean) snoozing.to()) { - return true; - } - } - // If the change was in an automatic rule and none of the "probably triggered - // by a user" cases apply, then it's probably an automatic change. - return false; - case RULE_TYPE_UNKNOWN: - default: - } - - // If the change wasn't in a rule, but was in the zen policy: consider to be user action - // if the calling uid is system - if (hasPolicyDiff() || hasChannelsBypassingDiff()) { - return mCallingUid == Process.SYSTEM_UID; - } - - // don't know, or none of the other things triggered; assume not a user action - return false; + return mOrigin == ZenModeConfig.ORIGIN_USER_IN_SYSTEMUI + || mOrigin == ZenModeConfig.ORIGIN_USER_IN_APP; } boolean isFromSystemOrSystemUi() { @@ -587,7 +509,7 @@ class ZenModeEventLogger { */ @Nullable byte[] getDNDPolicyProto() { - if (Flags.modesApi() && mNewZenMode == ZEN_MODE_OFF) { + if (mNewZenMode == ZEN_MODE_OFF) { return null; } @@ -628,13 +550,10 @@ class ZenModeEventLogger { mNewPolicy.allowMessagesFrom())); proto.write(DNDPolicyProto.ALLOW_CONVERSATIONS_FROM, mNewPolicy.allowConversationsFrom()); - - if (Flags.modesApi()) { - proto.write(DNDPolicyProto.ALLOW_CHANNELS, - mNewPolicy.allowPriorityChannels() - ? CHANNEL_POLICY_PRIORITY - : CHANNEL_POLICY_NONE); - } + proto.write(DNDPolicyProto.ALLOW_CHANNELS, + mNewPolicy.allowPriorityChannels() + ? CHANNEL_POLICY_PRIORITY + : CHANNEL_POLICY_NONE); } else { Log.wtf(TAG, "attempted to write zen mode log event with null policy"); } @@ -648,14 +567,14 @@ class ZenModeEventLogger { */ boolean getAreChannelsBypassing() { if (mNewPolicy != null) { - return (mNewPolicy.state & STATE_CHANNELS_BYPASSING_DND) != 0; + return (mNewPolicy.state & STATE_HAS_PRIORITY_CHANNELS) != 0; } return false; } private boolean hasChannelsBypassingDiff() { boolean prevChannelsBypassing = mPrevPolicy != null - ? (mPrevPolicy.state & STATE_CHANNELS_BYPASSING_DND) != 0 : false; + ? (mPrevPolicy.state & STATE_HAS_PRIORITY_CHANNELS) != 0 : false; return prevChannelsBypassing != getAreChannelsBypassing(); } diff --git a/services/core/java/com/android/server/notification/ZenModeFiltering.java b/services/core/java/com/android/server/notification/ZenModeFiltering.java index bdca555707e3..87ae78195ff5 100644 --- a/services/core/java/com/android/server/notification/ZenModeFiltering.java +++ b/services/core/java/com/android/server/notification/ZenModeFiltering.java @@ -19,7 +19,6 @@ package com.android.server.notification; import static android.provider.Settings.Global.ZEN_MODE_OFF; import static android.service.notification.ZenPolicy.CONVERSATION_SENDERS_ANYONE; -import android.app.Flags; import android.app.Notification; import android.app.NotificationManager; import android.content.ComponentName; @@ -146,16 +145,12 @@ public class ZenModeFiltering { // Returns whether the record is permitted to bypass DND when the zen mode is // ZEN_MODE_IMPORTANT_INTERRUPTIONS. This depends on whether the record's package priority is - // marked as PRIORITY_MAX (an indication of it belonging to a priority channel), and, if - // the modes_api flag is on, whether the given policy permits priority channels to bypass. - // TODO: b/310620812 - simplify when modes_api is inlined. + // marked as PRIORITY_MAX (an indication of it belonging to a priority channel), and whether the + // given policy permits priority channels to bypass. private boolean canRecordBypassDnd(NotificationRecord record, NotificationManager.Policy policy) { boolean inPriorityChannel = record.getPackagePriority() == Notification.PRIORITY_MAX; - if (Flags.modesApi()) { - return inPriorityChannel && policy.allowPriorityChannels(); - } - return inPriorityChannel; + return inPriorityChannel && policy.allowPriorityChannels(); } /** diff --git a/services/core/java/com/android/server/notification/ZenModeHelper.java b/services/core/java/com/android/server/notification/ZenModeHelper.java index b39b6fde6258..f7a4d3d9132c 100644 --- a/services/core/java/com/android/server/notification/ZenModeHelper.java +++ b/services/core/java/com/android/server/notification/ZenModeHelper.java @@ -326,9 +326,6 @@ public class ZenModeHelper { * applied immediately. */ void setDeviceEffectsApplier(@NonNull DeviceEffectsApplier deviceEffectsApplier) { - if (!Flags.modesApi()) { - return; - } synchronized (mConfigLock) { if (mDeviceEffectsApplier != null) { throw new IllegalStateException("Already set up a DeviceEffectsApplier!"); @@ -350,11 +347,6 @@ public class ZenModeHelper { } } - // TODO: b/310620812 - Remove when MODES_API is inlined (no more callers). - public void onUserUnlocked(int user) { - loadConfigForUser(user, "onUserUnlocked"); - } - void setPriorityOnlyDndExemptPackages(String[] packages) { mPriorityOnlyDndExemptPackages = packages; } @@ -385,21 +377,6 @@ public class ZenModeHelper { return NotificationManager.zenModeToInterruptionFilter(mZenMode); } - // TODO: b/310620812 - Remove when MODES_API is inlined (no more callers). - public void requestFromListener(ComponentName name, int filter, int callingUid, - boolean fromSystemOrSystemUi) { - final int newZen = NotificationManager.zenModeFromInterruptionFilter(filter, -1); - if (newZen != -1) { - // This change is known to be for UserHandle.CURRENT because NLSes for - // background users are unbound. - setManualZenMode(UserHandle.CURRENT, newZen, null, - fromSystemOrSystemUi ? ORIGIN_SYSTEM : ORIGIN_APP, - /* reason= */ "listener:" + (name != null ? name.flattenToShortString() : null), - /* caller= */ name != null ? name.getPackageName() : null, - callingUid); - } - } - public void setSuppressedEffects(long suppressedEffects) { if (mSuppressedEffects == suppressedEffects) return; mSuppressedEffects = suppressedEffects; @@ -414,33 +391,24 @@ public class ZenModeHelper { return mZenMode; } - // TODO: b/310620812 - Make private (or inline) when MODES_API is inlined. - public List<ZenRule> getZenRules(UserHandle user, int callingUid) { - List<ZenRule> rules = new ArrayList<>(); + /** + * Get the list of {@link AutomaticZenRule} instances that the calling package can manage + * (which means the owned rules for a regular app, and every rule for system callers) together + * with their ids. + */ + Map<String, AutomaticZenRule> getAutomaticZenRules(UserHandle user, int callingUid) { + HashMap<String, AutomaticZenRule> rules = new HashMap<>(); synchronized (mConfigLock) { ZenModeConfig config = getConfigLocked(user); if (config == null) return rules; + for (ZenRule rule : config.automaticRules.values()) { if (canManageAutomaticZenRule(rule, callingUid)) { - rules.add(rule); + rules.put(rule.id, zenRuleToAutomaticZenRule(rule)); } } + return rules; } - return rules; - } - - /** - * Get the list of {@link AutomaticZenRule} instances that the calling package can manage - * (which means the owned rules for a regular app, and every rule for system callers) together - * with their ids. - */ - Map<String, AutomaticZenRule> getAutomaticZenRules(UserHandle user, int callingUid) { - List<ZenRule> ruleList = getZenRules(user, callingUid); - HashMap<String, AutomaticZenRule> rules = new HashMap<>(ruleList.size()); - for (ZenRule rule : ruleList) { - rules.put(rule.id, zenRuleToAutomaticZenRule(rule)); - } - return rules; } public AutomaticZenRule getAutomaticZenRule(UserHandle user, String id, int callingUid) { @@ -511,9 +479,6 @@ public class ZenModeHelper { @GuardedBy("mConfigLock") private ZenRule maybeRestoreRemovedRule(ZenModeConfig config, String pkg, ZenRule ruleToAdd, AutomaticZenRule azrToAdd, @ConfigOrigin int origin) { - if (!Flags.modesApi()) { - return ruleToAdd; - } String deletedKey = ZenModeConfig.deletedRuleKey(ruleToAdd); if (deletedKey == null) { // Couldn't calculate the deletedRuleKey (condition or pkg null?). This should @@ -561,9 +526,6 @@ public class ZenModeHelper { */ private static void maybeReplaceDefaultRule(ZenModeConfig config, @Nullable ZenRule oldRule, AutomaticZenRule rule) { - if (!Flags.modesApi()) { - return; - } if (rule.getType() == AutomaticZenRule.TYPE_BEDTIME && (oldRule == null || oldRule.type != rule.getType())) { // Note: we must not verify canManageAutomaticZenRule here, since most likely they @@ -599,18 +561,10 @@ public class ZenModeHelper { } ZenModeConfig newConfig = config.copy(); ZenModeConfig.ZenRule newRule = requireNonNull(newConfig.automaticRules.get(ruleId)); - if (!Flags.modesApi()) { - if (newRule.enabled != automaticZenRule.isEnabled()) { - dispatchOnAutomaticRuleStatusChanged(config.user, newRule.getPkg(), ruleId, - automaticZenRule.isEnabled() - ? AUTOMATIC_RULE_STATUS_ENABLED - : AUTOMATIC_RULE_STATUS_DISABLED); - } - } boolean updated = populateZenRule(newRule.pkg, automaticZenRule, newConfig, newRule, origin, /* isNew= */ false); - if (Flags.modesApi() && !updated) { + if (!updated) { // Bail out so we don't have the side effects of updating a rule (i.e. dropping // condition) when no changes happen. return true; @@ -643,10 +597,6 @@ public class ZenModeHelper { */ void applyGlobalZenModeAsImplicitZenRule(UserHandle user, String callingPkg, int callingUid, int zenMode) { - if (!android.app.Flags.modesApi()) { - Log.wtf(TAG, "applyGlobalZenModeAsImplicitZenRule called with flag off!"); - return; - } synchronized (mConfigLock) { ZenModeConfig config = getConfigLocked(user); if (config == null) { @@ -712,10 +662,6 @@ public class ZenModeHelper { */ void applyGlobalPolicyAsImplicitZenRule(UserHandle user, String callingPkg, int callingUid, NotificationManager.Policy policy) { - if (!android.app.Flags.modesApi()) { - Log.wtf(TAG, "applyGlobalPolicyAsImplicitZenRule called with flag off!"); - return; - } synchronized (mConfigLock) { ZenModeConfig config = getConfigLocked(user); if (config == null) { @@ -772,10 +718,6 @@ public class ZenModeHelper { */ @Nullable Policy getNotificationPolicyFromImplicitZenRule(UserHandle user, String callingPkg) { - if (!android.app.Flags.modesApi()) { - Log.wtf(TAG, "getNotificationPolicyFromImplicitZenRule called with flag off!"); - return getNotificationPolicy(user); - } synchronized (mConfigLock) { ZenModeConfig config = getConfigLocked(user); if (config == null) { @@ -814,7 +756,6 @@ public class ZenModeHelper { .appendPath(pkg) .build(); rule.enabled = true; - rule.modified = false; rule.component = null; rule.configurationActivity = null; return rule; @@ -918,9 +859,6 @@ public class ZenModeHelper { private void maybePreserveRemovedRule(ZenModeConfig config, ZenRule ruleToRemove, @ConfigOrigin int origin) { - if (!Flags.modesApi()) { - return; - } // If an app deletes a previously customized rule, keep it around to preserve // the user's customization when/if it's recreated later. // We don't try to preserve system-owned rules because their conditionIds (used as @@ -952,7 +890,7 @@ public class ZenModeHelper { if (rule == null || !canManageAutomaticZenRule(rule, callingUid)) { return Condition.STATE_UNKNOWN; } - if (Flags.modesApi() && Flags.modesUi()) { + if (Flags.modesUi()) { return rule.isActive() ? STATE_TRUE : STATE_FALSE; } else { // Buggy, does not consider snoozing! @@ -971,16 +909,9 @@ public class ZenModeHelper { newConfig = config.copy(); ZenRule rule = newConfig.automaticRules.get(id); - if (Flags.modesApi()) { - if (rule != null && canManageAutomaticZenRule(rule, callingUid)) { - setAutomaticZenRuleStateLocked(newConfig, Collections.singletonList(rule), - condition, origin, "setAzrState: " + rule.id, callingUid); - } - } else { - ArrayList<ZenRule> rules = new ArrayList<>(); - rules.add(rule); // rule may be null and throw NPE in the next method. - setAutomaticZenRuleStateLocked(newConfig, rules, condition, origin, - "setAzrState: " + (rule != null ? rule.id : "null!"), callingUid); + if (rule != null && canManageAutomaticZenRule(rule, callingUid)) { + setAutomaticZenRuleStateLocked(newConfig, Collections.singletonList(rule), + condition, origin, "setAzrState: " + rule.id, callingUid); } } } @@ -995,13 +926,12 @@ public class ZenModeHelper { newConfig = config.copy(); List<ZenRule> matchingRules = findMatchingRules(newConfig, ruleConditionId, condition); - if (Flags.modesApi()) { - for (int i = matchingRules.size() - 1; i >= 0; i--) { - if (!canManageAutomaticZenRule(matchingRules.get(i), callingUid)) { - matchingRules.remove(i); - } + for (int i = matchingRules.size() - 1; i >= 0; i--) { + if (!canManageAutomaticZenRule(matchingRules.get(i), callingUid)) { + matchingRules.remove(i); } } + setAutomaticZenRuleStateLocked(newConfig, matchingRules, condition, origin, "setAzrStateFromCps: " + ruleConditionId, callingUid); } @@ -1013,7 +943,7 @@ public class ZenModeHelper { if (rules == null || rules.isEmpty()) return; if (!Flags.modesUi()) { - if (Flags.modesApi() && condition.source == SOURCE_USER_ACTION) { + if (condition.source == SOURCE_USER_ACTION) { origin = ORIGIN_USER_IN_APP; // Although coming from app, it's actually from user. } } @@ -1026,7 +956,7 @@ public class ZenModeHelper { private static void applyConditionAndReconsiderOverride(ZenRule rule, Condition condition, int origin) { - if (Flags.modesApi() && Flags.modesUi()) { + if (Flags.modesUi()) { if (isImplicitRuleId(rule.id)) { // Implicit rules do not use overrides, and always apply conditions directly. // This is compatible with the previous behavior (where the package set the @@ -1173,8 +1103,7 @@ public class ZenModeHelper { // if default rule wasn't user-modified use localized name // instead of previous system name if (currRule != null - && !currRule.modified - && (currRule.zenPolicyUserModifiedFields & AutomaticZenRule.FIELD_NAME) == 0 + && (currRule.userModifiedFields & AutomaticZenRule.FIELD_NAME) == 0 && !defaultRule.name.equals(currRule.name)) { if (DEBUG) { Slog.d(TAG, "Locale change - updating default zen rule name " @@ -1184,7 +1113,7 @@ public class ZenModeHelper { updated = true; } } - if (Flags.modesApi() && Flags.modesUi()) { + if (Flags.modesUi()) { for (ZenRule rule : newConfig.automaticRules.values()) { if (SystemZenRules.isSystemOwnedRule(rule)) { updated |= SystemZenRules.updateTriggerDescription(mContext, rule); @@ -1256,172 +1185,145 @@ public class ZenModeHelper { @GuardedBy("mConfigLock") private boolean populateZenRule(String pkg, AutomaticZenRule azr, ZenModeConfig config, ZenRule rule, @ConfigOrigin int origin, boolean isNew) { - if (Flags.modesApi()) { - boolean modified = false; - // These values can always be edited by the app, so we apply changes immediately. - if (isNew) { - rule.id = ZenModeConfig.newRuleId(); - rule.creationTime = mClock.millis(); - rule.component = azr.getOwner(); - rule.pkg = pkg; - modified = true; - } - // Allow updating the CPS backing system rules (e.g. for custom manual -> schedule) - if (Flags.modesUi() - && (origin == ORIGIN_SYSTEM || origin == ORIGIN_USER_IN_SYSTEMUI) - && Objects.equals(rule.pkg, SystemZenRules.PACKAGE_ANDROID) - && !Objects.equals(rule.component, azr.getOwner())) { - rule.component = azr.getOwner(); - modified = true; - } + boolean modified = false; + // These values can always be edited by the app, so we apply changes immediately. + if (isNew) { + rule.id = ZenModeConfig.newRuleId(); + rule.creationTime = mClock.millis(); + rule.component = azr.getOwner(); + rule.pkg = pkg; + modified = true; + } - if (Flags.modesUi()) { - if (!azr.isEnabled() && (isNew || rule.enabled)) { - // Creating a rule as disabled, or disabling a previously enabled rule. - // Record whodunit. - rule.disabledOrigin = origin; - } else if (azr.isEnabled()) { - // Enabling or previously enabled. Clear disabler. - rule.disabledOrigin = ORIGIN_UNKNOWN; - } - } + // Allow updating the CPS backing system rules (e.g. for custom manual -> schedule) + if (Flags.modesUi() + && (origin == ORIGIN_SYSTEM || origin == ORIGIN_USER_IN_SYSTEMUI) + && Objects.equals(rule.pkg, SystemZenRules.PACKAGE_ANDROID) + && !Objects.equals(rule.component, azr.getOwner())) { + rule.component = azr.getOwner(); + modified = true; + } - if (!Objects.equals(rule.conditionId, azr.getConditionId())) { - rule.conditionId = azr.getConditionId(); - modified = true; - } - // This can be removed when {@link Flags#modesUi} is fully ramped up - final boolean isWatch = - mContext.getPackageManager().hasSystemFeature(PackageManager.FEATURE_WATCH); - boolean shouldPreserveCondition = - Flags.modesApi() - && (Flags.modesUi() || isWatch) - && !isNew - && origin == ORIGIN_USER_IN_SYSTEMUI - && rule.enabled == azr.isEnabled() - && rule.conditionId != null - && rule.condition != null - && rule.conditionId.equals(rule.condition.id); - if (!shouldPreserveCondition) { - // Do not update 'modified'. If only this changes we treat it as a no-op updateAZR. - rule.condition = null; - } - - if (rule.enabled != azr.isEnabled()) { - rule.enabled = azr.isEnabled(); - rule.resetConditionOverride(); - modified = true; - } - if (!Objects.equals(rule.configurationActivity, azr.getConfigurationActivity())) { - rule.configurationActivity = azr.getConfigurationActivity(); - modified = true; - } - if (rule.allowManualInvocation != azr.isManualInvocationAllowed()) { - rule.allowManualInvocation = azr.isManualInvocationAllowed(); - modified = true; - } - if (!Flags.modesUi()) { - String iconResName = drawableResIdToResName(rule.pkg, azr.getIconResId()); - if (!Objects.equals(rule.iconResName, iconResName)) { - rule.iconResName = iconResName; - modified = true; - } - } - if (!Objects.equals(rule.triggerDescription, azr.getTriggerDescription())) { - rule.triggerDescription = azr.getTriggerDescription(); - modified = true; + if (Flags.modesUi()) { + if (!azr.isEnabled() && (isNew || rule.enabled)) { + // Creating a rule as disabled, or disabling a previously enabled rule. + // Record whodunit. + rule.disabledOrigin = origin; + } else if (azr.isEnabled()) { + // Enabling or previously enabled. Clear disabler. + rule.disabledOrigin = ORIGIN_UNKNOWN; } - if (rule.type != azr.getType()) { - rule.type = azr.getType(); + } + + if (!Objects.equals(rule.conditionId, azr.getConditionId())) { + rule.conditionId = azr.getConditionId(); + modified = true; + } + // This can be removed when {@link Flags#modesUi} is fully ramped up + final boolean isWatch = + mContext.getPackageManager().hasSystemFeature(PackageManager.FEATURE_WATCH); + boolean shouldPreserveCondition = + (Flags.modesUi() || isWatch) + && !isNew + && origin == ORIGIN_USER_IN_SYSTEMUI + && rule.enabled == azr.isEnabled() + && rule.conditionId != null + && rule.condition != null + && rule.conditionId.equals(rule.condition.id); + if (!shouldPreserveCondition) { + // Do not update 'modified'. If only this changes we treat it as a no-op updateAZR. + rule.condition = null; + } + + if (rule.enabled != azr.isEnabled()) { + rule.enabled = azr.isEnabled(); + rule.resetConditionOverride(); + modified = true; + } + if (!Objects.equals(rule.configurationActivity, azr.getConfigurationActivity())) { + rule.configurationActivity = azr.getConfigurationActivity(); + modified = true; + } + if (rule.allowManualInvocation != azr.isManualInvocationAllowed()) { + rule.allowManualInvocation = azr.isManualInvocationAllowed(); + modified = true; + } + if (!Flags.modesUi()) { + String iconResName = drawableResIdToResName(rule.pkg, azr.getIconResId()); + if (!Objects.equals(rule.iconResName, iconResName)) { + rule.iconResName = iconResName; modified = true; } - // TODO: b/310620812 - Remove this once FLAG_MODES_API is inlined. - rule.modified = azr.isModified(); + } + if (!Objects.equals(rule.triggerDescription, azr.getTriggerDescription())) { + rule.triggerDescription = azr.getTriggerDescription(); + modified = true; + } + if (rule.type != azr.getType()) { + rule.type = azr.getType(); + modified = true; + } - // Name is treated differently than other values: - // App is allowed to update name if the name was not modified by the user (even if - // other values have been modified). In this way, if the locale of an app changes, - // i18n of the rule name can still occur even if the user has customized the rule - // contents. - String previousName = rule.name; - if (isNew || doesOriginAlwaysUpdateValues(origin) - || (rule.userModifiedFields & AutomaticZenRule.FIELD_NAME) == 0) { - rule.name = azr.getName(); - modified |= !Objects.equals(rule.name, previousName); - } + // Name is treated differently than other values: + // App is allowed to update name if the name was not modified by the user (even if + // other values have been modified). In this way, if the locale of an app changes, + // i18n of the rule name can still occur even if the user has customized the rule + // contents. + String previousName = rule.name; + if (isNew || doesOriginAlwaysUpdateValues(origin) + || (rule.userModifiedFields & AutomaticZenRule.FIELD_NAME) == 0) { + rule.name = azr.getName(); + modified |= !Objects.equals(rule.name, previousName); + } - // For the remaining values, rules can always have all values updated if: - // * the rule is newly added, or - // * the request comes from an origin that can always update values, like the user, or - // * the rule has not yet been user modified, and thus can be updated by the app. - boolean updateValues = isNew || doesOriginAlwaysUpdateValues(origin) - || rule.canBeUpdatedByApp(); + // For the remaining values, rules can always have all values updated if: + // * the rule is newly added, or + // * the request comes from an origin that can always update values, like the user, or + // * the rule has not yet been user modified, and thus can be updated by the app. + boolean updateValues = isNew || doesOriginAlwaysUpdateValues(origin) + || rule.canBeUpdatedByApp(); - // For all other values, if updates are not allowed, we discard the update. - if (!updateValues) { - return modified; - } + // For all other values, if updates are not allowed, we discard the update. + if (!updateValues) { + return modified; + } - // Updates the bitmasks if the origin of the change is the user. - boolean updateBitmask = (origin == ORIGIN_USER_IN_SYSTEMUI); + // Updates the bitmasks if the origin of the change is the user. + boolean updateBitmask = (origin == ORIGIN_USER_IN_SYSTEMUI); - if (updateBitmask && !TextUtils.equals(previousName, azr.getName())) { - rule.userModifiedFields |= AutomaticZenRule.FIELD_NAME; + if (updateBitmask && !TextUtils.equals(previousName, azr.getName())) { + rule.userModifiedFields |= AutomaticZenRule.FIELD_NAME; + } + int newZenMode = NotificationManager.zenModeFromInterruptionFilter( + azr.getInterruptionFilter(), Global.ZEN_MODE_OFF); + if (rule.zenMode != newZenMode) { + rule.zenMode = newZenMode; + if (updateBitmask) { + rule.userModifiedFields |= AutomaticZenRule.FIELD_INTERRUPTION_FILTER; } - int newZenMode = NotificationManager.zenModeFromInterruptionFilter( - azr.getInterruptionFilter(), Global.ZEN_MODE_OFF); - if (rule.zenMode != newZenMode) { - rule.zenMode = newZenMode; + modified = true; + } + + if (Flags.modesUi()) { + String iconResName = drawableResIdToResName(rule.pkg, azr.getIconResId()); + if (!Objects.equals(rule.iconResName, iconResName)) { + rule.iconResName = iconResName; if (updateBitmask) { - rule.userModifiedFields |= AutomaticZenRule.FIELD_INTERRUPTION_FILTER; + rule.userModifiedFields |= AutomaticZenRule.FIELD_ICON; } modified = true; } + } - if (Flags.modesUi()) { - String iconResName = drawableResIdToResName(rule.pkg, azr.getIconResId()); - if (!Objects.equals(rule.iconResName, iconResName)) { - rule.iconResName = iconResName; - if (updateBitmask) { - rule.userModifiedFields |= AutomaticZenRule.FIELD_ICON; - } - modified = true; - } - } - - // Updates the bitmask and values for all policy fields, based on the origin. - modified |= updatePolicy(config, rule, azr.getZenPolicy(), updateBitmask, isNew); - - // Updates the bitmask and values for all device effect fields, based on the origin. - modified |= updateZenDeviceEffects(rule, azr.getDeviceEffects(), - origin == ORIGIN_APP, updateBitmask); - - return modified; - } else { - if (rule.enabled != azr.isEnabled()) { - rule.resetConditionOverride(); - } - rule.name = azr.getName(); - rule.condition = null; - rule.conditionId = azr.getConditionId(); - rule.enabled = azr.isEnabled(); - rule.modified = azr.isModified(); - rule.zenPolicy = azr.getZenPolicy(); - rule.zenMode = NotificationManager.zenModeFromInterruptionFilter( - azr.getInterruptionFilter(), Global.ZEN_MODE_OFF); - rule.configurationActivity = azr.getConfigurationActivity(); + // Updates the bitmask and values for all policy fields, based on the origin. + modified |= updatePolicy(config, rule, azr.getZenPolicy(), updateBitmask, isNew); - if (isNew) { - rule.id = ZenModeConfig.newRuleId(); - rule.creationTime = System.currentTimeMillis(); - rule.component = azr.getOwner(); - rule.pkg = pkg; - } + // Updates the bitmask and values for all device effect fields, based on the origin. + modified |= updateZenDeviceEffects(rule, azr.getDeviceEffects(), + origin == ORIGIN_APP, updateBitmask); - // Only the MODES_API path cares about the result, so just return whatever here. - return true; - } + return modified; } /** @@ -1629,32 +1531,21 @@ public class ZenModeHelper { } private AutomaticZenRule zenRuleToAutomaticZenRule(ZenRule rule) { - AutomaticZenRule azr; - if (Flags.modesApi()) { - azr = new AutomaticZenRule.Builder(rule.name, rule.conditionId) - .setManualInvocationAllowed(rule.allowManualInvocation) - .setPackage(rule.pkg) - .setCreationTime(rule.creationTime) - .setIconResId(drawableResNameToResId(rule.pkg, rule.iconResName)) - .setType(rule.type) - .setZenPolicy(rule.zenPolicy) - .setDeviceEffects(rule.zenDeviceEffects) - .setEnabled(rule.enabled) - .setInterruptionFilter( - NotificationManager.zenModeToInterruptionFilter(rule.zenMode)) - .setOwner(rule.component) - .setConfigurationActivity(rule.configurationActivity) - .setTriggerDescription(rule.triggerDescription) - .build(); - } else { - azr = new AutomaticZenRule(rule.name, rule.component, - rule.configurationActivity, - rule.conditionId, rule.zenPolicy, - NotificationManager.zenModeToInterruptionFilter(rule.zenMode), - rule.enabled, rule.creationTime); - azr.setPackageName(rule.pkg); - } - return azr; + return new AutomaticZenRule.Builder(rule.name, rule.conditionId) + .setManualInvocationAllowed(rule.allowManualInvocation) + .setPackage(rule.pkg) + .setCreationTime(rule.creationTime) + .setIconResId(drawableResNameToResId(rule.pkg, rule.iconResName)) + .setType(rule.type) + .setZenPolicy(rule.zenPolicy) + .setDeviceEffects(rule.zenDeviceEffects) + .setEnabled(rule.enabled) + .setInterruptionFilter( + NotificationManager.zenModeToInterruptionFilter(rule.zenMode)) + .setOwner(rule.component) + .setConfigurationActivity(rule.configurationActivity) + .setTriggerDescription(rule.triggerDescription) + .build(); } // Update only the hasPriorityChannels state (aka areChannelsBypassingDnd) without modifying @@ -1669,12 +1560,12 @@ public class ZenModeHelper { if (config == null) return; // If it already matches, do nothing - if (config.areChannelsBypassingDnd == hasPriorityChannels) { + if (config.hasPriorityChannels == hasPriorityChannels) { return; } ZenModeConfig newConfig = config.copy(); - newConfig.areChannelsBypassingDnd = hasPriorityChannels; + newConfig.hasPriorityChannels = hasPriorityChannels; // The updated calculation of whether there are priority channels is always done by // the system, even if the event causing the calculation had a different origin. setConfigLocked(newConfig, null, ORIGIN_SYSTEM, "updateHasPriorityChannels", @@ -1754,9 +1645,7 @@ public class ZenModeHelper { newRule.zenMode = zenMode; newRule.conditionId = conditionId; newRule.enabler = caller; - if (Flags.modesApi()) { - newRule.allowManualInvocation = true; - } + newRule.allowManualInvocation = true; newConfig.manualRule = newRule; } } @@ -1849,7 +1738,7 @@ public class ZenModeHelper { boolean hasDefaultRules = config.automaticRules.containsAll( ZenModeConfig.getDefaultRuleIds()); - long time = Flags.modesApi() ? mClock.millis() : System.currentTimeMillis(); + long time = mClock.millis(); if (config.automaticRules != null && config.automaticRules.size() > 0) { for (ZenRule automaticRule : config.automaticRules.values()) { if (forRestore) { @@ -1863,7 +1752,7 @@ public class ZenModeHelper { // Upon upgrading to a version with modes_api enabled, keep all behaviors of // rules with null ZenPolicies explicitly as a copy of the global policy. - if (Flags.modesApi() && config.version < ZenModeConfig.XML_VERSION_MODES_API) { + if (config.version < ZenModeConfig.XML_VERSION_MODES_API) { // Keep the manual ("global") policy that from config. ZenPolicy manualRulePolicy = config.getZenPolicy(); if (automaticRule.zenPolicy == null) { @@ -1877,8 +1766,7 @@ public class ZenModeHelper { } } - if (Flags.modesApi() && Flags.modesUi() - && config.version < ZenModeConfig.XML_VERSION_MODES_UI) { + if (Flags.modesUi() && config.version < ZenModeConfig.XML_VERSION_MODES_UI) { // Clear icons from implicit rules. App icons are not suitable for some // surfaces, so juse use a default (the user can select a different one). if (ZenModeConfig.isImplicitRuleId(automaticRule.id)) { @@ -1904,11 +1792,11 @@ public class ZenModeHelper { reason += ", reset to default rules"; } - if (Flags.modesApi() && Flags.modesUi()) { + if (Flags.modesUi()) { SystemZenRules.maybeUpgradeRules(mContext, config); } - if (Flags.modesApi() && forRestore) { + if (forRestore) { // Note: forBackup doesn't write deletedRules, but just in case. config.deletedRules.clear(); } @@ -1995,7 +1883,7 @@ public class ZenModeHelper { if (config == null) return; final ZenModeConfig newConfig = config.copy(); - if (Flags.modesApi() && !Flags.modesUi()) { + if (!Flags.modesUi()) { // Fix for b/337193321 -- propagate changes to notificationPolicy to rules where // the user cannot edit zen policy to emulate the previous "inheritance". ZenPolicy previousPolicy = ZenAdapters.notificationPolicyToZenPolicy( @@ -2034,14 +1922,13 @@ public class ZenModeHelper { final ZenModeConfig newConfig = mConfig.copy(); deleteRulesWithoutOwner(newConfig.automaticRules); - if (Flags.modesApi()) { - deleteRulesWithoutOwner(newConfig.deletedRules); - for (int i = newConfig.deletedRules.size() - 1; i >= 0; i--) { - ZenRule deletedRule = newConfig.deletedRules.valueAt(i); - if (deletedRule.deletionInstant == null - || deletedRule.deletionInstant.isBefore(keptRuleThreshold)) { - newConfig.deletedRules.removeAt(i); - } + deleteRulesWithoutOwner(newConfig.deletedRules); + + for (int i = newConfig.deletedRules.size() - 1; i >= 0; i--) { + ZenRule deletedRule = newConfig.deletedRules.valueAt(i); + if (deletedRule.deletionInstant == null + || deletedRule.deletionInstant.isBefore(keptRuleThreshold)) { + newConfig.deletedRules.removeAt(i); } } @@ -2053,7 +1940,7 @@ public class ZenModeHelper { } private void deleteRulesWithoutOwner(ArrayMap<String, ZenRule> ruleList) { - long currentTime = Flags.modesApi() ? mClock.millis() : System.currentTimeMillis(); + long currentTime = mClock.millis(); if (ruleList != null) { for (int i = ruleList.size() - 1; i >= 0; i--) { ZenRule rule = ruleList.valueAt(i); @@ -2188,7 +2075,7 @@ public class ZenModeHelper { mZenMode, mConfig, mConsolidatedPolicy); if (!config.equals(mConfig)) { // Schedule broadcasts. Cannot be sent during boot, though. - if (Flags.modesApi() && origin != ORIGIN_INIT) { + if (origin != ORIGIN_INIT) { for (ZenRule rule : config.automaticRules.values()) { ZenRule original = mConfig.automaticRules.get(rule.id); if (original != null) { @@ -2295,7 +2182,7 @@ public class ZenModeHelper { private void applyCustomPolicy(ZenModeConfig config, ZenPolicy policy, ZenRule rule, boolean useManualConfig) { if (rule.zenMode == Global.ZEN_MODE_NO_INTERRUPTIONS) { - if (Flags.modesApi() && Flags.modesUi()) { + if (Flags.modesUi()) { policy.apply(ZenPolicy.getBasePolicyInterruptionFilterNone()); } else { policy.apply(new ZenPolicy.Builder() @@ -2304,7 +2191,7 @@ public class ZenModeHelper { .build()); } } else if (rule.zenMode == Global.ZEN_MODE_ALARMS) { - if (Flags.modesApi() && Flags.modesUi()) { + if (Flags.modesUi()) { policy.apply(ZenPolicy.getBasePolicyInterruptionFilterAlarms()); } else { policy.apply(new ZenPolicy.Builder() @@ -2317,22 +2204,17 @@ public class ZenModeHelper { } else if (rule.zenPolicy != null) { policy.apply(rule.zenPolicy); } else { - if (Flags.modesApi()) { - if (useManualConfig) { - // manual rule is configured using the settings stored directly in ZenModeConfig - policy.apply(config.getZenPolicy()); - } else { - // under modes_api flag, an active automatic rule with no specified policy - // inherits the device default settings as stored in mDefaultConfig. While the - // rule's policy fields should be set upon creation, this is a fallback to - // catch any that may have fallen through the cracks. - Log.wtf(TAG, "active automatic rule found with no specified policy: " + rule); - policy.apply(Flags.modesUi() - ? mDefaultConfig.getZenPolicy() : config.getZenPolicy()); - } - } else { - // active rule with no specified policy inherits the manual rule config settings + if (useManualConfig) { + // manual rule is configured using the settings stored directly in ZenModeConfig policy.apply(config.getZenPolicy()); + } else { + // An active automatic rule with no specified policy inherits the device default + // settings as stored in mDefaultConfig. While the rule's policy fields should be + // set upon creation, this is a fallback to catch any that may have fallen through + // the cracks. + Log.wtf(TAG, "active automatic rule found with no specified policy: " + rule); + policy.apply(Flags.modesUi() + ? mDefaultConfig.getZenPolicy() : config.getZenPolicy()); } } } @@ -2346,9 +2228,7 @@ public class ZenModeHelper { ZenDeviceEffects.Builder deviceEffectsBuilder = new ZenDeviceEffects.Builder(); if (mConfig.isManualActive()) { applyCustomPolicy(mConfig, policy, mConfig.manualRule, true); - if (Flags.modesApi()) { - deviceEffectsBuilder.add(mConfig.manualRule.zenDeviceEffects); - } + deviceEffectsBuilder.add(mConfig.manualRule.zenDeviceEffects); } for (ZenRule automaticRule : mConfig.automaticRules.values()) { @@ -2356,12 +2236,10 @@ public class ZenModeHelper { // Active rules with INTERRUPTION_FILTER_ALL are not included in consolidated // policy. This is relevant in case some other active rule has a more // restrictive INTERRUPTION_FILTER but a more lenient ZenPolicy! - if (!Flags.modesApi() || automaticRule.zenMode != Global.ZEN_MODE_OFF) { + if (automaticRule.zenMode != Global.ZEN_MODE_OFF) { applyCustomPolicy(mConfig, policy, automaticRule, false); } - if (Flags.modesApi()) { - deviceEffectsBuilder.add(automaticRule.zenDeviceEffects); - } + deviceEffectsBuilder.add(automaticRule.zenDeviceEffects); } } @@ -2380,40 +2258,35 @@ public class ZenModeHelper { ZenLog.traceSetConsolidatedZenPolicy(mConsolidatedPolicy, reason); } - if (Flags.modesApi()) { - // Prevent other rules from applying grayscale if Driving is active (but allow it - // if _Driving itself_ wants grayscale). - if (Flags.modesUi() && preventZenDeviceEffectsWhileDriving()) { - boolean hasActiveDriving = false; - boolean hasActiveDrivingWithGrayscale = false; - for (ZenRule rule : mConfig.automaticRules.values()) { - if (rule.isActive() && rule.type == TYPE_DRIVING) { - hasActiveDriving = true; - if (rule.zenDeviceEffects != null - && rule.zenDeviceEffects.shouldDisplayGrayscale()) { - hasActiveDrivingWithGrayscale = true; - break; // Further rules won't affect decision. - } + // Prevent other rules from applying grayscale if Driving is active (but allow it + // if _Driving itself_ wants grayscale). + if (Flags.modesUi() && preventZenDeviceEffectsWhileDriving()) { + boolean hasActiveDriving = false; + boolean hasActiveDrivingWithGrayscale = false; + for (ZenRule rule : mConfig.automaticRules.values()) { + if (rule.isActive() && rule.type == TYPE_DRIVING) { + hasActiveDriving = true; + if (rule.zenDeviceEffects != null + && rule.zenDeviceEffects.shouldDisplayGrayscale()) { + hasActiveDrivingWithGrayscale = true; + break; // Further rules won't affect decision. } } - if (hasActiveDriving && !hasActiveDrivingWithGrayscale) { - deviceEffectsBuilder.setShouldDisplayGrayscale(false); - } } - - ZenDeviceEffects deviceEffects = deviceEffectsBuilder.build(); - if (!deviceEffects.equals(mConsolidatedDeviceEffects)) { - mConsolidatedDeviceEffects = deviceEffects; - mHandler.postApplyDeviceEffects(origin); + if (hasActiveDriving && !hasActiveDrivingWithGrayscale) { + deviceEffectsBuilder.setShouldDisplayGrayscale(false); } } + + ZenDeviceEffects deviceEffects = deviceEffectsBuilder.build(); + if (!deviceEffects.equals(mConsolidatedDeviceEffects)) { + mConsolidatedDeviceEffects = deviceEffects; + mHandler.postApplyDeviceEffects(origin); + } } } private void applyConsolidatedDeviceEffects(@ConfigOrigin int source) { - if (!Flags.modesApi()) { - return; - } DeviceEffectsApplier applier; ZenDeviceEffects effects; synchronized (mConfigLock) { @@ -2434,10 +2307,8 @@ public class ZenModeHelper { * to the current locale. */ private static void updateDefaultConfig(Context context, ZenModeConfig defaultConfig) { - if (Flags.modesApi()) { - updateDefaultAutomaticRulePolicies(defaultConfig); - } - if (Flags.modesApi() && Flags.modesUi()) { + updateDefaultAutomaticRulePolicies(defaultConfig); + if (Flags.modesUi()) { SystemZenRules.maybeUpgradeRules(context, defaultConfig); } updateRuleStringsForCurrentLocale(context, defaultConfig); @@ -2453,7 +2324,7 @@ public class ZenModeHelper { rule.name = context.getResources() .getString(R.string.zen_mode_default_every_night_name); } - if (Flags.modesApi() && Flags.modesUi()) { + if (Flags.modesUi()) { SystemZenRules.updateTriggerDescription(context, rule); } } @@ -2462,10 +2333,6 @@ public class ZenModeHelper { // Updates the policies in the default automatic rules (provided via default XML config) to // be fully filled in default values. private static void updateDefaultAutomaticRulePolicies(ZenModeConfig defaultConfig) { - if (!Flags.modesApi()) { - // Should be checked before calling, but just in case. - return; - } ZenPolicy defaultPolicy = defaultConfig.getZenPolicy(); for (ZenRule rule : defaultConfig.automaticRules.values()) { if (ZenModeConfig.getDefaultRuleIds().contains(rule.id) && rule.zenPolicy == null) { @@ -2611,6 +2478,7 @@ public class ZenModeHelper { } } + // TODO: b/368247671 - Delete this method AND default_zen_mode_config.xml when inlining modes_ui private ZenModeConfig readDefaultConfig(Resources resources) { XmlResourceParser parser = null; try { @@ -2649,7 +2517,7 @@ public class ZenModeHelper { events.add(FrameworkStatsLog.buildStatsEvent(DND_MODE_RULE, /* optional int32 user = 1 */ user, /* optional bool enabled = 2 */ config.isManualActive(), - /* optional bool channels_bypassing = 3 */ config.areChannelsBypassingDnd, + /* optional bool channels_bypassing = 3 */ config.hasPriorityChannels, /* optional LoggedZenMode zen_mode = 4 */ ROOT_CONFIG, /* optional string id = 5 */ "", // empty for root config /* optional int32 uid = 6 */ Process.SYSTEM_UID, // system owns root config @@ -2924,9 +2792,6 @@ public class ZenModeHelper { * ({@link #addAutomaticZenRule}, {@link #removeAutomaticZenRule}, etc, makes sense. */ private static void checkManageRuleOrigin(String method, @ConfigOrigin int origin) { - if (!Flags.modesApi()) { - return; - } checkArgument(origin == ORIGIN_APP || origin == ORIGIN_SYSTEM || origin == ORIGIN_USER_IN_SYSTEMUI, "Expected one of ORIGIN_APP, ORIGIN_SYSTEM, or " @@ -2939,9 +2804,6 @@ public class ZenModeHelper { * {@link #setAutomaticZenRuleStateFromConditionProvider} makes sense. */ private static void checkSetRuleStateOrigin(String method, @ConfigOrigin int origin) { - if (!Flags.modesApi()) { - return; - } checkArgument(origin == ORIGIN_APP || origin == ORIGIN_USER_IN_APP || origin == ORIGIN_SYSTEM || origin == ORIGIN_USER_IN_SYSTEMUI, "Expected one of ORIGIN_APP, ORIGIN_USER_IN_APP, ORIGIN_SYSTEM, or " diff --git a/services/tests/uiservicestests/src/android/app/NotificationManagerZenTest.java b/services/tests/uiservicestests/src/android/app/NotificationManagerZenTest.java index 779fa1aa2f72..dbbe40fd42e6 100644 --- a/services/tests/uiservicestests/src/android/app/NotificationManagerZenTest.java +++ b/services/tests/uiservicestests/src/android/app/NotificationManagerZenTest.java @@ -80,7 +80,7 @@ public class NotificationManagerZenTest { } @Test - @RequiresFlagsEnabled({Flags.FLAG_MODES_API, Flags.FLAG_MODES_UI}) + @RequiresFlagsEnabled(Flags.FLAG_MODES_UI) public void setAutomaticZenRuleState_manualActivation() { AutomaticZenRule ruleToCreate = createZenRule("rule"); String ruleId = mNotificationManager.addAutomaticZenRule(ruleToCreate); @@ -111,7 +111,7 @@ public class NotificationManagerZenTest { } @Test - @RequiresFlagsEnabled({Flags.FLAG_MODES_API, Flags.FLAG_MODES_UI}) + @RequiresFlagsEnabled(Flags.FLAG_MODES_UI) public void setAutomaticZenRuleState_manualDeactivation() { AutomaticZenRule ruleToCreate = createZenRule("rule"); String ruleId = mNotificationManager.addAutomaticZenRule(ruleToCreate); @@ -145,7 +145,7 @@ public class NotificationManagerZenTest { } @Test - @RequiresFlagsEnabled({Flags.FLAG_MODES_API, Flags.FLAG_MODES_UI}) + @RequiresFlagsEnabled(Flags.FLAG_MODES_UI) public void setAutomaticZenRuleState_respectsManuallyActivated() { AutomaticZenRule ruleToCreate = createZenRule("rule"); String ruleId = mNotificationManager.addAutomaticZenRule(ruleToCreate); @@ -178,7 +178,7 @@ public class NotificationManagerZenTest { } @Test - @RequiresFlagsEnabled({Flags.FLAG_MODES_API, Flags.FLAG_MODES_UI}) + @RequiresFlagsEnabled(Flags.FLAG_MODES_UI) public void setAutomaticZenRuleState_respectsManuallyDeactivated() { AutomaticZenRule ruleToCreate = createZenRule("rule"); String ruleId = mNotificationManager.addAutomaticZenRule(ruleToCreate); @@ -212,7 +212,7 @@ public class NotificationManagerZenTest { } @Test - @RequiresFlagsEnabled({Flags.FLAG_MODES_API, Flags.FLAG_MODES_UI}) + @RequiresFlagsEnabled(Flags.FLAG_MODES_UI) public void setAutomaticZenRuleState_manualActivationFromApp() { AutomaticZenRule ruleToCreate = createZenRule("rule"); String ruleId = mNotificationManager.addAutomaticZenRule(ruleToCreate); @@ -244,7 +244,7 @@ public class NotificationManagerZenTest { } @Test - @RequiresFlagsEnabled({Flags.FLAG_MODES_API, Flags.FLAG_MODES_UI}) + @RequiresFlagsEnabled(Flags.FLAG_MODES_UI) public void setAutomaticZenRuleState_manualDeactivationFromApp() { AutomaticZenRule ruleToCreate = createZenRule("rule"); String ruleId = mNotificationManager.addAutomaticZenRule(ruleToCreate); diff --git a/services/tests/uiservicestests/src/com/android/server/UiModeManagerServiceTest.java b/services/tests/uiservicestests/src/com/android/server/UiModeManagerServiceTest.java index c4b8599a483c..9930c9f07ed8 100644 --- a/services/tests/uiservicestests/src/com/android/server/UiModeManagerServiceTest.java +++ b/services/tests/uiservicestests/src/com/android/server/UiModeManagerServiceTest.java @@ -70,7 +70,6 @@ import android.Manifest; import android.app.Activity; import android.app.ActivityManager; import android.app.AlarmManager; -import android.app.Flags; import android.app.IOnProjectionStateChangedListener; import android.app.IUiModeManager; import android.content.BroadcastReceiver; @@ -91,7 +90,6 @@ import android.os.Process; import android.os.RemoteException; import android.os.UserHandle; import android.os.test.FakePermissionEnforcer; -import android.platform.test.annotations.EnableFlags; import android.platform.test.flag.junit.SetFlagsRule; import android.provider.Settings; import android.service.dreams.DreamManagerInternal; @@ -1508,13 +1506,11 @@ public class UiModeManagerServiceTest extends UiServiceTestCase { } @Test - @EnableFlags(Flags.FLAG_MODES_API) public void testAttentionModeThemeOverlay_nightModeDisabled() throws RemoteException { testAttentionModeThemeOverlay(false); } @Test - @EnableFlags(Flags.FLAG_MODES_API) public void testAttentionModeThemeOverlay_nightModeEnabled() throws RemoteException { testAttentionModeThemeOverlay(true); } diff --git a/services/tests/uiservicestests/src/com/android/server/notification/DefaultDeviceEffectsApplierTest.java b/services/tests/uiservicestests/src/com/android/server/notification/DefaultDeviceEffectsApplierTest.java index 1890879da69d..5ce9a3e8d4d4 100644 --- a/services/tests/uiservicestests/src/com/android/server/notification/DefaultDeviceEffectsApplierTest.java +++ b/services/tests/uiservicestests/src/com/android/server/notification/DefaultDeviceEffectsApplierTest.java @@ -47,7 +47,6 @@ import android.content.Intent; import android.content.IntentFilter; import android.hardware.display.ColorDisplayManager; import android.os.PowerManager; -import android.platform.test.annotations.EnableFlags; import android.platform.test.flag.junit.SetFlagsRule; import android.service.notification.ZenDeviceEffects; import android.testing.TestableContext; @@ -102,8 +101,6 @@ public class DefaultDeviceEffectsApplierTest { @Test public void apply_appliesEffects() { - mSetFlagsRule.enableFlags(android.app.Flags.FLAG_MODES_API); - ZenDeviceEffects effects = new ZenDeviceEffects.Builder() .setShouldSuppressAmbientDisplay(true) .setShouldDimWallpaper(true) @@ -119,7 +116,6 @@ public class DefaultDeviceEffectsApplierTest { } @Test - @EnableFlags(android.app.Flags.FLAG_MODES_API) public void apply_logsToZenLog() { when(mPowerManager.isInteractive()).thenReturn(true); ArgumentCaptor<BroadcastReceiver> broadcastReceiverCaptor = @@ -155,8 +151,6 @@ public class DefaultDeviceEffectsApplierTest { @Test public void apply_removesEffects() { - mSetFlagsRule.enableFlags(android.app.Flags.FLAG_MODES_API); - ZenDeviceEffects previousEffects = new ZenDeviceEffects.Builder() .setShouldSuppressAmbientDisplay(true) .setShouldDimWallpaper(true) @@ -180,8 +174,6 @@ public class DefaultDeviceEffectsApplierTest { @Test public void apply_removesOnlyPreviouslyAppliedEffects() { - mSetFlagsRule.enableFlags(android.app.Flags.FLAG_MODES_API); - ZenDeviceEffects previousEffects = new ZenDeviceEffects.Builder() .setShouldSuppressAmbientDisplay(true) .build(); @@ -197,7 +189,6 @@ public class DefaultDeviceEffectsApplierTest { @Test public void apply_missingSomeServices_okay() { - mSetFlagsRule.enableFlags(android.app.Flags.FLAG_MODES_API); mContext.addMockSystemService(ColorDisplayManager.class, null); mContext.addMockSystemService(WallpaperManager.class, null); mApplier = new DefaultDeviceEffectsApplier(mContext); @@ -216,7 +207,6 @@ public class DefaultDeviceEffectsApplierTest { @Test public void apply_disabledWallpaperService_dimWallpaperNotApplied() { - mSetFlagsRule.enableFlags(android.app.Flags.FLAG_MODES_API); WallpaperManager disabledWallpaperService = mock(WallpaperManager.class); when(mWallpaperManager.isWallpaperSupported()).thenReturn(false); mContext.addMockSystemService(WallpaperManager.class, disabledWallpaperService); @@ -236,8 +226,6 @@ public class DefaultDeviceEffectsApplierTest { @Test public void apply_someEffects_onlyThoseEffectsApplied() { - mSetFlagsRule.enableFlags(android.app.Flags.FLAG_MODES_API); - ZenDeviceEffects effects = new ZenDeviceEffects.Builder() .setShouldDimWallpaper(true) .setShouldDisplayGrayscale(true) @@ -253,8 +241,6 @@ public class DefaultDeviceEffectsApplierTest { @Test public void apply_onlyEffectDeltaApplied() { - mSetFlagsRule.enableFlags(android.app.Flags.FLAG_MODES_API); - mApplier.apply(new ZenDeviceEffects.Builder().setShouldDimWallpaper(true).build(), ORIGIN_USER_IN_SYSTEMUI); verify(mWallpaperManager).setWallpaperDimAmount(eq(0.6f)); @@ -272,7 +258,6 @@ public class DefaultDeviceEffectsApplierTest { @Test public void apply_nightModeFromApp_appliedOnScreenOff() { - mSetFlagsRule.enableFlags(android.app.Flags.FLAG_MODES_API); ArgumentCaptor<BroadcastReceiver> broadcastReceiverCaptor = ArgumentCaptor.forClass(BroadcastReceiver.class); ArgumentCaptor<IntentFilter> intentFilterCaptor = @@ -301,8 +286,6 @@ public class DefaultDeviceEffectsApplierTest { @Test public void apply_nightModeWithScreenOff_appliedImmediately( @TestParameter ZenChangeOrigin origin) { - mSetFlagsRule.enableFlags(android.app.Flags.FLAG_MODES_API); - when(mPowerManager.isInteractive()).thenReturn(false); mApplier.apply(new ZenDeviceEffects.Builder().setShouldUseNightMode(true).build(), @@ -314,7 +297,6 @@ public class DefaultDeviceEffectsApplierTest { } @Test - @EnableFlags({android.app.Flags.FLAG_MODES_API, android.app.Flags.FLAG_MODES_UI}) public void apply_nightModeWithScreenOnAndKeyguardShowing_appliedImmediately( @TestParameter ZenChangeOrigin origin) { @@ -334,8 +316,6 @@ public class DefaultDeviceEffectsApplierTest { "{origin: ORIGIN_INIT}", "{origin: ORIGIN_INIT_USER}"}) public void apply_nightModeWithScreenOn_appliedImmediatelyBasedOnOrigin( ZenChangeOrigin origin) { - mSetFlagsRule.enableFlags(android.app.Flags.FLAG_MODES_API); - when(mPowerManager.isInteractive()).thenReturn(true); mApplier.apply(new ZenDeviceEffects.Builder().setShouldUseNightMode(true).build(), @@ -351,8 +331,6 @@ public class DefaultDeviceEffectsApplierTest { "{origin: ORIGIN_SYSTEM}", "{origin: ORIGIN_UNKNOWN}"}) public void apply_nightModeWithScreenOn_willBeAppliedLaterBasedOnOrigin( ZenChangeOrigin origin) { - mSetFlagsRule.enableFlags(android.app.Flags.FLAG_MODES_API); - when(mPowerManager.isInteractive()).thenReturn(true); mApplier.apply(new ZenDeviceEffects.Builder().setShouldUseNightMode(true).build(), @@ -367,8 +345,6 @@ public class DefaultDeviceEffectsApplierTest { @Test public void apply_servicesThrow_noCrash() { - mSetFlagsRule.enableFlags(android.app.Flags.FLAG_MODES_API); - doThrow(new RuntimeException()).when(mPowerManager) .suppressAmbientDisplay(anyString(), anyBoolean()); doThrow(new RuntimeException()).when(mColorDisplayManager).setSaturationLevel(anyInt()); diff --git a/services/tests/uiservicestests/src/com/android/server/notification/NotificationManagerServiceTest.java b/services/tests/uiservicestests/src/com/android/server/notification/NotificationManagerServiceTest.java index 858dd3a605d8..37ab541f12da 100644 --- a/services/tests/uiservicestests/src/com/android/server/notification/NotificationManagerServiceTest.java +++ b/services/tests/uiservicestests/src/com/android/server/notification/NotificationManagerServiceTest.java @@ -11030,7 +11030,6 @@ public class NotificationManagerServiceTest extends UiServiceTestCase { } @Test - @EnableFlags(android.app.Flags.FLAG_MODES_API) public void testAddAutomaticZenRule_typeManagedCanBeUsedByDeviceOwners() throws Exception { ZenModeHelper zenModeHelper = setUpMockZenTest(); mService.setCallerIsNormalPackage(); @@ -11048,20 +11047,17 @@ public class NotificationManagerServiceTest extends UiServiceTestCase { } @Test - @EnableFlags(android.app.Flags.FLAG_MODES_API) public void testAddAutomaticZenRule_typeManagedCanBeUsedBySystem() throws Exception { addAutomaticZenRule_restrictedRuleTypeCanBeUsedBySystem(AutomaticZenRule.TYPE_MANAGED); } @Test - @EnableFlags(android.app.Flags.FLAG_MODES_API) public void testAddAutomaticZenRule_typeManagedCannotBeUsedByRegularApps() throws Exception { addAutomaticZenRule_restrictedRuleTypeCannotBeUsedByRegularApps( AutomaticZenRule.TYPE_MANAGED); } @Test - @EnableFlags(android.app.Flags.FLAG_MODES_API) public void testAddAutomaticZenRule_typeBedtimeCanBeUsedByWellbeing() throws Exception { ZenModeHelper zenModeHelper = setUpMockZenTest(); mService.setCallerIsNormalPackage(); @@ -11084,7 +11080,6 @@ public class NotificationManagerServiceTest extends UiServiceTestCase { } @Test - @EnableFlags(android.app.Flags.FLAG_MODES_API) public void testAddAutomaticZenRule_typeBedtimeCanBeUsedBySystem() throws Exception { reset(mPackageManagerInternal); when(mPackageManagerInternal.isSameApp(eq(mPkg), eq(mUid), anyInt())).thenReturn(true); @@ -11092,7 +11087,6 @@ public class NotificationManagerServiceTest extends UiServiceTestCase { } @Test - @EnableFlags(android.app.Flags.FLAG_MODES_API) public void testAddAutomaticZenRule_typeBedtimeCannotBeUsedByRegularApps() throws Exception { reset(mPackageManagerInternal); when(mPackageManagerInternal.isSameApp(eq(mPkg), eq(mUid), anyInt())).thenReturn(true); @@ -11135,7 +11129,6 @@ public class NotificationManagerServiceTest extends UiServiceTestCase { } @Test - @EnableFlags(android.app.Flags.FLAG_MODES_API) public void addAutomaticZenRule_fromUser_mappedToOriginUser() throws Exception { ZenModeHelper zenModeHelper = setUpMockZenTest(); mService.isSystemUid = true; @@ -11147,7 +11140,6 @@ public class NotificationManagerServiceTest extends UiServiceTestCase { } @Test - @EnableFlags(android.app.Flags.FLAG_MODES_API) public void addAutomaticZenRule_fromSystemNotUser_mappedToOriginSystem() throws Exception { ZenModeHelper zenModeHelper = setUpMockZenTest(); mService.isSystemUid = true; @@ -11159,7 +11151,6 @@ public class NotificationManagerServiceTest extends UiServiceTestCase { } @Test - @EnableFlags(android.app.Flags.FLAG_MODES_API) public void addAutomaticZenRule_fromApp_mappedToOriginApp() throws Exception { ZenModeHelper zenModeHelper = setUpMockZenTest(); mService.setCallerIsNormalPackage(); @@ -11171,7 +11162,6 @@ public class NotificationManagerServiceTest extends UiServiceTestCase { } @Test - @EnableFlags(android.app.Flags.FLAG_MODES_API) public void addAutomaticZenRule_fromAppFromUser_blocked() throws Exception { setUpMockZenTest(); mService.setCallerIsNormalPackage(); @@ -11181,7 +11171,6 @@ public class NotificationManagerServiceTest extends UiServiceTestCase { } @Test - @EnableFlags(android.app.Flags.FLAG_MODES_API) public void updateAutomaticZenRule_fromUserFromSystem_allowed() throws Exception { ZenModeHelper zenModeHelper = setUpMockZenTest(); mService.isSystemUid = true; @@ -11193,7 +11182,6 @@ public class NotificationManagerServiceTest extends UiServiceTestCase { } @Test - @EnableFlags(android.app.Flags.FLAG_MODES_API) public void updateAutomaticZenRule_fromUserFromApp_blocked() throws Exception { setUpMockZenTest(); mService.setCallerIsNormalPackage(); @@ -11203,7 +11191,6 @@ public class NotificationManagerServiceTest extends UiServiceTestCase { } @Test - @EnableFlags(android.app.Flags.FLAG_MODES_API) public void removeAutomaticZenRule_fromUserFromSystem_allowed() throws Exception { ZenModeHelper zenModeHelper = setUpMockZenTest(); mService.isSystemUid = true; @@ -11215,7 +11202,6 @@ public class NotificationManagerServiceTest extends UiServiceTestCase { } @Test - @EnableFlags(android.app.Flags.FLAG_MODES_API) public void removeAutomaticZenRule_fromUserFromApp_blocked() throws Exception { setUpMockZenTest(); mService.setCallerIsNormalPackage(); @@ -11225,7 +11211,6 @@ public class NotificationManagerServiceTest extends UiServiceTestCase { } @Test - @EnableFlags(android.app.Flags.FLAG_MODES_API) public void setAutomaticZenRuleState_fromAppWithConditionFromUser_originUserInApp() throws Exception { ZenModeHelper zenModeHelper = setUpMockZenTest(); @@ -11240,7 +11225,6 @@ public class NotificationManagerServiceTest extends UiServiceTestCase { } @Test - @EnableFlags(android.app.Flags.FLAG_MODES_API) public void setAutomaticZenRuleState_fromAppWithConditionNotFromUser_originApp() throws Exception { ZenModeHelper zenModeHelper = setUpMockZenTest(); @@ -11255,7 +11239,6 @@ public class NotificationManagerServiceTest extends UiServiceTestCase { } @Test - @EnableFlags(android.app.Flags.FLAG_MODES_API) public void setAutomaticZenRuleState_fromSystemWithConditionFromUser_originUserInSystemUi() throws Exception { ZenModeHelper zenModeHelper = setUpMockZenTest(); @@ -11269,7 +11252,6 @@ public class NotificationManagerServiceTest extends UiServiceTestCase { eq(ZenModeConfig.ORIGIN_USER_IN_SYSTEMUI), anyInt()); } @Test - @EnableFlags(android.app.Flags.FLAG_MODES_API) public void setAutomaticZenRuleState_fromSystemWithConditionNotFromUser_originSystem() throws Exception { ZenModeHelper zenModeHelper = setUpMockZenTest(); @@ -11440,7 +11422,6 @@ public class NotificationManagerServiceTest extends UiServiceTestCase { } @Test - @EnableFlags(android.app.Flags.FLAG_MODES_API) public void onAutomaticRuleStatusChanged_sendsBroadcastToRuleOwner() throws Exception { mService.mZenModeHelper.getCallbacks().forEach(c -> c.onAutomaticRuleStatusChanged( mUserId, "rule.owner.pkg", "rule_id", AUTOMATIC_RULE_STATUS_ACTIVATED)); @@ -16304,7 +16285,7 @@ public class NotificationManagerServiceTest extends UiServiceTestCase { InOrder inOrder = inOrder(mPreferencesHelper, mService.mZenModeHelper); inOrder.verify(mService.mZenModeHelper).onUserSwitched(eq(20)); - inOrder.verify(mPreferencesHelper).syncChannelsBypassingDnd(); + inOrder.verify(mPreferencesHelper).syncHasPriorityChannels(); inOrder.verifyNoMoreInteractions(); } @@ -16320,7 +16301,7 @@ public class NotificationManagerServiceTest extends UiServiceTestCase { InOrder inOrder = inOrder(mPreferencesHelper, mService.mZenModeHelper); inOrder.verify(mService.mZenModeHelper).onUserSwitched(eq(20)); - inOrder.verify(mPreferencesHelper).syncChannelsBypassingDnd(); + inOrder.verify(mPreferencesHelper).syncHasPriorityChannels(); inOrder.verifyNoMoreInteractions(); } @@ -16641,7 +16622,6 @@ public class NotificationManagerServiceTest extends UiServiceTestCase { } @Test - @EnableFlags(android.app.Flags.FLAG_MODES_API) public void setDeviceEffectsApplier_succeeds() throws Exception { initNMS(SystemService.PHASE_SYSTEM_SERVICES_READY); @@ -16652,7 +16632,6 @@ public class NotificationManagerServiceTest extends UiServiceTestCase { } @Test - @EnableFlags(android.app.Flags.FLAG_MODES_API) public void setDeviceEffectsApplier_tooLate_throws() throws Exception { initNMS(SystemService.PHASE_THIRD_PARTY_APPS_CAN_START); @@ -16661,7 +16640,6 @@ public class NotificationManagerServiceTest extends UiServiceTestCase { } @Test - @EnableFlags(android.app.Flags.FLAG_MODES_API) public void setDeviceEffectsApplier_calledTwice_throws() throws Exception { initNMS(SystemService.PHASE_SYSTEM_SERVICES_READY); @@ -16673,7 +16651,6 @@ public class NotificationManagerServiceTest extends UiServiceTestCase { @Test @EnableCompatChanges(NotificationManagerService.MANAGE_GLOBAL_ZEN_VIA_IMPLICIT_RULES) public void setNotificationPolicy_mappedToImplicitRule() throws RemoteException { - mSetFlagsRule.enableFlags(android.app.Flags.FLAG_MODES_API); mService.setCallerIsNormalPackage(); ZenModeHelper zenHelper = mock(ZenModeHelper.class); mService.mZenModeHelper = zenHelper; @@ -16690,7 +16667,6 @@ public class NotificationManagerServiceTest extends UiServiceTestCase { @Test @EnableCompatChanges(NotificationManagerService.MANAGE_GLOBAL_ZEN_VIA_IMPLICIT_RULES) public void setNotificationPolicy_systemCaller_setsGlobalPolicy() throws RemoteException { - mSetFlagsRule.enableFlags(android.app.Flags.FLAG_MODES_API); ZenModeHelper zenModeHelper = mock(ZenModeHelper.class); mService.mZenModeHelper = zenModeHelper; when(mConditionProviders.isPackageOrComponentAllowed(anyString(), anyInt())) @@ -16730,7 +16706,6 @@ public class NotificationManagerServiceTest extends UiServiceTestCase { private void setNotificationPolicy_dependingOnCompanionAppDevice_maySetGlobalPolicy( @AssociationRequest.DeviceProfile String deviceProfile, boolean canSetGlobalPolicy) throws RemoteException { - mSetFlagsRule.enableFlags(android.app.Flags.FLAG_MODES_API); mService.setCallerIsNormalPackage(); ZenModeHelper zenModeHelper = mock(ZenModeHelper.class); mService.mZenModeHelper = zenModeHelper; @@ -16757,7 +16732,6 @@ public class NotificationManagerServiceTest extends UiServiceTestCase { @Test @DisableCompatChanges(NotificationManagerService.MANAGE_GLOBAL_ZEN_VIA_IMPLICIT_RULES) public void setNotificationPolicy_withoutCompat_setsGlobalPolicy() throws RemoteException { - mSetFlagsRule.enableFlags(android.app.Flags.FLAG_MODES_API); mService.setCallerIsNormalPackage(); ZenModeHelper zenModeHelper = mock(ZenModeHelper.class); mService.mZenModeHelper = zenModeHelper; @@ -16773,7 +16747,6 @@ public class NotificationManagerServiceTest extends UiServiceTestCase { @Test @EnableCompatChanges(NotificationManagerService.MANAGE_GLOBAL_ZEN_VIA_IMPLICIT_RULES) public void getNotificationPolicy_mappedFromImplicitRule() throws RemoteException { - mSetFlagsRule.enableFlags(android.app.Flags.FLAG_MODES_API); mService.setCallerIsNormalPackage(); ZenModeHelper zenHelper = mock(ZenModeHelper.class); mService.mZenModeHelper = zenHelper; @@ -16788,7 +16761,6 @@ public class NotificationManagerServiceTest extends UiServiceTestCase { @Test @EnableCompatChanges(NotificationManagerService.MANAGE_GLOBAL_ZEN_VIA_IMPLICIT_RULES) public void setInterruptionFilter_mappedToImplicitRule() throws RemoteException { - mSetFlagsRule.enableFlags(android.app.Flags.FLAG_MODES_API); mService.setCallerIsNormalPackage(); ZenModeHelper zenHelper = mock(ZenModeHelper.class); mService.mZenModeHelper = zenHelper; @@ -16804,7 +16776,6 @@ public class NotificationManagerServiceTest extends UiServiceTestCase { @Test @EnableCompatChanges(NotificationManagerService.MANAGE_GLOBAL_ZEN_VIA_IMPLICIT_RULES) public void setInterruptionFilter_systemCaller_setsGlobalPolicy() throws RemoteException { - mSetFlagsRule.enableFlags(android.app.Flags.FLAG_MODES_API); mService.setCallerIsNormalPackage(); ZenModeHelper zenModeHelper = mock(ZenModeHelper.class); mService.mZenModeHelper = zenModeHelper; @@ -16843,7 +16814,6 @@ public class NotificationManagerServiceTest extends UiServiceTestCase { private void setInterruptionFilter_dependingOnCompanionAppDevice_maySetGlobalZen( @AssociationRequest.DeviceProfile String deviceProfile, boolean canSetGlobalPolicy) throws RemoteException { - mSetFlagsRule.enableFlags(android.app.Flags.FLAG_MODES_API); ZenModeHelper zenModeHelper = mock(ZenModeHelper.class); mService.mZenModeHelper = zenModeHelper; mService.setCallerIsNormalPackage(); @@ -16868,7 +16838,6 @@ public class NotificationManagerServiceTest extends UiServiceTestCase { } @Test - @EnableFlags(android.app.Flags.FLAG_MODES_API) @EnableCompatChanges(NotificationManagerService.MANAGE_GLOBAL_ZEN_VIA_IMPLICIT_RULES) public void requestInterruptionFilterFromListener_fromApp_doesNotSetGlobalZen() throws Exception { @@ -16886,7 +16855,6 @@ public class NotificationManagerServiceTest extends UiServiceTestCase { } @Test - @EnableFlags(android.app.Flags.FLAG_MODES_API) @EnableCompatChanges(NotificationManagerService.MANAGE_GLOBAL_ZEN_VIA_IMPLICIT_RULES) public void requestInterruptionFilterFromListener_fromSystem_setsGlobalZen() throws Exception { @@ -16905,24 +16873,6 @@ public class NotificationManagerServiceTest extends UiServiceTestCase { } @Test - @DisableFlags(android.app.Flags.FLAG_MODES_API) - public void requestInterruptionFilterFromListener_flagOff_callsRequestFromListener() - throws Exception { - mService.setCallerIsNormalPackage(); - mService.mZenModeHelper = mock(ZenModeHelper.class); - ManagedServices.ManagedServiceInfo info = mock(ManagedServices.ManagedServiceInfo.class); - when(mListeners.checkServiceTokenLocked(any())).thenReturn(info); - info.component = new ComponentName("pkg", "cls"); - - mBinderService.requestInterruptionFilterFromListener(mock(INotificationListener.class), - INTERRUPTION_FILTER_PRIORITY); - - verify(mService.mZenModeHelper).requestFromListener(eq(info.component), - eq(INTERRUPTION_FILTER_PRIORITY), eq(mUid), /* fromSystemOrSystemUi= */ eq(false)); - } - - @Test - @EnableFlags(android.app.Flags.FLAG_MODES_API) @EnableCompatChanges(NotificationManagerService.MANAGE_GLOBAL_ZEN_VIA_IMPLICIT_RULES) public void updateAutomaticZenRule_implicitRuleWithoutCPS_disallowedFromApp() throws Exception { setUpRealZenTest(); @@ -16948,7 +16898,6 @@ public class NotificationManagerServiceTest extends UiServiceTestCase { } @Test - @EnableFlags(android.app.Flags.FLAG_MODES_API) @EnableCompatChanges(NotificationManagerService.MANAGE_GLOBAL_ZEN_VIA_IMPLICIT_RULES) public void updateAutomaticZenRule_implicitRuleWithoutCPS_allowedFromSystem() throws Exception { setUpRealZenTest(); @@ -16974,7 +16923,7 @@ public class NotificationManagerServiceTest extends UiServiceTestCase { } @Test - @EnableFlags({android.app.Flags.FLAG_MODES_API, android.app.Flags.FLAG_MODES_UI}) + @EnableFlags(android.app.Flags.FLAG_MODES_UI) public void setNotificationPolicy_fromSystemApp_appliesPriorityChannelsAllowed() throws Exception { setUpRealZenTest(); @@ -17004,7 +16953,7 @@ public class NotificationManagerServiceTest extends UiServiceTestCase { } @Test - @EnableFlags({android.app.Flags.FLAG_MODES_API, android.app.Flags.FLAG_MODES_UI}) + @EnableFlags(android.app.Flags.FLAG_MODES_UI) @DisableCompatChanges(NotificationManagerService.MANAGE_GLOBAL_ZEN_VIA_IMPLICIT_RULES) public void setNotificationPolicy_fromRegularAppThatCanModifyPolicy_ignoresState() throws Exception { diff --git a/services/tests/uiservicestests/src/com/android/server/notification/PreferencesHelperTest.java b/services/tests/uiservicestests/src/com/android/server/notification/PreferencesHelperTest.java index 640de174ba20..5dea44d6ebf4 100644 --- a/services/tests/uiservicestests/src/com/android/server/notification/PreferencesHelperTest.java +++ b/services/tests/uiservicestests/src/com/android/server/notification/PreferencesHelperTest.java @@ -363,7 +363,7 @@ public class PreferencesHelperTest extends UiServiceTestCase { .when(mTestIContentProvider).uncanonicalize(any(), eq(CANONICAL_SOUND_URI)); mTestNotificationPolicy = new NotificationManager.Policy(0, 0, 0, 0, - NotificationManager.Policy.STATE_CHANNELS_BYPASSING_DND, 0); + NotificationManager.Policy.STATE_HAS_PRIORITY_CHANNELS, 0); when(mMockZenModeHelper.getNotificationPolicy(any())).thenReturn(mTestNotificationPolicy); when(mAppOpsManager.noteOpNoThrow(anyInt(), anyInt(), anyString(), eq(null), anyString())).thenReturn(MODE_DEFAULT); @@ -2733,7 +2733,7 @@ public class PreferencesHelperTest extends UiServiceTestCase { NotificationChannel channel = new NotificationChannel("id1", "name1", IMPORTANCE_LOW); mHelper.createNotificationChannel(PKG_N_MR1, uid, channel, true, false, uid, false); - assertFalse(mHelper.areChannelsBypassingDnd()); + assertFalse(mHelper.hasPriorityChannels()); if (android.app.Flags.modesUi()) { verify(mMockZenModeHelper, never()).updateHasPriorityChannels(any(), anyBoolean()); } else { @@ -2748,7 +2748,7 @@ public class PreferencesHelperTest extends UiServiceTestCase { channel2.setBypassDnd(true); mHelper.createNotificationChannel(PKG_N_MR1, uid, channel2, true, true, uid, false); - assertTrue(mHelper.areChannelsBypassingDnd()); + assertTrue(mHelper.hasPriorityChannels()); if (android.app.Flags.modesUi()) { verify(mMockZenModeHelper, times(1)).updateHasPriorityChannels(eq(UserHandle.CURRENT), eq(true)); @@ -2760,7 +2760,7 @@ public class PreferencesHelperTest extends UiServiceTestCase { // delete channels mHelper.deleteNotificationChannel(PKG_N_MR1, uid, channel.getId(), uid, false); - assertTrue(mHelper.areChannelsBypassingDnd()); // channel2 can still bypass DND + assertTrue(mHelper.hasPriorityChannels()); // channel2 can still bypass DND if (android.app.Flags.modesUi()) { verify(mMockZenModeHelper, never()).updateHasPriorityChannels(any(), anyBoolean()); } else { @@ -2770,7 +2770,7 @@ public class PreferencesHelperTest extends UiServiceTestCase { resetZenModeHelper(); mHelper.deleteNotificationChannel(PKG_N_MR1, uid, channel2.getId(), uid, false); - assertFalse(mHelper.areChannelsBypassingDnd()); + assertFalse(mHelper.hasPriorityChannels()); if (android.app.Flags.modesUi()) { verify(mMockZenModeHelper, times(1)).updateHasPriorityChannels(eq(UserHandle.CURRENT), eq(false)); @@ -2792,7 +2792,7 @@ public class PreferencesHelperTest extends UiServiceTestCase { NotificationChannel channel = new NotificationChannel("id1", "name1", IMPORTANCE_LOW); mHelper.createNotificationChannel(PKG_N_MR1, uid, channel, true, false, uid, false); - assertFalse(mHelper.areChannelsBypassingDnd()); + assertFalse(mHelper.hasPriorityChannels()); if (android.app.Flags.modesUi()) { verify(mMockZenModeHelper, never()).updateHasPriorityChannels(any(), anyBoolean()); } else { @@ -2807,7 +2807,7 @@ public class PreferencesHelperTest extends UiServiceTestCase { mHelper.createNotificationChannel(PKG_N_MR1, uid, update, true, true, uid, false); - assertTrue(mHelper.areChannelsBypassingDnd()); + assertTrue(mHelper.hasPriorityChannels()); if (android.app.Flags.modesUi()) { verify(mMockZenModeHelper, times(1)).updateHasPriorityChannels(eq(UserHandle.CURRENT), eq(true)); @@ -2829,7 +2829,7 @@ public class PreferencesHelperTest extends UiServiceTestCase { NotificationChannel channel = new NotificationChannel("id1", "name1", IMPORTANCE_LOW); mHelper.createNotificationChannel(PKG_N_MR1, uid, channel, true, false, uid, false); - assertFalse(mHelper.areChannelsBypassingDnd()); + assertFalse(mHelper.hasPriorityChannels()); if (android.app.Flags.modesUi()) { verify(mMockZenModeHelper, never()).updateHasPriorityChannels(any(), anyBoolean()); } else { @@ -2844,7 +2844,7 @@ public class PreferencesHelperTest extends UiServiceTestCase { channel2.setBypassDnd(true); mHelper.createNotificationChannel(PKG_N_MR1, uid, channel2, true, true, uid, false); - assertTrue(mHelper.areChannelsBypassingDnd()); + assertTrue(mHelper.hasPriorityChannels()); if (android.app.Flags.modesUi()) { verify(mMockZenModeHelper, times(1)).updateHasPriorityChannels(eq(UserHandle.CURRENT), eq(true)); @@ -2856,7 +2856,7 @@ public class PreferencesHelperTest extends UiServiceTestCase { // delete channels mHelper.deleteNotificationChannel(PKG_N_MR1, uid, channel.getId(), uid, false); - assertTrue(mHelper.areChannelsBypassingDnd()); // channel2 can still bypass DND + assertTrue(mHelper.hasPriorityChannels()); // channel2 can still bypass DND if (android.app.Flags.modesUi()) { verify(mMockZenModeHelper, never()).updateHasPriorityChannels(any(), anyBoolean()); } else { @@ -2866,7 +2866,7 @@ public class PreferencesHelperTest extends UiServiceTestCase { resetZenModeHelper(); mHelper.deleteNotificationChannel(PKG_N_MR1, uid, channel2.getId(), uid, false); - assertFalse(mHelper.areChannelsBypassingDnd()); + assertFalse(mHelper.hasPriorityChannels()); if (android.app.Flags.modesUi()) { verify(mMockZenModeHelper, times(1)).updateHasPriorityChannels(eq(UserHandle.CURRENT), eq(false)); @@ -2884,9 +2884,9 @@ public class PreferencesHelperTest extends UiServiceTestCase { // start in a 'allowed to bypass dnd state' mTestNotificationPolicy = new NotificationManager.Policy(0, 0, 0, 0, - NotificationManager.Policy.STATE_CHANNELS_BYPASSING_DND, 0); + NotificationManager.Policy.STATE_HAS_PRIORITY_CHANNELS, 0); when(mMockZenModeHelper.getNotificationPolicy(any())).thenReturn(mTestNotificationPolicy); - mHelper.syncChannelsBypassingDnd(); + mHelper.syncHasPriorityChannels(); // create notification channel that can bypass dnd, but app is blocked // expected result: areChannelsBypassingDnd = false @@ -2899,7 +2899,7 @@ public class PreferencesHelperTest extends UiServiceTestCase { channel2.setBypassDnd(true); mHelper.createNotificationChannel(PKG_N_MR1, uid, channel2, true, true, uid, false); - assertFalse(mHelper.areChannelsBypassingDnd()); + assertFalse(mHelper.hasPriorityChannels()); if (android.app.Flags.modesUi()) { verify(mMockZenModeHelper, times(1)).updateHasPriorityChannels(eq(UserHandle.CURRENT), eq(false)); @@ -2917,9 +2917,9 @@ public class PreferencesHelperTest extends UiServiceTestCase { // start in a 'allowed to bypass dnd state' mTestNotificationPolicy = new NotificationManager.Policy(0, 0, 0, 0, - NotificationManager.Policy.STATE_CHANNELS_BYPASSING_DND, 0); + NotificationManager.Policy.STATE_HAS_PRIORITY_CHANNELS, 0); when(mMockZenModeHelper.getNotificationPolicy(any())).thenReturn(mTestNotificationPolicy); - mHelper.syncChannelsBypassingDnd(); + mHelper.syncHasPriorityChannels(); // create notification channel that can bypass dnd, but app is blocked // expected result: areChannelsBypassingDnd = false @@ -2927,7 +2927,7 @@ public class PreferencesHelperTest extends UiServiceTestCase { channel2.setBypassDnd(true); mHelper.createNotificationChannel(PKG_N_MR1, uid, channel2, true, true, uid, false); - assertFalse(mHelper.areChannelsBypassingDnd()); + assertFalse(mHelper.hasPriorityChannels()); if (android.app.Flags.modesUi()) { verify(mMockZenModeHelper, times(1)).updateHasPriorityChannels(eq(UserHandle.CURRENT), eq(false)); @@ -2945,9 +2945,9 @@ public class PreferencesHelperTest extends UiServiceTestCase { // start in a 'allowed to bypass dnd state' mTestNotificationPolicy = new NotificationManager.Policy(0, 0, 0, 0, - NotificationManager.Policy.STATE_CHANNELS_BYPASSING_DND, 0); + NotificationManager.Policy.STATE_HAS_PRIORITY_CHANNELS, 0); when(mMockZenModeHelper.getNotificationPolicy(any())).thenReturn(mTestNotificationPolicy); - mHelper.syncChannelsBypassingDnd(); + mHelper.syncHasPriorityChannels(); // create notification channel that can bypass dnd, but app is blocked // expected result: areChannelsBypassingDnd = false @@ -2955,7 +2955,7 @@ public class PreferencesHelperTest extends UiServiceTestCase { channel2.setBypassDnd(true); mHelper.createNotificationChannel(PKG_N_MR1, uid, channel2, true, true, uid, false); - assertFalse(mHelper.areChannelsBypassingDnd()); + assertFalse(mHelper.hasPriorityChannels()); if (android.app.Flags.modesUi()) { verify(mMockZenModeHelper, times(1)).updateHasPriorityChannels(eq(UserHandle.CURRENT), eq(false)); @@ -2977,7 +2977,7 @@ public class PreferencesHelperTest extends UiServiceTestCase { NotificationChannel channel = new NotificationChannel("id1", "name1", IMPORTANCE_LOW); mHelper.createNotificationChannel(PKG_N_MR1, uid, channel, true, false, uid, false); - assertFalse(mHelper.areChannelsBypassingDnd()); + assertFalse(mHelper.hasPriorityChannels()); if (android.app.Flags.modesUi()) { verify(mMockZenModeHelper, never()).updateHasPriorityChannels(any(), anyBoolean()); } else { @@ -2990,7 +2990,7 @@ public class PreferencesHelperTest extends UiServiceTestCase { // expected result: areChannelsBypassingDnd = true channel.setBypassDnd(true); mHelper.updateNotificationChannel(PKG_N_MR1, uid, channel, true, SYSTEM_UID, true); - assertTrue(mHelper.areChannelsBypassingDnd()); + assertTrue(mHelper.hasPriorityChannels()); if (android.app.Flags.modesUi()) { verify(mMockZenModeHelper, times(1)).updateHasPriorityChannels(eq(UserHandle.CURRENT), eq(true)); @@ -3004,7 +3004,7 @@ public class PreferencesHelperTest extends UiServiceTestCase { // expected result: areChannelsBypassingDnd = false channel.setBypassDnd(false); mHelper.updateNotificationChannel(PKG_N_MR1, uid, channel, true, SYSTEM_UID, true); - assertFalse(mHelper.areChannelsBypassingDnd()); + assertFalse(mHelper.hasPriorityChannels()); if (android.app.Flags.modesUi()) { verify(mMockZenModeHelper, times(1)).updateHasPriorityChannels(eq(UserHandle.CURRENT), eq(false)); @@ -3020,10 +3020,10 @@ public class PreferencesHelperTest extends UiServiceTestCase { // start notification policy off with mAreChannelsBypassingDnd = true, but // RankingHelper should change to false mTestNotificationPolicy = new NotificationManager.Policy(0, 0, 0, 0, - NotificationManager.Policy.STATE_CHANNELS_BYPASSING_DND, 0); + NotificationManager.Policy.STATE_HAS_PRIORITY_CHANNELS, 0); when(mMockZenModeHelper.getNotificationPolicy(any())).thenReturn(mTestNotificationPolicy); - mHelper.syncChannelsBypassingDnd(); - assertFalse(mHelper.areChannelsBypassingDnd()); + mHelper.syncHasPriorityChannels(); + assertFalse(mHelper.hasPriorityChannels()); if (android.app.Flags.modesUi()) { verify(mMockZenModeHelper, times(1)).updateHasPriorityChannels(eq(UserHandle.CURRENT), eq(false)); @@ -3039,7 +3039,7 @@ public class PreferencesHelperTest extends UiServiceTestCase { // start notification policy off with mAreChannelsBypassingDnd = false mTestNotificationPolicy = new NotificationManager.Policy(0, 0, 0, 0, 0, 0); when(mMockZenModeHelper.getNotificationPolicy(any())).thenReturn(mTestNotificationPolicy); - assertFalse(mHelper.areChannelsBypassingDnd()); + assertFalse(mHelper.hasPriorityChannels()); if (android.app.Flags.modesUi()) { verify(mMockZenModeHelper, never()).updateHasPriorityChannels(any(), anyBoolean()); } else { @@ -3050,7 +3050,7 @@ public class PreferencesHelperTest extends UiServiceTestCase { } @Test - public void syncChannelsBypassingDnd_includesProfilesOfCurrentUser() throws Exception { + public void syncHasPriorityChannels_includesProfilesOfCurrentUser() throws Exception { when(mUserProfiles.getCurrentProfileIds()).thenReturn(IntArray.wrap(new int[] {0, 10})); when(mPermissionHelper.hasPermission(anyInt())).thenReturn(true); ApplicationInfo appInfo = new ApplicationInfo(); @@ -3067,13 +3067,13 @@ public class PreferencesHelperTest extends UiServiceTestCase { mHelper.createNotificationChannel("com.example", UserHandle.getUid(10, 444), withBypass, false, false, Process.SYSTEM_UID, true); - mHelper.syncChannelsBypassingDnd(); + mHelper.syncHasPriorityChannels(); - assertThat(mHelper.areChannelsBypassingDnd()).isTrue(); + assertThat(mHelper.hasPriorityChannels()).isTrue(); } @Test - public void syncChannelsBypassingDnd_excludesOtherUsers() throws Exception { + public void syncHasPriorityChannels_excludesOtherUsers() throws Exception { when(mUserProfiles.getCurrentProfileIds()).thenReturn(IntArray.wrap(new int[] {0})); when(mPermissionHelper.hasPermission(anyInt())).thenReturn(true); ApplicationInfo appInfo = new ApplicationInfo(); @@ -3090,9 +3090,9 @@ public class PreferencesHelperTest extends UiServiceTestCase { mHelper.createNotificationChannel("com.example", UserHandle.getUid(10, 444), withBypass, false, false, Process.SYSTEM_UID, true); - mHelper.syncChannelsBypassingDnd(); + mHelper.syncHasPriorityChannels(); - assertThat(mHelper.areChannelsBypassingDnd()).isFalse(); + assertThat(mHelper.hasPriorityChannels()).isFalse(); } @Test diff --git a/services/tests/uiservicestests/src/com/android/server/notification/RankingHelperTest.java b/services/tests/uiservicestests/src/com/android/server/notification/RankingHelperTest.java index f90034614383..ec428d506e7b 100644 --- a/services/tests/uiservicestests/src/com/android/server/notification/RankingHelperTest.java +++ b/services/tests/uiservicestests/src/com/android/server/notification/RankingHelperTest.java @@ -17,9 +17,10 @@ package com.android.server.notification; import static android.app.NotificationManager.IMPORTANCE_DEFAULT; import static android.app.NotificationManager.IMPORTANCE_LOW; - import static android.platform.test.flag.junit.SetFlagsRule.DefaultInitValueType.DEVICE_DEFAULT; + import static com.google.common.truth.Truth.assertThat; + import static junit.framework.TestCase.assertEquals; import static org.junit.Assert.assertTrue; @@ -29,7 +30,6 @@ import static org.mockito.Matchers.eq; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.when; -import android.app.Flags; import android.app.Notification; import android.app.NotificationChannel; import android.app.NotificationManager; @@ -40,7 +40,6 @@ import android.content.pm.ApplicationInfo; import android.content.pm.PackageInfo; import android.content.pm.PackageManager; import android.content.pm.Signature; -import android.media.AudioAttributes; import android.net.Uri; import android.os.Build; import android.os.UserHandle; @@ -67,7 +66,6 @@ import org.mockito.MockitoAnnotations; import java.util.ArrayList; import java.util.Collections; -import java.util.List; @SmallTest @RunWith(AndroidJUnit4.class) @@ -154,7 +152,7 @@ public class RankingHelperTest extends UiServiceTestCase { .thenReturn(SOUND_URI); mTestNotificationPolicy = new NotificationManager.Policy(0, 0, 0, 0, - NotificationManager.Policy.STATE_CHANNELS_BYPASSING_DND, 0); + NotificationManager.Policy.STATE_HAS_PRIORITY_CHANNELS, 0); when(mMockZenModeHelper.getNotificationPolicy(any())).thenReturn(mTestNotificationPolicy); mHelper = new RankingHelper(getContext(), mHandler, mConfig, mMockZenModeHelper, mUsageStats, new String[] {ImportanceExtractor.class.getName()}, diff --git a/services/tests/uiservicestests/src/com/android/server/notification/ZenAdaptersTest.java b/services/tests/uiservicestests/src/com/android/server/notification/ZenAdaptersTest.java index 75552bc433c5..f3813437a9c5 100644 --- a/services/tests/uiservicestests/src/com/android/server/notification/ZenAdaptersTest.java +++ b/services/tests/uiservicestests/src/com/android/server/notification/ZenAdaptersTest.java @@ -20,10 +20,7 @@ import static android.service.notification.ZenAdapters.notificationPolicyToZenPo import static com.google.common.truth.Truth.assertThat; -import android.app.Flags; import android.app.NotificationManager.Policy; -import android.platform.test.annotations.DisableFlags; -import android.platform.test.annotations.EnableFlags; import android.platform.test.flag.junit.SetFlagsRule; import android.service.notification.ZenPolicy; @@ -137,8 +134,7 @@ public class ZenAdaptersTest extends UiServiceTestCase { } @Test - @EnableFlags(Flags.FLAG_MODES_API) - public void notificationPolicyToZenPolicy_modesApi_priorityChannels() { + public void notificationPolicyToZenPolicy_priorityChannels() { Policy policy = new Policy(0, 0, 0, 0, Policy.policyState(false, true), 0); @@ -151,20 +147,4 @@ public class ZenAdaptersTest extends UiServiceTestCase { assertThat(zenPolicyNotAllowed.getPriorityChannelsAllowed()).isEqualTo( ZenPolicy.STATE_DISALLOW); } - - @Test - @DisableFlags(Flags.FLAG_MODES_API) - public void notificationPolicyToZenPolicy_noModesApi_priorityChannelsUnset() { - Policy policy = new Policy(0, 0, 0, 0, - Policy.policyState(false, true), 0); - - ZenPolicy zenPolicy = notificationPolicyToZenPolicy(policy); - assertThat(zenPolicy.getPriorityChannelsAllowed()).isEqualTo(ZenPolicy.STATE_UNSET); - - Policy notAllowed = new Policy(0, 0, 0, 0, - Policy.policyState(false, false), 0); - ZenPolicy zenPolicyNotAllowed = notificationPolicyToZenPolicy(notAllowed); - assertThat(zenPolicyNotAllowed.getPriorityChannelsAllowed()).isEqualTo( - ZenPolicy.STATE_UNSET); - } } diff --git a/services/tests/uiservicestests/src/com/android/server/notification/ZenDeviceEffectsTest.java b/services/tests/uiservicestests/src/com/android/server/notification/ZenDeviceEffectsTest.java index af911e811e5e..9a2b748a9bcc 100644 --- a/services/tests/uiservicestests/src/com/android/server/notification/ZenDeviceEffectsTest.java +++ b/services/tests/uiservicestests/src/com/android/server/notification/ZenDeviceEffectsTest.java @@ -20,7 +20,6 @@ import static com.google.common.truth.Truth.assertThat; import static org.junit.Assert.assertThrows; -import android.app.Flags; import android.os.Parcel; import android.platform.test.flag.junit.SetFlagsRule; import android.service.notification.ZenDeviceEffects; @@ -31,7 +30,6 @@ import com.android.server.UiServiceTestCase; import com.google.common.collect.ImmutableSet; -import org.junit.Before; import org.junit.Rule; import org.junit.Test; import org.junit.runner.RunWith; @@ -42,11 +40,6 @@ public class ZenDeviceEffectsTest extends UiServiceTestCase { @Rule public final SetFlagsRule mSetFlagsRule = new SetFlagsRule(); - @Before - public final void setUp() { - mSetFlagsRule.enableFlags(Flags.FLAG_MODES_API); - } - @Test public void builder() { ZenDeviceEffects deviceEffects = diff --git a/services/tests/uiservicestests/src/com/android/server/notification/ZenModeConfigTest.java b/services/tests/uiservicestests/src/com/android/server/notification/ZenModeConfigTest.java index b42a6a5a7382..4c1544f14667 100644 --- a/services/tests/uiservicestests/src/com/android/server/notification/ZenModeConfigTest.java +++ b/services/tests/uiservicestests/src/com/android/server/notification/ZenModeConfigTest.java @@ -174,7 +174,7 @@ public class ZenModeConfigTest extends UiServiceTestCase { } assertTrue(ZenModeConfig.areAllPriorityOnlyRingerSoundsMuted(config)); - config.areChannelsBypassingDnd = true; + config.hasPriorityChannels = true; assertTrue(ZenModeConfig.areAllPriorityOnlyRingerSoundsMuted(config)); if (Flags.modesUi()) { @@ -187,7 +187,7 @@ public class ZenModeConfigTest extends UiServiceTestCase { assertFalse(ZenModeConfig.areAllPriorityOnlyRingerSoundsMuted(config)); - config.areChannelsBypassingDnd = false; + config.hasPriorityChannels = false; if (Flags.modesUi()) { config.manualRule.zenPolicy = new ZenPolicy.Builder(config.manualRule.zenPolicy) .allowPriorityChannels(false) @@ -417,7 +417,7 @@ public class ZenModeConfigTest extends UiServiceTestCase { assertTrue(ZenModeConfig.areAllPriorityOnlyRingerSoundsMuted(config)); assertTrue(ZenModeConfig.areAllZenBehaviorSoundsMuted(config)); - config.areChannelsBypassingDnd = true; + config.hasPriorityChannels = true; if (Flags.modesUi()) { config.manualRule.zenPolicy = new ZenPolicy.Builder(config.manualRule.zenPolicy) .allowPriorityChannels(true) @@ -429,7 +429,7 @@ public class ZenModeConfigTest extends UiServiceTestCase { assertFalse(ZenModeConfig.areAllPriorityOnlyRingerSoundsMuted(config)); assertFalse(ZenModeConfig.areAllZenBehaviorSoundsMuted(config)); - config.areChannelsBypassingDnd = false; + config.hasPriorityChannels = false; if (Flags.modesUi()) { config.manualRule.zenPolicy = new ZenPolicy.Builder(config.manualRule.zenPolicy) .allowPriorityChannels(false) @@ -548,7 +548,6 @@ public class ZenModeConfigTest extends UiServiceTestCase { rule.creationTime = 123; rule.id = "id"; rule.zenMode = INTERRUPTION_FILTER; - rule.modified = true; rule.name = NAME; rule.setConditionOverride(OVERRIDE_DEACTIVATE); rule.pkg = OWNER.getPackageName(); @@ -585,7 +584,6 @@ public class ZenModeConfigTest extends UiServiceTestCase { assertEquals(rule.condition, ruleActual.condition); assertEquals(rule.enabled, ruleActual.enabled); assertEquals(rule.creationTime, ruleActual.creationTime); - assertEquals(rule.modified, ruleActual.modified); assertEquals(rule.conditionId, ruleActual.conditionId); assertEquals(rule.name, ruleActual.name); assertEquals(rule.zenMode, ruleActual.zenMode); @@ -620,7 +618,6 @@ public class ZenModeConfigTest extends UiServiceTestCase { rule.creationTime = 123; rule.id = "id"; rule.zenMode = INTERRUPTION_FILTER; - rule.modified = true; rule.name = NAME; rule.setConditionOverride(OVERRIDE_DEACTIVATE); rule.pkg = OWNER.getPackageName(); @@ -651,7 +648,6 @@ public class ZenModeConfigTest extends UiServiceTestCase { assertEquals(rule.condition, parceled.condition); assertEquals(rule.enabled, parceled.enabled); assertEquals(rule.creationTime, parceled.creationTime); - assertEquals(rule.modified, parceled.modified); assertEquals(rule.conditionId, parceled.conditionId); assertEquals(rule.name, parceled.name); assertEquals(rule.zenMode, parceled.zenMode); @@ -685,7 +681,6 @@ public class ZenModeConfigTest extends UiServiceTestCase { rule.creationTime = 123; rule.id = "id"; rule.zenMode = Settings.Global.ZEN_MODE_ALARMS; - rule.modified = true; rule.name = "name"; rule.snoozing = true; rule.pkg = "b"; @@ -705,7 +700,6 @@ public class ZenModeConfigTest extends UiServiceTestCase { assertEquals(rule.condition, fromXml.condition); assertEquals(rule.enabled, fromXml.enabled); assertEquals(rule.creationTime, fromXml.creationTime); - assertEquals(rule.modified, fromXml.modified); assertEquals(rule.conditionId, fromXml.conditionId); assertEquals(rule.name, fromXml.name); assertEquals(rule.zenMode, fromXml.zenMode); @@ -721,7 +715,6 @@ public class ZenModeConfigTest extends UiServiceTestCase { rule.enabled = ENABLED; rule.id = "id"; rule.zenMode = INTERRUPTION_FILTER; - rule.modified = true; rule.name = NAME; rule.setConditionOverride(OVERRIDE_DEACTIVATE); rule.pkg = OWNER.getPackageName(); @@ -770,7 +763,6 @@ public class ZenModeConfigTest extends UiServiceTestCase { assertEquals(rule.condition, fromXml.condition); assertEquals(rule.enabled, fromXml.enabled); assertEquals(rule.creationTime, fromXml.creationTime); - assertEquals(rule.modified, fromXml.modified); assertEquals(rule.conditionId, fromXml.conditionId); assertEquals(rule.name, fromXml.name); assertEquals(rule.zenMode, fromXml.zenMode); @@ -1259,7 +1251,6 @@ public class ZenModeConfigTest extends UiServiceTestCase { rule.creationTime = 123; rule.id = "id"; rule.zenMode = ZEN_MODE_IMPORTANT_INTERRUPTIONS; - rule.modified = true; rule.name = "name"; rule.pkg = "b"; config.automaticRules.put("key", rule); @@ -1348,7 +1339,7 @@ public class ZenModeConfigTest extends UiServiceTestCase { config.setSuppressedVisualEffects(0); config.setAllowPriorityChannels(false); } - config.areChannelsBypassingDnd = false; + config.hasPriorityChannels = false; return config; } @@ -1383,7 +1374,7 @@ public class ZenModeConfigTest extends UiServiceTestCase { config.setSuppressedVisualEffects(0); config.setAllowPriorityChannels(true); } - config.areChannelsBypassingDnd = false; + config.hasPriorityChannels = false; return config; } @@ -1410,7 +1401,7 @@ public class ZenModeConfigTest extends UiServiceTestCase { config.setAllowConversationsFrom(CONVERSATION_SENDERS_NONE); config.setSuppressedVisualEffects(0); } - config.areChannelsBypassingDnd = false; + config.hasPriorityChannels = false; return config; } diff --git a/services/tests/uiservicestests/src/com/android/server/notification/ZenModeDiffTest.java b/services/tests/uiservicestests/src/com/android/server/notification/ZenModeDiffTest.java index b138c72875a6..8a5f80cb3e49 100644 --- a/services/tests/uiservicestests/src/com/android/server/notification/ZenModeDiffTest.java +++ b/services/tests/uiservicestests/src/com/android/server/notification/ZenModeDiffTest.java @@ -16,7 +16,6 @@ package com.android.server.notification; -import static android.app.Flags.FLAG_MODES_API; import static android.app.Flags.FLAG_MODES_UI; import static com.google.common.truth.Truth.assertThat; @@ -64,7 +63,6 @@ import java.lang.reflect.Modifier; import java.util.ArrayList; import java.util.Arrays; import java.util.Collections; -import java.util.HashSet; import java.util.LinkedHashSet; import java.util.List; import java.util.Optional; @@ -78,20 +76,14 @@ public class ZenModeDiffTest extends UiServiceTestCase { // version is not included in the diff; manual & automatic rules have special handling; // deleted rules are not included in the diff. public static final Set<String> ZEN_MODE_CONFIG_EXEMPT_FIELDS = - android.app.Flags.modesApi() - ? Set.of("version", "manualRule", "automaticRules", "deletedRules") - : Set.of("version", "manualRule", "automaticRules"); - - // allowPriorityChannels is flagged by android.app.modes_api - public static final Set<String> ZEN_MODE_CONFIG_FLAGGED_FIELDS = - Set.of("allowPriorityChannels"); + Set.of("version", "manualRule", "automaticRules", "deletedRules"); @Rule public final SetFlagsRule mSetFlagsRule = new SetFlagsRule(); @Parameters(name = "{0}") public static List<FlagsParameterization> getParams() { - return FlagsParameterization.progressionOf(FLAG_MODES_API, FLAG_MODES_UI); + return FlagsParameterization.progressionOf(FLAG_MODES_UI); } public ZenModeDiffTest(FlagsParameterization flags) { @@ -147,7 +139,7 @@ public class ZenModeDiffTest extends UiServiceTestCase { } @Test - @EnableFlags({FLAG_MODES_API, FLAG_MODES_UI}) + @EnableFlags(FLAG_MODES_UI) public void testRuleDiff_toStringNoChangeAddRemove() throws Exception { // Start with two identical rules ZenModeConfig.ZenRule r1 = makeRule(); @@ -164,7 +156,7 @@ public class ZenModeDiffTest extends UiServiceTestCase { } @Test - @EnableFlags({FLAG_MODES_API, FLAG_MODES_UI}) + @EnableFlags(FLAG_MODES_UI) public void testRuleDiff_toString() throws Exception { // Start with two identical rules ZenModeConfig.ZenRule r1 = makeRule(); @@ -218,7 +210,6 @@ public class ZenModeDiffTest extends UiServiceTestCase { + "mPriorityCalls:2->1, " + "mConversationSenders:2->1, " + "mAllowChannels:2->1}, " - + "modified:true->false, " + "pkg:string1->string2, " + "zenDeviceEffects:ZenDeviceEffectsDiff{" + "mGrayscale:true->false, " @@ -241,7 +232,7 @@ public class ZenModeDiffTest extends UiServiceTestCase { } @Test - @EnableFlags({FLAG_MODES_API, FLAG_MODES_UI}) + @EnableFlags(FLAG_MODES_UI) public void testRuleDiff_toStringNullStartPolicy() throws Exception { // Start with two identical rules ZenModeConfig.ZenRule r1 = makeRule(); @@ -278,7 +269,6 @@ public class ZenModeDiffTest extends UiServiceTestCase { + "creationTime:200->100, " + "enabler:string1->string2, " + "zenPolicy:ZenPolicyDiff{added}, " - + "modified:true->false, " + "pkg:string1->string2, " + "zenDeviceEffects:ZenDeviceEffectsDiff{added}, " + "triggerDescription:string1->string2, " @@ -487,14 +477,7 @@ public class ZenModeDiffTest extends UiServiceTestCase { Set.of("userModifiedFields", "zenPolicyUserModifiedFields", "zenDeviceEffectsUserModifiedFields", "deletionInstant", "disabledOrigin")); // Flagged fields are only compared if their flag is on. - if (!Flags.modesApi()) { - exemptFields.addAll( - Set.of(RuleDiff.FIELD_TYPE, RuleDiff.FIELD_TRIGGER_DESCRIPTION, - RuleDiff.FIELD_ICON_RES, RuleDiff.FIELD_ALLOW_MANUAL, - RuleDiff.FIELD_ZEN_DEVICE_EFFECTS, - RuleDiff.FIELD_LEGACY_SUPPRESSED_EFFECTS)); - } - if (Flags.modesApi() && Flags.modesUi()) { + if (Flags.modesUi()) { exemptFields.add(RuleDiff.FIELD_SNOOZING); // Obsolete. } else { exemptFields.add(RuleDiff.FIELD_CONDITION_OVERRIDE); @@ -530,35 +513,6 @@ public class ZenModeDiffTest extends UiServiceTestCase { ArrayMap<String, Object> expectedFrom = new ArrayMap<>(); ArrayMap<String, Object> expectedTo = new ArrayMap<>(); List<Field> fieldsForDiff = getFieldsForDiffCheck( - ZenModeConfig.class, getConfigExemptAndFlaggedFields(), false); - generateFieldDiffs(c1, c2, fieldsForDiff, expectedFrom, expectedTo); - - ZenModeDiff.ConfigDiff d = new ZenModeDiff.ConfigDiff(c1, c2); - assertTrue(d.hasDiff()); - - // Now diff them and check that each of the fields has a diff - for (Field f : fieldsForDiff) { - String name = f.getName(); - assertNotNull("diff not found for field: " + name, d.getDiffForField(name)); - assertTrue(d.getDiffForField(name).hasDiff()); - assertTrue("unexpected field: " + name, expectedFrom.containsKey(name)); - assertTrue("unexpected field: " + name, expectedTo.containsKey(name)); - assertEquals(expectedFrom.get(name), d.getDiffForField(name).from()); - assertEquals(expectedTo.get(name), d.getDiffForField(name).to()); - } - } - - @Test - @EnableFlags(FLAG_MODES_API) - public void testConfigDiff_fieldDiffs_flagOn() throws Exception { - // these two start the same - ZenModeConfig c1 = new ZenModeConfig(); - ZenModeConfig c2 = new ZenModeConfig(); - - // maps mapping field name -> expected output value as we set diffs - ArrayMap<String, Object> expectedFrom = new ArrayMap<>(); - ArrayMap<String, Object> expectedTo = new ArrayMap<>(); - List<Field> fieldsForDiff = getFieldsForDiffCheck( ZenModeConfig.class, ZEN_MODE_CONFIG_EXEMPT_FIELDS, false); generateFieldDiffs(c1, c2, fieldsForDiff, expectedFrom, expectedTo); @@ -656,14 +610,6 @@ public class ZenModeDiffTest extends UiServiceTestCase { assertEquals("different", automaticDiffs.get("ruleId").getDiffForField("pkg").to()); } - // Helper method that merges the base exempt fields with fields that are flagged - private Set getConfigExemptAndFlaggedFields() { - Set merged = new HashSet(); - merged.addAll(ZEN_MODE_CONFIG_EXEMPT_FIELDS); - merged.addAll(ZEN_MODE_CONFIG_FLAGGED_FIELDS); - return merged; - } - // Helper methods for working with configs, policies, rules // Just makes a zen rule with fields filled in private ZenModeConfig.ZenRule makeRule() { @@ -676,20 +622,17 @@ public class ZenModeDiffTest extends UiServiceTestCase { rule.creationTime = 123; rule.id = "ruleId"; rule.zenMode = Settings.Global.ZEN_MODE_IMPORTANT_INTERRUPTIONS; - rule.modified = false; rule.name = "name"; rule.setConditionOverride(ZenModeConfig.ZenRule.OVERRIDE_DEACTIVATE); rule.pkg = "a"; - if (android.app.Flags.modesApi()) { - rule.allowManualInvocation = true; - rule.type = AutomaticZenRule.TYPE_SCHEDULE_TIME; - rule.iconResName = "res"; - rule.triggerDescription = "At night"; - rule.zenDeviceEffects = new ZenDeviceEffects.Builder() - .setShouldDimWallpaper(true) - .build(); - rule.userModifiedFields = AutomaticZenRule.FIELD_NAME; - } + rule.allowManualInvocation = true; + rule.type = AutomaticZenRule.TYPE_SCHEDULE_TIME; + rule.iconResName = "res"; + rule.triggerDescription = "At night"; + rule.zenDeviceEffects = new ZenDeviceEffects.Builder() + .setShouldDimWallpaper(true) + .build(); + rule.userModifiedFields = AutomaticZenRule.FIELD_NAME; return rule; } diff --git a/services/tests/uiservicestests/src/com/android/server/notification/ZenModeFilteringTest.java b/services/tests/uiservicestests/src/com/android/server/notification/ZenModeFilteringTest.java index a49f5a89b11b..2f0b3ecb593a 100644 --- a/services/tests/uiservicestests/src/com/android/server/notification/ZenModeFilteringTest.java +++ b/services/tests/uiservicestests/src/com/android/server/notification/ZenModeFilteringTest.java @@ -37,7 +37,6 @@ import static org.mockito.ArgumentMatchers.any; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.when; -import android.app.Flags; import android.app.Notification; import android.app.NotificationChannel; import android.app.NotificationManager.Policy; @@ -492,8 +491,6 @@ public class ZenModeFilteringTest extends UiServiceTestCase { @Test public void testAllowChannels_priorityPackage() { - mSetFlagsRule.enableFlags(Flags.FLAG_MODES_API); - // Notification with package priority = PRIORITY_MAX (assigned to indicate canBypassDnd) NotificationRecord r = getNotificationRecord(); r.setPackagePriority(Notification.PRIORITY_MAX); diff --git a/services/tests/uiservicestests/src/com/android/server/notification/ZenModeHelperTest.java b/services/tests/uiservicestests/src/com/android/server/notification/ZenModeHelperTest.java index 31b9cf72584c..4d2f105e27b3 100644 --- a/services/tests/uiservicestests/src/com/android/server/notification/ZenModeHelperTest.java +++ b/services/tests/uiservicestests/src/com/android/server/notification/ZenModeHelperTest.java @@ -23,7 +23,6 @@ import static android.app.AutomaticZenRule.TYPE_SCHEDULE_TIME; import static android.app.AutomaticZenRule.TYPE_THEATER; import static android.app.AutomaticZenRule.TYPE_UNKNOWN; import static android.app.Flags.FLAG_BACKUP_RESTORE_LOGGING; -import static android.app.Flags.FLAG_MODES_API; import static android.app.Flags.FLAG_MODES_MULTIUSER; import static android.app.Flags.FLAG_MODES_UI; import static android.app.NotificationManager.AUTOMATIC_RULE_STATUS_ACTIVATED; @@ -85,6 +84,7 @@ import static android.service.notification.ZenPolicy.VISUAL_EFFECT_LIGHTS; import static android.service.notification.ZenPolicy.VISUAL_EFFECT_PEEK; import static com.android.internal.config.sysui.SystemUiSystemPropertiesFlags.NotificationFlags.LOG_DND_STATE_EVENTS; +import static com.android.os.dnd.DNDProtoEnums.CONV_IMPORTANT; import static com.android.os.dnd.DNDProtoEnums.PEOPLE_STARRED; import static com.android.os.dnd.DNDProtoEnums.ROOT_CONFIG; import static com.android.os.dnd.DNDProtoEnums.STATE_ALLOW; @@ -224,6 +224,7 @@ import java.util.ArrayList; import java.util.Calendar; import java.util.LinkedList; import java.util.List; +import java.util.Map; import java.util.Objects; import java.util.concurrent.CountDownLatch; import java.util.concurrent.TimeUnit; @@ -713,7 +714,6 @@ public class ZenModeHelperTest extends UiServiceTestCase { } @Test - @EnableFlags(FLAG_MODES_API) public void testTotalSilence_consolidatedPolicyDisallowsAll() { // Start with zen mode off just to make sure global/manual mode isn't doing anything. mZenModeHelper.mZenMode = ZEN_MODE_OFF; @@ -746,7 +746,6 @@ public class ZenModeHelperTest extends UiServiceTestCase { } @Test - @EnableFlags(FLAG_MODES_API) public void testAlarmsOnly_consolidatedPolicyOnlyAllowsAlarmsAndMedia() { // Start with zen mode off just to make sure global/manual mode isn't doing anything. mZenModeHelper.mZenMode = ZEN_MODE_OFF; @@ -1136,8 +1135,7 @@ public class ZenModeHelperTest extends UiServiceTestCase { @Test public void testProto() throws InvalidProtocolBufferException { mZenModeHelper.setManualZenMode(UserHandle.CURRENT, ZEN_MODE_IMPORTANT_INTERRUPTIONS, null, - Flags.modesApi() ? ORIGIN_USER_IN_SYSTEMUI : ORIGIN_SYSTEM, null, - "test", CUSTOM_PKG_UID); + ORIGIN_USER_IN_SYSTEMUI, null, "test", CUSTOM_PKG_UID); mZenModeHelper.mConfig.automaticRules = new ArrayMap<>(); // no automatic rules @@ -1262,7 +1260,6 @@ public class ZenModeHelperTest extends UiServiceTestCase { } @Test - @EnableFlags(FLAG_MODES_API) public void testProtoWithAutoRuleCustomPolicy() throws Exception { setupZenConfig(); // clear any automatic rules just to make sure @@ -1304,7 +1301,6 @@ public class ZenModeHelperTest extends UiServiceTestCase { } @Test - @EnableFlags(FLAG_MODES_API) public void testProtoWithAutoRuleWithModifiedFields() throws Exception { setupZenConfig(); mZenModeHelper.mConfig.automaticRules = new ArrayMap<>(); @@ -2005,7 +2001,6 @@ public class ZenModeHelperTest extends UiServiceTestCase { } @Test - @EnableFlags(FLAG_MODES_API) public void testReadXml_onModesApi_noUpgrade() throws Exception { // When reading XML for something that is already on the modes API system, make sure no // rules' policies get changed. @@ -2053,7 +2048,6 @@ public class ZenModeHelperTest extends UiServiceTestCase { } @Test - @EnableFlags(FLAG_MODES_API) public void testReadXml_upgradeToModesApi_makesCustomPolicies() throws Exception { // When reading in an XML file written from a pre-modes-API version, confirm that we create // a custom policy matching the global config for any automatic rule with no specified @@ -2105,7 +2099,6 @@ public class ZenModeHelperTest extends UiServiceTestCase { } @Test - @EnableFlags(FLAG_MODES_API) public void testReadXml_upgradeToModesApi_fillsInCustomPolicies() throws Exception { // When reading in an XML file written from a pre-modes-API version, confirm that for an // underspecified ZenPolicy, we fill in all of the gaps with things from the global config @@ -2165,7 +2158,6 @@ public class ZenModeHelperTest extends UiServiceTestCase { } @Test - @EnableFlags(FLAG_MODES_API) public void testReadXml_upgradeToModesApi_existingDefaultRulesGetCustomPolicy() throws Exception { setupZenConfig(); @@ -2227,7 +2219,7 @@ public class ZenModeHelperTest extends UiServiceTestCase { } @Test - @EnableFlags({FLAG_MODES_API, FLAG_MODES_UI}) + @EnableFlags(FLAG_MODES_UI) public void testReadXml_upgradeToModesUi_resetsImplicitRuleIcon() throws Exception { setupZenConfig(); mZenModeHelper.mConfig.automaticRules.clear(); @@ -2247,7 +2239,7 @@ public class ZenModeHelperTest extends UiServiceTestCase { anotherRule.type = TYPE_IMMERSIVE; mZenModeHelper.mConfig.automaticRules.put(anotherRule.id, anotherRule); - // Write with pre-modes-ui = (modes_api) version, then re-read. + // Write with pre-modes-ui version, then re-read. ByteArrayOutputStream baos = writeXmlAndPurge(ZenModeConfig.XML_VERSION_MODES_API); TypedXmlPullParser parser = Xml.newFastPullParser(); parser.setInput(new BufferedInputStream( @@ -2265,7 +2257,7 @@ public class ZenModeHelperTest extends UiServiceTestCase { } @Test - @EnableFlags({FLAG_MODES_API, FLAG_MODES_UI}) + @EnableFlags(FLAG_MODES_UI) public void testReadXml_onModesUi_implicitRulesUntouched() throws Exception { setupZenConfig(); mZenModeHelper.mConfig.automaticRules.clear(); @@ -2342,7 +2334,7 @@ public class ZenModeHelperTest extends UiServiceTestCase { // shouldn't update rule that's been modified ZenModeConfig.ZenRule updatedDefaultRule = new ZenModeConfig.ZenRule(); - updatedDefaultRule.modified = true; + updatedDefaultRule.userModifiedFields = AutomaticZenRule.FIELD_NAME; updatedDefaultRule.enabled = false; updatedDefaultRule.creationTime = 0; updatedDefaultRule.id = SCHEDULE_DEFAULT_RULE_ID; @@ -2370,8 +2362,8 @@ public class ZenModeHelperTest extends UiServiceTestCase { // will update rule that is not enabled and modified ZenModeConfig.ZenRule customDefaultRule = new ZenModeConfig.ZenRule(); customDefaultRule.pkg = SystemZenRules.PACKAGE_ANDROID; + customDefaultRule.userModifiedFields = AutomaticZenRule.FIELD_NAME; customDefaultRule.enabled = false; - customDefaultRule.modified = false; customDefaultRule.creationTime = 0; customDefaultRule.id = SCHEDULE_DEFAULT_RULE_ID; customDefaultRule.name = "Schedule Default Rule"; @@ -2391,7 +2383,7 @@ public class ZenModeHelperTest extends UiServiceTestCase { ZenModeConfig.ZenRule ruleAfterUpdating = mZenModeHelper.mConfig.automaticRules.get(SCHEDULE_DEFAULT_RULE_ID); assertEquals(customDefaultRule.enabled, ruleAfterUpdating.enabled); - assertEquals(customDefaultRule.modified, ruleAfterUpdating.modified); + assertEquals(customDefaultRule.userModifiedFields, ruleAfterUpdating.userModifiedFields); assertEquals(customDefaultRule.id, ruleAfterUpdating.id); assertEquals(customDefaultRule.conditionId, ruleAfterUpdating.conditionId); assertNotEquals(defaultRuleName, ruleAfterUpdating.name); // update name @@ -2401,8 +2393,7 @@ public class ZenModeHelperTest extends UiServiceTestCase { } @Test - @EnableFlags(FLAG_MODES_API) - public void testDefaultRulesFromConfig_modesApi_getPolicies() { + public void testDefaultRulesFromConfig_getPolicies() { // After mZenModeHelper was created, set some things in the policy so it's changed from // default. setupZenConfig(); @@ -2530,7 +2521,6 @@ public class ZenModeHelperTest extends UiServiceTestCase { ZenModeConfig.ZenRule ruleInConfig = mZenModeHelper.mConfig.automaticRules.get(id); assertTrue(ruleInConfig != null); assertEquals(zenRule.isEnabled(), ruleInConfig.enabled); - assertEquals(zenRule.isModified(), ruleInConfig.modified); assertEquals(zenRule.getConditionId(), ruleInConfig.conditionId); assertEquals(NotificationManager.zenModeFromInterruptionFilter( zenRule.getInterruptionFilter(), -1), ruleInConfig.zenMode); @@ -2551,7 +2541,6 @@ public class ZenModeHelperTest extends UiServiceTestCase { ZenModeConfig.ZenRule ruleInConfig = mZenModeHelper.mConfig.automaticRules.get(id); assertTrue(ruleInConfig != null); assertEquals(zenRule.isEnabled(), ruleInConfig.enabled); - assertEquals(zenRule.isModified(), ruleInConfig.modified); assertEquals(zenRule.getConditionId(), ruleInConfig.conditionId); assertEquals(NotificationManager.zenModeFromInterruptionFilter( zenRule.getInterruptionFilter(), -1), ruleInConfig.zenMode); @@ -2560,8 +2549,7 @@ public class ZenModeHelperTest extends UiServiceTestCase { } @Test - @EnableFlags(FLAG_MODES_API) - public void testAddAutomaticZenRule_modesApi_fillsInDefaultValues() { + public void testAddAutomaticZenRule_fillsInDefaultValues() { // When a new automatic zen rule is added with only some fields filled in, ensure that // all unset fields are filled in with device defaults. @@ -2762,7 +2750,6 @@ public class ZenModeHelperTest extends UiServiceTestCase { } @Test - @EnableFlags(FLAG_MODES_API) public void addAutomaticZenRule_fromApp_ignoresHiddenEffects() { ZenDeviceEffects zde = new ZenDeviceEffects.Builder() @@ -2799,7 +2786,6 @@ public class ZenModeHelperTest extends UiServiceTestCase { } @Test - @EnableFlags(FLAG_MODES_API) public void addAutomaticZenRule_fromSystem_respectsHiddenEffects() { ZenDeviceEffects zde = new ZenDeviceEffects.Builder() .setShouldDisplayGrayscale(true) @@ -2828,7 +2814,6 @@ public class ZenModeHelperTest extends UiServiceTestCase { } @Test - @EnableFlags(FLAG_MODES_API) public void addAutomaticZenRule_fromUser_respectsHiddenEffects() throws Exception { ZenDeviceEffects zde = new ZenDeviceEffects.Builder() .setShouldDisplayGrayscale(true) @@ -2859,7 +2844,6 @@ public class ZenModeHelperTest extends UiServiceTestCase { } @Test - @EnableFlags(FLAG_MODES_API) public void updateAutomaticZenRule_fromApp_preservesPreviousHiddenEffects() { ZenDeviceEffects original = new ZenDeviceEffects.Builder() .setShouldDisableTapToWake(true) @@ -2896,7 +2880,6 @@ public class ZenModeHelperTest extends UiServiceTestCase { } @Test - @EnableFlags(FLAG_MODES_API) public void updateAutomaticZenRule_fromSystem_updatesHiddenEffects() { ZenDeviceEffects original = new ZenDeviceEffects.Builder() .setShouldDisableTapToWake(true) @@ -2925,7 +2908,6 @@ public class ZenModeHelperTest extends UiServiceTestCase { } @Test - @EnableFlags(FLAG_MODES_API) public void updateAutomaticZenRule_fromUser_updatesHiddenEffects() { ZenDeviceEffects original = new ZenDeviceEffects.Builder() .setShouldDisableTapToWake(true) @@ -2958,7 +2940,6 @@ public class ZenModeHelperTest extends UiServiceTestCase { } @Test - @EnableFlags(FLAG_MODES_API) public void updateAutomaticZenRule_nullPolicy_doesNothing() { // Test that when updateAutomaticZenRule is called with a null policy, nothing changes // about the existing policy. @@ -2985,7 +2966,6 @@ public class ZenModeHelperTest extends UiServiceTestCase { } @Test - @EnableFlags(FLAG_MODES_API) public void updateAutomaticZenRule_overwritesExistingPolicy() { // Test that when updating an automatic zen rule with an existing policy, the newly set // fields overwrite those from the previous policy, but unset fields in the new policy @@ -3024,7 +3004,6 @@ public class ZenModeHelperTest extends UiServiceTestCase { @Test - @EnableFlags(FLAG_MODES_API) public void addAutomaticZenRule_withTypeBedtime_replacesDisabledSleeping() { ZenRule sleepingRule = createCustomAutomaticRule(ZEN_MODE_IMPORTANT_INTERRUPTIONS, ZenModeConfig.EVERY_NIGHT_DEFAULT_RULE_ID); @@ -3044,7 +3023,6 @@ public class ZenModeHelperTest extends UiServiceTestCase { } @Test - @EnableFlags(FLAG_MODES_API) public void addAutomaticZenRule_withTypeBedtime_keepsEnabledSleeping() { ZenRule sleepingRule = createCustomAutomaticRule(ZEN_MODE_IMPORTANT_INTERRUPTIONS, ZenModeConfig.EVERY_NIGHT_DEFAULT_RULE_ID); @@ -3065,7 +3043,6 @@ public class ZenModeHelperTest extends UiServiceTestCase { } @Test - @EnableFlags(FLAG_MODES_API) public void addAutomaticZenRule_withTypeBedtime_keepsCustomizedSleeping() { ZenRule sleepingRule = createCustomAutomaticRule(ZEN_MODE_IMPORTANT_INTERRUPTIONS, ZenModeConfig.EVERY_NIGHT_DEFAULT_RULE_ID); @@ -3086,7 +3063,7 @@ public class ZenModeHelperTest extends UiServiceTestCase { } @Test - @EnableFlags({FLAG_MODES_API, FLAG_MODES_UI}) + @EnableFlags(FLAG_MODES_UI) public void updateAutomaticZenRule_withTypeBedtime_replacesDisabledSleeping() { ZenRule sleepingRule = createCustomAutomaticRule(ZEN_MODE_IMPORTANT_INTERRUPTIONS, ZenModeConfig.EVERY_NIGHT_DEFAULT_RULE_ID); @@ -3113,7 +3090,34 @@ public class ZenModeHelperTest extends UiServiceTestCase { } @Test - @EnableFlags(FLAG_MODES_API) + public void getAutomaticZenRules_returnsOwnedRules() { + AutomaticZenRule myRule1 = new AutomaticZenRule.Builder("My Rule 1", Uri.parse("1")) + .setPackage(mPkg) + .setConfigurationActivity(new ComponentName(mPkg, "myActivity")) + .build(); + AutomaticZenRule myRule2 = new AutomaticZenRule.Builder("My Rule 2", Uri.parse("2")) + .setPackage(mPkg) + .setConfigurationActivity(new ComponentName(mPkg, "myActivity")) + .build(); + AutomaticZenRule otherPkgRule = new AutomaticZenRule.Builder("Other", Uri.parse("3")) + .setPackage("com.other.package") + .setConfigurationActivity(new ComponentName("com.other.package", "theirActivity")) + .build(); + + String rule1Id = mZenModeHelper.addAutomaticZenRule(UserHandle.CURRENT, mPkg, myRule1, + ORIGIN_APP, "reason", CUSTOM_PKG_UID); + String rule2Id = mZenModeHelper.addAutomaticZenRule(UserHandle.CURRENT, mPkg, myRule2, + ORIGIN_APP, "reason", CUSTOM_PKG_UID); + String otherRuleId = mZenModeHelper.addAutomaticZenRule(UserHandle.CURRENT, + "com.other.package", otherPkgRule, ORIGIN_APP, "reason", CUSTOM_PKG_UID); + + Map<String, AutomaticZenRule> rules = mZenModeHelper.getAutomaticZenRules( + UserHandle.CURRENT, CUSTOM_PKG_UID); + + assertThat(rules.keySet()).containsExactly(rule1Id, rule2Id); + } + + @Test public void testSetManualZenMode() { setupZenConfig(); @@ -3133,7 +3137,6 @@ public class ZenModeHelperTest extends UiServiceTestCase { } @Test - @EnableFlags(FLAG_MODES_API) @DisableFlags(FLAG_MODES_UI) public void setManualZenMode_off_snoozesActiveRules() { for (ZenChangeOrigin origin : ZenChangeOrigin.values()) { @@ -3172,7 +3175,7 @@ public class ZenModeHelperTest extends UiServiceTestCase { } @Test - @EnableFlags({FLAG_MODES_API, FLAG_MODES_UI}) + @EnableFlags(FLAG_MODES_UI) public void setManualZenMode_off_doesNotSnoozeRulesIfFromUserInSystemUi() { for (ZenChangeOrigin origin : ZenChangeOrigin.values()) { // Start with an active rule and an inactive rule @@ -3246,7 +3249,7 @@ public class ZenModeHelperTest extends UiServiceTestCase { // Turn zen mode on (to important_interruptions) // Need to additionally call the looper in order to finish the post-apply-config process mZenModeHelper.setManualZenMode(UserHandle.CURRENT, ZEN_MODE_IMPORTANT_INTERRUPTIONS, null, - Flags.modesApi() ? ORIGIN_USER_IN_SYSTEMUI : ORIGIN_SYSTEM, "", null, SYSTEM_UID); + ORIGIN_USER_IN_SYSTEMUI, "", null, SYSTEM_UID); // Now turn zen mode off, but via a different package UID -- this should get registered as // "not an action by the user" because some other app is changing zen mode @@ -3273,14 +3276,13 @@ public class ZenModeHelperTest extends UiServiceTestCase { assertEquals(ZEN_MODE_IMPORTANT_INTERRUPTIONS, mZenModeEventLogger.getNewZenMode(0)); assertEquals(DNDProtoEnums.MANUAL_RULE, mZenModeEventLogger.getChangedRuleType(0)); assertEquals(1, mZenModeEventLogger.getNumRulesActive(0)); - assertThat(mZenModeEventLogger.getFromSystemOrSystemUi(0)).isEqualTo( - !(Flags.modesUi() || Flags.modesApi())); + assertThat(mZenModeEventLogger.getFromSystemOrSystemUi(0)).isFalse(); assertTrue(mZenModeEventLogger.getIsUserAction(0)); assertEquals(SYSTEM_UID, mZenModeEventLogger.getPackageUid(0)); checkDndProtoMatchesSetupZenConfig(mZenModeEventLogger.getPolicyProto(0)); // change origin should be populated only under modes_ui assertThat(mZenModeEventLogger.getChangeOrigin(0)).isEqualTo( - (Flags.modesApi() && Flags.modesUi()) ? ORIGIN_USER_IN_SYSTEMUI : 0); + (Flags.modesUi()) ? ORIGIN_USER_IN_SYSTEMUI : 0); // and from turning zen mode off: // - event ID: DND_TURNED_OFF @@ -3298,11 +3300,7 @@ public class ZenModeHelperTest extends UiServiceTestCase { assertEquals(0, mZenModeEventLogger.getNumRulesActive(1)); assertFalse(mZenModeEventLogger.getIsUserAction(1)); assertEquals(CUSTOM_PKG_UID, mZenModeEventLogger.getPackageUid(1)); - if (Flags.modesApi()) { - assertThat(mZenModeEventLogger.getPolicyProto(1)).isNull(); - } else { - checkDndProtoMatchesSetupZenConfig(mZenModeEventLogger.getPolicyProto(1)); - } + assertThat(mZenModeEventLogger.getPolicyProto(1)).isNull(); assertThat(mZenModeEventLogger.getChangeOrigin(1)).isEqualTo( Flags.modesUi() ? ORIGIN_APP : 0); } @@ -3334,8 +3332,7 @@ public class ZenModeHelperTest extends UiServiceTestCase { // Event 2: "User" turns off the automatic rule (sets it to not enabled) zenRule.setEnabled(false); mZenModeHelper.updateAutomaticZenRule(UserHandle.CURRENT, id, zenRule, - Flags.modesApi() ? ORIGIN_USER_IN_SYSTEMUI : ORIGIN_SYSTEM, "", - SYSTEM_UID); + ORIGIN_USER_IN_SYSTEMUI, "", SYSTEM_UID); AutomaticZenRule systemRule = new AutomaticZenRule("systemRule", null, @@ -3345,8 +3342,7 @@ public class ZenModeHelperTest extends UiServiceTestCase { NotificationManager.INTERRUPTION_FILTER_PRIORITY, true); String systemId = mZenModeHelper.addAutomaticZenRule(UserHandle.CURRENT, mContext.getPackageName(), systemRule, - Flags.modesApi() ? ORIGIN_USER_IN_SYSTEMUI : ORIGIN_SYSTEM, "test", - SYSTEM_UID); + ORIGIN_USER_IN_SYSTEMUI, "test", SYSTEM_UID); // Event 3: turn on the system rule mZenModeHelper.setAutomaticZenRuleState(UserHandle.CURRENT, systemId, @@ -3355,8 +3351,7 @@ public class ZenModeHelperTest extends UiServiceTestCase { // Event 4: "User" deletes the rule mZenModeHelper.removeAutomaticZenRule(UserHandle.CURRENT, systemId, - Flags.modesApi() ? ORIGIN_USER_IN_SYSTEMUI : ORIGIN_SYSTEM, "", - SYSTEM_UID); + ORIGIN_USER_IN_SYSTEMUI, "", SYSTEM_UID); // In total, this represents 4 events assertEquals(4, mZenModeEventLogger.numLoggedChanges()); @@ -3394,11 +3389,7 @@ public class ZenModeHelperTest extends UiServiceTestCase { assertTrue(mZenModeEventLogger.getIsUserAction(1)); assertThat(mZenModeEventLogger.getPackageUid(1)).isEqualTo( Flags.modesUi() ? CUSTOM_PKG_UID : SYSTEM_UID); - if (Flags.modesApi()) { - assertThat(mZenModeEventLogger.getPolicyProto(1)).isNull(); - } else { - checkDndProtoMatchesSetupZenConfig(mZenModeEventLogger.getPolicyProto(1)); - } + assertThat(mZenModeEventLogger.getPolicyProto(1)).isNull(); assertThat(mZenModeEventLogger.getChangeOrigin(1)).isEqualTo( Flags.modesUi() ? ORIGIN_USER_IN_SYSTEMUI : 0); @@ -3426,7 +3417,6 @@ public class ZenModeHelperTest extends UiServiceTestCase { } @Test - @EnableFlags(FLAG_MODES_API) public void testZenModeEventLog_automaticRuleActivatedFromAppByAppAndUser() throws IllegalArgumentException { mTestFlagResolver.setFlagOverride(LOG_DND_STATE_EVENTS, true); @@ -3816,13 +3806,13 @@ public class ZenModeHelperTest extends UiServiceTestCase { // Now change apps bypassing to true ZenModeConfig newConfig = mZenModeHelper.mConfig.copy(); - newConfig.areChannelsBypassingDnd = true; + newConfig.hasPriorityChannels = true; mZenModeHelper.setNotificationPolicy(UserHandle.CURRENT, newConfig.toNotificationPolicy(), ORIGIN_SYSTEM, SYSTEM_UID); assertEquals(2, mZenModeEventLogger.numLoggedChanges()); // and then back to false, all without changing anything else - newConfig.areChannelsBypassingDnd = false; + newConfig.hasPriorityChannels = false; mZenModeHelper.setNotificationPolicy(UserHandle.CURRENT, newConfig.toNotificationPolicy(), ORIGIN_SYSTEM, SYSTEM_UID); assertEquals(3, mZenModeEventLogger.numLoggedChanges()); @@ -3869,10 +3859,9 @@ public class ZenModeHelperTest extends UiServiceTestCase { } @Test - @EnableFlags(FLAG_MODES_API) public void testZenModeEventLog_policyAllowChannels() { - // when modes_api flag is on, ensure that any change in allow_channels gets logged, - // even when there are no other changes. + // Ensure that any change in allow_channels gets logged, even when there are no other + // changes. mTestFlagResolver.setFlagOverride(LOG_DND_STATE_EVENTS, true); // Default zen config has allow channels = priority (aka on) @@ -3919,7 +3908,6 @@ public class ZenModeHelperTest extends UiServiceTestCase { } @Test - @EnableFlags(FLAG_MODES_API) public void testZenModeEventLog_ruleWithInterruptionFilterAll_notLoggedAsDndChange() { mTestFlagResolver.setFlagOverride(LOG_DND_STATE_EVENTS, true); setupZenConfig(); @@ -3961,7 +3949,6 @@ public class ZenModeHelperTest extends UiServiceTestCase { } @Test - @EnableFlags(FLAG_MODES_API) public void testZenModeEventLog_activeRuleTypes() { mTestFlagResolver.setFlagOverride(LOG_DND_STATE_EVENTS, true); setupZenConfig(); @@ -4050,43 +4037,7 @@ public class ZenModeHelperTest extends UiServiceTestCase { } @Test - @DisableFlags(FLAG_MODES_API) - public void testUpdateConsolidatedPolicy_preModesApiDefaultRulesOnly_takesGlobalDefault() { - setupZenConfig(); - // When there's one automatic rule active and it doesn't specify a policy, test that the - // resulting consolidated policy is one that matches the default rule settings. - AutomaticZenRule zenRule = new AutomaticZenRule("name", - null, - new ComponentName(CUSTOM_PKG_NAME, "ScheduleConditionProvider"), - ZenModeConfig.toScheduleConditionId(new ScheduleInfo()), - null, - NotificationManager.INTERRUPTION_FILTER_PRIORITY, true); - String id = mZenModeHelper.addAutomaticZenRule(UserHandle.CURRENT, - mContext.getPackageName(), zenRule, ORIGIN_SYSTEM, "test", SYSTEM_UID); - - // enable the rule - mZenModeHelper.setAutomaticZenRuleState(UserHandle.CURRENT, id, - new Condition(zenRule.getConditionId(), "", STATE_TRUE), - ORIGIN_SYSTEM, SYSTEM_UID); - - assertEquals(mZenModeHelper.getNotificationPolicy(UserHandle.CURRENT), - mZenModeHelper.getConsolidatedNotificationPolicy()); - - // inspect the consolidated policy. Based on setupZenConfig() values. - assertFalse(mZenModeHelper.mConsolidatedPolicy.allowAlarms()); - assertFalse(mZenModeHelper.mConsolidatedPolicy.allowMedia()); - assertFalse(mZenModeHelper.mConsolidatedPolicy.allowSystem()); - assertTrue(mZenModeHelper.mConsolidatedPolicy.allowReminders()); - assertTrue(mZenModeHelper.mConsolidatedPolicy.allowCalls()); - assertEquals(PRIORITY_SENDERS_STARRED, mZenModeHelper.mConsolidatedPolicy.allowCallsFrom()); - assertTrue(mZenModeHelper.mConsolidatedPolicy.allowMessages()); - assertTrue(mZenModeHelper.mConsolidatedPolicy.allowConversations()); - assertTrue(mZenModeHelper.mConsolidatedPolicy.allowRepeatCallers()); - assertFalse(mZenModeHelper.mConsolidatedPolicy.showBadges()); - } - - @Test - public void testUpdateConsolidatedPolicy_modesApiDefaultRulesOnly_takesDefault() { + public void testUpdateConsolidatedPolicy_defaultRulesOnly_takesDefault() { setupZenConfig(); // When there's one automatic rule active and it doesn't specify a policy, test that the @@ -4113,53 +4064,7 @@ public class ZenModeHelperTest extends UiServiceTestCase { } @Test - @DisableFlags(FLAG_MODES_API) - public void testUpdateConsolidatedPolicy_preModesApiCustomPolicyOnly_fillInWithGlobal() { - setupZenConfig(); - - // when there's only one automatic rule active and it has a custom policy, make sure that's - // what the consolidated policy reflects whether or not it's stricter than what the global - // config would specify. - ZenPolicy customPolicy = new ZenPolicy.Builder() - .allowAlarms(true) // more lenient than default - .allowMedia(true) // more lenient than default - .allowRepeatCallers(false) // more restrictive than default - .allowCalls(ZenPolicy.PEOPLE_TYPE_NONE) // more restrictive than default - .showBadges(true) // more lenient - .showPeeking(false) // more restrictive - .build(); - - AutomaticZenRule zenRule = new AutomaticZenRule("name", - null, - new ComponentName(CUSTOM_PKG_NAME, "ScheduleConditionProvider"), - ZenModeConfig.toScheduleConditionId(new ScheduleInfo()), - customPolicy, - NotificationManager.INTERRUPTION_FILTER_PRIORITY, true); - String id = mZenModeHelper.addAutomaticZenRule(UserHandle.CURRENT, - mContext.getPackageName(), zenRule, ORIGIN_SYSTEM, "test", SYSTEM_UID); - - // enable the rule; this will update the consolidated policy - mZenModeHelper.setAutomaticZenRuleState(UserHandle.CURRENT, id, - new Condition(zenRule.getConditionId(), "", STATE_TRUE), ORIGIN_SYSTEM, SYSTEM_UID); - - // since this is the only active rule, the consolidated policy should match the custom - // policy for every field specified, and take default values (from device default or - // manual policy) for unspecified things - assertTrue(mZenModeHelper.mConsolidatedPolicy.allowAlarms()); // custom - assertTrue(mZenModeHelper.mConsolidatedPolicy.allowMedia()); // custom - assertFalse(mZenModeHelper.mConsolidatedPolicy.allowSystem()); // default - assertTrue(mZenModeHelper.mConsolidatedPolicy.allowReminders()); // default - assertFalse(mZenModeHelper.mConsolidatedPolicy.allowCalls()); // custom - assertTrue(mZenModeHelper.mConsolidatedPolicy.allowMessages()); // default - assertTrue(mZenModeHelper.mConsolidatedPolicy.allowConversations()); // default - assertFalse(mZenModeHelper.mConsolidatedPolicy.allowRepeatCallers()); // custom - assertTrue(mZenModeHelper.mConsolidatedPolicy.showBadges()); // custom - assertFalse(mZenModeHelper.mConsolidatedPolicy.showPeeking()); // custom - } - - @Test - @EnableFlags(FLAG_MODES_API) - public void testUpdateConsolidatedPolicy_modesApiCustomPolicyOnly_fillInWithDefault() { + public void testUpdateConsolidatedPolicy_customPolicyOnly_fillInWithDefault() { setupZenConfig(); // when there's only one automatic rule active and it has a custom policy, make sure that's @@ -4204,68 +4109,7 @@ public class ZenModeHelperTest extends UiServiceTestCase { } @Test - @DisableFlags(FLAG_MODES_API) - public void testUpdateConsolidatedPolicy_preModesApiDefaultAndCustomActive_mergesWithGlobal() { - setupZenConfig(); - - // when there are two rules active, one inheriting the default policy and one setting its - // own custom policy, they should be merged to form the most restrictive combination. - - // rule 1: no custom policy - AutomaticZenRule zenRule = new AutomaticZenRule("name", - null, - new ComponentName(CUSTOM_PKG_NAME, "ScheduleConditionProvider"), - ZenModeConfig.toScheduleConditionId(new ScheduleInfo()), - null, - NotificationManager.INTERRUPTION_FILTER_PRIORITY, true); - String id = mZenModeHelper.addAutomaticZenRule(UserHandle.CURRENT, - mContext.getPackageName(), zenRule, ORIGIN_SYSTEM, "test", SYSTEM_UID); - - // enable rule 1 - mZenModeHelper.setAutomaticZenRuleState(UserHandle.CURRENT, id, - new Condition(zenRule.getConditionId(), "", STATE_TRUE), ORIGIN_SYSTEM, SYSTEM_UID); - - // custom policy for rule 2 - ZenPolicy customPolicy = new ZenPolicy.Builder() - .allowAlarms(true) // more lenient than default - .allowMedia(true) // more lenient than default - .allowRepeatCallers(false) // more restrictive than default - .allowCalls(ZenPolicy.PEOPLE_TYPE_NONE) // more restrictive than default - .showBadges(true) // more lenient - .showPeeking(false) // more restrictive - .build(); - - AutomaticZenRule zenRule2 = new AutomaticZenRule("name2", - null, - new ComponentName(CUSTOM_PKG_NAME, "ScheduleConditionProvider"), - ZenModeConfig.toScheduleConditionId(new ScheduleInfo()), - customPolicy, - NotificationManager.INTERRUPTION_FILTER_PRIORITY, true); - String id2 = mZenModeHelper.addAutomaticZenRule(UserHandle.CURRENT, - mContext.getPackageName(), zenRule2, ORIGIN_SYSTEM, "test", SYSTEM_UID); - - // enable rule 2; this will update the consolidated policy - mZenModeHelper.setAutomaticZenRuleState(UserHandle.CURRENT, id2, - new Condition(zenRule2.getConditionId(), "", STATE_TRUE), - ORIGIN_SYSTEM, SYSTEM_UID); - - // now both rules should be on, and the consolidated policy should reflect the most - // restrictive option of each of the two - assertFalse(mZenModeHelper.mConsolidatedPolicy.allowAlarms()); // default stricter - assertFalse(mZenModeHelper.mConsolidatedPolicy.allowMedia()); // default stricter - assertFalse(mZenModeHelper.mConsolidatedPolicy.allowSystem()); // default, unset in custom - assertTrue(mZenModeHelper.mConsolidatedPolicy.allowReminders()); // default - assertFalse(mZenModeHelper.mConsolidatedPolicy.allowCalls()); // custom stricter - assertTrue(mZenModeHelper.mConsolidatedPolicy.allowMessages()); // default, unset in custom - assertTrue(mZenModeHelper.mConsolidatedPolicy.allowConversations()); // default - assertFalse(mZenModeHelper.mConsolidatedPolicy.allowRepeatCallers()); // custom stricter - assertFalse(mZenModeHelper.mConsolidatedPolicy.showBadges()); // default stricter - assertFalse(mZenModeHelper.mConsolidatedPolicy.showPeeking()); // custom stricter - } - - @Test - @EnableFlags(FLAG_MODES_API) - public void testUpdateConsolidatedPolicy_modesApiDefaultAndCustomActive_mergesWithDefault() { + public void testUpdateConsolidatedPolicy_defaultAndCustomActive_mergesWithDefault() { setupZenConfig(); // when there are two rules active, one inheriting the default policy and one setting its @@ -4328,7 +4172,6 @@ public class ZenModeHelperTest extends UiServiceTestCase { } @Test - @EnableFlags(FLAG_MODES_API) public void testUpdateConsolidatedPolicy_allowChannels() { setupZenConfig(); @@ -4377,7 +4220,6 @@ public class ZenModeHelperTest extends UiServiceTestCase { } @Test - @EnableFlags(FLAG_MODES_API) public void testUpdateConsolidatedPolicy_ignoresActiveRulesWithInterruptionFilterAll() { setupZenConfig(); @@ -4428,7 +4270,6 @@ public class ZenModeHelperTest extends UiServiceTestCase { } @Test - @EnableFlags(FLAG_MODES_API) public void zenRuleToAutomaticZenRule_allFields() { when(mPackageManager.getPackagesForUid(anyInt())).thenReturn( new String[]{OWNER.getPackageName()}); @@ -4442,7 +4283,6 @@ public class ZenModeHelperTest extends UiServiceTestCase { rule.creationTime = 123; rule.id = "id"; rule.zenMode = INTERRUPTION_FILTER_ZR; - rule.modified = true; rule.name = NAME; rule.setConditionOverride(OVERRIDE_DEACTIVATE); rule.pkg = OWNER.getPackageName(); @@ -4473,7 +4313,6 @@ public class ZenModeHelperTest extends UiServiceTestCase { } @Test - @EnableFlags(FLAG_MODES_API) public void automaticZenRuleToZenRule_allFields() { when(mPackageManager.getPackagesForUid(anyInt())).thenReturn( new String[]{OWNER.getPackageName()}); @@ -4515,7 +4354,6 @@ public class ZenModeHelperTest extends UiServiceTestCase { } @Test - @EnableFlags(FLAG_MODES_API) public void updateAutomaticZenRule_fromApp_updatesNameUnlessUserModified() { // Add a starting rule with the name OriginalName. AutomaticZenRule azrBase = new AutomaticZenRule.Builder("OriginalName", CONDITION_ID) @@ -4573,7 +4411,6 @@ public class ZenModeHelperTest extends UiServiceTestCase { } @Test - @EnableFlags(FLAG_MODES_API) public void updateAutomaticZenRule_fromUser_updatesBitmaskAndValue() { // Adds a starting rule with empty zen policies and device effects AutomaticZenRule azrBase = new AutomaticZenRule.Builder(NAME, CONDITION_ID) @@ -4627,7 +4464,6 @@ public class ZenModeHelperTest extends UiServiceTestCase { } @Test - @EnableFlags(FLAG_MODES_API) public void updateAutomaticZenRule_fromSystemUi_updatesValues() { // Adds a starting rule with empty zen policies and device effects AutomaticZenRule azrBase = new AutomaticZenRule.Builder(NAME, CONDITION_ID) @@ -4678,7 +4514,6 @@ public class ZenModeHelperTest extends UiServiceTestCase { } @Test - @EnableFlags(FLAG_MODES_API) public void updateAutomaticZenRule_fromApp_updatesValuesIfRuleNotUserModified() { // Adds a starting rule with empty zen policies and device effects AutomaticZenRule azrBase = new AutomaticZenRule.Builder(NAME, CONDITION_ID) @@ -4754,7 +4589,6 @@ public class ZenModeHelperTest extends UiServiceTestCase { } @Test - @EnableFlags(FLAG_MODES_API) public void addAutomaticZenRule_updatesValues() { // Adds a starting rule with empty zen policies and device effects AutomaticZenRule azrBase = new AutomaticZenRule.Builder(NAME, CONDITION_ID) @@ -4781,7 +4615,6 @@ public class ZenModeHelperTest extends UiServiceTestCase { } @Test - @EnableFlags(FLAG_MODES_API) public void updateAutomaticZenRule_nullDeviceEffectsUpdate() { // Adds a starting rule with empty zen policies and device effects ZenDeviceEffects zde = new ZenDeviceEffects.Builder().setShouldUseNightMode(true).build(); @@ -4809,7 +4642,6 @@ public class ZenModeHelperTest extends UiServiceTestCase { } @Test - @EnableFlags(FLAG_MODES_API) public void updateAutomaticZenRule_nullPolicyUpdate() { // Adds a starting rule with set zen policy and empty device effects AutomaticZenRule azrBase = new AutomaticZenRule.Builder(NAME, CONDITION_ID) @@ -4838,7 +4670,6 @@ public class ZenModeHelperTest extends UiServiceTestCase { } @Test - @EnableFlags(FLAG_MODES_API) public void automaticZenRuleToZenRule_nullToNonNullPolicyUpdate() { when(mContext.checkCallingPermission(anyString())) .thenReturn(PackageManager.PERMISSION_GRANTED); @@ -4902,7 +4733,6 @@ public class ZenModeHelperTest extends UiServiceTestCase { } @Test - @EnableFlags(FLAG_MODES_API) public void automaticZenRuleToZenRule_nullToNonNullDeviceEffectsUpdate() { // Adds a starting rule with empty zen policies and device effects AutomaticZenRule azrBase = new AutomaticZenRule.Builder(NAME, CONDITION_ID) @@ -5007,7 +4837,6 @@ public class ZenModeHelperTest extends UiServiceTestCase { } @Test - @EnableFlags(FLAG_MODES_API) public void testUpdateAutomaticRule_activated_triggersBroadcast() throws Exception { setupZenConfig(); @@ -5047,7 +4876,6 @@ public class ZenModeHelperTest extends UiServiceTestCase { } @Test - @EnableFlags(FLAG_MODES_API) public void testUpdateAutomaticRule_deactivatedByUser_triggersBroadcast() throws Exception { setupZenConfig(); @@ -5091,7 +4919,6 @@ public class ZenModeHelperTest extends UiServiceTestCase { } @Test - @EnableFlags(FLAG_MODES_API) public void testUpdateAutomaticRule_deactivatedByApp_triggersBroadcast() throws Exception { setupZenConfig(); @@ -5167,7 +4994,6 @@ public class ZenModeHelperTest extends UiServiceTestCase { } @Test - @EnableFlags(FLAG_MODES_API) public void updateAutomaticZenRule_ruleChanged_deactivatesRule() { assertThat(mZenModeHelper.getZenMode()).isEqualTo(ZEN_MODE_OFF); AutomaticZenRule rule = new AutomaticZenRule.Builder("rule", CONDITION_ID) @@ -5191,7 +5017,6 @@ public class ZenModeHelperTest extends UiServiceTestCase { } @Test - @EnableFlags(FLAG_MODES_API) public void updateAutomaticZenRule_ruleNotChanged_doesNotDeactivateRule() { assertThat(mZenModeHelper.getZenMode()).isEqualTo(ZEN_MODE_OFF); AutomaticZenRule rule = new AutomaticZenRule.Builder("rule", CONDITION_ID) @@ -5214,7 +5039,7 @@ public class ZenModeHelperTest extends UiServiceTestCase { } @Test - @EnableFlags({FLAG_MODES_API, FLAG_MODES_UI}) + @EnableFlags(FLAG_MODES_UI) public void updateAutomaticZenRule_ruleChangedByUser_doesNotDeactivateRule() { assertThat(mZenModeHelper.getZenMode()).isEqualTo(ZEN_MODE_OFF); AutomaticZenRule rule = new AutomaticZenRule.Builder("rule", CONDITION_ID) @@ -5239,7 +5064,6 @@ public class ZenModeHelperTest extends UiServiceTestCase { } @Test - @EnableFlags(FLAG_MODES_API) public void updateAutomaticZenRule_ruleChangedByUser_doesNotDeactivateRule_forWatch() { when(mContext.getPackageManager()).thenReturn(mPackageManager); when(mPackageManager.hasSystemFeature(PackageManager.FEATURE_WATCH)).thenReturn(true); @@ -5266,7 +5090,7 @@ public class ZenModeHelperTest extends UiServiceTestCase { } @Test - @EnableFlags({FLAG_MODES_API, FLAG_MODES_UI}) + @EnableFlags(FLAG_MODES_UI) public void updateAutomaticZenRule_ruleDisabledByUser_doesNotReactivateOnReenable() { assertThat(mZenModeHelper.getZenMode()).isEqualTo(ZEN_MODE_OFF); AutomaticZenRule rule = new AutomaticZenRule.Builder("rule", CONDITION_ID) @@ -5291,7 +5115,7 @@ public class ZenModeHelperTest extends UiServiceTestCase { } @Test - @EnableFlags({FLAG_MODES_API, FLAG_MODES_UI}) + @EnableFlags(FLAG_MODES_UI) public void updateAutomaticZenRule_changeOwnerForSystemRule_allowed() { when(mContext.checkCallingPermission(anyString())) .thenReturn(PackageManager.PERMISSION_GRANTED); @@ -5314,7 +5138,7 @@ public class ZenModeHelperTest extends UiServiceTestCase { } @Test - @EnableFlags({FLAG_MODES_API, FLAG_MODES_UI}) + @EnableFlags(FLAG_MODES_UI) public void updateAutomaticZenRule_changeOwnerForAppOwnedRule_ignored() { AutomaticZenRule original = new AutomaticZenRule.Builder("Rule", Uri.EMPTY) .setOwner(new ComponentName(mContext.getPackageName(), "old.third.party.cps")) @@ -5335,7 +5159,6 @@ public class ZenModeHelperTest extends UiServiceTestCase { } @Test - @EnableFlags(FLAG_MODES_API) public void removeAutomaticZenRule_propagatesOriginToEffectsApplier() { mZenModeHelper.setDeviceEffectsApplier(mDeviceEffectsApplier); reset(mDeviceEffectsApplier); @@ -5358,7 +5181,6 @@ public class ZenModeHelperTest extends UiServiceTestCase { } @Test - @EnableFlags(FLAG_MODES_API) public void testDeviceEffects_applied() { mZenModeHelper.setDeviceEffectsApplier(mDeviceEffectsApplier); verify(mDeviceEffectsApplier).apply(eq(NO_EFFECTS), eq(ORIGIN_INIT)); @@ -5384,7 +5206,6 @@ public class ZenModeHelperTest extends UiServiceTestCase { } @Test - @EnableFlags(FLAG_MODES_API) public void testSettingDeviceEffects_throwsExceptionIfAlreadySet() { mZenModeHelper.setDeviceEffectsApplier(mDeviceEffectsApplier); @@ -5394,7 +5215,6 @@ public class ZenModeHelperTest extends UiServiceTestCase { } @Test - @EnableFlags(FLAG_MODES_API) public void testDeviceEffects_onDeactivateRule_applied() { mZenModeHelper.setDeviceEffectsApplier(mDeviceEffectsApplier); @@ -5413,7 +5233,6 @@ public class ZenModeHelperTest extends UiServiceTestCase { } @Test - @EnableFlags(FLAG_MODES_API) public void testDeviceEffects_changeToConsolidatedEffects_applied() { mZenModeHelper.setDeviceEffectsApplier(mDeviceEffectsApplier); verify(mDeviceEffectsApplier).apply(eq(NO_EFFECTS), eq(ORIGIN_INIT)); @@ -5453,7 +5272,6 @@ public class ZenModeHelperTest extends UiServiceTestCase { } @Test - @EnableFlags(FLAG_MODES_API) public void testDeviceEffects_noChangeToConsolidatedEffects_notApplied() { mZenModeHelper.setDeviceEffectsApplier(mDeviceEffectsApplier); verify(mDeviceEffectsApplier).apply(eq(NO_EFFECTS), eq(ORIGIN_INIT)); @@ -5478,7 +5296,6 @@ public class ZenModeHelperTest extends UiServiceTestCase { } @Test - @EnableFlags(FLAG_MODES_API) public void testDeviceEffects_activeBeforeApplierProvided_appliedWhenProvided() { ZenDeviceEffects zde = new ZenDeviceEffects.Builder().setShouldUseNightMode(true).build(); String ruleId = addRuleWithEffects(zde); @@ -5494,7 +5311,6 @@ public class ZenModeHelperTest extends UiServiceTestCase { } @Test - @EnableFlags(FLAG_MODES_API) public void testDeviceEffects_onUserSwitch_appliedImmediately() { mZenModeHelper.setDeviceEffectsApplier(mDeviceEffectsApplier); verify(mDeviceEffectsApplier).apply(eq(NO_EFFECTS), eq(ORIGIN_INIT)); @@ -5522,7 +5338,7 @@ public class ZenModeHelperTest extends UiServiceTestCase { } @Test - @EnableFlags({FLAG_MODES_API, FLAG_MODES_UI, FLAG_PREVENT_ZEN_DEVICE_EFFECTS_WHILE_DRIVING}) + @EnableFlags({FLAG_MODES_UI, FLAG_PREVENT_ZEN_DEVICE_EFFECTS_WHILE_DRIVING}) public void testDeviceEffects_allowsGrayscale() { mZenModeHelper.setDeviceEffectsApplier(mDeviceEffectsApplier); reset(mDeviceEffectsApplier); @@ -5539,7 +5355,7 @@ public class ZenModeHelperTest extends UiServiceTestCase { } @Test - @EnableFlags({FLAG_MODES_API, FLAG_MODES_UI, FLAG_PREVENT_ZEN_DEVICE_EFFECTS_WHILE_DRIVING}) + @EnableFlags({FLAG_MODES_UI, FLAG_PREVENT_ZEN_DEVICE_EFFECTS_WHILE_DRIVING}) public void testDeviceEffects_whileDriving_avoidsGrayscale() { mZenModeHelper.setDeviceEffectsApplier(mDeviceEffectsApplier); reset(mDeviceEffectsApplier); @@ -5563,7 +5379,7 @@ public class ZenModeHelperTest extends UiServiceTestCase { } @Test - @EnableFlags({FLAG_MODES_API, FLAG_MODES_UI, FLAG_PREVENT_ZEN_DEVICE_EFFECTS_WHILE_DRIVING}) + @EnableFlags({FLAG_MODES_UI, FLAG_PREVENT_ZEN_DEVICE_EFFECTS_WHILE_DRIVING}) public void testDeviceEffects_whileDrivingWithGrayscale_allowsGrayscale() { mZenModeHelper.setDeviceEffectsApplier(mDeviceEffectsApplier); reset(mDeviceEffectsApplier); @@ -5594,7 +5410,6 @@ public class ZenModeHelperTest extends UiServiceTestCase { } @Test - @EnableFlags(FLAG_MODES_API) public void removeAndAddAutomaticZenRule_wasCustomized_isRestored() { // Start with a rule. mZenModeHelper.mConfig.automaticRules.clear(); @@ -5651,7 +5466,6 @@ public class ZenModeHelperTest extends UiServiceTestCase { } @Test - @EnableFlags(FLAG_MODES_API) public void removeAndAddAutomaticZenRule_wasNotCustomized_isNotRestored() { // Start with a single rule. mZenModeHelper.mConfig.automaticRules.clear(); @@ -5685,7 +5499,6 @@ public class ZenModeHelperTest extends UiServiceTestCase { } @Test - @EnableFlags(FLAG_MODES_API) public void removeAndAddAutomaticZenRule_recreatedButNotByApp_isNotRestored() { // Start with a single rule. mZenModeHelper.mConfig.automaticRules.clear(); @@ -5736,7 +5549,6 @@ public class ZenModeHelperTest extends UiServiceTestCase { } @Test - @EnableFlags(FLAG_MODES_API) public void removeAndAddAutomaticZenRule_removedByUser_isNotRestored() { // Start with a single rule. mZenModeHelper.mConfig.automaticRules.clear(); @@ -5779,7 +5591,7 @@ public class ZenModeHelperTest extends UiServiceTestCase { } @Test - @EnableFlags({FLAG_MODES_API, FLAG_MODES_UI}) + @EnableFlags(FLAG_MODES_UI) public void removeAndAddAutomaticZenRule_ifChangingComponent_isAllowedAndDoesNotRestore() { // Start with a rule. mZenModeHelper.mConfig.automaticRules.clear(); @@ -5824,7 +5636,6 @@ public class ZenModeHelperTest extends UiServiceTestCase { } @Test - @EnableFlags(FLAG_MODES_API) public void removeAutomaticZenRule_preservedForRestoringByPackageAndConditionId() { mContext.getTestablePermissions().setPermission(Manifest.permission.MANAGE_NOTIFICATIONS, PERMISSION_GRANTED); // So that canManageAZR passes although packages don't match. @@ -5874,7 +5685,6 @@ public class ZenModeHelperTest extends UiServiceTestCase { } @Test - @EnableFlags(FLAG_MODES_API) public void removeAllZenRules_preservedForRestoring() { mZenModeHelper.mConfig.automaticRules.clear(); @@ -5898,7 +5708,6 @@ public class ZenModeHelperTest extends UiServiceTestCase { } @Test - @EnableFlags(FLAG_MODES_API) public void removeAllZenRules_fromSystem_deletesPreservedRulesToo() { mZenModeHelper.mConfig.automaticRules.clear(); @@ -5918,7 +5727,6 @@ public class ZenModeHelperTest extends UiServiceTestCase { } @Test - @EnableFlags(FLAG_MODES_API) public void removeAndAddAutomaticZenRule_wasActive_isRestoredAsInactive() { // Start with a rule. mZenModeHelper.mConfig.automaticRules.clear(); @@ -5968,7 +5776,6 @@ public class ZenModeHelperTest extends UiServiceTestCase { } @Test - @EnableFlags(FLAG_MODES_API) public void removeAndAddAutomaticZenRule_wasSnoozed_isRestoredAsInactive() { // Start with a rule. mZenModeHelper.mConfig.automaticRules.clear(); @@ -6023,7 +5830,6 @@ public class ZenModeHelperTest extends UiServiceTestCase { } @Test - @EnableFlags(FLAG_MODES_API) public void testRuleCleanup() throws Exception { Instant now = Instant.ofEpochMilli(1701796461000L); Instant yesterday = now.minus(1, ChronoUnit.DAYS); @@ -6081,7 +5887,6 @@ public class ZenModeHelperTest extends UiServiceTestCase { } @Test - @EnableFlags(FLAG_MODES_API) public void getAutomaticZenRuleState_ownedRule_returnsRuleState() { String id = mZenModeHelper.addAutomaticZenRule(UserHandle.CURRENT, mContext.getPackageName(), @@ -6112,7 +5917,6 @@ public class ZenModeHelperTest extends UiServiceTestCase { } @Test - @EnableFlags(FLAG_MODES_API) public void getAutomaticZenRuleState_notOwnedRule_returnsStateUnknown() { // Assume existence of a system-owned rule that is currently ACTIVE. ZenRule systemRule = newZenRule("android", Instant.now(), null); @@ -6128,7 +5932,6 @@ public class ZenModeHelperTest extends UiServiceTestCase { } @Test - @EnableFlags(FLAG_MODES_API) public void setAutomaticZenRuleState_idForNotOwnedRule_ignored() { // Assume existence of an other-package-owned rule that is currently ACTIVE. assertThat(mZenModeHelper.getZenMode()).isEqualTo(ZEN_MODE_OFF); @@ -6149,7 +5952,6 @@ public class ZenModeHelperTest extends UiServiceTestCase { } @Test - @EnableFlags(FLAG_MODES_API) public void setAutomaticZenRuleStateFromConditionProvider_conditionForNotOwnedRule_ignored() { // Assume existence of an other-package-owned rule that is currently ACTIVE. assertThat(mZenModeHelper.getZenMode()).isEqualTo(ZEN_MODE_OFF); @@ -6171,7 +5973,6 @@ public class ZenModeHelperTest extends UiServiceTestCase { } @Test - @EnableFlags(FLAG_MODES_API) public void testCallbacks_policy() throws Exception { setupZenConfig(); assertThat(mZenModeHelper.getNotificationPolicy(UserHandle.CURRENT).allowReminders()) @@ -6193,7 +5994,6 @@ public class ZenModeHelperTest extends UiServiceTestCase { } @Test - @EnableFlags(FLAG_MODES_API) public void testCallbacks_consolidatedPolicy() throws Exception { assertThat(mZenModeHelper.getConsolidatedNotificationPolicy().allowMedia()).isTrue(); SettableFuture<Policy> futureConsolidatedPolicy = SettableFuture.create(); @@ -6219,7 +6019,6 @@ public class ZenModeHelperTest extends UiServiceTestCase { } @Test - @EnableFlags(FLAG_MODES_API) public void applyGlobalZenModeAsImplicitZenRule_createsImplicitRuleAndActivatesIt() { mZenModeHelper.mConfig.automaticRules.clear(); @@ -6235,7 +6034,6 @@ public class ZenModeHelperTest extends UiServiceTestCase { } @Test - @EnableFlags(FLAG_MODES_API) public void applyGlobalZenModeAsImplicitZenRule_updatesImplicitRuleAndActivatesIt() { mZenModeHelper.mConfig.automaticRules.clear(); @@ -6257,7 +6055,6 @@ public class ZenModeHelperTest extends UiServiceTestCase { } @Test - @EnableFlags(FLAG_MODES_API) public void applyGlobalZenModeAsImplicitZenRule_ruleCustomized_doesNotUpdateRule() { mZenModeHelper.mConfig.automaticRules.clear(); String pkg = mContext.getPackageName(); @@ -6290,7 +6087,6 @@ public class ZenModeHelperTest extends UiServiceTestCase { } @Test - @EnableFlags(FLAG_MODES_API) public void applyGlobalZenModeAsImplicitZenRule_ruleCustomizedButNotFilter_updatesRule() { mZenModeHelper.mConfig.automaticRules.clear(); String pkg = mContext.getPackageName(); @@ -6322,7 +6118,6 @@ public class ZenModeHelperTest extends UiServiceTestCase { } @Test - @EnableFlags(FLAG_MODES_API) public void applyGlobalZenModeAsImplicitZenRule_modeOff_deactivatesImplicitRule() { mZenModeHelper.mConfig.automaticRules.clear(); mZenModeHelper.applyGlobalZenModeAsImplicitZenRule(UserHandle.CURRENT, mPkg, CUSTOM_PKG_UID, @@ -6339,7 +6134,6 @@ public class ZenModeHelperTest extends UiServiceTestCase { } @Test - @EnableFlags(FLAG_MODES_API) public void applyGlobalZenModeAsImplicitZenRule_modeOffButNoPreviousRule_ignored() { mZenModeHelper.mConfig.automaticRules.clear(); @@ -6350,7 +6144,6 @@ public class ZenModeHelperTest extends UiServiceTestCase { } @Test - @EnableFlags(FLAG_MODES_API) public void applyGlobalZenModeAsImplicitZenRule_update_unsnoozesRule() { mZenModeHelper.mConfig.automaticRules.clear(); @@ -6375,7 +6168,7 @@ public class ZenModeHelperTest extends UiServiceTestCase { } @Test - @EnableFlags({FLAG_MODES_API, FLAG_MODES_UI}) + @EnableFlags(FLAG_MODES_UI) public void applyGlobalZenModeAsImplicitZenRule_again_refreshesRuleName() { mZenModeHelper.mConfig.automaticRules.clear(); mZenModeHelper.applyGlobalZenModeAsImplicitZenRule(UserHandle.CURRENT, @@ -6394,7 +6187,7 @@ public class ZenModeHelperTest extends UiServiceTestCase { } @Test - @EnableFlags({FLAG_MODES_API, FLAG_MODES_UI}) + @EnableFlags(FLAG_MODES_UI) public void applyGlobalZenModeAsImplicitZenRule_again_doesNotChangeCustomizedRuleName() { mZenModeHelper.mConfig.automaticRules.clear(); mZenModeHelper.applyGlobalZenModeAsImplicitZenRule(UserHandle.CURRENT, @@ -6420,19 +6213,6 @@ public class ZenModeHelperTest extends UiServiceTestCase { } @Test - @DisableFlags(FLAG_MODES_API) - public void applyGlobalZenModeAsImplicitZenRule_flagOff_ignored() { - mZenModeHelper.mConfig.automaticRules.clear(); - - withoutWtfCrash( - () -> mZenModeHelper.applyGlobalZenModeAsImplicitZenRule(UserHandle.CURRENT, - CUSTOM_PKG_NAME, CUSTOM_PKG_UID, ZEN_MODE_IMPORTANT_INTERRUPTIONS)); - - assertThat(mZenModeHelper.mConfig.automaticRules).isEmpty(); - } - - @Test - @EnableFlags(FLAG_MODES_API) public void applyGlobalPolicyAsImplicitZenRule_createsImplicitRule() { mZenModeHelper.mConfig.automaticRules.clear(); @@ -6457,7 +6237,6 @@ public class ZenModeHelperTest extends UiServiceTestCase { } @Test - @EnableFlags(FLAG_MODES_API) public void applyGlobalPolicyAsImplicitZenRule_updatesImplicitRule() { mZenModeHelper.mConfig.automaticRules.clear(); @@ -6489,7 +6268,6 @@ public class ZenModeHelperTest extends UiServiceTestCase { } @Test - @EnableFlags(FLAG_MODES_API) public void applyGlobalPolicyAsImplicitZenRule_ruleCustomized_doesNotUpdateRule() { mZenModeHelper.mConfig.automaticRules.clear(); String pkg = mContext.getPackageName(); @@ -6532,7 +6310,6 @@ public class ZenModeHelperTest extends UiServiceTestCase { } @Test - @EnableFlags(FLAG_MODES_API) public void applyGlobalPolicyAsImplicitZenRule_ruleCustomizedButNotZenPolicy_updatesRule() { mZenModeHelper.mConfig.automaticRules.clear(); String pkg = mContext.getPackageName(); @@ -6572,7 +6349,7 @@ public class ZenModeHelperTest extends UiServiceTestCase { } @Test - @EnableFlags({FLAG_MODES_API, FLAG_MODES_UI}) + @EnableFlags(FLAG_MODES_UI) public void applyGlobalPolicyAsImplicitZenRule_again_refreshesRuleName() { mZenModeHelper.mConfig.automaticRules.clear(); mZenModeHelper.applyGlobalPolicyAsImplicitZenRule(UserHandle.CURRENT, @@ -6591,7 +6368,7 @@ public class ZenModeHelperTest extends UiServiceTestCase { } @Test - @EnableFlags({FLAG_MODES_API, FLAG_MODES_UI}) + @EnableFlags(FLAG_MODES_UI) public void applyGlobalPolicyAsImplicitZenRule_again_doesNotChangeCustomizedRuleName() { mZenModeHelper.mConfig.automaticRules.clear(); mZenModeHelper.applyGlobalPolicyAsImplicitZenRule(UserHandle.CURRENT, @@ -6617,19 +6394,6 @@ public class ZenModeHelperTest extends UiServiceTestCase { } @Test - @DisableFlags(FLAG_MODES_API) - public void applyGlobalPolicyAsImplicitZenRule_flagOff_ignored() { - mZenModeHelper.mConfig.automaticRules.clear(); - - withoutWtfCrash( - () -> mZenModeHelper.applyGlobalPolicyAsImplicitZenRule(UserHandle.CURRENT, - CUSTOM_PKG_NAME, CUSTOM_PKG_UID, new Policy(0, 0, 0))); - - assertThat(mZenModeHelper.mConfig.automaticRules).isEmpty(); - } - - @Test - @EnableFlags(FLAG_MODES_API) public void getNotificationPolicyFromImplicitZenRule_returnsSetPolicy() { Policy writtenPolicy = new Policy(PRIORITY_CATEGORY_CALLS | PRIORITY_CATEGORY_CONVERSATIONS, PRIORITY_SENDERS_CONTACTS, PRIORITY_SENDERS_STARRED, @@ -6645,7 +6409,6 @@ public class ZenModeHelperTest extends UiServiceTestCase { } @Test - @EnableFlags(FLAG_MODES_API) @DisableFlags(FLAG_MODES_UI) public void getNotificationPolicyFromImplicitZenRule_ruleWithoutPolicy_copiesGlobalPolicy() { // Implicit rule will get the global policy at the time of rule creation. @@ -6665,7 +6428,6 @@ public class ZenModeHelperTest extends UiServiceTestCase { } @Test - @EnableFlags(FLAG_MODES_API) public void getNotificationPolicyFromImplicitZenRule_noImplicitRule_returnsGlobalPolicy() { Policy policy = new Policy(PRIORITY_CATEGORY_CALLS, PRIORITY_SENDERS_STARRED, 0); mZenModeHelper.setNotificationPolicy(UserHandle.CURRENT, policy, ORIGIN_APP, @@ -6680,7 +6442,6 @@ public class ZenModeHelperTest extends UiServiceTestCase { } @Test - @EnableFlags(FLAG_MODES_API) @DisableFlags(FLAG_MODES_UI) public void setNotificationPolicy_updatesRulePolicies_ifRulePolicyIsDefaultOrGlobalPolicy() { ZenPolicy defaultZenPolicy = mZenModeHelper.getDefaultZenPolicy(); @@ -6726,7 +6487,6 @@ public class ZenModeHelperTest extends UiServiceTestCase { } @Test - @EnableFlags(Flags.FLAG_MODES_API) public void addRule_iconIdWithResourceNameTooLong_ignoresIcon() { int resourceId = 999; String veryLongResourceName = "com.android.server.notification:drawable/" @@ -6745,7 +6505,7 @@ public class ZenModeHelperTest extends UiServiceTestCase { } @Test - @EnableFlags({FLAG_MODES_API, FLAG_MODES_UI}) + @EnableFlags(FLAG_MODES_UI) public void setManualZenRuleDeviceEffects_noPreexistingMode() { ZenDeviceEffects effects = new ZenDeviceEffects.Builder() .setShouldDimWallpaper(true) @@ -6759,7 +6519,7 @@ public class ZenModeHelperTest extends UiServiceTestCase { } @Test - @EnableFlags({FLAG_MODES_API, FLAG_MODES_UI}) + @EnableFlags(FLAG_MODES_UI) public void setManualZenRuleDeviceEffects_preexistingMode() { mZenModeHelper.setManualZenMode(UserHandle.CURRENT, ZEN_MODE_OFF, Uri.EMPTY, ORIGIN_USER_IN_SYSTEMUI, "create manual rule", "settings", SYSTEM_UID); @@ -6776,7 +6536,7 @@ public class ZenModeHelperTest extends UiServiceTestCase { } @Test - @EnableFlags({FLAG_MODES_API, FLAG_MODES_UI}) + @EnableFlags(FLAG_MODES_UI) public void addAutomaticZenRule_startsDisabled_recordsDisabledOrigin() { AutomaticZenRule startsDisabled = new AutomaticZenRule.Builder("Rule", Uri.EMPTY) .setOwner(new ComponentName(mPkg, "SomeProvider")) @@ -6792,7 +6552,7 @@ public class ZenModeHelperTest extends UiServiceTestCase { } @Test - @EnableFlags({FLAG_MODES_API, FLAG_MODES_UI}) + @EnableFlags(FLAG_MODES_UI) public void updateAutomaticZenRule_disabling_recordsDisabledOrigin() { AutomaticZenRule startsEnabled = new AutomaticZenRule.Builder("Rule", Uri.EMPTY) .setOwner(new ComponentName(mPkg, "SomeProvider")) @@ -6815,7 +6575,7 @@ public class ZenModeHelperTest extends UiServiceTestCase { } @Test - @EnableFlags({FLAG_MODES_API, FLAG_MODES_UI}) + @EnableFlags(FLAG_MODES_UI) public void updateAutomaticZenRule_keepingDisabled_preservesPreviousDisabledOrigin() { AutomaticZenRule startsEnabled = new AutomaticZenRule.Builder("Rule", Uri.EMPTY) .setOwner(new ComponentName(mPkg, "SomeProvider")) @@ -6845,7 +6605,7 @@ public class ZenModeHelperTest extends UiServiceTestCase { } @Test - @EnableFlags({FLAG_MODES_API, FLAG_MODES_UI}) + @EnableFlags(FLAG_MODES_UI) public void updateAutomaticZenRule_enabling_clearsDisabledOrigin() { AutomaticZenRule startsEnabled = new AutomaticZenRule.Builder("Rule", Uri.EMPTY) .setOwner(new ComponentName(mPkg, "SomeProvider")) @@ -6875,7 +6635,7 @@ public class ZenModeHelperTest extends UiServiceTestCase { } @Test - @EnableFlags({FLAG_MODES_API, FLAG_MODES_UI}) + @EnableFlags(FLAG_MODES_UI) public void setAutomaticZenRuleState_manualActivation_appliesOverride() { AutomaticZenRule rule = new AutomaticZenRule.Builder("Rule", Uri.parse("cond")) .setPackage(mPkg) @@ -6893,7 +6653,7 @@ public class ZenModeHelperTest extends UiServiceTestCase { } @Test - @EnableFlags({FLAG_MODES_API, FLAG_MODES_UI}) + @EnableFlags(FLAG_MODES_UI) public void setAutomaticZenRuleState_manualActivationAndThenDeactivation_removesOverride() { AutomaticZenRule rule = new AutomaticZenRule.Builder("Rule", Uri.parse("cond")) .setPackage(mPkg) @@ -6930,7 +6690,7 @@ public class ZenModeHelperTest extends UiServiceTestCase { } @Test - @EnableFlags({FLAG_MODES_API, FLAG_MODES_UI}) + @EnableFlags(FLAG_MODES_UI) public void setAutomaticZenRuleState_manualDeactivationAndThenReactivation_removesOverride() { AutomaticZenRule rule = new AutomaticZenRule.Builder("Rule", Uri.parse("cond")) .setPackage(mPkg) @@ -6976,7 +6736,7 @@ public class ZenModeHelperTest extends UiServiceTestCase { } @Test - @EnableFlags({FLAG_MODES_API, FLAG_MODES_UI}) + @EnableFlags(FLAG_MODES_UI) public void setAutomaticZenRuleState_manualDeactivation_appliesOverride() { AutomaticZenRule rule = new AutomaticZenRule.Builder("Rule", Uri.parse("cond")) .setPackage(mPkg) @@ -7002,7 +6762,7 @@ public class ZenModeHelperTest extends UiServiceTestCase { } @Test - @EnableFlags({FLAG_MODES_API, FLAG_MODES_UI}) + @EnableFlags(FLAG_MODES_UI) public void setAutomaticZenRuleState_ifManualActive_appCannotDeactivateBeforeActivating() { AutomaticZenRule rule = new AutomaticZenRule.Builder("Rule", Uri.parse("cond")) .setPackage(mPkg) @@ -7039,7 +6799,7 @@ public class ZenModeHelperTest extends UiServiceTestCase { } @Test - @EnableFlags({FLAG_MODES_API, FLAG_MODES_UI}) + @EnableFlags(FLAG_MODES_UI) public void setAutomaticZenRuleState_ifManualInactive_appCannotReactivateBeforeDeactivating() { AutomaticZenRule rule = new AutomaticZenRule.Builder("Rule", Uri.parse("cond")) .setPackage(mPkg) @@ -7085,7 +6845,7 @@ public class ZenModeHelperTest extends UiServiceTestCase { } @Test - @EnableFlags({FLAG_MODES_API, FLAG_MODES_UI}) + @EnableFlags(FLAG_MODES_UI) public void setAutomaticZenRuleState_withActivationOverride_userActionFromAppCanDeactivate() { AutomaticZenRule rule = new AutomaticZenRule.Builder("Rule", Uri.parse("cond")) .setPackage(mPkg) @@ -7109,7 +6869,7 @@ public class ZenModeHelperTest extends UiServiceTestCase { } @Test - @EnableFlags({FLAG_MODES_API, FLAG_MODES_UI}) + @EnableFlags(FLAG_MODES_UI) public void setAutomaticZenRuleState_withDeactivationOverride_userActionFromAppCanActivate() { AutomaticZenRule rule = new AutomaticZenRule.Builder("Rule", Uri.parse("cond")) .setPackage(mPkg) @@ -7140,7 +6900,7 @@ public class ZenModeHelperTest extends UiServiceTestCase { } @Test - @EnableFlags({FLAG_MODES_API, FLAG_MODES_UI}) + @EnableFlags(FLAG_MODES_UI) public void setAutomaticZenRuleState_manualActionFromApp_isNotOverride() { AutomaticZenRule rule = new AutomaticZenRule.Builder("Rule", Uri.parse("cond")) .setPackage(mPkg) @@ -7165,7 +6925,7 @@ public class ZenModeHelperTest extends UiServiceTestCase { } @Test - @EnableFlags({FLAG_MODES_API, FLAG_MODES_UI}) + @EnableFlags(FLAG_MODES_UI) public void setAutomaticZenRuleState_implicitRuleManualActivation_doesNotUseOverride() { mContext.getTestablePermissions().setPermission(Manifest.permission.MANAGE_NOTIFICATIONS, PERMISSION_GRANTED); // So that canManageAZR succeeds. @@ -7188,7 +6948,7 @@ public class ZenModeHelperTest extends UiServiceTestCase { } @Test - @EnableFlags({FLAG_MODES_API, FLAG_MODES_UI}) + @EnableFlags(FLAG_MODES_UI) public void setAutomaticZenRuleState_implicitRuleManualDeactivation_doesNotUseOverride() { mContext.getTestablePermissions().setPermission(Manifest.permission.MANAGE_NOTIFICATIONS, PERMISSION_GRANTED); // So that canManageAZR succeeds. @@ -7214,24 +6974,8 @@ public class ZenModeHelperTest extends UiServiceTestCase { } @Test - @DisableFlags({FLAG_MODES_API, FLAG_MODES_UI}) - public void testDefaultConfig_preModesApi_rulesAreBare() { - // Create a new user, which should get a copy of the default policy. - mZenModeHelper.onUserSwitched(101); - - ZenRule eventsRule = mZenModeHelper.mConfig.automaticRules.get( - ZenModeConfig.EVENTS_OBSOLETE_RULE_ID); - - assertThat(eventsRule).isNotNull(); - assertThat(eventsRule.zenPolicy).isNull(); - assertThat(eventsRule.type).isEqualTo(TYPE_UNKNOWN); - assertThat(eventsRule.triggerDescription).isNull(); - } - - @Test - @EnableFlags(FLAG_MODES_API) @DisableFlags(FLAG_MODES_UI) - public void testDefaultConfig_modesApi_rulesHaveFullPolicy() { + public void testDefaultConfig_rulesHaveFullPolicy() { // Create a new user, which should get a copy of the default policy. mZenModeHelper.onUserSwitched(201); @@ -7245,7 +6989,7 @@ public class ZenModeHelperTest extends UiServiceTestCase { } @Test - @EnableFlags({FLAG_MODES_API, FLAG_MODES_UI}) + @EnableFlags(FLAG_MODES_UI) public void testDefaultConfig_modesUi_rulesHaveFullPolicy() { // Create a new user, which should get a copy of the default policy. mZenModeHelper.onUserSwitched(301); @@ -7260,7 +7004,7 @@ public class ZenModeHelperTest extends UiServiceTestCase { } @Test - @EnableFlags({FLAG_MODES_API, FLAG_MODES_UI}) + @EnableFlags(FLAG_MODES_UI) public void setAutomaticZenRuleState_withManualActivation_activeOnReboot() throws Exception { AutomaticZenRule rule = new AutomaticZenRule.Builder("Rule", Uri.parse("cond")) @@ -7298,7 +7042,7 @@ public class ZenModeHelperTest extends UiServiceTestCase { } @Test - @EnableFlags({FLAG_MODES_API, FLAG_MODES_UI}) + @EnableFlags(FLAG_MODES_UI) public void setAutomaticZenRuleState_withManualDeactivation_clearedOnReboot() throws Exception { AutomaticZenRule rule = new AutomaticZenRule.Builder("Rule", Uri.parse("cond")) @@ -7336,7 +7080,6 @@ public class ZenModeHelperTest extends UiServiceTestCase { } @Test - @EnableFlags(FLAG_MODES_API) public void addAutomaticZenRule_withoutPolicy_getsItsOwnInstanceOfDefaultPolicy() { // Add a rule without policy -> uses default config AutomaticZenRule azr = new AutomaticZenRule.Builder("Rule", Uri.parse("cond")) @@ -7352,7 +7095,7 @@ public class ZenModeHelperTest extends UiServiceTestCase { } @Test - @EnableFlags({FLAG_MODES_API, FLAG_MODES_UI}) + @EnableFlags(FLAG_MODES_UI) public void readXml_withDisabledEventsRule_deletesIt() throws Exception { ZenRule rule = new ZenRule(); rule.id = ZenModeConfig.EVENTS_OBSOLETE_RULE_ID; @@ -7372,7 +7115,7 @@ public class ZenModeHelperTest extends UiServiceTestCase { } @Test - @EnableFlags({FLAG_MODES_API, FLAG_MODES_UI}) + @EnableFlags(FLAG_MODES_UI) public void readXml_withEnabledEventsRule_keepsIt() throws Exception { ZenRule rule = new ZenRule(); rule.id = ZenModeConfig.EVENTS_OBSOLETE_RULE_ID; @@ -7392,7 +7135,7 @@ public class ZenModeHelperTest extends UiServiceTestCase { } @Test - @EnableFlags({FLAG_MODES_API, FLAG_MODES_UI}) + @EnableFlags(FLAG_MODES_UI) public void updateHasPriorityChannels_keepsChannelSettings() { setupZenConfig(); @@ -7574,7 +7317,6 @@ public class ZenModeHelperTest extends UiServiceTestCase { return rule; } - // TODO: b/310620812 - Update setup methods to include allowChannels() when MODES_API is inlined private void setupZenConfig() { Policy customPolicy = new Policy(PRIORITY_CATEGORY_REMINDERS | PRIORITY_CATEGORY_CALLS | PRIORITY_CATEGORY_MESSAGES @@ -7583,7 +7325,7 @@ public class ZenModeHelperTest extends UiServiceTestCase { PRIORITY_SENDERS_STARRED, PRIORITY_SENDERS_STARRED, SUPPRESSED_EFFECT_BADGE, - 0, + 0, // allows priority channels. CONVERSATION_SENDERS_IMPORTANT); mZenModeHelper.setNotificationPolicy(UserHandle.CURRENT, customPolicy, ORIGIN_UNKNOWN, 1); if (!Flags.modesUi()) { @@ -7599,8 +7341,11 @@ public class ZenModeHelperTest extends UiServiceTestCase { assertEquals(STATE_ALLOW, dndProto.getCalls().getNumber()); assertEquals(PEOPLE_STARRED, dndProto.getAllowCallsFrom().getNumber()); assertEquals(STATE_ALLOW, dndProto.getMessages().getNumber()); + assertEquals(PEOPLE_STARRED, dndProto.getAllowMessagesFrom().getNumber()); assertEquals(STATE_ALLOW, dndProto.getEvents().getNumber()); assertEquals(STATE_ALLOW, dndProto.getRepeatCallers().getNumber()); + assertEquals(STATE_ALLOW, dndProto.getConversations().getNumber()); + assertEquals(CONV_IMPORTANT, dndProto.getAllowConversationsFrom().getNumber()); assertEquals(STATE_ALLOW, dndProto.getFullscreen().getNumber()); assertEquals(STATE_ALLOW, dndProto.getLights().getNumber()); assertEquals(STATE_ALLOW, dndProto.getPeek().getNumber()); @@ -7616,7 +7361,7 @@ public class ZenModeHelperTest extends UiServiceTestCase { return; } - // When modes_api flag is on, the default zen config is the device defaults. + // The default zen config is the device defaults. assertThat(dndProto.getAlarms().getNumber()).isEqualTo(STATE_ALLOW); assertThat(dndProto.getMedia().getNumber()).isEqualTo(STATE_ALLOW); assertThat(dndProto.getSystem().getNumber()).isEqualTo(STATE_DISALLOW); @@ -7627,6 +7372,8 @@ public class ZenModeHelperTest extends UiServiceTestCase { assertThat(dndProto.getAllowMessagesFrom().getNumber()).isEqualTo(PEOPLE_STARRED); assertThat(dndProto.getEvents().getNumber()).isEqualTo(STATE_DISALLOW); assertThat(dndProto.getRepeatCallers().getNumber()).isEqualTo(STATE_ALLOW); + assertThat(dndProto.getConversations().getNumber()).isEqualTo(STATE_ALLOW); + assertThat(dndProto.getAllowConversationsFrom().getNumber()).isEqualTo(CONV_IMPORTANT); assertThat(dndProto.getFullscreen().getNumber()).isEqualTo(STATE_DISALLOW); assertThat(dndProto.getLights().getNumber()).isEqualTo(STATE_DISALLOW); assertThat(dndProto.getPeek().getNumber()).isEqualTo(STATE_DISALLOW); @@ -7634,6 +7381,8 @@ public class ZenModeHelperTest extends UiServiceTestCase { assertThat(dndProto.getBadge().getNumber()).isEqualTo(STATE_ALLOW); assertThat(dndProto.getAmbient().getNumber()).isEqualTo(STATE_DISALLOW); assertThat(dndProto.getNotificationList().getNumber()).isEqualTo(STATE_ALLOW); + assertThat(dndProto.getAllowChannels().getNumber()).isEqualTo( + DNDProtoEnums.CHANNEL_POLICY_PRIORITY); } private static String getZenLog() { @@ -7642,16 +7391,6 @@ public class ZenModeHelperTest extends UiServiceTestCase { return zenLogWriter.toString(); } - private static void withoutWtfCrash(Runnable test) { - Log.TerribleFailureHandler oldHandler = Log.setWtfHandler((tag, what, system) -> { - }); - try { - test.run(); - } finally { - Log.setWtfHandler(oldHandler); - } - } - /** * Wrapper to use TypedXmlPullParser as XmlResourceParser for Resources.getXml() */ diff --git a/services/tests/uiservicestests/src/com/android/server/notification/ZenPolicyTest.java b/services/tests/uiservicestests/src/com/android/server/notification/ZenPolicyTest.java index 6433b76defc3..8b9376454c0f 100644 --- a/services/tests/uiservicestests/src/com/android/server/notification/ZenPolicyTest.java +++ b/services/tests/uiservicestests/src/com/android/server/notification/ZenPolicyTest.java @@ -21,7 +21,6 @@ import static com.google.common.truth.Truth.assertThat; import static junit.framework.Assert.assertEquals; import static junit.framework.Assert.fail; -import android.app.Flags; import android.os.Parcel; import android.platform.test.flag.junit.SetFlagsRule; import android.service.notification.ZenPolicy; @@ -34,7 +33,6 @@ import com.android.server.UiServiceTestCase; import com.google.protobuf.nano.InvalidProtocolBufferNanoException; -import org.junit.Before; import org.junit.Rule; import org.junit.Test; import org.junit.runner.RunWith; @@ -50,11 +48,6 @@ public class ZenPolicyTest extends UiServiceTestCase { @Rule public final SetFlagsRule mSetFlagsRule = new SetFlagsRule(); - @Before - public final void setUp() { - mSetFlagsRule.enableFlags(Flags.FLAG_MODES_API); - } - @Test public void testZenPolicyApplyAllowedToDisallowed() { ZenPolicy.Builder builder = new ZenPolicy.Builder(); @@ -207,8 +200,6 @@ public class ZenPolicyTest extends UiServiceTestCase { @Test public void testZenPolicyApplyChannels_applyUnset() { - mSetFlagsRule.enableFlags(Flags.FLAG_MODES_API); - ZenPolicy.Builder builder = new ZenPolicy.Builder(); ZenPolicy unset = builder.build(); @@ -223,8 +214,6 @@ public class ZenPolicyTest extends UiServiceTestCase { @Test public void testZenPolicyApplyChannels_applyStricter() { - mSetFlagsRule.enableFlags(Flags.FLAG_MODES_API); - ZenPolicy.Builder builder = new ZenPolicy.Builder(); builder.allowPriorityChannels(false); ZenPolicy none = builder.build(); @@ -239,8 +228,6 @@ public class ZenPolicyTest extends UiServiceTestCase { @Test public void testZenPolicyApplyChannels_applyLooser() { - mSetFlagsRule.enableFlags(Flags.FLAG_MODES_API); - ZenPolicy.Builder builder = new ZenPolicy.Builder(); builder.allowPriorityChannels(false); ZenPolicy none = builder.build(); @@ -255,8 +242,6 @@ public class ZenPolicyTest extends UiServiceTestCase { @Test public void testZenPolicyApplyChannels_applySet() { - mSetFlagsRule.enableFlags(Flags.FLAG_MODES_API); - ZenPolicy.Builder builder = new ZenPolicy.Builder(); ZenPolicy unset = builder.build(); @@ -270,8 +255,6 @@ public class ZenPolicyTest extends UiServiceTestCase { @Test public void testZenPolicyOverwrite_allUnsetPolicies() { - mSetFlagsRule.enableFlags(Flags.FLAG_MODES_API); - ZenPolicy.Builder builder = new ZenPolicy.Builder(); ZenPolicy unset = builder.build(); @@ -292,8 +275,6 @@ public class ZenPolicyTest extends UiServiceTestCase { @Test public void testZenPolicyOverwrite_someOverlappingFields_takeNewPolicy() { - mSetFlagsRule.enableFlags(Flags.FLAG_MODES_API); - ZenPolicy p1 = new ZenPolicy.Builder() .allowCalls(ZenPolicy.PEOPLE_TYPE_CONTACTS) .allowMessages(ZenPolicy.PEOPLE_TYPE_STARRED) @@ -375,7 +356,6 @@ public class ZenPolicyTest extends UiServiceTestCase { @Test public void testEmptyZenPolicy_emptyChannels() { - mSetFlagsRule.enableFlags(Flags.FLAG_MODES_API); ZenPolicy.Builder builder = new ZenPolicy.Builder(); ZenPolicy policy = builder.build(); @@ -688,22 +668,7 @@ public class ZenPolicyTest extends UiServiceTestCase { } @Test - public void testAllowChannels_noFlag() { - mSetFlagsRule.disableFlags(Flags.FLAG_MODES_API); - - // allowChannels should be unset, not be modifiable, and not show up in any output - ZenPolicy.Builder builder = new ZenPolicy.Builder(); - builder.allowPriorityChannels(true); - ZenPolicy policy = builder.build(); - - assertThat(policy.getPriorityChannelsAllowed()).isEqualTo(ZenPolicy.STATE_UNSET); - assertThat(policy.toString().contains("allowChannels")).isFalse(); - } - - @Test public void testAllowChannels() { - mSetFlagsRule.enableFlags(Flags.FLAG_MODES_API); - // allow priority channels ZenPolicy.Builder builder = new ZenPolicy.Builder(); builder.allowPriorityChannels(true); |