diff options
12 files changed, 46 insertions, 49 deletions
diff --git a/service/java/com/android/safetycenter/RefreshReasons.java b/service/java/com/android/safetycenter/RefreshReasons.java index ee318c7fd..af15d1968 100644 --- a/service/java/com/android/safetycenter/RefreshReasons.java +++ b/service/java/com/android/safetycenter/RefreshReasons.java @@ -35,8 +35,6 @@ import android.util.Log; import androidx.annotation.RequiresApi; -import com.android.modules.utils.build.SdkLevel; - /** Helpers to do with {@link RefreshReason}. */ @RequiresApi(TIRAMISU) final class RefreshReasons { @@ -49,6 +47,7 @@ final class RefreshReasons { * Validates the given {@link RefreshReason}, and throws an {@link IllegalArgumentException} in * case of unexpected value. */ + @TargetApi(UPSIDE_DOWN_CAKE) static void validate(@RefreshReason int refreshReason) { switch (refreshReason) { case REFRESH_REASON_RESCAN_BUTTON_CLICK: @@ -57,11 +56,9 @@ final class RefreshReasons { case REFRESH_REASON_DEVICE_LOCALE_CHANGE: case REFRESH_REASON_SAFETY_CENTER_ENABLED: case REFRESH_REASON_OTHER: + case REFRESH_REASON_PERIODIC: return; } - if (SdkLevel.isAtLeastU() && refreshReason == REFRESH_REASON_PERIODIC) { - return; - } throw new IllegalArgumentException("Unexpected refresh reason: " + refreshReason); } diff --git a/service/java/com/android/safetycenter/SafetyCenterBroadcastDispatcher.java b/service/java/com/android/safetycenter/SafetyCenterBroadcastDispatcher.java index 02f3d3ac9..bc386f3f8 100644 --- a/service/java/com/android/safetycenter/SafetyCenterBroadcastDispatcher.java +++ b/service/java/com/android/safetycenter/SafetyCenterBroadcastDispatcher.java @@ -32,7 +32,6 @@ import static android.safetycenter.SafetyCenterManager.REFRESH_REASON_SAFETY_CEN import static java.util.Collections.unmodifiableList; -import android.annotation.SuppressLint; import android.annotation.UserIdInt; import android.app.BroadcastOptions; import android.content.Context; @@ -210,15 +209,17 @@ final class SafetyCenterBroadcastDispatcher { BroadcastOptions broadcastOptions, List<UserProfileGroup> userProfileGroups) { Intent intent = createExplicitEnabledChangedIntent(broadcast.getPackageName()); - // The same ENABLED reason is used here for both enable and disable events. It is not sent - // externally and is only used internally to filter safety sources in the methods of the - // Broadcast class. - int refreshReason = REFRESH_REASON_SAFETY_CENTER_ENABLED; for (int i = 0; i < userProfileGroups.size(); i++) { UserProfileGroup userProfileGroup = userProfileGroups.get(i); SparseArray<List<String>> userIdsToSourceIds = - getUserIdsToSourceIds(broadcast, userProfileGroup, refreshReason); + getUserIdsToSourceIds( + broadcast, + userProfileGroup, + // The same ENABLED reason is used here for both enable and disable + // events. It is not sent externally and is only used internally to + // filter safety sources in the methods of the Broadcast class. + REFRESH_REASON_SAFETY_CENTER_ENABLED); for (int j = 0; j < userIdsToSourceIds.size(); j++) { int userId = userIdsToSourceIds.keyAt(j); @@ -249,8 +250,6 @@ final class SafetyCenterBroadcastDispatcher { return true; } - // TODO(b/193460475): Remove when tooling supports SystemApi to public API. - @SuppressLint("NewApi") private void sendBroadcast( Intent intent, UserHandle userHandle, @@ -300,8 +299,6 @@ final class SafetyCenterBroadcastDispatcher { return new Intent(intentAction).setFlags(FLAG_RECEIVER_FOREGROUND); } - // TODO(b/193460475): Remove when tooling supports SystemApi to public API. - @SuppressLint("NewApi") private static BroadcastOptions createBroadcastOptions() { BroadcastOptions broadcastOptions = BroadcastOptions.makeBasic(); Duration allowListDuration = SafetyCenterFlags.getFgsAllowlistDuration(); diff --git a/service/java/com/android/safetycenter/SafetyCenterConfigReader.java b/service/java/com/android/safetycenter/SafetyCenterConfigReader.java index 620b85066..ecb741a4b 100644 --- a/service/java/com/android/safetycenter/SafetyCenterConfigReader.java +++ b/service/java/com/android/safetycenter/SafetyCenterConfigReader.java @@ -114,7 +114,7 @@ public final class SafetyCenterConfigReader { /** * Returns the groups of {@link SafetySource}, filtering out any sources where {@link - * SafetySources#isLoggable(SafetySource)} is false (and any resultingly empty groups). + * SafetySources#isLoggable(SafetySource)} is {@code false} (and any resulting empty groups). */ public List<SafetySourcesGroup> getLoggableSafetySourcesGroups() { return getCurrentConfigInternal().getLoggableSourcesGroups(); diff --git a/service/java/com/android/safetycenter/SafetyCenterDataFactory.java b/service/java/com/android/safetycenter/SafetyCenterDataFactory.java index 9227bbd43..69c8a58c9 100644 --- a/service/java/com/android/safetycenter/SafetyCenterDataFactory.java +++ b/service/java/com/android/safetycenter/SafetyCenterDataFactory.java @@ -17,12 +17,14 @@ package com.android.safetycenter; import static android.os.Build.VERSION_CODES.TIRAMISU; +import static android.os.Build.VERSION_CODES.UPSIDE_DOWN_CAKE; import static com.android.safetycenter.internaldata.SafetyCenterBundles.ISSUES_TO_GROUPS_BUNDLE_KEY; import static com.android.safetycenter.internaldata.SafetyCenterBundles.STATIC_ENTRIES_TO_IDS_BUNDLE_KEY; import static java.util.Collections.emptyList; +import android.annotation.TargetApi; import android.annotation.UserIdInt; import android.app.PendingIntent; import android.content.Context; @@ -1114,6 +1116,7 @@ public final class SafetyCenterDataFactory { return ""; } + @TargetApi(UPSIDE_DOWN_CAKE) private String getStatusTitleFromIssueCategories( @Nullable SafetySourceIssueInfo topNonDismissedIssueInfo, String deviceResourceName, @@ -1135,17 +1138,12 @@ public final class SafetyCenterDataFactory { return mSafetyCenterResourcesContext.getStringByName(accountResourceName); case SafetySourceIssue.ISSUE_CATEGORY_GENERAL: return generalString; - } - if (SdkLevel.isAtLeastU()) { - switch (issueCategory) { - case SafetySourceIssue.ISSUE_CATEGORY_DATA: - return mSafetyCenterResourcesContext.getStringByName(dataResourceName); - case SafetySourceIssue.ISSUE_CATEGORY_PASSWORDS: - return mSafetyCenterResourcesContext.getStringByName(passwordsResourceName); - case SafetySourceIssue.ISSUE_CATEGORY_PERSONAL_SAFETY: - return mSafetyCenterResourcesContext.getStringByName( - personalSafetyResourceName); - } + case SafetySourceIssue.ISSUE_CATEGORY_DATA: + return mSafetyCenterResourcesContext.getStringByName(dataResourceName); + case SafetySourceIssue.ISSUE_CATEGORY_PASSWORDS: + return mSafetyCenterResourcesContext.getStringByName(passwordsResourceName); + case SafetySourceIssue.ISSUE_CATEGORY_PERSONAL_SAFETY: + return mSafetyCenterResourcesContext.getStringByName(personalSafetyResourceName); } Log.w(TAG, "Unexpected SafetySourceIssue.IssueCategory: " + issueCategory); diff --git a/service/java/com/android/safetycenter/SafetyCenterFlags.java b/service/java/com/android/safetycenter/SafetyCenterFlags.java index 1ced16417..255bb3898 100644 --- a/service/java/com/android/safetycenter/SafetyCenterFlags.java +++ b/service/java/com/android/safetycenter/SafetyCenterFlags.java @@ -442,7 +442,7 @@ public final class SafetyCenterFlags { if (allowlistedCertString == null) { return new ArraySet<>(); } - return new ArraySet<String>(allowlistedCertString.split("\\|")); + return new ArraySet<>(allowlistedCertString.split("\\|")); } /** diff --git a/service/java/com/android/safetycenter/SafetyCenterRefreshTracker.java b/service/java/com/android/safetycenter/SafetyCenterRefreshTracker.java index 060402aa1..2a0fa786b 100644 --- a/service/java/com/android/safetycenter/SafetyCenterRefreshTracker.java +++ b/service/java/com/android/safetycenter/SafetyCenterRefreshTracker.java @@ -298,7 +298,7 @@ public final class SafetyCenterRefreshTracker { } /** - * Clears the any refresh in progress and returns it for the caller to do what it needs to. + * Clears the refresh in progress and returns it for the caller to do what it needs to. * * <p>If there was no refresh in progress then {@code null} is returned. */ diff --git a/service/java/com/android/safetycenter/data/SafetyCenterIssueDeduplicator.java b/service/java/com/android/safetycenter/data/SafetyCenterIssueDeduplicator.java index 954e1a022..2353f6ce6 100644 --- a/service/java/com/android/safetycenter/data/SafetyCenterIssueDeduplicator.java +++ b/service/java/com/android/safetycenter/data/SafetyCenterIssueDeduplicator.java @@ -72,7 +72,7 @@ final class SafetyCenterIssueDeduplicator { * <p>In case any issue, in the bucket of duplicate issues, was dismissed, all issues of the * same or lower severity will be dismissed as well. * - * @return deduplicated list of issues, and some other information gathere in the deduplication + * @return deduplicated list of issues, and some other information gathered in the deduplication * process */ @RequiresApi(UPSIDE_DOWN_CAKE) @@ -164,7 +164,7 @@ final class SafetyCenterIssueDeduplicator { } /** - * Handles dismissals logic: in each bucket, dismissal details of the top (highest priority) + * Handles dismissals logic: in each bucket, dismissal details of the highest priority (top) * dismissed issue will be copied to all other duplicate issues in that bucket, that are of * equal or lower severity (not priority). Notification-dismissal details are handled similarly. */ diff --git a/service/java/com/android/safetycenter/data/SafetyCenterIssueDismissalRepository.java b/service/java/com/android/safetycenter/data/SafetyCenterIssueDismissalRepository.java index b65afa83d..299da60a9 100644 --- a/service/java/com/android/safetycenter/data/SafetyCenterIssueDismissalRepository.java +++ b/service/java/com/android/safetycenter/data/SafetyCenterIssueDismissalRepository.java @@ -130,11 +130,7 @@ final class SafetyCenterIssueDismissalRepository { Duration timeSinceLastDismissal = Duration.between(dismissedAt, Instant.now()); boolean isTimeToResurface = timeSinceLastDismissal.compareTo(delay) >= 0; - if (isTimeToResurface) { - return false; - } - - return true; + return !isTimeToResurface; } /** diff --git a/service/java/com/android/safetycenter/data/SafetySourceDataValidator.java b/service/java/com/android/safetycenter/data/SafetySourceDataValidator.java index df535cd42..acb4d95f0 100644 --- a/service/java/com/android/safetycenter/data/SafetySourceDataValidator.java +++ b/service/java/com/android/safetycenter/data/SafetySourceDataValidator.java @@ -52,7 +52,7 @@ import javax.annotation.concurrent.NotThreadSafe; @NotThreadSafe final class SafetySourceDataValidator { - private static final String TAG = "SafetySourceDataValidator"; + private static final String TAG = "SafetySourceDataValidat"; private final Context mContext; private final SafetyCenterConfigReader mSafetyCenterConfigReader; diff --git a/service/java/com/android/safetycenter/logging/SafetyCenterPullAtomCallback.java b/service/java/com/android/safetycenter/logging/SafetyCenterPullAtomCallback.java index e261f2f47..af66cae5c 100644 --- a/service/java/com/android/safetycenter/logging/SafetyCenterPullAtomCallback.java +++ b/service/java/com/android/safetycenter/logging/SafetyCenterPullAtomCallback.java @@ -111,8 +111,8 @@ public final class SafetyCenterPullAtomCallback implements StatsPullAtomCallback statsEvents.add( createOverallSafetyStateAtomLocked(userProfileGroup, loggableGroups)); // The SAFETY_SOURCE_STATE_COLLECTED atoms are written instead of being pulled, - // they do not support pull but we want to collect them at the same time as - // the above pulled atom. + // as they do not support pull. We still want to collect them at the same time as + // the above pulled atom, which is why they're written here. writeSafetySourceStateCollectedAtomsLocked(userProfileGroup, loggableGroups); } } diff --git a/service/java/com/android/safetycenter/notifications/SafetyCenterNotificationChannels.java b/service/java/com/android/safetycenter/notifications/SafetyCenterNotificationChannels.java index abefd03b8..b73d50937 100644 --- a/service/java/com/android/safetycenter/notifications/SafetyCenterNotificationChannels.java +++ b/service/java/com/android/safetycenter/notifications/SafetyCenterNotificationChannels.java @@ -143,15 +143,18 @@ public final class SafetyCenterNotificationChannels { return CHANNEL_ID_RECOMMENDATION; case SafetySourceData.SEVERITY_LEVEL_CRITICAL_WARNING: return CHANNEL_ID_CRITICAL_WARNING; - default: - Log.w( - TAG, - "Unexpected SafetySourceData.SeverityLevel: " - + issueSeverityLevel - + ", for issue: " - + issue); + case SafetySourceData.SEVERITY_LEVEL_UNSPECIFIED: + Log.w(TAG, "SafetySourceData.SeverityLevel is unspecified for issue: " + issue); return null; } + + Log.w( + TAG, + "Unexpected SafetySourceData.SeverityLevel: " + + issueSeverityLevel + + ", for issue: " + + issue); + return null; } /** diff --git a/service/java/com/android/safetycenter/notifications/SafetyCenterNotificationSender.java b/service/java/com/android/safetycenter/notifications/SafetyCenterNotificationSender.java index 318b9efe8..3fe15886f 100644 --- a/service/java/com/android/safetycenter/notifications/SafetyCenterNotificationSender.java +++ b/service/java/com/android/safetycenter/notifications/SafetyCenterNotificationSender.java @@ -137,7 +137,7 @@ public final class SafetyCenterNotificationSender { * <p>The given {@link SafetyEvent} have type {@link * SafetyEvent#SAFETY_EVENT_TYPE_RESOLVING_ACTION_SUCCEEDED} and include issue and action IDs * that correspond to a {@link SafetySourceIssue} for which a notification is currently - * displayed. Otherwise this method has no effect. + * displayed. Otherwise, this method has no effect. * * @param sourceId of the source which reported the issue * @param safetyEvent the source provided upon successful action resolution @@ -286,7 +286,7 @@ public final class SafetyCenterNotificationSender { fout.println(); } - /** Get all of the key-issue pairs for which notifications should be posted or updated now. */ + /** Gets all the key-issue pairs for which notifications should be posted or updated now. */ private ArrayMap<SafetyCenterIssueKey, SafetySourceIssue> getIssuesToNotify( @UserIdInt int userId) { ArrayMap<SafetyCenterIssueKey, SafetySourceIssue> result = new ArrayMap<>(); @@ -325,14 +325,20 @@ public final class SafetyCenterNotificationSender { @NotificationBehaviorInternal private int getBehavior(SafetySourceIssue issue, SafetyCenterIssueKey issueKey) { if (SdkLevel.isAtLeastU()) { - switch (issue.getNotificationBehavior()) { + int notificationBehavior = issue.getNotificationBehavior(); + switch (notificationBehavior) { case SafetySourceIssue.NOTIFICATION_BEHAVIOR_NEVER: return NOTIFICATION_BEHAVIOR_INTERNAL_NEVER; case SafetySourceIssue.NOTIFICATION_BEHAVIOR_DELAYED: return NOTIFICATION_BEHAVIOR_INTERNAL_DELAYED; case SafetySourceIssue.NOTIFICATION_BEHAVIOR_IMMEDIATELY: return NOTIFICATION_BEHAVIOR_INTERNAL_IMMEDIATELY; + case SafetySourceIssue.NOTIFICATION_BEHAVIOR_UNSPECIFIED: + return getBehaviorForIssueWithUnspecifiedBehavior(issue, issueKey); } + Log.w( + TAG, + "Unexpected SafetySourceIssue.NotificationBehavior: " + notificationBehavior); } // On Android T all issues are assumed to have "unspecified" behavior return getBehaviorForIssueWithUnspecifiedBehavior(issue, issueKey); |