diff options
author | 2023-02-13 14:55:18 +0000 | |
---|---|---|
committer | 2023-02-14 09:18:58 +0000 | |
commit | 86463c807445b369dc8e5bc0ee952968838b625f (patch) | |
tree | ae48d1369c2252ed0c0e4632f7340a60d25362f9 | |
parent | cc1cd50bca7de0f3b218bd5bfe7d403ec0fbfe57 (diff) |
Let @NonNull be the default.
Use package-info.java with a new `@NonNullByDefault` annotation
to specify that `@NonNull` is the default, and stop relying on
sprinkling our own `@NonNull` annotations everywhere instead.
This follows the generic Google recommendation and follows the approach
taken by some teams:
https://engdoc.corp.google.com/eng/doc/devguide/java/practices/null.md#legacy
go/android-media-solutions-coding-conventions#use-nullable
We still rely on `@NonNull` for all of our API surface though, as per
go/android-api-guidelines#annotations-nullability
Bug: 260989630
Test: builds
Change-Id: I99ab8f3d94875c8fceca7c9f968b7d8d652d0999
68 files changed, 900 insertions, 877 deletions
diff --git a/PermissionController/Android.bp b/PermissionController/Android.bp index 5b95a0a75..14170e513 100644 --- a/PermissionController/Android.bp +++ b/PermissionController/Android.bp @@ -91,6 +91,7 @@ android_app { // Soong fails to automatically add this dependency because all the // *.kt sources are inside a filegroup. "kotlin-annotations", + "safety-center-annotations", ], static_libs: [ diff --git a/PermissionController/src/com/android/permissioncontroller/safetycenter/package-info.java b/PermissionController/src/com/android/permissioncontroller/safetycenter/package-info.java new file mode 100644 index 000000000..48c750b81 --- /dev/null +++ b/PermissionController/src/com/android/permissioncontroller/safetycenter/package-info.java @@ -0,0 +1,19 @@ +/* + * Copyright (C) 2023 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +@NonNullByDefault +package com.android.permissioncontroller.safetycenter; + +import com.android.safetycenter.annotations.NonNullByDefault; diff --git a/PermissionController/src/com/android/permissioncontroller/safetycenter/service/SafetyCenterBackgroundRefreshJobService.java b/PermissionController/src/com/android/permissioncontroller/safetycenter/service/SafetyCenterBackgroundRefreshJobService.java index df1aed7a2..e959d20be 100644 --- a/PermissionController/src/com/android/permissioncontroller/safetycenter/service/SafetyCenterBackgroundRefreshJobService.java +++ b/PermissionController/src/com/android/permissioncontroller/safetycenter/service/SafetyCenterBackgroundRefreshJobService.java @@ -35,7 +35,6 @@ import android.content.Intent; import android.safetycenter.SafetyCenterManager; import android.util.Log; -import androidx.annotation.NonNull; import androidx.annotation.Nullable; import com.android.modules.utils.build.SdkLevel; @@ -54,7 +53,7 @@ public final class SafetyCenterBackgroundRefreshJobService extends JobService { /** Schedules a periodic background refresh. */ public static final class SetupSafetyCenterBackgroundRefreshReceiver extends BroadcastReceiver { @Override - public void onReceive(@NonNull Context context, @NonNull Intent intent) { + public void onReceive(Context context, Intent intent) { schedulePeriodicBackgroundRefresh(context, intent.getAction()); } } @@ -74,7 +73,7 @@ public final class SafetyCenterBackgroundRefreshJobService extends JobService { * broadcast if this flag gets enabled. */ private static void schedulePeriodicBackgroundRefresh( - @NonNull Context context, @Nullable String actionString) { + Context context, @Nullable String actionString) { if (!isActionStringValid(actionString)) { Log.v(TAG, "Ignoring a " + actionString + " broadcast."); @@ -136,7 +135,7 @@ public final class SafetyCenterBackgroundRefreshJobService extends JobService { } @Override - public boolean onStartJob(@NonNull JobParameters params) { + public boolean onStartJob(JobParameters params) { // background thread not required, PC APK makes all API calls in main thread if (!SafetyCenterJobServiceFlags.areBackgroundRefreshesEnabled()) { Log.v(TAG, "Background refreshes are not enabled, skipping job."); @@ -158,7 +157,7 @@ public final class SafetyCenterBackgroundRefreshJobService extends JobService { } @Override - public boolean onStopJob(@NonNull JobParameters params) { + public boolean onStopJob(JobParameters params) { return false; // never want job to be rescheduled } diff --git a/PermissionController/src/com/android/permissioncontroller/safetycenter/service/package-info.java b/PermissionController/src/com/android/permissioncontroller/safetycenter/service/package-info.java new file mode 100644 index 000000000..d6b130cf3 --- /dev/null +++ b/PermissionController/src/com/android/permissioncontroller/safetycenter/service/package-info.java @@ -0,0 +1,19 @@ +/* + * Copyright (C) 2023 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +@NonNullByDefault +package com.android.permissioncontroller.safetycenter.service; + +import com.android.safetycenter.annotations.NonNullByDefault; diff --git a/PermissionController/src/com/android/permissioncontroller/safetycenter/ui/IssueCardPreference.java b/PermissionController/src/com/android/permissioncontroller/safetycenter/ui/IssueCardPreference.java index d7199c546..cd215e183 100644 --- a/PermissionController/src/com/android/permissioncontroller/safetycenter/ui/IssueCardPreference.java +++ b/PermissionController/src/com/android/permissioncontroller/safetycenter/ui/IssueCardPreference.java @@ -37,7 +37,6 @@ import android.widget.Space; import android.widget.TextView; import androidx.annotation.ColorRes; -import androidx.annotation.NonNull; import androidx.annotation.Nullable; import androidx.annotation.RequiresApi; import androidx.appcompat.view.ContextThemeWrapper; @@ -219,14 +218,14 @@ public class IssueCardPreference extends Preference implements ComparablePrefere } @Override - public boolean isSameItem(@NonNull Preference preference) { + public boolean isSameItem(Preference preference) { return (preference instanceof IssueCardPreference) && TextUtils.equals( mIssue.getId(), ((IssueCardPreference) preference).mIssue.getId()); } @Override - public boolean hasSameContents(@NonNull Preference preference) { + public boolean hasSameContents(Preference preference) { return (preference instanceof IssueCardPreference) && mIssue.equals(((IssueCardPreference) preference).mIssue) && Objects.equals( diff --git a/PermissionController/src/com/android/permissioncontroller/safetycenter/ui/SafetyCenterDashboardFragment.java b/PermissionController/src/com/android/permissioncontroller/safetycenter/ui/SafetyCenterDashboardFragment.java index 69e7f1088..c22a46f7d 100644 --- a/PermissionController/src/com/android/permissioncontroller/safetycenter/ui/SafetyCenterDashboardFragment.java +++ b/PermissionController/src/com/android/permissioncontroller/safetycenter/ui/SafetyCenterDashboardFragment.java @@ -39,7 +39,6 @@ import android.safetycenter.SafetyCenterStaticEntry; import android.safetycenter.SafetyCenterStaticEntryGroup; import android.util.Log; -import androidx.annotation.NonNull; import androidx.annotation.Nullable; import androidx.annotation.RequiresApi; import androidx.preference.PreferenceCategory; @@ -161,7 +160,7 @@ public final class SafetyCenterDashboardFragment extends SafetyCenterFragment { } @Override - public void onSaveInstanceState(@NonNull Bundle outState) { + public void onSaveInstanceState(Bundle outState) { super.onSaveInstanceState(outState); mCollapsableGroupCardHelper.saveState(outState); } diff --git a/PermissionController/src/com/android/permissioncontroller/safetycenter/ui/SafetyEntryPreference.java b/PermissionController/src/com/android/permissioncontroller/safetycenter/ui/SafetyEntryPreference.java index d94afbdda..f97914815 100644 --- a/PermissionController/src/com/android/permissioncontroller/safetycenter/ui/SafetyEntryPreference.java +++ b/PermissionController/src/com/android/permissioncontroller/safetycenter/ui/SafetyEntryPreference.java @@ -22,7 +22,6 @@ import android.content.Context; import android.safetycenter.SafetyCenterEntry; import android.text.TextUtils; -import androidx.annotation.NonNull; import androidx.annotation.Nullable; import androidx.annotation.RequiresApi; import androidx.preference.Preference; @@ -60,20 +59,20 @@ public final class SafetyEntryPreference extends Preference implements Comparabl } @Override - public void onBindViewHolder(@NonNull PreferenceViewHolder holder) { + public void onBindViewHolder(PreferenceViewHolder holder) { super.onBindViewHolder(holder); ((SafetyEntryView) holder.itemView).showEntry(mEntry, mPosition, mLaunchTaskId, mViewModel); } @Override - public boolean isSameItem(@NonNull Preference other) { + public boolean isSameItem(Preference other) { return other instanceof SafetyEntryPreference && TextUtils.equals(mEntry.getId(), ((SafetyEntryPreference) other).mEntry.getId()); } @Override - public boolean hasSameContents(@NonNull Preference other) { + public boolean hasSameContents(Preference other) { if (other instanceof SafetyEntryPreference) { SafetyEntryPreference o = (SafetyEntryPreference) other; return mEntry.equals(o.mEntry) && mPosition == o.mPosition; diff --git a/PermissionController/src/com/android/permissioncontroller/safetycenter/ui/SafetyStatusPreference.java b/PermissionController/src/com/android/permissioncontroller/safetycenter/ui/SafetyStatusPreference.java index ee2e7c73d..1f6c15183 100644 --- a/PermissionController/src/com/android/permissioncontroller/safetycenter/ui/SafetyStatusPreference.java +++ b/PermissionController/src/com/android/permissioncontroller/safetycenter/ui/SafetyStatusPreference.java @@ -32,7 +32,6 @@ import android.view.View; import android.widget.ImageView; import android.widget.TextView; -import androidx.annotation.NonNull; import androidx.annotation.Nullable; import androidx.annotation.RequiresApi; import androidx.preference.Preference; @@ -45,11 +44,11 @@ import com.android.permissioncontroller.safetycenter.ui.model.StatusUiData; import com.google.android.material.button.MaterialButton; +import kotlin.Pair; + import java.util.List; import java.util.Objects; -import kotlin.Pair; - /** Preference which displays a visual representation of {@link SafetyCenterStatus}. */ @RequiresApi(TIRAMISU) public class SafetyStatusPreference extends Preference implements ComparablePreference { @@ -57,13 +56,10 @@ public class SafetyStatusPreference extends Preference implements ComparablePref @Nullable private StatusUiData mStatus; @Nullable private SafetyCenterViewModel mViewModel; - @NonNull private final TextFadeAnimator mTitleTextAnimator = new TextFadeAnimator(R.id.status_title); - @NonNull private final TextFadeAnimator mSummaryTextAnimator = new TextFadeAnimator(R.id.status_summary); - @NonNull private final TextFadeAnimator mAllTextAnimator = new TextFadeAnimator(List.of(R.id.status_title, R.id.status_summary)); @@ -144,7 +140,7 @@ public class SafetyStatusPreference extends Preference implements ComparablePref holder.itemView.getPaddingStart(), holder.itemView.getPaddingTop(), holder.itemView.getPaddingEnd(), - /* bottom = */ getContext() + /* bottom= */ getContext() .getResources() .getDimensionPixelSize(R.dimen.sc_card_margin_bottom)); } else { @@ -152,7 +148,7 @@ public class SafetyStatusPreference extends Preference implements ComparablePref holder.itemView.getPaddingStart(), holder.itemView.getPaddingTop(), holder.itemView.getPaddingEnd(), - /* bottom = */ 0); + /* bottom= */ 0); } } @@ -384,13 +380,13 @@ public class SafetyStatusPreference extends Preference implements ComparablePref } @Override - public boolean isSameItem(@NonNull Preference preference) { + public boolean isSameItem(Preference preference) { return preference instanceof SafetyStatusPreference && TextUtils.equals(getKey(), preference.getKey()); } @Override - public boolean hasSameContents(@NonNull Preference preference) { + public boolean hasSameContents(Preference preference) { if (!(preference instanceof SafetyStatusPreference)) { return false; } diff --git a/PermissionController/src/com/android/permissioncontroller/safetycenter/ui/StaticSafetyEntryPreference.java b/PermissionController/src/com/android/permissioncontroller/safetycenter/ui/StaticSafetyEntryPreference.java index d51f3714a..63ae5df33 100644 --- a/PermissionController/src/com/android/permissioncontroller/safetycenter/ui/StaticSafetyEntryPreference.java +++ b/PermissionController/src/com/android/permissioncontroller/safetycenter/ui/StaticSafetyEntryPreference.java @@ -23,7 +23,6 @@ import android.safetycenter.SafetyCenterStaticEntry; import android.text.TextUtils; import android.util.Log; -import androidx.annotation.NonNull; import androidx.annotation.Nullable; import androidx.annotation.RequiresApi; import androidx.preference.Preference; @@ -73,7 +72,7 @@ public class StaticSafetyEntryPreference extends Preference implements Comparabl } @Override - public boolean isSameItem(@NonNull Preference preference) { + public boolean isSameItem(Preference preference) { return preference instanceof StaticSafetyEntryPreference && TextUtils.equals( mEntry.getTitle(), @@ -81,7 +80,7 @@ public class StaticSafetyEntryPreference extends Preference implements Comparabl } @Override - public boolean hasSameContents(@NonNull Preference preference) { + public boolean hasSameContents(Preference preference) { return preference instanceof StaticSafetyEntryPreference && mEntry.equals(((StaticSafetyEntryPreference) preference).mEntry); } diff --git a/PermissionController/src/com/android/permissioncontroller/safetycenter/ui/model/package-info.java b/PermissionController/src/com/android/permissioncontroller/safetycenter/ui/model/package-info.java new file mode 100644 index 000000000..00fda1f5b --- /dev/null +++ b/PermissionController/src/com/android/permissioncontroller/safetycenter/ui/model/package-info.java @@ -0,0 +1,19 @@ +/* + * Copyright (C) 2023 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +@NonNullByDefault +package com.android.permissioncontroller.safetycenter.ui.model; + +import com.android.safetycenter.annotations.NonNullByDefault; diff --git a/PermissionController/src/com/android/permissioncontroller/safetycenter/ui/package-info.java b/PermissionController/src/com/android/permissioncontroller/safetycenter/ui/package-info.java new file mode 100644 index 000000000..3389e3a3b --- /dev/null +++ b/PermissionController/src/com/android/permissioncontroller/safetycenter/ui/package-info.java @@ -0,0 +1,19 @@ +/* + * Copyright (C) 2023 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +@NonNullByDefault +package com.android.permissioncontroller.safetycenter.ui; + +import com.android.safetycenter.annotations.NonNullByDefault; diff --git a/PermissionController/src/com/android/permissioncontroller/safetycenter/ui/view/package-info.java b/PermissionController/src/com/android/permissioncontroller/safetycenter/ui/view/package-info.java new file mode 100644 index 000000000..88037aa61 --- /dev/null +++ b/PermissionController/src/com/android/permissioncontroller/safetycenter/ui/view/package-info.java @@ -0,0 +1,19 @@ +/* + * Copyright (C) 2023 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +@NonNullByDefault +package com.android.permissioncontroller.safetycenter.ui.view; + +import com.android.safetycenter.annotations.NonNullByDefault; diff --git a/PermissionController/tests/mocking/Android.bp b/PermissionController/tests/mocking/Android.bp index ba95e79a3..64903d615 100644 --- a/PermissionController/tests/mocking/Android.bp +++ b/PermissionController/tests/mocking/Android.bp @@ -46,6 +46,7 @@ android_test { libs: [ "android.test.base", "android.test.runner", + "safety-center-annotations", ], static_libs: [ @@ -104,12 +105,11 @@ android_test { "android.car", "car-ui-lib", "libprotobuf-java-lite", - "safety-center-internal-data", "SettingsLibUtils", "modules-utils-build_system", - "safety-center-resources-lib", "safety-center-internal-data", "safety-center-pending-intents", + "safety-center-resources-lib", "safety-label", "role-controller", "lottie", diff --git a/SafetyCenter/Annotations/Android.bp b/SafetyCenter/Annotations/Android.bp new file mode 100644 index 000000000..852d734b0 --- /dev/null +++ b/SafetyCenter/Annotations/Android.bp @@ -0,0 +1,48 @@ +// +// Copyright (C) 2023 The Android Open Source Project +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// + +// Library for internal data used by Safety Center system service and UI. +package { + default_applicable_licenses: ["Android-Apache-2.0"], +} + +filegroup { + name: "safetycenter-annotations-sources", + srcs: ["java/**/*.java"], + path: "java", + visibility: ["//packages/modules/Permission/SafetyCenter/ConfigLintChecker"], +} + +java_library { + name: "safety-center-annotations", + srcs: [ + ":safetycenter-annotations-sources", + ], + libs: [ + "androidx.annotation_annotation", + "jsr305", + ], + apex_available: [ + "com.android.permission", + "test_com.android.permission", + ], + installable: false, + min_sdk_version: "30", + sdk_version: "system_current", + visibility: [ + "//packages/modules/Permission:__subpackages__", + ], +} diff --git a/SafetyCenter/Annotations/java/com/android/safetycenter/annotations/NonNullByDefault.java b/SafetyCenter/Annotations/java/com/android/safetycenter/annotations/NonNullByDefault.java new file mode 100644 index 000000000..d19110652 --- /dev/null +++ b/SafetyCenter/Annotations/java/com/android/safetycenter/annotations/NonNullByDefault.java @@ -0,0 +1,33 @@ +/* + * Copyright (C) 2023 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package com.android.safetycenter.annotations; + +import androidx.annotation.NonNull; + +import java.lang.annotation.ElementType; +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; + +import javax.annotation.meta.TypeQualifierDefault; + +/** + * Annotation to declare all type usages in the annotated instance as {@link NonNull}, unless + * explicitly marked with a nullable annotation. + */ +@NonNull +@TypeQualifierDefault(ElementType.TYPE_USE) +@Retention(RetentionPolicy.CLASS) +public @interface NonNullByDefault {} diff --git a/SafetyCenter/Config/Android.bp b/SafetyCenter/Config/Android.bp index d69cfe36e..bbf0a8008 100644 --- a/SafetyCenter/Config/Android.bp +++ b/SafetyCenter/Config/Android.bp @@ -36,6 +36,7 @@ java_library { "framework-annotations-lib", "framework-permission-s", "modules-utils-build", + "safety-center-annotations", ], apex_available: [ "com.android.permission", diff --git a/SafetyCenter/Config/java/com/android/safetycenter/config/ParseException.java b/SafetyCenter/Config/java/com/android/safetycenter/config/ParseException.java index e73f98484..91c7c6654 100644 --- a/SafetyCenter/Config/java/com/android/safetycenter/config/ParseException.java +++ b/SafetyCenter/Config/java/com/android/safetycenter/config/ParseException.java @@ -18,19 +18,17 @@ package com.android.safetycenter.config; import static android.os.Build.VERSION_CODES.TIRAMISU; -import android.annotation.NonNull; - import androidx.annotation.RequiresApi; /** Exception thrown when there is an error parsing the Safety Center configuration. */ @RequiresApi(TIRAMISU) public final class ParseException extends Exception { - public ParseException(@NonNull String message) { + public ParseException(String message) { super(message); } - public ParseException(@NonNull String message, @NonNull Throwable ex) { + public ParseException(String message, Throwable ex) { super(message, ex); } } diff --git a/SafetyCenter/Config/java/com/android/safetycenter/config/SafetyCenterConfigParser.java b/SafetyCenter/Config/java/com/android/safetycenter/config/SafetyCenterConfigParser.java index f7faf9e27..b6730f36f 100644 --- a/SafetyCenter/Config/java/com/android/safetycenter/config/SafetyCenterConfigParser.java +++ b/SafetyCenter/Config/java/com/android/safetycenter/config/SafetyCenterConfigParser.java @@ -28,7 +28,6 @@ import static org.xmlpull.v1.XmlPullParser.TEXT; import static java.util.Locale.ROOT; import static java.util.Objects.requireNonNull; -import android.annotation.NonNull; import android.annotation.StringRes; import android.content.res.Resources; import android.safetycenter.config.SafetyCenterConfig; @@ -100,9 +99,8 @@ public final class SafetyCenterConfigParser { * @param resources the {@link Resources} retrieved from the package that contains the Safety * Center configuration */ - @NonNull - public static SafetyCenterConfig parseXmlResource( - @NonNull InputStream in, @NonNull Resources resources) throws ParseException { + public static SafetyCenterConfig parseXmlResource(InputStream in, Resources resources) + throws ParseException { requireNonNull(in); requireNonNull(resources); try { @@ -127,9 +125,8 @@ public final class SafetyCenterConfigParser { } } - @NonNull private static SafetyCenterConfig parseSafetyCenterConfig( - @NonNull XmlPullParser parser, @NonNull Resources resources) + XmlPullParser parser, Resources resources) throws XmlPullParserException, IOException, ParseException { validateElementHasNoAttribute(parser, TAG_SAFETY_CENTER_CONFIG); parser.nextTag(); @@ -152,9 +149,8 @@ public final class SafetyCenterConfigParser { } } - @NonNull private static SafetySourcesGroup parseSafetySourcesGroup( - @NonNull XmlPullParser parser, @NonNull Resources resources) + XmlPullParser parser, Resources resources) throws XmlPullParserException, IOException, ParseException { String name = TAG_SAFETY_SOURCES_GROUP; SafetySourcesGroup.Builder builder = new SafetySourcesGroup.Builder(); @@ -236,12 +232,8 @@ public final class SafetyCenterConfigParser { } } - @NonNull private static SafetySource parseSafetySource( - @NonNull XmlPullParser parser, - @NonNull Resources resources, - int safetySourceType, - @NonNull String name) + XmlPullParser parser, Resources resources, int safetySourceType, String name) throws XmlPullParserException, IOException, ParseException { SafetySource.Builder builder = new SafetySource.Builder(safetySourceType); for (int i = 0; i < parser.getAttributeCount(); i++) { @@ -396,71 +388,62 @@ public final class SafetyCenterConfigParser { } } - private static void validateElementStart(@NonNull XmlPullParser parser, @NonNull String name) + private static void validateElementStart(XmlPullParser parser, String name) throws XmlPullParserException, ParseException { if (parser.getEventType() != START_TAG || !parser.getName().equals(name)) { throw elementMissing(name); } } - private static void validateElementEnd(@NonNull XmlPullParser parser, @NonNull String name) + private static void validateElementEnd(XmlPullParser parser, String name) throws XmlPullParserException, ParseException { if (parser.getEventType() != END_TAG || !parser.getName().equals(name)) { throw elementNotClosed(name); } } - private static void validateElementHasNoAttribute( - @NonNull XmlPullParser parser, @NonNull String name) throws ParseException { + private static void validateElementHasNoAttribute(XmlPullParser parser, String name) + throws ParseException { if (parser.getAttributeCount() != 0) { throw elementInvalid(name); } } - private static ParseException elementMissing(@NonNull String name) { + private static ParseException elementMissing(String name) { return new ParseException(String.format("Element %s missing", name)); } - private static ParseException elementNotClosed(@NonNull String name) { + private static ParseException elementNotClosed(String name) { return new ParseException(String.format("Element %s not closed", name)); } - private static ParseException elementInvalid(@NonNull String name) { + private static ParseException elementInvalid(String name) { return new ParseException(String.format("Element %s invalid", name)); } - private static ParseException elementInvalid(@NonNull String name, @NonNull Throwable e) { + private static ParseException elementInvalid(String name, Throwable e) { return new ParseException(String.format("Element %s invalid", name), e); } - private static ParseException attributeUnexpected( - @NonNull String parent, @NonNull String name) { + private static ParseException attributeUnexpected(String parent, String name) { return new ParseException(String.format("Unexpected attribute %s.%s", parent, name)); } - private static String attributeInvalidString( - @NonNull String valueString, @NonNull String parent, @NonNull String name) { + private static String attributeInvalidString(String valueString, String parent, String name) { return String.format("Attribute value \"%s\" in %s.%s invalid", valueString, parent, name); } - private static ParseException attributeInvalid( - @NonNull String valueString, @NonNull String parent, @NonNull String name) { + private static ParseException attributeInvalid(String valueString, String parent, String name) { return new ParseException(attributeInvalidString(valueString, parent, name)); } private static ParseException attributeInvalid( - @NonNull String valueString, - @NonNull String parent, - @NonNull String name, - @NonNull Throwable ex) { + String valueString, String parent, String name, Throwable ex) { return new ParseException(attributeInvalidString(valueString, parent, name), ex); } private static int parseInteger( - @NonNull String valueString, - @NonNull String parent, - @NonNull String name, - @NonNull Resources resources) + String valueString, String parent, String name, Resources resources) throws ParseException { String valueToParse = getValueToParse(valueString, parent, name, resources); try { @@ -471,10 +454,7 @@ public final class SafetyCenterConfigParser { } private static boolean parseBoolean( - @NonNull String valueString, - @NonNull String parent, - @NonNull String name, - @NonNull Resources resources) + String valueString, String parent, String name, Resources resources) throws ParseException { String valueToParse = getValueToParse(valueString, parent, name, resources).toLowerCase(ROOT); @@ -488,10 +468,7 @@ public final class SafetyCenterConfigParser { @StringRes private static int parseStringResourceName( - @NonNull String valueString, - @NonNull String parent, - @NonNull String name, - @NonNull Resources resources) + String valueString, String parent, String name, Resources resources) throws ParseException { if (valueString.isEmpty()) { throw new ParseException( @@ -536,20 +513,13 @@ public final class SafetyCenterConfigParser { return id; } - @NonNull private static String parseStringResourceValue( - @NonNull String valueString, - @NonNull String parent, - @NonNull String name, - @NonNull Resources resources) { + String valueString, String parent, String name, Resources resources) { return getValueToParse(valueString, parent, name, resources); } private static int parseStatelessIconType( - @NonNull String valueString, - @NonNull String parent, - @NonNull String name, - @NonNull Resources resources) + String valueString, String parent, String name, Resources resources) throws ParseException { String valueToParse = getValueToParse(valueString, parent, name, resources); switch (valueToParse) { @@ -563,10 +533,7 @@ public final class SafetyCenterConfigParser { } private static int parseGroupType( - @NonNull String valueString, - @NonNull String parent, - @NonNull String name, - @NonNull Resources resources) + String valueString, String parent, String name, Resources resources) throws ParseException { String valueToParse = getValueToParse(valueString, parent, name, resources); switch (valueToParse) { @@ -582,10 +549,7 @@ public final class SafetyCenterConfigParser { } private static int parseProfile( - @NonNull String valueString, - @NonNull String parent, - @NonNull String name, - @NonNull Resources resources) + String valueString, String parent, String name, Resources resources) throws ParseException { String valueToParse = getValueToParse(valueString, parent, name, resources); switch (valueToParse) { @@ -599,10 +563,7 @@ public final class SafetyCenterConfigParser { } private static int parseInitialDisplayState( - @NonNull String valueString, - @NonNull String parent, - @NonNull String name, - @NonNull Resources resources) + String valueString, String parent, String name, Resources resources) throws ParseException { String valueToParse = getValueToParse(valueString, parent, name, resources); switch (valueToParse) { @@ -617,12 +578,8 @@ public final class SafetyCenterConfigParser { } } - @NonNull private static String getValueToParse( - @NonNull String valueString, - @NonNull String parent, - @NonNull String name, - @NonNull Resources resources) { + String valueString, String parent, String name, Resources resources) { try { int id = parseStringResourceName(valueString, parent, name, resources); return resources.getString(id); diff --git a/SafetyCenter/Config/java/com/android/safetycenter/config/package-info.java b/SafetyCenter/Config/java/com/android/safetycenter/config/package-info.java new file mode 100644 index 000000000..45ac9e485 --- /dev/null +++ b/SafetyCenter/Config/java/com/android/safetycenter/config/package-info.java @@ -0,0 +1,19 @@ +/* + * Copyright (C) 2023 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +@NonNullByDefault +package com.android.safetycenter.config; + +import com.android.safetycenter.annotations.NonNullByDefault; diff --git a/SafetyCenter/ConfigLintChecker/Android.bp b/SafetyCenter/ConfigLintChecker/Android.bp index ecc699cab..ff1e28009 100644 --- a/SafetyCenter/ConfigLintChecker/Android.bp +++ b/SafetyCenter/ConfigLintChecker/Android.bp @@ -21,6 +21,7 @@ java_library_host { srcs: [ "java/**/*.java", "java/**/*.kt", + ":safetycenter-annotations-sources", ":safetycenter-config-api-sources", ":safetycenter-config-parser-sources", ], diff --git a/SafetyCenter/InternalData/Android.bp b/SafetyCenter/InternalData/Android.bp index 7a68da60b..3def47445 100644 --- a/SafetyCenter/InternalData/Android.bp +++ b/SafetyCenter/InternalData/Android.bp @@ -27,6 +27,7 @@ java_library { ], libs: [ "androidx.annotation_annotation", + "safety-center-annotations", ], apex_available: [ "com.android.permission", diff --git a/SafetyCenter/InternalData/java/com/android/safetycenter/internaldata/SafetyCenterIds.java b/SafetyCenter/InternalData/java/com/android/safetycenter/internaldata/SafetyCenterIds.java index f22b328fa..ff737c66c 100644 --- a/SafetyCenter/InternalData/java/com/android/safetycenter/internaldata/SafetyCenterIds.java +++ b/SafetyCenter/InternalData/java/com/android/safetycenter/internaldata/SafetyCenterIds.java @@ -20,7 +20,6 @@ import static android.os.Build.VERSION_CODES.TIRAMISU; import android.util.Base64; -import androidx.annotation.NonNull; import androidx.annotation.RequiresApi; import com.google.protobuf.InvalidProtocolBufferException; @@ -41,8 +40,7 @@ public final class SafetyCenterIds { * <p>Throws an {@link IllegalArgumentException} if the String couldn't be converted to a {@link * SafetyCenterEntryId}. */ - @NonNull - public static SafetyCenterEntryId entryIdFromString(@NonNull String encoded) { + public static SafetyCenterEntryId entryIdFromString(String encoded) { return decodeToProto(SafetyCenterEntryId.parser(), encoded); } @@ -52,8 +50,7 @@ public final class SafetyCenterIds { * <p>Throws an {@link IllegalArgumentException} if the String couldn't be converted to a {@link * SafetyCenterIssueId}. */ - @NonNull - public static SafetyCenterIssueId issueIdFromString(@NonNull String encoded) { + public static SafetyCenterIssueId issueIdFromString(String encoded) { return decodeToProto(SafetyCenterIssueId.parser(), encoded); } @@ -63,8 +60,7 @@ public final class SafetyCenterIds { * <p>Throws an {@link IllegalArgumentException} if the String couldn't be converted to a {@link * SafetyCenterIssueKey}. */ - @NonNull - public static SafetyCenterIssueKey issueKeyFromString(@NonNull String encoded) { + public static SafetyCenterIssueKey issueKeyFromString(String encoded) { return decodeToProto(SafetyCenterIssueKey.parser(), encoded); } @@ -74,14 +70,12 @@ public final class SafetyCenterIds { * <p>Throws an {@link IllegalArgumentException} if the String couldn't be converted to a {@link * SafetyCenterIssueActionId}. */ - @NonNull - public static SafetyCenterIssueActionId issueActionIdFromString(@NonNull String encoded) { + public static SafetyCenterIssueActionId issueActionIdFromString(String encoded) { return decodeToProto(SafetyCenterIssueActionId.parser(), encoded); } /** Encodes a Safety Center id to a String. */ - @NonNull - public static String encodeToString(@NonNull MessageLite message) { + public static String encodeToString(MessageLite message) { return Base64.encodeToString(message.toByteArray(), ENCODING_FLAGS); } @@ -91,8 +85,7 @@ public final class SafetyCenterIds { * <p>This is necessary as the implementation of {@link #toString()} for Java lite protos is * optimized in production builds and does not return a user-readable output. */ - @NonNull - public static String toUserFriendlyString(@NonNull SafetyCenterIssueKey safetyCenterIssueKey) { + public static String toUserFriendlyString(SafetyCenterIssueKey safetyCenterIssueKey) { return "SafetyCenterIssueKey{safetySourceId='" + safetyCenterIssueKey.getSafetySourceId() + "', safetySourceIssueId='" @@ -108,8 +101,7 @@ public final class SafetyCenterIds { * <p>This is necessary as the implementation of {@link #toString()} for Java lite protos is * optimized in production builds and does not return a user-readable output. */ - @NonNull - public static String toUserFriendlyString(@NonNull SafetyCenterIssueId safetyCenterIssueId) { + public static String toUserFriendlyString(SafetyCenterIssueId safetyCenterIssueId) { return "SafetyCenterIssueId{safetyCenterIssueKey=" + toUserFriendlyString(safetyCenterIssueId.getSafetyCenterIssueKey()) + ", issueTypeId='" @@ -125,9 +117,7 @@ public final class SafetyCenterIds { * <p>This is necessary as the implementation of {@link #toString()} for Java lite protos is * optimized in production builds and does not return a user-readable output. */ - @NonNull - public static String toUserFriendlyString( - @NonNull SafetyCenterIssueActionId safetyCenterIssueActionId) { + public static String toUserFriendlyString(SafetyCenterIssueActionId safetyCenterIssueActionId) { return "SafetyCenterIssueActionId{safetyCenterIssueKey=" + toUserFriendlyString(safetyCenterIssueActionId.getSafetyCenterIssueKey()) + ", safetySourceIssueActionId='" @@ -135,9 +125,7 @@ public final class SafetyCenterIds { + "'}"; } - @NonNull - private static <T extends MessageLite> T decodeToProto( - @NonNull Parser<T> parser, @NonNull String encoded) { + private static <T extends MessageLite> T decodeToProto(Parser<T> parser, String encoded) { try { return parser.parseFrom(Base64.decode(encoded, ENCODING_FLAGS)); } catch (InvalidProtocolBufferException e) { diff --git a/SafetyCenter/InternalData/java/com/android/safetycenter/internaldata/package-info.java b/SafetyCenter/InternalData/java/com/android/safetycenter/internaldata/package-info.java new file mode 100644 index 000000000..cb88422ab --- /dev/null +++ b/SafetyCenter/InternalData/java/com/android/safetycenter/internaldata/package-info.java @@ -0,0 +1,19 @@ +/* + * Copyright (C) 2023 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +@NonNullByDefault +package com.android.safetycenter.internaldata; + +import com.android.safetycenter.annotations.NonNullByDefault; diff --git a/SafetyCenter/PendingIntents/Android.bp b/SafetyCenter/PendingIntents/Android.bp index a07029266..a354c7014 100644 --- a/SafetyCenter/PendingIntents/Android.bp +++ b/SafetyCenter/PendingIntents/Android.bp @@ -24,6 +24,7 @@ java_library { ], libs: [ "androidx.annotation_annotation", + "safety-center-annotations", ], apex_available: [ "com.android.permission", diff --git a/SafetyCenter/PendingIntents/java/com/android/safetycenter/pendingintents/PendingIntentSender.java b/SafetyCenter/PendingIntents/java/com/android/safetycenter/pendingintents/PendingIntentSender.java index ff0a1e756..5f45a375c 100644 --- a/SafetyCenter/PendingIntents/java/com/android/safetycenter/pendingintents/PendingIntentSender.java +++ b/SafetyCenter/PendingIntents/java/com/android/safetycenter/pendingintents/PendingIntentSender.java @@ -25,7 +25,6 @@ import android.app.PendingIntent; import android.os.Build; import android.util.Log; -import androidx.annotation.NonNull; import androidx.annotation.Nullable; import androidx.annotation.RequiresApi; import androidx.annotation.RequiresPermission; @@ -45,20 +44,18 @@ public final class PendingIntentSender { * ActivityOptions#MODE_BACKGROUND_ACTIVITY_START_ALLOWED}. This call opts-in this behavior as * the Safety Center intents come from trusted sources and are used for navigation purposes. */ - public static void send(@NonNull PendingIntent pendingIntent) - throws PendingIntent.CanceledException { + public static void send(PendingIntent pendingIntent) throws PendingIntent.CanceledException { send(pendingIntent, createActivityOptions(pendingIntent, /* launchTaskId= */ null)); } /** Same as {@link #send(PendingIntent)} but with the given optional {@code launchTaskId}. */ @RequiresPermission(START_TASKS_FROM_RECENTS) - public static void send(@NonNull PendingIntent pendingIntent, @Nullable Integer launchTaskId) + public static void send(PendingIntent pendingIntent, @Nullable Integer launchTaskId) throws PendingIntent.CanceledException { send(pendingIntent, createActivityOptions(pendingIntent, launchTaskId)); } - private static void send( - @NonNull PendingIntent pendingIntent, @Nullable ActivityOptions activityOptions) + private static void send(PendingIntent pendingIntent, @Nullable ActivityOptions activityOptions) throws PendingIntent.CanceledException { if (activityOptions == null) { pendingIntent.send(); @@ -78,7 +75,7 @@ public final class PendingIntentSender { * Same as {@link #send(PendingIntent)} but returns whether the call was successful instead of * throwing a {@link PendingIntent#CanceledException}. */ - public static boolean trySend(@NonNull PendingIntent pendingIntent) { + public static boolean trySend(PendingIntent pendingIntent) { return trySend( pendingIntent, createActivityOptions(pendingIntent, /* launchTaskId= */ null)); } @@ -88,13 +85,12 @@ public final class PendingIntentSender { * instead of throwing a {@link PendingIntent#CanceledException}. */ @RequiresPermission(START_TASKS_FROM_RECENTS) - public static boolean trySend( - @NonNull PendingIntent pendingIntent, @Nullable Integer launchTaskId) { + public static boolean trySend(PendingIntent pendingIntent, @Nullable Integer launchTaskId) { return trySend(pendingIntent, createActivityOptions(pendingIntent, launchTaskId)); } private static boolean trySend( - @NonNull PendingIntent pendingIntent, @Nullable ActivityOptions activityOptions) { + PendingIntent pendingIntent, @Nullable ActivityOptions activityOptions) { try { send(pendingIntent, activityOptions); return true; @@ -112,7 +108,7 @@ public final class PendingIntentSender { @Nullable private static ActivityOptions createActivityOptions( - @NonNull PendingIntent pendingIntent, @Nullable Integer launchTaskId) { + PendingIntent pendingIntent, @Nullable Integer launchTaskId) { if (!pendingIntent.isActivity()) { return null; } @@ -130,8 +126,7 @@ public final class PendingIntentSender { } @RequiresApi(UPSIDE_DOWN_CAKE) - private static void setBackgroundActivityStartModeAllowed( - @NonNull ActivityOptions activityOptions) { + private static void setBackgroundActivityStartModeAllowed(ActivityOptions activityOptions) { activityOptions.setPendingIntentBackgroundActivityStartMode( ActivityOptions.MODE_BACKGROUND_ACTIVITY_START_ALLOWED); } diff --git a/SafetyCenter/PendingIntents/java/com/android/safetycenter/pendingintents/package-info.java b/SafetyCenter/PendingIntents/java/com/android/safetycenter/pendingintents/package-info.java new file mode 100644 index 000000000..3d884f9e1 --- /dev/null +++ b/SafetyCenter/PendingIntents/java/com/android/safetycenter/pendingintents/package-info.java @@ -0,0 +1,19 @@ +/* + * Copyright (C) 2023 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +@NonNullByDefault +package com.android.safetycenter.pendingintents; + +import com.android.safetycenter.annotations.NonNullByDefault; diff --git a/SafetyCenter/Persistence/Android.bp b/SafetyCenter/Persistence/Android.bp index 3af6d323f..56ce4491b 100644 --- a/SafetyCenter/Persistence/Android.bp +++ b/SafetyCenter/Persistence/Android.bp @@ -26,6 +26,7 @@ java_library { ], libs: [ "androidx.annotation_annotation", + "safety-center-annotations", ], apex_available: [ "com.android.permission", diff --git a/SafetyCenter/Persistence/java/com/android/safetycenter/persistence/PersistedSafetyCenterIssue.java b/SafetyCenter/Persistence/java/com/android/safetycenter/persistence/PersistedSafetyCenterIssue.java index ec65f9647..1eabf6c8b 100644 --- a/SafetyCenter/Persistence/java/com/android/safetycenter/persistence/PersistedSafetyCenterIssue.java +++ b/SafetyCenter/Persistence/java/com/android/safetycenter/persistence/PersistedSafetyCenterIssue.java @@ -18,7 +18,6 @@ package com.android.safetycenter.persistence; import static android.os.Build.VERSION_CODES.TIRAMISU; -import androidx.annotation.NonNull; import androidx.annotation.Nullable; import androidx.annotation.RequiresApi; @@ -31,15 +30,15 @@ import java.util.Objects; */ @RequiresApi(TIRAMISU) public final class PersistedSafetyCenterIssue { - @NonNull private final String mKey; - @NonNull private final Instant mFirstSeenAt; + private final String mKey; + private final Instant mFirstSeenAt; @Nullable private final Instant mDismissedAt; private final int mDismissCount; @Nullable private final Instant mNotificationDismissedAt; private PersistedSafetyCenterIssue( - @NonNull String key, - @NonNull Instant firstSeenAt, + String key, + Instant firstSeenAt, @Nullable Instant dismissedAt, int dismissCount, @Nullable Instant notificationDismissedAt) { @@ -51,13 +50,11 @@ public final class PersistedSafetyCenterIssue { } /** The unique key for a safety source issue. */ - @NonNull public String getKey() { return mKey; } /** The instant when this issue was first seen. */ - @NonNull public Instant getFirstSeenAt() { return mFirstSeenAt; } @@ -128,28 +125,24 @@ public final class PersistedSafetyCenterIssue { public Builder() {} /** The unique key for a safety source issue. */ - @NonNull public Builder setKey(@Nullable String key) { mKey = key; return this; } /** The instant when this issue was first seen. */ - @NonNull public Builder setFirstSeenAt(@Nullable Instant firstSeenAt) { mFirstSeenAt = firstSeenAt; return this; } /** The instant when this issue was dismissed. */ - @NonNull public Builder setDismissedAt(@Nullable Instant dismissedAt) { mDismissedAt = dismissedAt; return this; } /** The number of times this issue was dismissed. */ - @NonNull public Builder setDismissCount(int dismissCount) { if (dismissCount < 0) { throw new IllegalArgumentException("Dismiss count cannot be negative"); @@ -159,7 +152,6 @@ public final class PersistedSafetyCenterIssue { } /** The instant when this issue's notification was dismissed. */ - @NonNull public Builder setNotificationDismissedAt(@Nullable Instant notificationDismissedAt) { mNotificationDismissedAt = notificationDismissedAt; return this; @@ -170,7 +162,6 @@ public final class PersistedSafetyCenterIssue { * * <p>Throws an {@link IllegalStateException} if any constraint is violated. */ - @NonNull public PersistedSafetyCenterIssue build() { validateRequiredAttribute(mKey, "key"); validateRequiredAttribute(mFirstSeenAt, "firstSeenAt"); @@ -189,8 +180,7 @@ public final class PersistedSafetyCenterIssue { } } - private static void validateRequiredAttribute( - @Nullable Object attribute, @NonNull String name) { + private static void validateRequiredAttribute(@Nullable Object attribute, String name) { if (attribute == null) { throw new IllegalStateException("Required attribute " + name + " missing"); } diff --git a/SafetyCenter/Persistence/java/com/android/safetycenter/persistence/PersistenceException.java b/SafetyCenter/Persistence/java/com/android/safetycenter/persistence/PersistenceException.java index 32bbd5467..144aa160d 100644 --- a/SafetyCenter/Persistence/java/com/android/safetycenter/persistence/PersistenceException.java +++ b/SafetyCenter/Persistence/java/com/android/safetycenter/persistence/PersistenceException.java @@ -18,18 +18,17 @@ package com.android.safetycenter.persistence; import static android.os.Build.VERSION_CODES.TIRAMISU; -import androidx.annotation.NonNull; import androidx.annotation.RequiresApi; /** Exception thrown when there is an error accessing persistent data. */ @RequiresApi(TIRAMISU) public final class PersistenceException extends Exception { - public PersistenceException(@NonNull String message) { + public PersistenceException(String message) { super(message); } - public PersistenceException(@NonNull String message, @NonNull Throwable ex) { + public PersistenceException(String message, Throwable ex) { super(message, ex); } } diff --git a/SafetyCenter/Persistence/java/com/android/safetycenter/persistence/SafetyCenterIssuesPersistence.java b/SafetyCenter/Persistence/java/com/android/safetycenter/persistence/SafetyCenterIssuesPersistence.java index 9755ad2b7..40450e178 100644 --- a/SafetyCenter/Persistence/java/com/android/safetycenter/persistence/SafetyCenterIssuesPersistence.java +++ b/SafetyCenter/Persistence/java/com/android/safetycenter/persistence/SafetyCenterIssuesPersistence.java @@ -31,7 +31,6 @@ import android.util.AtomicFile; import android.util.Log; import android.util.Xml; -import androidx.annotation.NonNull; import androidx.annotation.RequiresApi; import org.xmlpull.v1.XmlPullParser; @@ -81,9 +80,7 @@ public final class SafetyCenterIssuesPersistence { * @return the list of issue states read or an empty list if the file does not exist * @throws PersistenceException if there is an unexpected error while reading the file */ - @NonNull - public static List<PersistedSafetyCenterIssue> read(@NonNull File file) - throws PersistenceException { + public static List<PersistedSafetyCenterIssue> read(File file) throws PersistenceException { XmlPullParser parser = Xml.newPullParser(); try (FileInputStream inputStream = new AtomicFile(file).openRead()) { parser.setFeature(FEATURE_PROCESS_NAMESPACES, true); @@ -97,8 +94,7 @@ public final class SafetyCenterIssuesPersistence { } } - @NonNull - private static List<PersistedSafetyCenterIssue> parseXml(@NonNull XmlPullParser parser) + private static List<PersistedSafetyCenterIssue> parseXml(XmlPullParser parser) throws IOException, PersistenceException, XmlPullParserException { if (parser.getEventType() != START_DOCUMENT) { throw new PersistenceException("Unexpected parser state"); @@ -115,8 +111,7 @@ public final class SafetyCenterIssuesPersistence { return persistedSafetyCenterIssues; } - @NonNull - private static List<PersistedSafetyCenterIssue> parseIssues(@NonNull XmlPullParser parser) + private static List<PersistedSafetyCenterIssue> parseIssues(XmlPullParser parser) throws IOException, PersistenceException, XmlPullParserException { int version = NO_VERSION; for (int i = 0; i < parser.getAttributeCount(); i++) { @@ -145,8 +140,7 @@ public final class SafetyCenterIssuesPersistence { return persistedSafetyCenterIssues; } - @NonNull - private static PersistedSafetyCenterIssue parseIssue(@NonNull XmlPullParser parser) + private static PersistedSafetyCenterIssue parseIssue(XmlPullParser parser) throws IOException, PersistenceException, XmlPullParserException { boolean hasDismissedAt = false; boolean hasDismissCount = false; @@ -197,22 +191,21 @@ public final class SafetyCenterIssuesPersistence { } } - private static void validateElementStart(@NonNull XmlPullParser parser, @NonNull String name) + private static void validateElementStart(XmlPullParser parser, String name) throws PersistenceException, XmlPullParserException { if (parser.getEventType() != START_TAG || !parser.getName().equals(name)) { throw new PersistenceException(String.format("Element %s missing", name)); } } - private static void validateElementEnd(@NonNull XmlPullParser parser, @NonNull String name) + private static void validateElementEnd(XmlPullParser parser, String name) throws PersistenceException, XmlPullParserException { if (parser.getEventType() != END_TAG || !parser.getName().equals(name)) { throw new PersistenceException(String.format("Element %s not closed", name)); } } - private static int parseInteger(@NonNull String value, @NonNull String name) - throws PersistenceException { + private static int parseInteger(String value, String name) throws PersistenceException { try { return Integer.parseInt(value); } catch (NumberFormatException e) { @@ -220,8 +213,7 @@ public final class SafetyCenterIssuesPersistence { } } - private static Instant parseInstant(@NonNull String value, @NonNull String name) - throws PersistenceException { + private static Instant parseInstant(String value, String name) throws PersistenceException { try { return Instant.ofEpochMilli(Long.parseLong(value)); } catch (DateTimeException | NumberFormatException e) { @@ -229,12 +221,11 @@ public final class SafetyCenterIssuesPersistence { } } - private static PersistenceException attributeUnexpected(@NonNull String name) { + private static PersistenceException attributeUnexpected(String name) { return new PersistenceException("Unexpected attribute " + name); } - private static PersistenceException attributeInvalid( - @NonNull String value, @NonNull String name, @NonNull Throwable ex) { + private static PersistenceException attributeInvalid(String value, String name, Throwable ex) { return new PersistenceException( "Attribute value \"" + value + "\" for " + name + " invalid", ex); } @@ -248,8 +239,7 @@ public final class SafetyCenterIssuesPersistence { * @param file the file to write to */ public static void write( - @NonNull List<PersistedSafetyCenterIssue> persistedSafetyCenterIssues, - @NonNull File file) { + List<PersistedSafetyCenterIssue> persistedSafetyCenterIssues, File file) { AtomicFile atomicFile = new AtomicFile(file); FileOutputStream outputStream = null; try { @@ -277,8 +267,7 @@ public final class SafetyCenterIssuesPersistence { } private static void serializeIssues( - @NonNull XmlSerializer serializer, - @NonNull List<PersistedSafetyCenterIssue> persistedSafetyCenterIssues) + XmlSerializer serializer, List<PersistedSafetyCenterIssue> persistedSafetyCenterIssues) throws IOException { serializer.startTag(null, TAG_ISSUES); serializer.attribute(null, ATTRIBUTE_VERSION, Integer.toString(CURRENT_VERSION)); diff --git a/SafetyCenter/Persistence/java/com/android/safetycenter/persistence/package-info.java b/SafetyCenter/Persistence/java/com/android/safetycenter/persistence/package-info.java new file mode 100644 index 000000000..958a8b287 --- /dev/null +++ b/SafetyCenter/Persistence/java/com/android/safetycenter/persistence/package-info.java @@ -0,0 +1,19 @@ +/* + * Copyright (C) 2023 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +@NonNullByDefault +package com.android.safetycenter.persistence; + +import com.android.safetycenter.annotations.NonNullByDefault; diff --git a/SafetyCenter/ResourcesLib/Android.bp b/SafetyCenter/ResourcesLib/Android.bp index 75fe38408..ebc7aa017 100644 --- a/SafetyCenter/ResourcesLib/Android.bp +++ b/SafetyCenter/ResourcesLib/Android.bp @@ -26,6 +26,7 @@ java_library { ], libs: [ "androidx.annotation_annotation", + "safety-center-annotations", ], apex_available: [ "com.android.permission", diff --git a/SafetyCenter/ResourcesLib/java/com/android/safetycenter/resources/SafetyCenterResourcesContext.java b/SafetyCenter/ResourcesLib/java/com/android/safetycenter/resources/SafetyCenterResourcesContext.java index 10f8141a5..2ecf45968 100644 --- a/SafetyCenter/ResourcesLib/java/com/android/safetycenter/resources/SafetyCenterResourcesContext.java +++ b/SafetyCenter/ResourcesLib/java/com/android/safetycenter/resources/SafetyCenterResourcesContext.java @@ -28,7 +28,6 @@ import android.content.res.Resources; import android.graphics.drawable.Drawable; import android.util.Log; -import androidx.annotation.NonNull; import androidx.annotation.Nullable; import androidx.annotation.StringRes; import androidx.annotation.VisibleForTesting; @@ -61,13 +60,13 @@ public class SafetyCenterResourcesContext extends ContextWrapper { private static final String CONFIG_NAME = "safety_center_config"; /** Intent action that is used to identify the Safety Center resources APK */ - @NonNull private final String mResourcesApkAction; + private final String mResourcesApkAction; /** The path where the Safety Center resources APK is expected to be installed */ @Nullable private final String mResourcesApkPath; /** Raw XML config resource name */ - @NonNull private final String mConfigName; + private final String mConfigName; /** Specific flags used for retrieving resolve info */ private final int mFlags; @@ -84,12 +83,12 @@ public class SafetyCenterResourcesContext extends ContextWrapper { @Nullable private Resources mResourcesFromApk; @Nullable private Resources.Theme mThemeFromApk; - public SafetyCenterResourcesContext(@NonNull Context contextBase) { + public SafetyCenterResourcesContext(Context contextBase) { this(contextBase, /* shouldFallbackIfNamedResourceNotFound */ true); } private SafetyCenterResourcesContext( - @NonNull Context contextBase, boolean shouldFallbackIfNamedResourceNotFound) { + Context contextBase, boolean shouldFallbackIfNamedResourceNotFound) { this( contextBase, RESOURCES_APK_ACTION, @@ -101,10 +100,10 @@ public class SafetyCenterResourcesContext extends ContextWrapper { @VisibleForTesting SafetyCenterResourcesContext( - @NonNull Context contextBase, - @NonNull String resourcesApkAction, + Context contextBase, + String resourcesApkAction, @Nullable String resourcesApkPath, - @NonNull String configName, + String configName, int flags, boolean shouldFallbackIfNamedResourceNotFound) { super(contextBase); @@ -117,7 +116,7 @@ public class SafetyCenterResourcesContext extends ContextWrapper { /** Creates a new {@link SafetyCenterResourcesContext} for testing. */ @VisibleForTesting - public static SafetyCenterResourcesContext forTests(@NonNull Context contextBase) { + public static SafetyCenterResourcesContext forTests(Context contextBase) { return new SafetyCenterResourcesContext( contextBase, /* shouldFallbackIfNamedResourceNotFound */ false); } @@ -214,7 +213,7 @@ public class SafetyCenterResourcesContext extends ContextWrapper { /** Same as {@link #getOptionalString(int)} but with the given {@code formatArgs}. */ @Nullable - public String getOptionalString(@StringRes int stringId, @NonNull Object... formatArgs) { + public String getOptionalString(@StringRes int stringId, Object... formatArgs) { if (stringId == Resources.ID_NULL) { return null; } @@ -226,22 +225,18 @@ public class SafetyCenterResourcesContext extends ContextWrapper { * string if the resource does not exist (or throws a {@link Resources.NotFoundException} if * {@link #mShouldFallbackIfNamedResourceNotFound} is {@code false}). */ - @NonNull - public String getStringByName(@NonNull String name) { + public String getStringByName(String name) { int id = getStringRes(name); return maybeFallbackIfNamedResourceIsNull(name, getOptionalString(id)); } /** Same as {@link #getStringByName(String)} but with the given {@code formatArgs}. */ - @NonNull - public String getStringByName(@NonNull String name, Object... formatArgs) { + public String getStringByName(String name, Object... formatArgs) { int id = getStringRes(name); return maybeFallbackIfNamedResourceIsNull(name, getOptionalString(id, formatArgs)); } - @NonNull - private String maybeFallbackIfNamedResourceIsNull( - @NonNull String name, @Nullable String value) { + private String maybeFallbackIfNamedResourceIsNull(String name, @Nullable String value) { if (value != null) { return value; } @@ -253,7 +248,7 @@ public class SafetyCenterResourcesContext extends ContextWrapper { } @StringRes - private int getStringRes(@NonNull String name) { + private int getStringRes(String name) { String resourcePkgName = getResourcesApkPkgName(); if (resourcePkgName == null) { return Resources.ID_NULL; @@ -326,7 +321,7 @@ public class SafetyCenterResourcesContext extends ContextWrapper { * @param theme the theme used to style the drawable attributes, may be {@code null} */ @Nullable - public Drawable getDrawableByName(@NonNull String name, @Nullable Resources.Theme theme) { + public Drawable getDrawableByName(String name, @Nullable Resources.Theme theme) { String resourcePkgName = getResourcesApkPkgName(); if (resourcePkgName == null) { return null; diff --git a/SafetyCenter/ResourcesLib/java/com/android/safetycenter/resources/package-info.java b/SafetyCenter/ResourcesLib/java/com/android/safetycenter/resources/package-info.java new file mode 100644 index 000000000..605b5ce71 --- /dev/null +++ b/SafetyCenter/ResourcesLib/java/com/android/safetycenter/resources/package-info.java @@ -0,0 +1,19 @@ +/* + * Copyright (C) 2023 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +@NonNullByDefault +package com.android.safetycenter.resources; + +import com.android.safetycenter.annotations.NonNullByDefault; diff --git a/jarjar-rules.txt b/jarjar-rules.txt index 02810b25a..2b8765cf5 100644 --- a/jarjar-rules.txt +++ b/jarjar-rules.txt @@ -3,8 +3,10 @@ rule android.util.IndentingPrintWriter com.android.permission.jarjar.@0 rule com.android.internal.** com.android.permission.jarjar.@0 rule com.android.modules.** com.android.permission.jarjar.@0 rule com.android.role.*Proto com.android.permission.jarjar.@0 -# TODO(b/236200992): Revisit addition of rule com.android.safetycenter.internaldata, -# com.android.safetycenter.pendingintents and com.android.safetycenter.resources +# TODO(b/236200992): Revisit addition of rule com.android.safetycenter.annotations, +# com.android.safetycenter.internaldata, com.android.safetycenter.pendingintents and +# com.android.safetycenter.resources +rule com.android.safetycenter.annotations.** com.android.permission.jarjar.@0 rule com.android.safetycenter.internaldata.** com.android.permission.jarjar.@0 rule com.android.safetycenter.pendingintents.** com.android.permission.jarjar.@0 rule com.android.safetycenter.resources.** com.android.permission.jarjar.@0 diff --git a/service/Android.bp b/service/Android.bp index 1ec44beee..c80044fac 100644 --- a/service/Android.bp +++ b/service/Android.bp @@ -91,6 +91,7 @@ java_sdk_library { // Soong fails to automatically add this dependency because all the // *.kt sources are inside a filegroup. "kotlin-annotations", + "safety-center-annotations", ], static_libs: [ "kotlin-stdlib", diff --git a/service/java/com/android/safetycenter/DevicePolicyResources.java b/service/java/com/android/safetycenter/DevicePolicyResources.java index 0898136f0..25cab343f 100644 --- a/service/java/com/android/safetycenter/DevicePolicyResources.java +++ b/service/java/com/android/safetycenter/DevicePolicyResources.java @@ -20,7 +20,6 @@ import static android.os.Build.VERSION_CODES.TIRAMISU; import static java.util.Objects.requireNonNull; -import android.annotation.NonNull; import android.annotation.StringRes; import android.app.admin.DevicePolicyManager; import android.app.admin.DevicePolicyResourcesManager; @@ -46,10 +45,9 @@ final class DevicePolicyResources { * Returns the updated string for the given {@code safetySourceId} by calling {@link * DevicePolicyResourcesManager#getString}. */ - @NonNull static String getSafetySourceWorkString( - @NonNull SafetyCenterResourcesContext safetyCenterResourcesContext, - @NonNull String safetySourceId, + SafetyCenterResourcesContext safetyCenterResourcesContext, + String safetySourceId, @StringRes int workResId) { return getEnterpriseString( safetyCenterResourcesContext, @@ -61,20 +59,16 @@ final class DevicePolicyResources { * Returns the updated string for the {@code work_profile_paused} string by calling {@link * DevicePolicyResourcesManager#getString}. */ - @NonNull static String getWorkProfilePausedString( - @NonNull SafetyCenterResourcesContext safetyCenterResourcesContext) { + SafetyCenterResourcesContext safetyCenterResourcesContext) { return getEnterpriseString( safetyCenterResourcesContext, WORK_PROFILE_PAUSED_TITLE, () -> safetyCenterResourcesContext.getStringByName("work_profile_paused")); } - @NonNull private static String getEnterpriseString( - @NonNull Context context, - @NonNull String devicePolicyIdentifier, - @NonNull Supplier<String> defaultValueLoader) { + Context context, String devicePolicyIdentifier, Supplier<String> defaultValueLoader) { // This call requires the caller’s identity to match the package name of the given context. // However, the SafetyCenterResourcesContext’s has package name "android", which does not // necessarily match the caller’s package when making Binder calls, so the calling identity diff --git a/service/java/com/android/safetycenter/PendingIntentFactory.java b/service/java/com/android/safetycenter/PendingIntentFactory.java index fe1e19515..294e30456 100644 --- a/service/java/com/android/safetycenter/PendingIntentFactory.java +++ b/service/java/com/android/safetycenter/PendingIntentFactory.java @@ -18,7 +18,6 @@ package com.android.safetycenter; import static android.os.Build.VERSION_CODES.TIRAMISU; -import android.annotation.NonNull; import android.annotation.Nullable; import android.annotation.UserIdInt; import android.app.PendingIntent; @@ -58,12 +57,11 @@ final class PendingIntentFactory { private static final int ANDROID_LOCK_SCREEN_ENTRY_REQ_CODE = 1; private static final int ANDROID_LOCK_SCREEN_ICON_ACTION_REQ_CODE = 2; - @NonNull private final Context mContext; - @NonNull private final SafetyCenterResourcesContext mSafetyCenterResourcesContext; + private final Context mContext; + private final SafetyCenterResourcesContext mSafetyCenterResourcesContext; PendingIntentFactory( - @NonNull Context context, - @NonNull SafetyCenterResourcesContext safetyCenterResourcesContext) { + Context context, SafetyCenterResourcesContext safetyCenterResourcesContext) { mContext = context; mSafetyCenterResourcesContext = safetyCenterResourcesContext; } @@ -83,9 +81,9 @@ final class PendingIntentFactory { */ @Nullable PendingIntent getPendingIntent( - @NonNull String sourceId, + String sourceId, @Nullable String intentAction, - @NonNull String packageName, + String packageName, @UserIdInt int userId, boolean isQuietModeEnabled) { if (intentAction == null) { @@ -118,7 +116,7 @@ final class PendingIntentFactory { */ @Nullable PendingIntent maybeOverridePendingIntent( - @NonNull String sourceId, @Nullable PendingIntent pendingIntent, boolean isIconAction) { + String sourceId, @Nullable PendingIntent pendingIntent, boolean isIconAction) { if (!ANDROID_LOCK_SCREEN_SOURCE_ID.equals(sourceId) || pendingIntent == null) { return pendingIntent; } @@ -169,7 +167,7 @@ final class PendingIntentFactory { newLockScreenIntent(settingsPackageName)); } - private static boolean hasFixedSettingsIssue(@NonNull Context settingsPackageContext) { + private static boolean hasFixedSettingsIssue(Context settingsPackageContext) { Resources settingsResources = settingsPackageContext.getResources(); int hasSettingsFixedIssueResourceId = settingsResources.getIdentifier( @@ -182,8 +180,7 @@ final class PendingIntentFactory { return false; } - @NonNull - private static Intent newBaseLockScreenIntent(@NonNull String settingsPackageName) { + private static Intent newBaseLockScreenIntent(String settingsPackageName) { return new Intent(Intent.ACTION_MAIN) .setComponent( new ComponentName( @@ -191,8 +188,7 @@ final class PendingIntentFactory { .putExtra(":settings:source_metrics", 1917); } - @NonNull - private static Intent newLockScreenIntent(@NonNull String settingsPackageName) { + private static Intent newLockScreenIntent(String settingsPackageName) { String targetFragment = settingsPackageName + ".password.ChooseLockGeneric$ChooseLockGenericFragment"; return newBaseLockScreenIntent(settingsPackageName) @@ -200,8 +196,7 @@ final class PendingIntentFactory { .putExtra("page_transition_type", 1); } - @NonNull - private static Intent newLockScreenIconActionIntent(@NonNull String settingsPackageName) { + private static Intent newLockScreenIconActionIntent(String settingsPackageName) { String targetFragment = settingsPackageName + ".security.screenlock.ScreenLockSettings"; return newBaseLockScreenIntent(settingsPackageName) .putExtra(":settings:show_fragment", targetFragment) @@ -210,9 +205,9 @@ final class PendingIntentFactory { @Nullable private Intent createIntent( - @NonNull Context packageContext, - @NonNull String sourceId, - @NonNull String intentAction, + Context packageContext, + String sourceId, + String intentAction, boolean isQuietModeEnabled) { Intent intent = new Intent(intentAction); @@ -250,7 +245,7 @@ final class PendingIntentFactory { return null; } - private boolean shouldAddSettingsHomepageExtra(@NonNull String sourceId) { + private boolean shouldAddSettingsHomepageExtra(String sourceId) { return Arrays.asList( mSafetyCenterResourcesContext .getStringByName("config_useSettingsHomepageIntentExtra") @@ -258,13 +253,11 @@ final class PendingIntentFactory { .contains(sourceId); } - private static boolean intentResolves(@NonNull Context packageContext, @NonNull Intent intent) { + private static boolean intentResolves(Context packageContext, Intent intent) { return !queryIntentActivities(packageContext, intent).isEmpty(); } - @NonNull - private static List<ResolveInfo> queryIntentActivities( - @NonNull Context packageContext, @NonNull Intent intent) { + private static List<ResolveInfo> queryIntentActivities(Context packageContext, Intent intent) { PackageManager packageManager = packageContext.getPackageManager(); // This call requires the INTERACT_ACROSS_USERS permission as the `packageContext` could // belong to another user. @@ -276,9 +269,8 @@ final class PendingIntentFactory { } } - @NonNull private static PendingIntent getActivityPendingIntent( - @NonNull Context packageContext, int requestCode, @NonNull Intent intent) { + Context packageContext, int requestCode, Intent intent) { return getActivityPendingIntent( packageContext, requestCode, intent, PendingIntent.FLAG_IMMUTABLE); } @@ -291,7 +283,7 @@ final class PendingIntentFactory { */ @Nullable static PendingIntent getActivityPendingIntent( - @NonNull Context packageContext, int requestCode, @NonNull Intent intent, int flags) { + Context packageContext, int requestCode, Intent intent, int flags) { // This call requires Binder identity to be cleared for getIntentSender() to be allowed to // send as another package. final long callingId = Binder.clearCallingIdentity(); @@ -311,7 +303,7 @@ final class PendingIntentFactory { */ @Nullable static PendingIntent getNonProtectedSystemOnlyBroadcastPendingIntent( - @NonNull Context context, int requestCode, @NonNull Intent intent, int flags) { + Context context, int requestCode, Intent intent, int flags) { if ((flags & PendingIntent.FLAG_IMMUTABLE) == 0) { throw new IllegalArgumentException("flags must include FLAG_IMMUTABLE"); } @@ -326,7 +318,7 @@ final class PendingIntentFactory { } @Nullable - private Context createPackageContextAsUser(@NonNull String packageName, @UserIdInt int userId) { + private Context createPackageContextAsUser(String packageName, @UserIdInt int userId) { // This call requires the INTERACT_ACROSS_USERS permission. final long callingId = Binder.clearCallingIdentity(); try { diff --git a/service/java/com/android/safetycenter/SafetyCenterBroadcastDispatcher.java b/service/java/com/android/safetycenter/SafetyCenterBroadcastDispatcher.java index 2b5a2c41e..e8e6befe5 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.NonNull; import android.annotation.Nullable; import android.annotation.SuppressLint; import android.annotation.UserIdInt; @@ -73,16 +72,16 @@ import javax.annotation.concurrent.NotThreadSafe; final class SafetyCenterBroadcastDispatcher { private static final String TAG = "SafetyCenterBroadcastDi"; - @NonNull private final Context mContext; - @NonNull private final SafetyCenterConfigReader mSafetyCenterConfigReader; - @NonNull private final SafetyCenterRefreshTracker mSafetyCenterRefreshTracker; - @NonNull private final SafetyCenterDataManager mSafetyCenterDataManager; + private final Context mContext; + private final SafetyCenterConfigReader mSafetyCenterConfigReader; + private final SafetyCenterRefreshTracker mSafetyCenterRefreshTracker; + private final SafetyCenterDataManager mSafetyCenterDataManager; SafetyCenterBroadcastDispatcher( - @NonNull Context context, - @NonNull SafetyCenterConfigReader safetyCenterConfigReader, - @NonNull SafetyCenterRefreshTracker safetyCenterRefreshTracker, - @NonNull SafetyCenterDataManager safetyCenterDataManager) { + Context context, + SafetyCenterConfigReader safetyCenterConfigReader, + SafetyCenterRefreshTracker safetyCenterRefreshTracker, + SafetyCenterDataManager safetyCenterDataManager) { mContext = context; mSafetyCenterConfigReader = safetyCenterConfigReader; mSafetyCenterRefreshTracker = safetyCenterRefreshTracker; @@ -101,7 +100,7 @@ final class SafetyCenterBroadcastDispatcher { @Nullable String sendRefreshSafetySources( @RefreshReason int refreshReason, - @NonNull UserProfileGroup userProfileGroup, + UserProfileGroup userProfileGroup, @Nullable List<String> safetySourceIds) { List<Broadcast> broadcasts = mSafetyCenterConfigReader.getBroadcasts(); BroadcastOptions broadcastOptions = createBroadcastOptions(); @@ -133,11 +132,11 @@ final class SafetyCenterBroadcastDispatcher { } private boolean sendRefreshSafetySourcesBroadcast( - @NonNull Broadcast broadcast, - @NonNull BroadcastOptions broadcastOptions, + Broadcast broadcast, + BroadcastOptions broadcastOptions, @RefreshReason int refreshReason, - @NonNull UserProfileGroup userProfileGroup, - @NonNull String broadcastId, + UserProfileGroup userProfileGroup, + String broadcastId, @Nullable List<String> requiredSourceIds) { boolean hasSentAtLeastOneBroadcast = false; int requestType = RefreshReasons.toRefreshRequestType(refreshReason); @@ -203,9 +202,9 @@ final class SafetyCenterBroadcastDispatcher { } private void sendEnabledChangedBroadcast( - @NonNull Broadcast broadcast, - @NonNull BroadcastOptions broadcastOptions, - @NonNull List<UserProfileGroup> userProfileGroups) { + Broadcast broadcast, + 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 @@ -226,9 +225,7 @@ final class SafetyCenterBroadcastDispatcher { } private boolean sendBroadcastIfResolves( - @NonNull Intent intent, - @NonNull UserHandle userHandle, - @Nullable BroadcastOptions broadcastOptions) { + Intent intent, UserHandle userHandle, @Nullable BroadcastOptions broadcastOptions) { if (!doesBroadcastResolve(intent, userHandle)) { Log.w( TAG, @@ -251,9 +248,9 @@ final class SafetyCenterBroadcastDispatcher { // TODO(b/193460475): Remove when tooling supports SystemApi to public API. @SuppressLint("NewApi") private void sendBroadcast( - @NonNull Intent intent, - @NonNull UserHandle userHandle, - @NonNull String permission, + Intent intent, + UserHandle userHandle, + String permission, @Nullable BroadcastOptions broadcastOptions) { // This call requires the INTERACT_ACROSS_USERS permission. final long callingId = Binder.clearCallingIdentity(); @@ -268,29 +265,25 @@ final class SafetyCenterBroadcastDispatcher { } } - private boolean doesBroadcastResolve( - @NonNull Intent broadcastIntent, @NonNull UserHandle userHandle) { + private boolean doesBroadcastResolve(Intent broadcastIntent, UserHandle userHandle) { return !PackageUtils.queryUnfilteredBroadcastReceiversAsUser( broadcastIntent, 0, userHandle.getIdentifier(), mContext) .isEmpty(); } - @NonNull - private static Intent createExplicitEnabledChangedIntent(@NonNull String packageName) { + private static Intent createExplicitEnabledChangedIntent(String packageName) { return createImplicitEnabledChangedIntent().setPackage(packageName); } - @NonNull private static Intent createImplicitEnabledChangedIntent() { return createBroadcastIntent(ACTION_SAFETY_CENTER_ENABLED_CHANGED); } - @NonNull private static Intent createRefreshIntent( @RefreshRequestType int requestType, - @NonNull String packageName, - @NonNull List<String> sourceIdsToRefresh, - @NonNull String broadcastId) { + String packageName, + List<String> sourceIdsToRefresh, + String broadcastId) { String[] sourceIdsArray = sourceIdsToRefresh.toArray(new String[0]); return createBroadcastIntent(ACTION_REFRESH_SAFETY_SOURCES) .putExtra(EXTRA_REFRESH_SAFETY_SOURCES_REQUEST_TYPE, requestType) @@ -299,14 +292,12 @@ final class SafetyCenterBroadcastDispatcher { .setPackage(packageName); } - @NonNull - private static Intent createBroadcastIntent(@NonNull String intentAction) { + private static Intent createBroadcastIntent(String intentAction) { return new Intent(intentAction).setFlags(FLAG_RECEIVER_FOREGROUND); } // TODO(b/193460475): Remove when tooling supports SystemApi to public API. @SuppressLint("NewApi") - @NonNull private static BroadcastOptions createBroadcastOptions() { BroadcastOptions broadcastOptions = BroadcastOptions.makeBasic(); Duration allowListDuration = SafetyCenterFlags.getFgsAllowlistDuration(); @@ -325,7 +316,6 @@ final class SafetyCenterBroadcastDispatcher { } /** Returns the list of source IDs for which refreshing is denied for the given reason. */ - @NonNull private static Set<String> getRefreshDeniedSourceIds(@RefreshReason int refreshReason) { if (RefreshReasons.isBackgroundRefresh(refreshReason)) { return SafetyCenterFlags.getBackgroundRefreshDeniedSourceIds(); @@ -344,10 +334,9 @@ final class SafetyCenterBroadcastDispatcher { * * <p>Every value present is a non-empty list, but the overall result may be empty. */ - @NonNull private SparseArray<List<String>> getUserIdsToSourceIds( - @NonNull Broadcast broadcast, - @NonNull UserProfileGroup userProfileGroup, + Broadcast broadcast, + UserProfileGroup userProfileGroup, @RefreshReason int refreshReason) { int[] managedProfileIds = userProfileGroup.getManagedRunningProfilesUserIds(); SparseArray<List<String>> result = new SparseArray<>(managedProfileIds.length + 1); @@ -386,11 +375,10 @@ final class SafetyCenterBroadcastDispatcher { * config, or are in the safety_center_override_refresh_on_page_open_sources flag, or don't have * any {@link SafetySourceData} provided. */ - @NonNull private List<String> getSourceIdsForRefreshReason( @RefreshReason int refreshReason, - @NonNull List<String> allSourceIds, - @NonNull List<String> pageOpenSourceIds, + List<String> allSourceIds, + List<String> pageOpenSourceIds, @UserIdInt int userId) { if (refreshReason != REFRESH_REASON_PAGE_OPEN) { return allSourceIds; diff --git a/service/java/com/android/safetycenter/SafetyCenterConfigReader.java b/service/java/com/android/safetycenter/SafetyCenterConfigReader.java index 27c7f6e58..14a2db6ff 100644 --- a/service/java/com/android/safetycenter/SafetyCenterConfigReader.java +++ b/service/java/com/android/safetycenter/SafetyCenterConfigReader.java @@ -21,7 +21,6 @@ import static android.os.Build.VERSION_CODES.TIRAMISU; import static java.util.Collections.unmodifiableList; import static java.util.Objects.requireNonNull; -import android.annotation.NonNull; import android.annotation.Nullable; import android.content.res.Resources; import android.safetycenter.config.SafetyCenterConfig; @@ -57,14 +56,14 @@ public final class SafetyCenterConfigReader { private static final String TAG = "SafetyCenterConfigReade"; - @NonNull private final SafetyCenterResourcesContext mSafetyCenterResourcesContext; + private final SafetyCenterResourcesContext mSafetyCenterResourcesContext; @Nullable private SafetyCenterConfigInternal mConfigInternalFromXml; @Nullable private SafetyCenterConfigInternal mConfigInternalOverrideForTests; /** Creates a {@link SafetyCenterConfigReader} from a {@link SafetyCenterResourcesContext}. */ - SafetyCenterConfigReader(@NonNull SafetyCenterResourcesContext safetyCenterResourcesContext) { + SafetyCenterConfigReader(SafetyCenterResourcesContext safetyCenterResourcesContext) { mSafetyCenterResourcesContext = safetyCenterResourcesContext; } @@ -91,7 +90,7 @@ public final class SafetyCenterConfigReader { * <p>When set, information provided by this class will be based on the overridden {@link * SafetyCenterConfig}. */ - void setConfigOverrideForTests(@NonNull SafetyCenterConfig safetyCenterConfig) { + void setConfigOverrideForTests(SafetyCenterConfig safetyCenterConfig) { mConfigInternalOverrideForTests = SafetyCenterConfigInternal.from(safetyCenterConfig); } @@ -104,13 +103,11 @@ public final class SafetyCenterConfigReader { } /** Returns the currently active {@link SafetyCenterConfig}. */ - @NonNull SafetyCenterConfig getSafetyCenterConfig() { return getCurrentConfigInternal().getSafetyCenterConfig(); } /** Returns the groups of {@link SafetySource}, in the order expected by the UI. */ - @NonNull public List<SafetySourcesGroup> getSafetySourcesGroups() { return getCurrentConfigInternal().getSafetyCenterConfig().getSafetySourcesGroups(); } @@ -119,7 +116,6 @@ 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). */ - @NonNull public List<SafetySourcesGroup> getLoggableSafetySourcesGroups() { return getCurrentConfigInternal().getLoggableSourcesGroups(); } @@ -134,7 +130,7 @@ public final class SafetyCenterConfigReader { * calls will be no-oped). */ @Nullable - public ExternalSafetySource getExternalSafetySource(@NonNull String safetySourceId) { + public ExternalSafetySource getExternalSafetySource(String safetySourceId) { ExternalSafetySource externalSafetySourceInCurrentConfig = getCurrentConfigInternal().getExternalSafetySources().get(safetySourceId); if (externalSafetySourceInCurrentConfig != null) { @@ -148,7 +144,7 @@ public final class SafetyCenterConfigReader { * Returns whether the {@code safetySourceId} is associated with an external {@link * SafetySource} that is currently active. */ - public boolean isExternalSafetySourceActive(@NonNull String safetySourceId) { + public boolean isExternalSafetySourceActive(String safetySourceId) { return getCurrentConfigInternal().getExternalSafetySources().containsKey(safetySourceId); } @@ -164,7 +160,6 @@ public final class SafetyCenterConfigReader { * Returns the {@link Broadcast} defined in the {@link SafetyCenterConfig}, with all the sources * that they should handle and the profile on which they should be dispatched. */ - @NonNull List<Broadcast> getBroadcasts() { return getCurrentConfigInternal().getBroadcasts(); } @@ -174,7 +169,6 @@ public final class SafetyCenterConfigReader { return mConfigInternalOverrideForTests != null; } - @NonNull private SafetyCenterConfigInternal getCurrentConfigInternal() { // We require the XML config must be loaded successfully for SafetyCenterManager APIs to // function, regardless of whether the config is subsequently overridden. @@ -213,7 +207,7 @@ public final class SafetyCenterConfigReader { } /** Dumps state for debugging purposes. */ - void dump(@NonNull PrintWriter fout) { + void dump(PrintWriter fout) { fout.println("XML CONFIG"); fout.println("\t" + mConfigInternalFromXml); fout.println(); @@ -225,38 +219,34 @@ public final class SafetyCenterConfigReader { /** A wrapper class around the parsed XML config. */ private static final class SafetyCenterConfigInternal { - @NonNull private final SafetyCenterConfig mConfig; - @NonNull private final ArrayMap<String, ExternalSafetySource> mExternalSafetySources; - @NonNull private final List<SafetySourcesGroup> mLoggableSourcesGroups; - @NonNull private final List<Broadcast> mBroadcasts; + private final SafetyCenterConfig mConfig; + private final ArrayMap<String, ExternalSafetySource> mExternalSafetySources; + private final List<SafetySourcesGroup> mLoggableSourcesGroups; + private final List<Broadcast> mBroadcasts; private SafetyCenterConfigInternal( - @NonNull SafetyCenterConfig safetyCenterConfig, - @NonNull ArrayMap<String, ExternalSafetySource> externalSafetySources, - @NonNull List<SafetySourcesGroup> loggableSourcesGroups, - @NonNull List<Broadcast> broadcasts) { + SafetyCenterConfig safetyCenterConfig, + ArrayMap<String, ExternalSafetySource> externalSafetySources, + List<SafetySourcesGroup> loggableSourcesGroups, + List<Broadcast> broadcasts) { mConfig = safetyCenterConfig; mExternalSafetySources = externalSafetySources; mLoggableSourcesGroups = loggableSourcesGroups; mBroadcasts = broadcasts; } - @NonNull private SafetyCenterConfig getSafetyCenterConfig() { return mConfig; } - @NonNull private ArrayMap<String, ExternalSafetySource> getExternalSafetySources() { return mExternalSafetySources; } - @NonNull private List<SafetySourcesGroup> getLoggableSourcesGroups() { return mLoggableSourcesGroups; } - @NonNull private List<Broadcast> getBroadcasts() { return mBroadcasts; } @@ -288,9 +278,7 @@ public final class SafetyCenterConfigReader { + '}'; } - @NonNull - private static SafetyCenterConfigInternal from( - @NonNull SafetyCenterConfig safetyCenterConfig) { + private static SafetyCenterConfigInternal from(SafetyCenterConfig safetyCenterConfig) { return new SafetyCenterConfigInternal( safetyCenterConfig, extractExternalSafetySources(safetyCenterConfig), @@ -298,9 +286,8 @@ public final class SafetyCenterConfigReader { unmodifiableList(extractBroadcasts(safetyCenterConfig))); } - @NonNull private static ArrayMap<String, ExternalSafetySource> extractExternalSafetySources( - @NonNull SafetyCenterConfig safetyCenterConfig) { + SafetyCenterConfig safetyCenterConfig) { ArrayMap<String, ExternalSafetySource> externalSafetySources = new ArrayMap<>(); List<SafetySourcesGroup> safetySourcesGroups = safetyCenterConfig.getSafetySourcesGroups(); @@ -330,9 +317,8 @@ public final class SafetyCenterConfigReader { return externalSafetySources; } - @NonNull private static List<SafetySourcesGroup> extractLoggableSafetySourcesGroups( - @NonNull SafetyCenterConfig safetyCenterConfig) { + SafetyCenterConfig safetyCenterConfig) { List<SafetySourcesGroup> originalGroups = safetyCenterConfig.getSafetySourcesGroups(); List<SafetySourcesGroup> filteredGroups = new ArrayList<>(originalGroups.size()); @@ -359,9 +345,7 @@ public final class SafetyCenterConfigReader { return filteredGroups; } - @NonNull - private static List<Broadcast> extractBroadcasts( - @NonNull SafetyCenterConfig safetyCenterConfig) { + private static List<Broadcast> extractBroadcasts(SafetyCenterConfig safetyCenterConfig) { ArrayMap<String, Broadcast> packageNameToBroadcast = new ArrayMap<>(); List<Broadcast> broadcasts = new ArrayList<>(); List<SafetySourcesGroup> safetySourcesGroups = @@ -409,17 +393,15 @@ public final class SafetyCenterConfigReader { * @hide */ public static final class ExternalSafetySource { - @NonNull private final SafetySource mSafetySource; - @NonNull private final boolean mHasEntryInStatelessGroup; + private final SafetySource mSafetySource; + private final boolean mHasEntryInStatelessGroup; - private ExternalSafetySource( - @NonNull SafetySource safetySource, boolean hasEntryInStatelessGroup) { + private ExternalSafetySource(SafetySource safetySource, boolean hasEntryInStatelessGroup) { mSafetySource = safetySource; mHasEntryInStatelessGroup = hasEntryInStatelessGroup; } /** Returns the external {@link SafetySource}. */ - @NonNull public SafetySource getSafetySource() { return mSafetySource; } @@ -460,19 +442,18 @@ public final class SafetyCenterConfigReader { /** A class that represents a broadcast to be sent to safety sources. */ static final class Broadcast { - @NonNull private final String mPackageName; + private final String mPackageName; private final List<String> mSourceIdsForProfileParent = new ArrayList<>(); private final List<String> mSourceIdsForProfileParentOnPageOpen = new ArrayList<>(); private final List<String> mSourceIdsForManagedProfiles = new ArrayList<>(); private final List<String> mSourceIdsForManagedProfilesOnPageOpen = new ArrayList<>(); - private Broadcast(@NonNull String packageName) { + private Broadcast(String packageName) { mPackageName = packageName; } /** Returns the package name to dispatch the broadcast to. */ - @NonNull String getPackageName() { return mPackageName; } @@ -482,7 +463,6 @@ public final class SafetyCenterConfigReader { * * <p>If this list is empty, there are no sources to dispatch to in the profile owner. */ - @NonNull List<String> getSourceIdsForProfileParent() { return unmodifiableList(mSourceIdsForProfileParent); } @@ -493,7 +473,6 @@ public final class SafetyCenterConfigReader { * * <p>If this list is empty, there are no sources to dispatch to in the profile owner. */ - @NonNull List<String> getSourceIdsForProfileParentOnPageOpen() { return unmodifiableList(mSourceIdsForProfileParentOnPageOpen); } @@ -503,7 +482,6 @@ public final class SafetyCenterConfigReader { * * <p>If this list is empty, there are no sources to dispatch to in the managed profile(s). */ - @NonNull List<String> getSourceIdsForManagedProfiles() { return unmodifiableList(mSourceIdsForManagedProfiles); } @@ -514,7 +492,6 @@ public final class SafetyCenterConfigReader { * * <p>If this list is empty, there are no sources to dispatch to in the managed profile(s). */ - @NonNull List<String> getSourceIdsForManagedProfilesOnPageOpen() { return unmodifiableList(mSourceIdsForManagedProfilesOnPageOpen); } diff --git a/service/java/com/android/safetycenter/SafetyCenterDataChangeNotifier.java b/service/java/com/android/safetycenter/SafetyCenterDataChangeNotifier.java index 477d23a2f..877748b31 100644 --- a/service/java/com/android/safetycenter/SafetyCenterDataChangeNotifier.java +++ b/service/java/com/android/safetycenter/SafetyCenterDataChangeNotifier.java @@ -18,7 +18,6 @@ package com.android.safetycenter; import static android.os.Build.VERSION_CODES.TIRAMISU; -import android.annotation.NonNull; import android.annotation.UserIdInt; import androidx.annotation.RequiresApi; @@ -35,31 +34,31 @@ import javax.annotation.concurrent.NotThreadSafe; @NotThreadSafe final class SafetyCenterDataChangeNotifier { - @NonNull private final SafetyCenterNotificationSender mSafetyCenterNotificationSender; - @NonNull private final SafetyCenterListeners mSafetyCenterListeners; + private final SafetyCenterNotificationSender mSafetyCenterNotificationSender; + private final SafetyCenterListeners mSafetyCenterListeners; /** Initializes a new instance of {@link SafetyCenterDataChangeNotifier}. */ SafetyCenterDataChangeNotifier( - @NonNull SafetyCenterNotificationSender safetyCenterNotificationSender, - @NonNull SafetyCenterListeners safetyCenterListeners) { + SafetyCenterNotificationSender safetyCenterNotificationSender, + SafetyCenterListeners safetyCenterListeners) { mSafetyCenterNotificationSender = safetyCenterNotificationSender; mSafetyCenterListeners = safetyCenterListeners; } /** Updates classes that depend on data changes (changes of state in the data subpackage). */ - void updateDataConsumers(@NonNull UserProfileGroup userProfileGroup, @UserIdInt int userId) { + void updateDataConsumers(UserProfileGroup userProfileGroup, @UserIdInt int userId) { mSafetyCenterNotificationSender.updateNotifications(userId); mSafetyCenterListeners.deliverDataForUserProfileGroup(userProfileGroup); } /** Updates classes that depend on data changes (changes of state in the data subpackage). */ - void updateDataConsumers(@NonNull UserProfileGroup userProfileGroup) { + void updateDataConsumers(UserProfileGroup userProfileGroup) { mSafetyCenterNotificationSender.updateNotifications(userProfileGroup); mSafetyCenterListeners.deliverDataForUserProfileGroup(userProfileGroup); } /** Updates classes that depend on data changes (changes of state in the data subpackage). */ - void updateDataConsumers(@NonNull List<UserProfileGroup> userProfileGroups) { + void updateDataConsumers(List<UserProfileGroup> userProfileGroups) { for (int i = 0; i < userProfileGroups.size(); i++) { updateDataConsumers(userProfileGroups.get(i)); } diff --git a/service/java/com/android/safetycenter/SafetyCenterDataFactory.java b/service/java/com/android/safetycenter/SafetyCenterDataFactory.java index 158845560..626d45fba 100644 --- a/service/java/com/android/safetycenter/SafetyCenterDataFactory.java +++ b/service/java/com/android/safetycenter/SafetyCenterDataFactory.java @@ -21,7 +21,6 @@ import static android.os.Build.VERSION_CODES.TIRAMISU; import static java.util.Collections.emptyList; import static java.util.Objects.requireNonNull; -import android.annotation.NonNull; import android.annotation.Nullable; import android.annotation.UserIdInt; import android.app.PendingIntent; @@ -79,19 +78,19 @@ public final class SafetyCenterDataFactory { private static final String ANDROID_LOCK_SCREEN_SOURCES_GROUP_ID = "AndroidLockScreenSources"; - @NonNull private final SafetyCenterResourcesContext mSafetyCenterResourcesContext; - @NonNull private final SafetyCenterConfigReader mSafetyCenterConfigReader; - @NonNull private final SafetyCenterRefreshTracker mSafetyCenterRefreshTracker; - @NonNull private final PendingIntentFactory mPendingIntentFactory; + private final SafetyCenterResourcesContext mSafetyCenterResourcesContext; + private final SafetyCenterConfigReader mSafetyCenterConfigReader; + private final SafetyCenterRefreshTracker mSafetyCenterRefreshTracker; + private final PendingIntentFactory mPendingIntentFactory; - @NonNull private final SafetyCenterDataManager mSafetyCenterDataManager; + private final SafetyCenterDataManager mSafetyCenterDataManager; SafetyCenterDataFactory( - @NonNull SafetyCenterResourcesContext safetyCenterResourcesContext, - @NonNull SafetyCenterConfigReader safetyCenterConfigReader, - @NonNull SafetyCenterRefreshTracker safetyCenterRefreshTracker, - @NonNull PendingIntentFactory pendingIntentFactory, - @NonNull SafetyCenterDataManager safetyCenterDataManager) { + SafetyCenterResourcesContext safetyCenterResourcesContext, + SafetyCenterConfigReader safetyCenterConfigReader, + SafetyCenterRefreshTracker safetyCenterRefreshTracker, + PendingIntentFactory pendingIntentFactory, + SafetyCenterDataManager safetyCenterDataManager) { mSafetyCenterResourcesContext = safetyCenterResourcesContext; mSafetyCenterConfigReader = safetyCenterConfigReader; mSafetyCenterRefreshTracker = safetyCenterRefreshTracker; @@ -102,7 +101,6 @@ public final class SafetyCenterDataFactory { /** * Returns a default {@link SafetyCenterData} object to be returned when the API is disabled. */ - @NonNull static SafetyCenterData getDefaultSafetyCenterData() { SafetyCenterStatus defaultSafetyCenterStatus = new SafetyCenterStatus.Builder("", "") @@ -123,9 +121,8 @@ public final class SafetyCenterDataFactory { * <p>If a {@link SafetySourceData} was not set, the default value from the {@link * SafetyCenterConfig} is used. */ - @NonNull SafetyCenterData assembleSafetyCenterData( - @NonNull String packageName, @NonNull UserProfileGroup userProfileGroup) { + String packageName, UserProfileGroup userProfileGroup) { return assembleSafetyCenterData(packageName, userProfileGroup, getAllGroups()); } @@ -137,11 +134,10 @@ public final class SafetyCenterDataFactory { * <p>If a {@link SafetySourceData} was not set, the default value from the {@link * SafetyCenterConfig} is used. */ - @NonNull public SafetyCenterData assembleSafetyCenterData( - @NonNull String packageName, - @NonNull UserProfileGroup userProfileGroup, - @NonNull List<SafetySourcesGroup> safetySourcesGroups) { + String packageName, + UserProfileGroup userProfileGroup, + List<SafetySourcesGroup> safetySourcesGroups) { List<SafetyCenterEntryOrGroup> safetyCenterEntryOrGroups = new ArrayList<>(); List<SafetyCenterStaticEntryGroup> safetyCenterStaticEntryGroups = new ArrayList<>(); SafetyCenterOverallState safetyCenterOverallState = new SafetyCenterOverallState(); @@ -255,16 +251,15 @@ public final class SafetyCenterDataFactory { } } - @NonNull private List<SafetySourcesGroup> getAllGroups() { return mSafetyCenterConfigReader.getSafetySourcesGroups(); } @Nullable private SafetyCenterIssue toSafetyCenterIssue( - @NonNull SafetySourceIssue safetySourceIssue, - @NonNull SafetySourcesGroup safetySourcesGroup, - @NonNull SafetyCenterIssueKey safetyCenterIssueKey) { + SafetySourceIssue safetySourceIssue, + SafetySourcesGroup safetySourcesGroup, + SafetyCenterIssueKey safetyCenterIssueKey) { SafetyCenterIssueId safetyCenterIssueId = SafetyCenterIssueId.newBuilder() .setSafetyCenterIssueKey(safetyCenterIssueKey) @@ -308,10 +303,9 @@ public final class SafetyCenterDataFactory { return safetyCenterIssueBuilder.build(); } - @NonNull private SafetyCenterIssue.Action toSafetyCenterIssueAction( - @NonNull SafetySourceIssue.Action safetySourceIssueAction, - @NonNull SafetyCenterIssueKey safetyCenterIssueKey) { + SafetySourceIssue.Action safetySourceIssueAction, + SafetyCenterIssueKey safetyCenterIssueKey) { SafetyCenterIssueActionId safetyCenterIssueActionId = SafetyCenterIssueActionId.newBuilder() .setSafetyCenterIssueKey(safetyCenterIssueKey) @@ -333,11 +327,11 @@ public final class SafetyCenterDataFactory { } private void addSafetyCenterEntryGroup( - @NonNull SafetyCenterOverallState safetyCenterOverallState, - @NonNull List<SafetyCenterEntryOrGroup> safetyCenterEntryOrGroups, - @NonNull SafetySourcesGroup safetySourcesGroup, - @NonNull String defaultPackageName, - @NonNull UserProfileGroup userProfileGroup) { + SafetyCenterOverallState safetyCenterOverallState, + List<SafetyCenterEntryOrGroup> safetyCenterEntryOrGroups, + SafetySourcesGroup safetySourcesGroup, + String defaultPackageName, + UserProfileGroup userProfileGroup) { int groupSafetyCenterEntryLevel = SafetyCenterEntry.ENTRY_SEVERITY_LEVEL_UNSPECIFIED; List<SafetySource> safetySources = safetySourcesGroup.getSafetySources(); @@ -425,9 +419,9 @@ public final class SafetyCenterDataFactory { @Nullable private CharSequence getSafetyCenterEntryGroupSummary( - @NonNull SafetySourcesGroup safetySourcesGroup, + SafetySourcesGroup safetySourcesGroup, @SafetyCenterEntry.EntrySeverityLevel int groupSafetyCenterEntryLevel, - @NonNull List<SafetyCenterEntry> entries) { + List<SafetyCenterEntry> entries) { switch (groupSafetyCenterEntryLevel) { case SafetyCenterEntry.ENTRY_SEVERITY_LEVEL_CRITICAL_WARNING: case SafetyCenterEntry.ENTRY_SEVERITY_LEVEL_RECOMMENDATION: @@ -486,8 +480,7 @@ public final class SafetyCenterDataFactory { @Nullable private CharSequence getDefaultGroupSummary( - @NonNull SafetySourcesGroup safetySourcesGroup, - @NonNull List<SafetyCenterEntry> entries) { + SafetySourcesGroup safetySourcesGroup, List<SafetyCenterEntry> entries) { CharSequence groupSummary = mSafetyCenterResourcesContext.getOptionalString( safetySourcesGroup.getSummaryResId()); @@ -511,10 +504,10 @@ public final class SafetyCenterDataFactory { @SafetyCenterEntry.EntrySeverityLevel private int addSafetyCenterEntry( - @NonNull SafetyCenterOverallState safetyCenterOverallState, - @NonNull List<SafetyCenterEntry> entries, - @NonNull SafetySource safetySource, - @NonNull String defaultPackageName, + SafetyCenterOverallState safetyCenterOverallState, + List<SafetyCenterEntry> entries, + SafetySource safetySource, + String defaultPackageName, @UserIdInt int userId, boolean isUserManaged, boolean isManagedUserRunning) { @@ -539,8 +532,8 @@ public final class SafetyCenterDataFactory { @Nullable private SafetyCenterEntry toSafetyCenterEntry( - @NonNull SafetySource safetySource, - @NonNull String defaultPackageName, + SafetySource safetySource, + String defaultPackageName, @UserIdInt int userId, boolean isUserManaged, boolean isManagedUserRunning) { @@ -632,8 +625,8 @@ public final class SafetyCenterDataFactory { @Nullable private SafetyCenterEntry toDefaultSafetyCenterEntry( - @NonNull SafetySource safetySource, - @NonNull String packageName, + SafetySource safetySource, + String packageName, @SafetyCenterEntry.EntrySeverityLevel int entrySeverityLevel, @SafetyCenterEntry.SeverityUnspecifiedIconType int severityUnspecifiedIconType, @UserIdInt int userId, @@ -687,11 +680,11 @@ public final class SafetyCenterDataFactory { } private void addSafetyCenterStaticEntryGroup( - @NonNull SafetyCenterOverallState safetyCenterOverallState, - @NonNull List<SafetyCenterStaticEntryGroup> safetyCenterStaticEntryGroups, - @NonNull SafetySourcesGroup safetySourcesGroup, - @NonNull String defaultPackageName, - @NonNull UserProfileGroup userProfileGroup) { + SafetyCenterOverallState safetyCenterOverallState, + List<SafetyCenterStaticEntryGroup> safetyCenterStaticEntryGroups, + SafetySourcesGroup safetySourcesGroup, + String defaultPackageName, + UserProfileGroup userProfileGroup) { List<SafetySource> safetySources = safetySourcesGroup.getSafetySources(); List<SafetyCenterStaticEntry> staticEntries = new ArrayList<>(safetySources.size()); for (int i = 0; i < safetySources.size(); i++) { @@ -738,10 +731,10 @@ public final class SafetyCenterDataFactory { } private void addSafetyCenterStaticEntry( - @NonNull SafetyCenterOverallState safetyCenterOverallState, - @NonNull List<SafetyCenterStaticEntry> staticEntries, - @NonNull SafetySource safetySource, - @NonNull String defaultPackageName, + SafetyCenterOverallState safetyCenterOverallState, + List<SafetyCenterStaticEntry> staticEntries, + SafetySource safetySource, + String defaultPackageName, @UserIdInt int userId, boolean isUserManaged, boolean isManagedUserRunning) { @@ -767,8 +760,8 @@ public final class SafetyCenterDataFactory { @Nullable private SafetyCenterStaticEntry toSafetyCenterStaticEntry( - @NonNull SafetySource safetySource, - @NonNull String defaultPackageName, + SafetySource safetySource, + String defaultPackageName, @UserIdInt int userId, boolean isUserManaged, boolean isManagedUserRunning) { @@ -813,8 +806,8 @@ public final class SafetyCenterDataFactory { @Nullable private SafetyCenterStaticEntry toDefaultSafetyCenterStaticEntry( - @NonNull SafetySource safetySource, - @NonNull String packageName, + SafetySource safetySource, + String packageName, @UserIdInt int userId, boolean isUserManaged, boolean isManagedUserRunning) { @@ -868,9 +861,8 @@ public final class SafetyCenterDataFactory { return safetySourceData.getStatus(); } - @NonNull private static String getStaticSourcePackageNameOrDefault( - @NonNull SafetySource safetySource, @NonNull String defaultPackageName) { + SafetySource safetySource, String defaultPackageName) { if (!SdkLevel.isAtLeastU()) { return defaultPackageName; } @@ -997,7 +989,6 @@ public final class SafetyCenterDataFactory { return SafetyCenterEntry.IconAction.ICON_ACTION_TYPE_INFO; } - @NonNull private String getSafetyCenterStatusTitle( @SafetyCenterStatus.OverallSeverityLevel int overallSeverityLevel, @Nullable SafetySourceIssueInfo topNonDismissedIssueInfo, @@ -1043,15 +1034,14 @@ public final class SafetyCenterDataFactory { return ""; } - @NonNull private String getStatusTitleFromIssueCategories( @Nullable SafetySourceIssueInfo topNonDismissedIssueInfo, - @NonNull String deviceResourceName, - @NonNull String accountResourceName, - @NonNull String generalResourceName, - @NonNull String dataResourceName, - @NonNull String passwordsResourceName, - @NonNull String personalSafetyResourceName) { + String deviceResourceName, + String accountResourceName, + String generalResourceName, + String dataResourceName, + String passwordsResourceName, + String personalSafetyResourceName) { String generalString = mSafetyCenterResourcesContext.getStringByName(generalResourceName); if (topNonDismissedIssueInfo == null) { Log.w(TAG, "No safety center issues found in a non-green status"); @@ -1082,9 +1072,8 @@ public final class SafetyCenterDataFactory { return generalString; } - @NonNull private String getSafetyCenterStatusSummary( - @NonNull SafetyCenterOverallState safetyCenterOverallState, + SafetyCenterOverallState safetyCenterOverallState, @Nullable SafetySourceIssueInfo topNonDismissedIssue, @SafetyCenterStatus.RefreshStatus int refreshStatus, int numTipIssues, @@ -1123,25 +1112,23 @@ public final class SafetyCenterDataFactory { return ""; } - private static boolean isTip(@NonNull SafetySourceIssue safetySourceIssue) { + private static boolean isTip(SafetySourceIssue safetySourceIssue) { return SdkLevel.isAtLeastU() && safetySourceIssue.getIssueActionability() == SafetySourceIssue.ISSUE_ACTIONABILITY_TIP; } - private static boolean isAutomatic(@NonNull SafetySourceIssue safetySourceIssue) { + private static boolean isAutomatic(SafetySourceIssue safetySourceIssue) { return SdkLevel.isAtLeastU() && safetySourceIssue.getIssueActionability() == SafetySourceIssue.ISSUE_ACTIONABILITY_AUTOMATIC; } - @NonNull private String getRefreshErrorString(int numberOfErrorEntries) { return getIcuPluralsString("refresh_error", numberOfErrorEntries); } - @NonNull - private String getIcuPluralsString(String name, int count, @NonNull Object... formatArgs) { + private String getIcuPluralsString(String name, int count, Object... formatArgs) { MessageFormat messageFormat = new MessageFormat( mSafetyCenterResourcesContext.getStringByName(name, formatArgs), @@ -1185,8 +1172,7 @@ public final class SafetyCenterDataFactory { return null; } - @NonNull - private static SafetySourceKey toSafetySourceKey(@NonNull String safetyCenterEntryIdString) { + private static SafetySourceKey toSafetySourceKey(String safetyCenterEntryIdString) { SafetyCenterEntryId id = SafetyCenterIds.entryIdFromString(safetyCenterEntryIdString); return SafetySourceKey.of(id.getSafetySourceId(), id.getUserId()); } diff --git a/service/java/com/android/safetycenter/SafetyCenterFlags.java b/service/java/com/android/safetycenter/SafetyCenterFlags.java index e5a7d88aa..9a68d34c6 100644 --- a/service/java/com/android/safetycenter/SafetyCenterFlags.java +++ b/service/java/com/android/safetycenter/SafetyCenterFlags.java @@ -19,7 +19,6 @@ package com.android.safetycenter; import static android.os.Build.VERSION_CODES.TIRAMISU; import static android.safetycenter.SafetyCenterManager.RefreshReason; -import android.annotation.NonNull; import android.annotation.Nullable; import android.os.Binder; import android.provider.DeviceConfig; @@ -114,7 +113,7 @@ public final class SafetyCenterFlags { private static final Duration NOTIFICATIONS_MIN_DELAY_DEFAULT_DURATION = Duration.ofDays(180); /** Dumps state for debugging purposes. */ - static void dump(@NonNull PrintWriter fout) { + static void dump(PrintWriter fout) { fout.println("FLAGS"); printFlag(fout, PROPERTY_SAFETY_CENTER_ENABLED, getSafetyCenterEnabled()); printFlag(fout, PROPERTY_NOTIFICATIONS_ENABLED, getNotificationsEnabled()); @@ -181,7 +180,6 @@ public final class SafetyCenterFlags { * <p>Note that the {@code areNotificationsAllowed} config attribute is only available on API U+ * and therefore this is the only way to enable notifications for sources on Android T. */ - @NonNull static ArraySet<String> getNotificationsAllowedSourceIds() { return getCommaSeparatedStrings(PROPERTY_NOTIFICATIONS_ALLOWED_SOURCES); } @@ -192,7 +190,7 @@ public final class SafetyCenterFlags { * * The actual delay used may be longer. */ - @NonNull + static Duration getNotificationsMinDelay() { return getDuration( PROPERTY_NOTIFICATIONS_MIN_DELAY, NOTIFICATIONS_MIN_DELAY_DEFAULT_DURATION); @@ -206,7 +204,6 @@ public final class SafetyCenterFlags { * * <p>Entries in this set should be strings of the form "safety_source_id/issue_type_id". */ - @NonNull static ArraySet<String> getImmediateNotificationBehaviorIssues() { return getCommaSeparatedStrings(PROPERTY_NOTIFICATIONS_IMMEDIATE_BEHAVIOR_ISSUES); } @@ -249,7 +246,6 @@ public final class SafetyCenterFlags { * Returns the IDs of sources that should not be tracked, for example because they are * mid-rollout. Broadcasts are still sent to these sources. */ - @NonNull static ArraySet<String> getUntrackedSourceIds() { return getCommaSeparatedStrings(PROPERTY_UNTRACKED_SOURCES); } @@ -258,7 +254,6 @@ public final class SafetyCenterFlags { * Returns the IDs of sources that should only be refreshed when Safety Center is on screen. We * will refresh these sources only on page open and when the scan button is clicked. */ - @NonNull static ArraySet<String> getBackgroundRefreshDeniedSourceIds() { return getCommaSeparatedStrings(PROPERTY_BACKGROUND_REFRESH_DENIED_SOURCES); } @@ -282,7 +277,6 @@ public final class SafetyCenterFlags { * RefreshReason} and the right value is the refresh timeout applied for each source in case of * a refresh. */ - @NonNull private static String getRefreshSourcesTimeoutsMillis() { return getString(PROPERTY_REFRESH_SOURCES_TIMEOUTS_MILLIS, ""); } @@ -306,7 +300,6 @@ public final class SafetyCenterFlags { * {@link SafetySourceData.SeverityLevel} and the right value is the number of times an issue of * this {@link SafetySourceData.SeverityLevel} should be resurfaced. */ - @NonNull private static String getResurfaceIssueMaxCounts() { return getString(PROPERTY_RESURFACE_ISSUE_MAX_COUNTS, ""); } @@ -317,7 +310,6 @@ public final class SafetyCenterFlags { * which a dismissed issue of the given {@link SafetySourceData.SeverityLevel} should be * resurfaced. */ - @NonNull public static Duration getResurfaceIssueDelay( @SafetySourceData.SeverityLevel int severityLevel) { String delaysConfigString = getResurfaceIssueDelaysMillis(); @@ -335,7 +327,6 @@ public final class SafetyCenterFlags { * maximum count for which a dismissed issue of this {@link SafetySourceData.SeverityLevel} * should be resurfaced. */ - @NonNull private static String getResurfaceIssueDelaysMillis() { return getString(PROPERTY_RESURFACE_ISSUE_DELAYS_MILLIS, ""); } @@ -344,9 +335,8 @@ public final class SafetyCenterFlags { * Returns whether a safety source is allowed to send issues for the given {@link * SafetySourceIssue.IssueCategory}. */ - @NonNull public static boolean isIssueCategoryAllowedForSource( - @SafetySourceIssue.IssueCategory int issueCategory, @NonNull String safetySourceId) { + @SafetySourceIssue.IssueCategory int issueCategory, String safetySourceId) { String issueCategoryAllowlists = getIssueCategoryAllowlists(); String allowlistString = getStringValueFromStringMapping(issueCategoryAllowlists, issueCategory); @@ -363,8 +353,7 @@ public final class SafetyCenterFlags { } /** Returns a set of package certificates allowlisted for the given package name. */ - @NonNull - public static ArraySet<String> getAdditionalAllowedPackageCerts(@NonNull String packageName) { + public static ArraySet<String> getAdditionalAllowedPackageCerts(String packageName) { String property = getAdditionalAllowedPackageCertsString(); String allowlistedCertString = getStringValueFromStringMapping(property, packageName); if (allowlistedCertString == null) { @@ -378,12 +367,10 @@ public final class SafetyCenterFlags { * {@link SafetySourceIssue.IssueCategory} and the right value is a vertical-bar-delimited list * of IDs of safety sources that are allowed to send issues with this category. */ - @NonNull private static String getIssueCategoryAllowlists() { return getString(PROPERTY_ISSUE_CATEGORY_ALLOWLISTS, ""); } - @NonNull private static String getAdditionalAllowedPackageCertsString() { return getString(PROPERTY_ADDITIONAL_ALLOW_PACKAGE_CERTS, ""); } @@ -410,12 +397,11 @@ public final class SafetyCenterFlags { return getCommaSeparatedStrings(PROPERTY_OVERRIDE_REFRESH_ON_PAGE_OPEN_SOURCES); } - @NonNull - private static Duration getDuration(@NonNull String property, @NonNull Duration defaultValue) { + private static Duration getDuration(String property, Duration defaultValue) { return Duration.ofMillis(getLong(property, defaultValue.toMillis())); } - private static boolean getBoolean(@NonNull String property, boolean defaultValue) { + private static boolean getBoolean(String property, boolean defaultValue) { // This call requires the READ_DEVICE_CONFIG permission. final long callingId = Binder.clearCallingIdentity(); try { @@ -425,7 +411,7 @@ public final class SafetyCenterFlags { } } - private static long getLong(@NonNull String property, long defaultValue) { + private static long getLong(String property, long defaultValue) { // This call requires the READ_DEVICE_CONFIG permission. final long callingId = Binder.clearCallingIdentity(); try { @@ -435,13 +421,11 @@ public final class SafetyCenterFlags { } } - @NonNull - private static ArraySet<String> getCommaSeparatedStrings(@NonNull String property) { + private static ArraySet<String> getCommaSeparatedStrings(String property) { return new ArraySet<>(getString(property, "").split(",")); } - @NonNull - private static String getString(@NonNull String property, @NonNull String defaultValue) { + private static String getString(String property, String defaultValue) { // This call requires the READ_DEVICE_CONFIG permission. final long callingId = Binder.clearCallingIdentity(); try { @@ -456,7 +440,7 @@ public final class SafetyCenterFlags { * pairs of integers and longs. */ @Nullable - private static Long getLongValueFromStringMapping(@NonNull String config, int key) { + private static Long getLongValueFromStringMapping(String config, int key) { String valueString = getStringValueFromStringMapping(config, key); if (valueString == null) { return null; @@ -474,7 +458,7 @@ public final class SafetyCenterFlags { * of integers and strings. */ @Nullable - private static String getStringValueFromStringMapping(@NonNull String config, int key) { + private static String getStringValueFromStringMapping(String config, int key) { return getStringValueFromStringMapping(config, Integer.toString(key)); } @@ -483,8 +467,7 @@ public final class SafetyCenterFlags { * string pairs. */ @Nullable - private static String getStringValueFromStringMapping( - @NonNull String config, @NonNull String key) { + private static String getStringValueFromStringMapping(String config, String key) { if (config.isEmpty()) { return null; } diff --git a/service/java/com/android/safetycenter/SafetyCenterListeners.java b/service/java/com/android/safetycenter/SafetyCenterListeners.java index 794ba6694..9e07c3d17 100644 --- a/service/java/com/android/safetycenter/SafetyCenterListeners.java +++ b/service/java/com/android/safetycenter/SafetyCenterListeners.java @@ -18,7 +18,6 @@ package com.android.safetycenter; import static android.os.Build.VERSION_CODES.TIRAMISU; -import android.annotation.NonNull; import android.annotation.Nullable; import android.annotation.UserIdInt; import android.os.IBinder; @@ -50,12 +49,12 @@ final class SafetyCenterListeners { private static final String TAG = "SafetyCenterListeners"; - @NonNull private final SafetyCenterDataFactory mSafetyCenterDataFactory; + private final SafetyCenterDataFactory mSafetyCenterDataFactory; private final SparseArray<RemoteCallbackList<IOnSafetyCenterDataChangedListener>> mSafetyCenterDataChangedListeners = new SparseArray<>(); - SafetyCenterListeners(@NonNull SafetyCenterDataFactory safetyCenterDataFactory) { + SafetyCenterListeners(SafetyCenterDataFactory safetyCenterDataFactory) { mSafetyCenterDataFactory = safetyCenterDataFactory; } @@ -64,8 +63,7 @@ final class SafetyCenterListeners { * IOnSafetyCenterDataChangedListener}. */ static void deliverDataForListener( - @NonNull IOnSafetyCenterDataChangedListener listener, - @NonNull SafetyCenterData safetyCenterData) { + IOnSafetyCenterDataChangedListener listener, SafetyCenterData safetyCenterData) { try { listener.onSafetyCenterDataChanged(safetyCenterData); } catch (RemoteException e) { @@ -78,8 +76,8 @@ final class SafetyCenterListeners { * IOnSafetyCenterDataChangedListener}. */ private static void deliverErrorForListener( - @NonNull IOnSafetyCenterDataChangedListener listener, - @NonNull SafetyCenterErrorDetails safetyCenterErrorDetails) { + IOnSafetyCenterDataChangedListener listener, + SafetyCenterErrorDetails safetyCenterErrorDetails) { try { listener.onError(safetyCenterErrorDetails); } catch (RemoteException e) { @@ -91,7 +89,7 @@ final class SafetyCenterListeners { * Delivers a {@link SafetyCenterData} update on all listeners of the given {@link * UserProfileGroup}. */ - void deliverDataForUserProfileGroup(@NonNull UserProfileGroup userProfileGroup) { + void deliverDataForUserProfileGroup(UserProfileGroup userProfileGroup) { ArrayMap<String, SafetyCenterData> safetyCenterDataCache = new ArrayMap<>(); int[] relevantUserIds = userProfileGroup.getProfileParentAndManagedRunningProfilesUserIds(); for (int i = 0; i < relevantUserIds.length; i++) { @@ -105,8 +103,7 @@ final class SafetyCenterListeners { * {@link UserProfileGroup}. */ void deliverErrorForUserProfileGroup( - @NonNull UserProfileGroup userProfileGroup, - @NonNull SafetyCenterErrorDetails safetyCenterErrorDetails) { + UserProfileGroup userProfileGroup, SafetyCenterErrorDetails safetyCenterErrorDetails) { ArrayMap<String, SafetyCenterData> safetyCenterDataCache = new ArrayMap<>(); int[] relevantUserIds = userProfileGroup.getProfileParentAndManagedRunningProfilesUserIds(); for (int i = 0; i < relevantUserIds.length; i++) { @@ -128,8 +125,8 @@ final class SafetyCenterListeners { */ @Nullable IOnSafetyCenterDataChangedListener addListener( - @NonNull IOnSafetyCenterDataChangedListener listener, - @NonNull String packageName, + IOnSafetyCenterDataChangedListener listener, + String packageName, @UserIdInt int userId) { RemoteCallbackList<IOnSafetyCenterDataChangedListener> listeners = mSafetyCenterDataChangedListeners.get(userId); @@ -152,8 +149,7 @@ final class SafetyCenterListeners { * <p>Returns whether the callback was unregistered. Returns {@code false} if the callback was * never registered. */ - boolean removeListener( - @NonNull IOnSafetyCenterDataChangedListener listener, @UserIdInt int userId) { + boolean removeListener(IOnSafetyCenterDataChangedListener listener, @UserIdInt int userId) { RemoteCallbackList<IOnSafetyCenterDataChangedListener> listeners = mSafetyCenterDataChangedListeners.get(userId); if (listeners == null) { @@ -192,8 +188,8 @@ final class SafetyCenterListeners { private void deliverUpdateForUser( @UserIdInt int userId, - @NonNull UserProfileGroup userProfileGroup, - @NonNull ArrayMap<String, SafetyCenterData> safetyCenterDataCache, + UserProfileGroup userProfileGroup, + ArrayMap<String, SafetyCenterData> safetyCenterDataCache, boolean updateSafetyCenterData, @Nullable SafetyCenterErrorDetails safetyCenterErrorDetails) { RemoteCallbackList<IOnSafetyCenterDataChangedListener> listenersForUserId = @@ -226,11 +222,10 @@ final class SafetyCenterListeners { } } - @NonNull private SafetyCenterData assembleSafetyCenterDataIfAbsent( - @NonNull ArrayMap<String, SafetyCenterData> safetyCenterDataCache, - @NonNull String packageName, - @NonNull UserProfileGroup userProfileGroup) { + ArrayMap<String, SafetyCenterData> safetyCenterDataCache, + String packageName, + UserProfileGroup userProfileGroup) { SafetyCenterData cachedSafetyCenterData = safetyCenterDataCache.get(packageName); if (cachedSafetyCenterData != null) { return cachedSafetyCenterData; @@ -242,7 +237,7 @@ final class SafetyCenterListeners { } /** Dumps state for debugging purposes. */ - void dump(@NonNull PrintWriter fout) { + void dump(PrintWriter fout) { int userIdCount = mSafetyCenterDataChangedListeners.size(); fout.println("DATA CHANGED LISTENERS (" + userIdCount + " user IDs)"); for (int i = 0; i < userIdCount; i++) { @@ -268,20 +263,20 @@ final class SafetyCenterListeners { private static final class OnSafetyCenterDataChangedListenerWrapper implements IOnSafetyCenterDataChangedListener { - @NonNull private final IOnSafetyCenterDataChangedListener mDelegate; - @NonNull private final String mPackageName; + private final IOnSafetyCenterDataChangedListener mDelegate; + private final String mPackageName; private final AtomicReference<SafetyCenterData> mLastSafetyCenterData = new AtomicReference<>(); OnSafetyCenterDataChangedListenerWrapper( - @NonNull IOnSafetyCenterDataChangedListener delegate, @NonNull String packageName) { + IOnSafetyCenterDataChangedListener delegate, String packageName) { mDelegate = delegate; mPackageName = packageName; } @Override - public void onSafetyCenterDataChanged(@NonNull SafetyCenterData safetyCenterData) + public void onSafetyCenterDataChanged(SafetyCenterData safetyCenterData) throws RemoteException { if (safetyCenterData.equals(mLastSafetyCenterData.getAndSet(safetyCenterData))) { return; @@ -290,7 +285,7 @@ final class SafetyCenterListeners { } @Override - public void onError(@NonNull SafetyCenterErrorDetails safetyCenterErrorDetails) + public void onError(SafetyCenterErrorDetails safetyCenterErrorDetails) throws RemoteException { mDelegate.onError(safetyCenterErrorDetails); } @@ -300,7 +295,6 @@ final class SafetyCenterListeners { return mDelegate.asBinder(); } - @NonNull public String getPackageName() { return mPackageName; } diff --git a/service/java/com/android/safetycenter/SafetyCenterNotificationChannels.java b/service/java/com/android/safetycenter/SafetyCenterNotificationChannels.java index adf74f8a6..024b2cd22 100644 --- a/service/java/com/android/safetycenter/SafetyCenterNotificationChannels.java +++ b/service/java/com/android/safetycenter/SafetyCenterNotificationChannels.java @@ -18,7 +18,6 @@ package com.android.safetycenter; import static android.os.Build.VERSION_CODES.TIRAMISU; -import android.annotation.NonNull; import android.annotation.Nullable; import android.app.NotificationChannel; import android.app.NotificationChannelGroup; @@ -43,10 +42,9 @@ final class SafetyCenterNotificationChannels { private static final String CHANNEL_ID_RECOMMENDATION = "safety_center_recommendation"; private static final String CHANNEL_ID_CRITICAL_WARNING = "safety_center_critical_warning"; - @NonNull private final SafetyCenterResourcesContext mResourcesContext; + private final SafetyCenterResourcesContext mResourcesContext; - SafetyCenterNotificationChannels( - @NonNull SafetyCenterResourcesContext safetyCenterResourceContext) { + SafetyCenterNotificationChannels(SafetyCenterResourcesContext safetyCenterResourceContext) { mResourcesContext = safetyCenterResourceContext; } @@ -55,8 +53,7 @@ final class SafetyCenterNotificationChannels { * given {@code issue} after ensuring that channel has been created. */ @Nullable - String createAndGetChannelId( - @NonNull NotificationManager notificationManager, @NonNull SafetySourceIssue issue) { + String createAndGetChannelId(NotificationManager notificationManager, SafetySourceIssue issue) { try { createAllChannelsWithoutCallingIdentity(notificationManager); } catch (RuntimeException e) { @@ -67,7 +64,7 @@ final class SafetyCenterNotificationChannels { } @Nullable - private String getChannelIdForIssue(@NonNull SafetySourceIssue issue) { + private String getChannelIdForIssue(SafetySourceIssue issue) { switch (issue.getSeverityLevel()) { case SafetySourceData.SEVERITY_LEVEL_INFORMATION: return CHANNEL_ID_INFORMATION; @@ -89,8 +86,7 @@ final class SafetyCenterNotificationChannels { */ // TODO(b/265277413): Recreate/update these channels on locale changes by calling this method @Nullable - private void createAllChannelsWithoutCallingIdentity( - @NonNull NotificationManager notificationManager) { + private void createAllChannelsWithoutCallingIdentity(NotificationManager notificationManager) { // Clearing calling identity to be able to make unblockable system notification channels final long callingId = Binder.clearCallingIdentity(); try { @@ -103,13 +99,11 @@ final class SafetyCenterNotificationChannels { } } - @NonNull private NotificationChannelGroup getChannelGroupDefinition() { return new NotificationChannelGroup( CHANNEL_GROUP_ID, getString("notification_channel_group_name")); } - @NonNull private NotificationChannel getGreenChannelDefinition() { NotificationChannel channel = new NotificationChannel( @@ -121,7 +115,6 @@ final class SafetyCenterNotificationChannels { return channel; } - @NonNull private NotificationChannel getYellowChannelDefinition() { NotificationChannel channel = new NotificationChannel( @@ -133,7 +126,6 @@ final class SafetyCenterNotificationChannels { return channel; } - @NonNull private NotificationChannel getRedChannelDefinition() { NotificationChannel channel = new NotificationChannel( @@ -145,8 +137,7 @@ final class SafetyCenterNotificationChannels { return channel; } - @NonNull - private String getString(@NonNull String name) { + private String getString(String name) { return mResourcesContext.getStringByName(name); } } diff --git a/service/java/com/android/safetycenter/SafetyCenterNotificationFactory.java b/service/java/com/android/safetycenter/SafetyCenterNotificationFactory.java index 9f7977a3f..edf618922 100644 --- a/service/java/com/android/safetycenter/SafetyCenterNotificationFactory.java +++ b/service/java/com/android/safetycenter/SafetyCenterNotificationFactory.java @@ -21,7 +21,6 @@ import static android.safetycenter.SafetyCenterManager.EXTRA_SAFETY_SOURCE_ID; import static android.safetycenter.SafetyCenterManager.EXTRA_SAFETY_SOURCE_ISSUE_ID; import static android.safetycenter.SafetyCenterManager.EXTRA_SAFETY_SOURCE_USER_HANDLE; -import android.annotation.NonNull; import android.annotation.Nullable; import android.app.Notification; import android.app.NotificationChannel; @@ -53,12 +52,11 @@ final class SafetyCenterNotificationFactory { private static final int OPEN_SAFETY_CENTER_REQUEST_CODE = 1221; - @NonNull private final Context mContext; - @NonNull private final SafetyCenterNotificationChannels mNotificationChannels; + private final Context mContext; + private final SafetyCenterNotificationChannels mNotificationChannels; SafetyCenterNotificationFactory( - @NonNull Context context, - @NonNull SafetyCenterNotificationChannels notificationChannels) { + Context context, SafetyCenterNotificationChannels notificationChannels) { mContext = context; mNotificationChannels = notificationChannels; } @@ -72,9 +70,9 @@ final class SafetyCenterNotificationFactory { */ @Nullable Notification newNotificationForIssue( - @NonNull NotificationManager notificationManager, - @NonNull SafetySourceIssue issue, - @NonNull SafetyCenterIssueKey issueKey) { + NotificationManager notificationManager, + SafetySourceIssue issue, + SafetyCenterIssueKey issueKey) { String channelId = mNotificationChannels.createAndGetChannelId(notificationManager, issue); if (channelId == null) { @@ -115,8 +113,7 @@ final class SafetyCenterNotificationFactory { return builder.build(); } - @NonNull - private PendingIntent newSafetyCenterPendingIntent(@NonNull SafetyCenterIssueKey issueKey) { + private PendingIntent newSafetyCenterPendingIntent(SafetyCenterIssueKey issueKey) { Intent intent = new Intent(Intent.ACTION_SAFETY_CENTER); // Set the encoded issue key as the intent's identifier to ensure the PendingIntents of // different notifications do not collide: @@ -130,7 +127,6 @@ final class SafetyCenterNotificationFactory { mContext, OPEN_SAFETY_CENTER_REQUEST_CODE, intent, PendingIntent.FLAG_IMMUTABLE); } - @NonNull private Bundle getNotificationExtras() { Bundle extras = new Bundle(); // TODO(b/259399024): Use suitable string resource here @@ -138,9 +134,8 @@ final class SafetyCenterNotificationFactory { return extras; } - @NonNull private Notification.Action toNotificationAction( - @NonNull SafetyCenterIssueKey issueKey, @NonNull SafetySourceIssue.Action issueAction) { + SafetyCenterIssueKey issueKey, SafetySourceIssue.Action issueAction) { // We do not use the action's PendingIntent directly here instead we build a new PI which // will be handled by our SafetyCenterNotificationReceiver which will in turn dispatch // the source-provided action PI. This ensures that action execution is consistent across diff --git a/service/java/com/android/safetycenter/SafetyCenterNotificationReceiver.java b/service/java/com/android/safetycenter/SafetyCenterNotificationReceiver.java index 93b2c7966..aeba5bcfc 100644 --- a/service/java/com/android/safetycenter/SafetyCenterNotificationReceiver.java +++ b/service/java/com/android/safetycenter/SafetyCenterNotificationReceiver.java @@ -18,7 +18,6 @@ package com.android.safetycenter; import static android.os.Build.VERSION_CODES.TIRAMISU; -import android.annotation.NonNull; import android.annotation.Nullable; import android.app.PendingIntent; import android.content.BroadcastReceiver; @@ -63,9 +62,8 @@ final class SafetyCenterNotificationReceiver extends BroadcastReceiver { * Creates a broadcast {@code PendingIntent} for this receiver which will handle a Safety Center * notification being dismissed. */ - @NonNull static PendingIntent newNotificationDismissedIntent( - @NonNull Context context, @NonNull SafetyCenterIssueKey issueKey) { + Context context, SafetyCenterIssueKey issueKey) { String issueKeyString = SafetyCenterIds.encodeToString(issueKey); Intent intent = new Intent(ACTION_NOTIFICATION_DISMISSED); intent.putExtra(EXTRA_ISSUE_KEY, issueKeyString); @@ -81,9 +79,8 @@ final class SafetyCenterNotificationReceiver extends BroadcastReceiver { * * <p>Safety Center notification actions correspond to Safety Center issue actions. */ - @NonNull static PendingIntent newNotificationActionClickedIntent( - @NonNull Context context, @NonNull SafetyCenterIssueActionId issueActionId) { + Context context, SafetyCenterIssueActionId issueActionId) { String issueActionIdString = SafetyCenterIds.encodeToString(issueActionId); Intent intent = new Intent(ACTION_NOTIFICATION_ACTION_CLICKED); intent.putExtra(EXTRA_ISSUE_ACTION_ID, issueActionIdString); @@ -94,7 +91,7 @@ final class SafetyCenterNotificationReceiver extends BroadcastReceiver { } @Nullable - private static SafetyCenterIssueKey getIssueKeyExtra(@NonNull Intent intent) { + private static SafetyCenterIssueKey getIssueKeyExtra(Intent intent) { String issueKeyString = intent.getStringExtra(EXTRA_ISSUE_KEY); if (issueKeyString == null) { Log.w(TAG, "Received notification dismissed broadcast with null issue key extra"); @@ -109,7 +106,7 @@ final class SafetyCenterNotificationReceiver extends BroadcastReceiver { } @Nullable - private static SafetyCenterIssueActionId getIssueActionIdExtra(@NonNull Intent intent) { + private static SafetyCenterIssueActionId getIssueActionIdExtra(Intent intent) { String issueActionIdString = intent.getStringExtra(EXTRA_ISSUE_ACTION_ID); if (issueActionIdString == null) { Log.w(TAG, "Received notification action broadcast with null issue action ID"); @@ -123,23 +120,21 @@ final class SafetyCenterNotificationReceiver extends BroadcastReceiver { } } - @NonNull private final SafetyCenterService mService; + private final SafetyCenterService mService; @GuardedBy("mApiLock") - @NonNull private final SafetyCenterDataManager mSafetyCenterDataManager; @GuardedBy("mApiLock") - @NonNull private final SafetyCenterDataChangeNotifier mSafetyCenterDataChangeNotifier; - @NonNull private final ApiLock mApiLock; + private final ApiLock mApiLock; SafetyCenterNotificationReceiver( - @NonNull SafetyCenterService service, - @NonNull SafetyCenterDataManager safetyCenterDataManager, - @NonNull SafetyCenterDataChangeNotifier safetyCenterDataChangeNotifier, - @NonNull ApiLock apiLock) { + SafetyCenterService service, + SafetyCenterDataManager safetyCenterDataManager, + SafetyCenterDataChangeNotifier safetyCenterDataChangeNotifier, + ApiLock apiLock) { mService = service; mSafetyCenterDataManager = safetyCenterDataManager; mSafetyCenterDataChangeNotifier = safetyCenterDataChangeNotifier; @@ -152,7 +147,7 @@ final class SafetyCenterNotificationReceiver extends BroadcastReceiver { * * @see #newNotificationDismissedIntent(Context, SafetyCenterIssueKey) */ - void register(@NonNull Context context) { + void register(Context context) { IntentFilter filter = new IntentFilter(); filter.addAction(ACTION_NOTIFICATION_DISMISSED); filter.addAction(ACTION_NOTIFICATION_ACTION_CLICKED); @@ -160,7 +155,7 @@ final class SafetyCenterNotificationReceiver extends BroadcastReceiver { } @Override - public void onReceive(@NonNull Context context, @NonNull Intent intent) { + public void onReceive(Context context, Intent intent) { if (!SafetyCenterFlags.getSafetyCenterEnabled() || !SafetyCenterFlags.getNotificationsEnabled()) { return; @@ -186,7 +181,7 @@ final class SafetyCenterNotificationReceiver extends BroadcastReceiver { } } - private void onNotificationDismissed(@NonNull Context context, @NonNull Intent intent) { + private void onNotificationDismissed(Context context, Intent intent) { SafetyCenterIssueKey issueKey = getIssueKeyExtra(intent); if (issueKey == null) { return; @@ -199,7 +194,7 @@ final class SafetyCenterNotificationReceiver extends BroadcastReceiver { } } - private void onNotificationActionClicked(@NonNull Intent intent) { + private void onNotificationActionClicked(Intent intent) { SafetyCenterIssueActionId issueActionId = getIssueActionIdExtra(intent); if (issueActionId == null) { return; diff --git a/service/java/com/android/safetycenter/SafetyCenterNotificationSender.java b/service/java/com/android/safetycenter/SafetyCenterNotificationSender.java index 7ef4ec3c8..5a9de1953 100644 --- a/service/java/com/android/safetycenter/SafetyCenterNotificationSender.java +++ b/service/java/com/android/safetycenter/SafetyCenterNotificationSender.java @@ -21,7 +21,6 @@ import static android.os.Build.VERSION_CODES.TIRAMISU; import static com.android.safetycenter.internaldata.SafetyCenterIds.toUserFriendlyString; import android.annotation.IntDef; -import android.annotation.NonNull; import android.annotation.Nullable; import android.annotation.UserIdInt; import android.app.Notification; @@ -91,26 +90,26 @@ final class SafetyCenterNotificationSender { @Retention(RetentionPolicy.SOURCE) private @interface NotificationBehaviorInternal {} - @NonNull private final Context mContext; + private final Context mContext; - @NonNull private final SafetyCenterNotificationFactory mNotificationFactory; + private final SafetyCenterNotificationFactory mNotificationFactory; - @NonNull private final SafetyCenterDataManager mSafetyCenterDataManager; + private final SafetyCenterDataManager mSafetyCenterDataManager; private final ArrayMap<SafetyCenterIssueKey, SafetySourceIssue> mNotifiedIssues = new ArrayMap<>(); SafetyCenterNotificationSender( - @NonNull Context context, - @NonNull SafetyCenterNotificationFactory notificationFactory, - @NonNull SafetyCenterDataManager safetyCenterDataManager) { + Context context, + SafetyCenterNotificationFactory notificationFactory, + SafetyCenterDataManager safetyCenterDataManager) { mContext = context; mNotificationFactory = notificationFactory; mSafetyCenterDataManager = safetyCenterDataManager; } /** Updates Safety Center notifications for the given {@link UserProfileGroup}. */ - void updateNotifications(@NonNull UserProfileGroup userProfileGroup) { + void updateNotifications(UserProfileGroup userProfileGroup) { updateNotifications(userProfileGroup.getProfileParentUserId()); int[] managedProfileUserIds = userProfileGroup.getManagedProfilesUserIds(); @@ -177,7 +176,7 @@ final class SafetyCenterNotificationSender { } /** Dumps state for debugging purposes. */ - void dump(@NonNull PrintWriter fout) { + void dump(PrintWriter fout) { int notifiedIssuesCount = mNotifiedIssues.size(); fout.println("NOTIFICATION SENDER (" + notifiedIssuesCount + " notified issues)"); for (int i = 0; i < notifiedIssuesCount; i++) { @@ -189,7 +188,6 @@ final class SafetyCenterNotificationSender { } /** Get all of the key-issue pairs for which notifications should be posted or updated now. */ - @NonNull private ArrayMap<SafetyCenterIssueKey, SafetySourceIssue> getIssuesToNotify( @UserIdInt int userId) { ArrayMap<SafetyCenterIssueKey, SafetySourceIssue> result = new ArrayMap<>(); @@ -241,8 +239,7 @@ final class SafetyCenterNotificationSender { } @NotificationBehaviorInternal - private int getBehavior( - @NonNull SafetySourceIssue issue, @NonNull SafetyCenterIssueKey issueKey) { + private int getBehavior(SafetySourceIssue issue, SafetyCenterIssueKey issueKey) { if (SdkLevel.isAtLeastU()) { switch (issue.getNotificationBehavior()) { case SafetySourceIssue.NOTIFICATION_BEHAVIOR_NEVER: @@ -259,7 +256,7 @@ final class SafetyCenterNotificationSender { @NotificationBehaviorInternal private int getBehaviorForIssueWithUnspecifiedBehavior( - @NonNull SafetySourceIssue issue, @NonNull SafetyCenterIssueKey issueKey) { + SafetySourceIssue issue, SafetyCenterIssueKey issueKey) { String flagKey = issueKey.getSafetySourceId() + "/" + issue.getIssueTypeId(); if (SafetyCenterFlags.getImmediateNotificationBehaviorIssues().contains(flagKey)) { return NOTIFICATION_BEHAVIOR_INTERNAL_IMMEDIATELY; @@ -268,7 +265,7 @@ final class SafetyCenterNotificationSender { } } - private boolean areNotificationsAllowed(@NonNull SafetySource safetySource) { + private boolean areNotificationsAllowed(SafetySource safetySource) { if (SdkLevel.isAtLeastU()) { if (safetySource.areNotificationsAllowed()) { return true; @@ -278,9 +275,9 @@ final class SafetyCenterNotificationSender { } private boolean postNotificationForIssue( - @NonNull NotificationManager notificationManager, - @NonNull SafetySourceIssue safetySourceIssue, - @NonNull SafetyCenterIssueKey key) { + NotificationManager notificationManager, + SafetySourceIssue safetySourceIssue, + SafetyCenterIssueKey key) { Notification notification = mNotificationFactory.newNotificationForIssue( notificationManager, safetySourceIssue, key); @@ -298,9 +295,9 @@ final class SafetyCenterNotificationSender { } private void cancelStaleNotifications( - @NonNull NotificationManager notificationManager, + NotificationManager notificationManager, @UserIdInt int userId, - @NonNull ArraySet<SafetyCenterIssueKey> freshIssueKeys) { + ArraySet<SafetyCenterIssueKey> freshIssueKeys) { // Loop in reverse index order to be able to remove entries while iterating for (int i = mNotifiedIssues.size() - 1; i >= 0; i--) { SafetyCenterIssueKey key = mNotifiedIssues.keyAt(i); @@ -312,8 +309,7 @@ final class SafetyCenterNotificationSender { } } - @NonNull - private static String getNotificationTag(@NonNull SafetyCenterIssueKey issueKey) { + private static String getNotificationTag(SafetyCenterIssueKey issueKey) { // Base 64 encoding of the issueKey proto: return SafetyCenterIds.encodeToString(issueKey); } @@ -334,9 +330,9 @@ final class SafetyCenterNotificationSender { * to a specific user. */ private boolean notifyFromSystem( - @NonNull NotificationManager notificationManager, + NotificationManager notificationManager, @Nullable String tag, - @NonNull Notification notification) { + Notification notification) { // This call is needed to send a notification from the system and this also grants the // necessary POST_NOTIFICATIONS permission. final long callingId = Binder.clearCallingIdentity(); @@ -360,7 +356,7 @@ final class SafetyCenterNotificationSender { * sent to a specific user. */ private void cancelNotificationFromSystem( - @NonNull NotificationManager notificationManager, @Nullable String tag) { + NotificationManager notificationManager, @Nullable String tag) { // This call is needed to cancel a notification previously sent from the system final long callingId = Binder.clearCallingIdentity(); try { diff --git a/service/java/com/android/safetycenter/SafetyCenterRefreshTracker.java b/service/java/com/android/safetycenter/SafetyCenterRefreshTracker.java index a3a65857d..ae1f80182 100644 --- a/service/java/com/android/safetycenter/SafetyCenterRefreshTracker.java +++ b/service/java/com/android/safetycenter/SafetyCenterRefreshTracker.java @@ -23,7 +23,6 @@ import static com.android.permission.PermissionStatsLog.SAFETY_CENTER_SYSTEM_EVE import static com.android.safetycenter.logging.SafetyCenterStatsdLogger.toSystemEventResult; import android.annotation.ElapsedRealtimeLong; -import android.annotation.NonNull; import android.annotation.Nullable; import android.annotation.UserIdInt; import android.os.SystemClock; @@ -64,9 +63,9 @@ public final class SafetyCenterRefreshTracker { private int mRefreshCounter = 0; - @NonNull private final SafetyCenterStatsdLogger mSafetyCenterStatsdLogger; + private final SafetyCenterStatsdLogger mSafetyCenterStatsdLogger; - SafetyCenterRefreshTracker(@NonNull SafetyCenterStatsdLogger safetyCenterStatsdLogger) { + SafetyCenterRefreshTracker(SafetyCenterStatsdLogger safetyCenterStatsdLogger) { mSafetyCenterStatsdLogger = safetyCenterStatsdLogger; } @@ -74,9 +73,8 @@ public final class SafetyCenterRefreshTracker { * Reports that a new refresh is in progress and returns the broadcast id associated with this * refresh. */ - @NonNull String reportRefreshInProgress( - @RefreshReason int refreshReason, @NonNull UserProfileGroup userProfileGroup) { + @RefreshReason int refreshReason, UserProfileGroup userProfileGroup) { if (mRefreshInProgress != null) { Log.w(TAG, "Replacing an ongoing refresh"); } @@ -119,9 +117,7 @@ public final class SafetyCenterRefreshTracker { * as complete. */ void reportSourceRefreshesInFlight( - @NonNull String refreshBroadcastId, - @NonNull List<String> sourceIds, - @UserIdInt int userId) { + String refreshBroadcastId, List<String> sourceIds, @UserIdInt int userId) { if (!checkRefreshInProgress("reportSourceRefreshesInFlight", refreshBroadcastId)) { return; } @@ -142,10 +138,7 @@ public final class SafetyCenterRefreshTracker { * <p>Completed refreshes are logged to statsd. */ public boolean reportSourceRefreshCompleted( - @NonNull String refreshBroadcastId, - @NonNull String sourceId, - @UserIdInt int userId, - boolean successful) { + String refreshBroadcastId, String sourceId, @UserIdInt int userId, boolean successful) { if (!checkRefreshInProgress("reportSourceRefreshCompleted", refreshBroadcastId)) { return false; } @@ -191,7 +184,7 @@ public final class SafetyCenterRefreshTracker { * scheduled broadcasts being sent by {@link * android.safetycenter.SafetyCenterManager#refreshSafetySources}. */ - void clearRefresh(@NonNull String refreshBroadcastId) { + void clearRefresh(String refreshBroadcastId) { if (!checkRefreshInProgress("clearRefresh", refreshBroadcastId)) { return; } @@ -227,7 +220,7 @@ public final class SafetyCenterRefreshTracker { * android.safetycenter.SafetyCenterManager#refreshSafetySources}. */ @Nullable - ArraySet<SafetySourceKey> timeoutRefresh(@NonNull String refreshBroadcastId) { + ArraySet<SafetySourceKey> timeoutRefresh(String refreshBroadcastId) { if (!checkRefreshInProgress("timeoutRefresh", refreshBroadcastId)) { return null; } @@ -284,8 +277,7 @@ public final class SafetyCenterRefreshTracker { * Returns {@code true} if there is currently a refresh in progress with the given ID, or logs a * helpful warning and returns {@code false} if not. */ - private boolean checkRefreshInProgress( - @NonNull String methodName, @NonNull String refreshBroadcastId) { + private boolean checkRefreshInProgress(String methodName, String refreshBroadcastId) { if (mRefreshInProgress == null || !mRefreshInProgress.getId().equals(refreshBroadcastId)) { Log.w( TAG, @@ -300,7 +292,7 @@ public final class SafetyCenterRefreshTracker { } /** Dumps state for debugging purposes. */ - void dump(@NonNull PrintWriter fout) { + void dump(PrintWriter fout) { fout.println( "REFRESH IN PROGRESS (" + (mRefreshInProgress != null) @@ -316,10 +308,10 @@ public final class SafetyCenterRefreshTracker { /** Class representing the state of a refresh in progress. */ private static final class RefreshInProgress { - @NonNull private final String mId; + private final String mId; @RefreshReason private final int mReason; - @NonNull private final UserProfileGroup mUserProfileGroup; - @NonNull private final ArraySet<String> mUntrackedSourcesIds; + private final UserProfileGroup mUserProfileGroup; + private final ArraySet<String> mUntrackedSourcesIds; @ElapsedRealtimeLong private final long mStartElapsedMillis; // The values in this map are the start times of each source refresh. The alternative of @@ -330,10 +322,10 @@ public final class SafetyCenterRefreshTracker { private boolean mAnyTrackedSourceErrors = false; RefreshInProgress( - @NonNull String id, + String id, @RefreshReason int reason, - @NonNull UserProfileGroup userProfileGroup, - @NonNull ArraySet<String> untrackedSourceIds) { + UserProfileGroup userProfileGroup, + ArraySet<String> untrackedSourceIds) { mId = id; mReason = reason; mUserProfileGroup = userProfileGroup; @@ -346,7 +338,6 @@ public final class SafetyCenterRefreshTracker { * android.safetycenter.SafetyCenterManager#EXTRA_REFRESH_SAFETY_SOURCES_BROADCAST_ID} used * in the refresh. */ - @NonNull private String getId() { return mId; } @@ -358,13 +349,12 @@ public final class SafetyCenterRefreshTracker { } /** Returns the {@link Duration} since this refresh started. */ - @NonNull private Duration getDurationSinceStart() { return Duration.ofMillis(SystemClock.elapsedRealtime() - mStartElapsedMillis); } @Nullable - private Duration getDurationSinceSourceStart(@NonNull SafetySourceKey safetySourceKey) { + private Duration getDurationSinceSourceStart(SafetySourceKey safetySourceKey) { Long startElapsedMillis = mSourceRefreshesInFlight.get(safetySourceKey); if (startElapsedMillis == null) { return null; @@ -373,7 +363,6 @@ public final class SafetyCenterRefreshTracker { } /** Returns the {@link SafetySourceKey} of all in-flight source refreshes. */ - @NonNull private ArraySet<SafetySourceKey> getSourceRefreshesInFlight() { return new ArraySet<>(mSourceRefreshesInFlight.keySet()); } @@ -383,7 +372,7 @@ public final class SafetyCenterRefreshTracker { return mAnyTrackedSourceErrors; } - private void markSourceRefreshInFlight(@NonNull SafetySourceKey safetySourceKey) { + private void markSourceRefreshInFlight(SafetySourceKey safetySourceKey) { boolean tracked = isTracked(safetySourceKey); long currentElapsedMillis = SystemClock.elapsedRealtime(); if (tracked) { @@ -408,7 +397,7 @@ public final class SafetyCenterRefreshTracker { @Nullable private Duration markSourceRefreshComplete( - @NonNull SafetySourceKey safetySourceKey, boolean successful) { + SafetySourceKey safetySourceKey, boolean successful) { Long startElapsedMillis = mSourceRefreshesInFlight.remove(safetySourceKey); boolean tracked = isTracked(safetySourceKey); diff --git a/service/java/com/android/safetycenter/SafetyCenterService.java b/service/java/com/android/safetycenter/SafetyCenterService.java index a3761bc12..109a6b794 100644 --- a/service/java/com/android/safetycenter/SafetyCenterService.java +++ b/service/java/com/android/safetycenter/SafetyCenterService.java @@ -34,7 +34,6 @@ import static com.android.safetycenter.internaldata.SafetyCenterIds.toUserFriend import static java.util.Objects.requireNonNull; -import android.annotation.NonNull; import android.annotation.Nullable; import android.annotation.UserIdInt; import android.app.PendingIntent; @@ -110,51 +109,42 @@ public final class SafetyCenterService extends SystemService { @GuardedBy("mApiLock") private final SafetyCenterTimeouts mSafetyCenterTimeouts = new SafetyCenterTimeouts(); - @NonNull private final SafetyCenterResourcesContext mSafetyCenterResourcesContext; + private final SafetyCenterResourcesContext mSafetyCenterResourcesContext; @GuardedBy("mApiLock") - @NonNull private final SafetyCenterConfigReader mSafetyCenterConfigReader; @GuardedBy("mApiLock") - @NonNull private final SafetyCenterRefreshTracker mSafetyCenterRefreshTracker; @GuardedBy("mApiLock") - @NonNull private final SafetyCenterDataManager mSafetyCenterDataManager; @GuardedBy("mApiLock") - @NonNull private final PendingIntentFactory mPendingIntentFactory; @GuardedBy("mApiLock") - @NonNull private final SafetyCenterDataFactory mSafetyCenterDataFactory; @GuardedBy("mApiLock") - @NonNull private final SafetyCenterListeners mSafetyCenterListeners; @GuardedBy("mApiLock") - @NonNull private final SafetyCenterNotificationSender mNotificationSender; @GuardedBy("mApiLock") - @NonNull private final SafetyCenterBroadcastDispatcher mSafetyCenterBroadcastDispatcher; @GuardedBy("mApiLock") - @NonNull private final SafetyCenterDataChangeNotifier mSafetyCenterDataChangeNotifier; - @NonNull private final StatsPullAtomCallback mPullAtomCallback; + private final StatsPullAtomCallback mPullAtomCallback; private final boolean mDeviceSupportsSafetyCenter; /** Whether the {@link SafetyCenterConfig} was successfully loaded. */ private volatile boolean mConfigAvailable; - public SafetyCenterService(@NonNull Context context) { + public SafetyCenterService(Context context) { super(context); mSafetyCenterResourcesContext = new SafetyCenterResourcesContext(context); mSafetyCenterConfigReader = new SafetyCenterConfigReader(mSafetyCenterResourcesContext); @@ -268,10 +258,10 @@ public final class SafetyCenterService extends SystemService { @Override public void setSafetySourceData( - @NonNull String safetySourceId, + String safetySourceId, @Nullable SafetySourceData safetySourceData, - @NonNull SafetyEvent safetyEvent, - @NonNull String packageName, + SafetyEvent safetyEvent, + String packageName, @UserIdInt int userId) { requireNonNull(safetySourceId); requireNonNull(safetyEvent); @@ -299,9 +289,7 @@ public final class SafetyCenterService extends SystemService { @Override @Nullable public SafetySourceData getSafetySourceData( - @NonNull String safetySourceId, - @NonNull String packageName, - @UserIdInt int userId) { + String safetySourceId, String packageName, @UserIdInt int userId) { requireNonNull(safetySourceId); requireNonNull(packageName); getContext() @@ -321,9 +309,9 @@ public final class SafetyCenterService extends SystemService { @Override public void reportSafetySourceError( - @NonNull String safetySourceId, - @NonNull SafetySourceErrorDetails errorDetails, - @NonNull String packageName, + String safetySourceId, + SafetySourceErrorDetails errorDetails, + String packageName, @UserIdInt int userId) { requireNonNull(safetySourceId); requireNonNull(errorDetails); @@ -377,7 +365,7 @@ public final class SafetyCenterService extends SystemService { public void refreshSpecificSafetySources( @RefreshReason int refreshReason, @UserIdInt int userId, - @NonNull List<String> safetySourceIds) { + List<String> safetySourceIds) { requireNonNull(safetySourceIds, "safetySourceIds cannot be null"); RefreshReasons.validate(refreshReason); getContext() @@ -408,9 +396,7 @@ public final class SafetyCenterService extends SystemService { } @Override - @NonNull - public SafetyCenterData getSafetyCenterData( - @NonNull String packageName, @UserIdInt int userId) { + public SafetyCenterData getSafetyCenterData(String packageName, @UserIdInt int userId) { requireNonNull(packageName); getContext() .enforceCallingOrSelfPermission(MANAGE_SAFETY_CENTER, "getSafetyCenterData"); @@ -430,8 +416,8 @@ public final class SafetyCenterService extends SystemService { @Override public void addOnSafetyCenterDataChangedListener( - @NonNull IOnSafetyCenterDataChangedListener listener, - @NonNull String packageName, + IOnSafetyCenterDataChangedListener listener, + String packageName, @UserIdInt int userId) { requireNonNull(listener); requireNonNull(packageName); @@ -460,7 +446,7 @@ public final class SafetyCenterService extends SystemService { @Override public void removeOnSafetyCenterDataChangedListener( - @NonNull IOnSafetyCenterDataChangedListener listener, @UserIdInt int userId) { + IOnSafetyCenterDataChangedListener listener, @UserIdInt int userId) { requireNonNull(listener); getContext() .enforceCallingOrSelfPermission( @@ -476,7 +462,7 @@ public final class SafetyCenterService extends SystemService { } @Override - public void dismissSafetyCenterIssue(@NonNull String issueId, @UserIdInt int userId) { + public void dismissSafetyCenterIssue(String issueId, @UserIdInt int userId) { requireNonNull(issueId); getContext() .enforceCallingOrSelfPermission( @@ -525,7 +511,7 @@ public final class SafetyCenterService extends SystemService { @Override public void executeSafetyCenterIssueAction( - @NonNull String issueId, @NonNull String issueActionId, @UserIdInt int userId) { + String issueId, String issueActionId, @UserIdInt int userId) { requireNonNull(issueId); requireNonNull(issueActionId); getContext() @@ -578,7 +564,7 @@ public final class SafetyCenterService extends SystemService { } @Override - public void setSafetyCenterConfigForTests(@NonNull SafetyCenterConfig safetyCenterConfig) { + public void setSafetyCenterConfigForTests(SafetyCenterConfig safetyCenterConfig) { requireNonNull(safetyCenterConfig); getContext() .enforceCallingOrSelfPermission( @@ -620,8 +606,7 @@ public final class SafetyCenterService extends SystemService { return canUseSafetyCenter() && SafetyCenterFlags.getSafetyCenterEnabled(); } - private void enforceAnyCallingOrSelfPermissions( - @NonNull String message, @NonNull String... permissions) { + private void enforceAnyCallingOrSelfPermissions(String message, String... permissions) { if (permissions.length == 0) { throw new IllegalArgumentException("Must check at least one permission"); } @@ -639,7 +624,7 @@ public final class SafetyCenterService extends SystemService { } /** Enforces cross user permission and returns whether the user is existent. */ - private boolean enforceCrossUserPermission(@NonNull String message, @UserIdInt int userId) { + private boolean enforceCrossUserPermission(String message, @UserIdInt int userId) { UserUtils.enforceCrossUserPermission(userId, false, message, getContext()); if (!UserUtils.isUserExistent(userId, getContext())) { Log.e( @@ -661,8 +646,7 @@ public final class SafetyCenterService extends SystemService { * <p>Throws a {@link SecurityException} if the {@code packageName} does not belong to the * {@code callingUid}. */ - private boolean enforcePackage( - int callingUid, @NonNull String packageName, @UserIdInt int userId) { + private boolean enforcePackage(int callingUid, String packageName, @UserIdInt int userId) { if (TextUtils.isEmpty(packageName)) { throw new IllegalArgumentException("packageName may not be empty"); } @@ -689,7 +673,7 @@ public final class SafetyCenterService extends SystemService { return true; } - private boolean checkApiEnabled(@NonNull String message) { + private boolean checkApiEnabled(String message) { if (!isApiEnabled()) { Log.w(TAG, "Called " + message + ", but Safety Center is disabled"); return false; @@ -698,9 +682,7 @@ public final class SafetyCenterService extends SystemService { } private void enforceSameUserProfileGroup( - @NonNull String message, - @NonNull UserProfileGroup userProfileGroup, - @UserIdInt int userId) { + String message, UserProfileGroup userProfileGroup, @UserIdInt int userId) { if (!userProfileGroup.contains(userId)) { throw new SecurityException( message @@ -713,10 +695,10 @@ public final class SafetyCenterService extends SystemService { @Override public int handleShellCommand( - @NonNull ParcelFileDescriptor in, - @NonNull ParcelFileDescriptor out, - @NonNull ParcelFileDescriptor err, - @NonNull String[] args) { + ParcelFileDescriptor in, + ParcelFileDescriptor out, + ParcelFileDescriptor err, + String[] args) { return new SafetyCenterShellCommandHandler( getContext(), this, mDeviceSupportsSafetyCenter) .exec( @@ -729,8 +711,7 @@ public final class SafetyCenterService extends SystemService { /** Dumps state for debugging purposes. */ @Override - protected void dump( - @NonNull FileDescriptor fd, @NonNull PrintWriter fout, @Nullable String[] args) { + protected void dump(FileDescriptor fd, PrintWriter fout, @Nullable String[] args) { if (!checkDumpPermission(fout)) { return; } @@ -764,7 +745,7 @@ public final class SafetyCenterService extends SystemService { } } - private boolean checkDumpPermission(@NonNull PrintWriter writer) { + private boolean checkDumpPermission(PrintWriter writer) { if (getContext().checkCallingOrSelfPermission(android.Manifest.permission.DUMP) != PERMISSION_GRANTED) { writer.println( @@ -802,7 +783,7 @@ public final class SafetyCenterService extends SystemService { private boolean mSafetyCenterEnabled; @Override - public void onPropertiesChanged(@NonNull DeviceConfig.Properties properties) { + public void onPropertiesChanged(DeviceConfig.Properties properties) { if (!properties.getKeyset().contains(PROPERTY_SAFETY_CENTER_ENABLED)) { return; } @@ -848,11 +829,10 @@ public final class SafetyCenterService extends SystemService { /** A {@link Runnable} that is called to signal a refresh timeout. */ private final class RefreshTimeout implements Runnable { - @NonNull private final String mRefreshBroadcastId; - @NonNull private final UserProfileGroup mUserProfileGroup; + private final String mRefreshBroadcastId; + private final UserProfileGroup mUserProfileGroup; - RefreshTimeout( - @NonNull String refreshBroadcastId, @NonNull UserProfileGroup userProfileGroup) { + RefreshTimeout(String refreshBroadcastId, UserProfileGroup userProfileGroup) { mRefreshBroadcastId = refreshBroadcastId; mUserProfileGroup = userProfileGroup; } @@ -903,12 +883,12 @@ public final class SafetyCenterService extends SystemService { /** A {@link Runnable} that is called to signal a resolving action timeout. */ private final class ResolvingActionTimeout implements Runnable { - @NonNull private final SafetyCenterIssueActionId mSafetyCenterIssueActionId; - @NonNull private final UserProfileGroup mUserProfileGroup; + private final SafetyCenterIssueActionId mSafetyCenterIssueActionId; + private final UserProfileGroup mUserProfileGroup; ResolvingActionTimeout( - @NonNull SafetyCenterIssueActionId safetyCenterIssueActionId, - @NonNull UserProfileGroup userProfileGroup) { + SafetyCenterIssueActionId safetyCenterIssueActionId, + UserProfileGroup userProfileGroup) { mSafetyCenterIssueActionId = safetyCenterIssueActionId; mUserProfileGroup = userProfileGroup; } @@ -960,8 +940,7 @@ public final class SafetyCenterService extends SystemService { private static final String TAG = "UserBroadcastReceiver"; - @NonNull - void register(@NonNull Context context) { + void register(Context context) { IntentFilter filter = new IntentFilter(); filter.addAction(Intent.ACTION_USER_ADDED); filter.addAction(Intent.ACTION_USER_REMOVED); @@ -973,7 +952,7 @@ public final class SafetyCenterService extends SystemService { } @Override - public void onReceive(@NonNull Context context, @NonNull Intent intent) { + public void onReceive(Context context, Intent intent) { String action = intent.getAction(); if (action == null) { Log.w(TAG, "Received broadcast with null action!"); @@ -1056,7 +1035,7 @@ public final class SafetyCenterService extends SystemService { * * <p>No validation is performed on the contents of the given ID. */ - void executeIssueActionInternal(@NonNull SafetyCenterIssueActionId safetyCenterIssueActionId) { + void executeIssueActionInternal(SafetyCenterIssueActionId safetyCenterIssueActionId) { SafetyCenterIssueKey safetyCenterIssueKey = safetyCenterIssueActionId.getSafetyCenterIssueKey(); UserProfileGroup userProfileGroup = @@ -1066,9 +1045,9 @@ public final class SafetyCenterService extends SystemService { } private void executeIssueActionInternal( - @NonNull SafetyCenterIssueKey safetyCenterIssueKey, - @NonNull SafetyCenterIssueActionId safetyCenterIssueActionId, - @NonNull UserProfileGroup userProfileGroup, + SafetyCenterIssueKey safetyCenterIssueKey, + SafetyCenterIssueActionId safetyCenterIssueActionId, + UserProfileGroup userProfileGroup, @Nullable Integer taskId) { synchronized (mApiLock) { SafetySourceIssue.Action safetySourceIssueAction = @@ -1118,7 +1097,7 @@ public final class SafetyCenterService extends SystemService { } private boolean dispatchPendingIntent( - @NonNull PendingIntent pendingIntent, @Nullable Integer launchTaskId) { + PendingIntent pendingIntent, @Nullable Integer launchTaskId) { if (launchTaskId != null && getContext().checkCallingOrSelfPermission(START_TASKS_FROM_RECENTS) != PERMISSION_GRANTED) { @@ -1137,7 +1116,7 @@ public final class SafetyCenterService extends SystemService { /** Dumps state for debugging purposes. */ @GuardedBy("mApiLock") - private void dumpLocked(@NonNull PrintWriter fout) { + private void dumpLocked(PrintWriter fout) { fout.println("SERVICE"); fout.println( "\tSafetyCenterService{" diff --git a/service/java/com/android/safetycenter/SafetyCenterShellCommandHandler.java b/service/java/com/android/safetycenter/SafetyCenterShellCommandHandler.java index a96309ba7..87e3372f7 100644 --- a/service/java/com/android/safetycenter/SafetyCenterShellCommandHandler.java +++ b/service/java/com/android/safetycenter/SafetyCenterShellCommandHandler.java @@ -27,7 +27,6 @@ import static android.safetycenter.SafetyCenterManager.REFRESH_REASON_SAFETY_CEN import static java.util.Collections.unmodifiableMap; -import android.annotation.NonNull; import android.annotation.Nullable; import android.annotation.UserIdInt; import android.content.Context; @@ -52,15 +51,15 @@ import java.util.Map; @RequiresApi(TIRAMISU) final class SafetyCenterShellCommandHandler extends BasicShellCommandHandler { - @NonNull private static final Map<String, Integer> REASONS = createReasonMap(); + private static final Map<String, Integer> REASONS = createReasonMap(); - @NonNull private final Context mContext; - @NonNull private final ISafetyCenterManager mSafetyCenterManager; + private final Context mContext; + private final ISafetyCenterManager mSafetyCenterManager; private final boolean mDeviceSupportsSafetyCenter; SafetyCenterShellCommandHandler( - @NonNull Context context, - @NonNull ISafetyCenterManager safetyCenterManager, + Context context, + ISafetyCenterManager safetyCenterManager, boolean deviceSupportsSafetyCenter) { mContext = context; mSafetyCenterManager = safetyCenterManager; @@ -187,7 +186,7 @@ final class SafetyCenterShellCommandHandler extends BasicShellCommandHandler { } /** Helper function to standardise pretty-printing of the help text. */ - private void printCmd(@NonNull String cmd, @NonNull String... description) { + private void printCmd(String cmd, String... description) { PrintWriter pw = getOutPrintWriter(); pw.println(" " + cmd); for (int i = 0; i < description.length; i++) { @@ -195,7 +194,6 @@ final class SafetyCenterShellCommandHandler extends BasicShellCommandHandler { } } - @NonNull private static Map<String, Integer> createReasonMap() { // LinkedHashMap so that options get printed in order LinkedHashMap<String, Integer> reasons = new LinkedHashMap<>(6); diff --git a/service/java/com/android/safetycenter/SafetyCenterTimeouts.java b/service/java/com/android/safetycenter/SafetyCenterTimeouts.java index 661378a57..f8bfd691e 100644 --- a/service/java/com/android/safetycenter/SafetyCenterTimeouts.java +++ b/service/java/com/android/safetycenter/SafetyCenterTimeouts.java @@ -18,7 +18,6 @@ package com.android.safetycenter; import static android.os.Build.VERSION_CODES.TIRAMISU; -import android.annotation.NonNull; import android.os.Handler; import androidx.annotation.RequiresApi; @@ -55,7 +54,7 @@ final class SafetyCenterTimeouts { SafetyCenterTimeouts() {} /** Adds the given {@link Runnable} to run as a timeout after the given {@link Duration}. */ - void add(@NonNull Runnable timeoutAction, @NonNull Duration timeoutDuration) { + void add(Runnable timeoutAction, Duration timeoutDuration) { if (mTimeouts.size() + 1 >= MAX_TRACKED) { remove(mTimeouts.pollFirst()); } @@ -64,7 +63,7 @@ final class SafetyCenterTimeouts { } /** Removes the given {@link Runnable} to run as a timeout. */ - void remove(@NonNull Runnable timeoutAction) { + void remove(Runnable timeoutAction) { mTimeouts.remove(timeoutAction); mForegroundHandler.removeCallbacks(timeoutAction); } @@ -77,7 +76,7 @@ final class SafetyCenterTimeouts { } /** Dumps state for debugging purposes. */ - void dump(@NonNull PrintWriter fout) { + void dump(PrintWriter fout) { int count = mTimeouts.size(); fout.println("TIMEOUTS (" + count + ")"); Iterator<Runnable> it = mTimeouts.iterator(); diff --git a/service/java/com/android/safetycenter/SafetySourceIssueInfo.java b/service/java/com/android/safetycenter/SafetySourceIssueInfo.java index 171751dc7..51e6567d7 100644 --- a/service/java/com/android/safetycenter/SafetySourceIssueInfo.java +++ b/service/java/com/android/safetycenter/SafetySourceIssueInfo.java @@ -20,7 +20,6 @@ import static android.os.Build.VERSION_CODES.TIRAMISU; import static com.android.safetycenter.internaldata.SafetyCenterIds.toUserFriendlyString; -import android.annotation.NonNull; import android.annotation.UserIdInt; import android.safetycenter.SafetySourceIssue; import android.safetycenter.config.SafetySource; @@ -40,16 +39,16 @@ import java.util.Objects; @RequiresApi(TIRAMISU) public final class SafetySourceIssueInfo { - @NonNull private final SafetySourceIssue mSafetySourceIssue; - @NonNull private final SafetySource mSafetySource; - @NonNull private final SafetySourcesGroup mSafetySourcesGroup; - @NonNull private final SafetyCenterIssueKey mSafetyCenterIssueKey; + private final SafetySourceIssue mSafetySourceIssue; + private final SafetySource mSafetySource; + private final SafetySourcesGroup mSafetySourcesGroup; + private final SafetyCenterIssueKey mSafetyCenterIssueKey; /** Creates a new {@link SafetySourceIssueInfo} instance. */ public SafetySourceIssueInfo( - @NonNull SafetySourceIssue safetySourceIssue, - @NonNull SafetySource safetySource, - @NonNull SafetySourcesGroup safetySourcesGroup, + SafetySourceIssue safetySourceIssue, + SafetySource safetySource, + SafetySourcesGroup safetySourcesGroup, @UserIdInt int userId) { mSafetySourceIssue = safetySourceIssue; mSafetySource = safetySource; @@ -63,24 +62,20 @@ public final class SafetySourceIssueInfo { } /** Returns the {@link SafetyCenterIssueKey} related to this {@link SafetySourceIssue}. */ - @NonNull public SafetyCenterIssueKey getSafetyCenterIssueKey() { return mSafetyCenterIssueKey; } /** Returns the {@link SafetySourceIssue}. */ - @NonNull public SafetySourceIssue getSafetySourceIssue() { return mSafetySourceIssue; } /** Returns the {@link SafetySource} related to this {@link SafetySourceIssue}. */ - @NonNull public SafetySource getSafetySource() { return mSafetySource; } /** Returns the {@link SafetySourcesGroup} related to this {@link SafetySourceIssue}. */ - @NonNull public SafetySourcesGroup getSafetySourcesGroup() { return mSafetySourcesGroup; } diff --git a/service/java/com/android/safetycenter/SafetySourceKey.java b/service/java/com/android/safetycenter/SafetySourceKey.java index bf856d37a..511fbef73 100644 --- a/service/java/com/android/safetycenter/SafetySourceKey.java +++ b/service/java/com/android/safetycenter/SafetySourceKey.java @@ -18,7 +18,6 @@ package com.android.safetycenter; import static android.os.Build.VERSION_CODES.TIRAMISU; -import android.annotation.NonNull; import android.annotation.UserIdInt; import android.safetycenter.SafetySourceData; @@ -36,22 +35,20 @@ import java.util.Objects; @RequiresApi(TIRAMISU) public final class SafetySourceKey { - @NonNull private final String mSourceId; + private final String mSourceId; @UserIdInt private final int mUserId; - private SafetySourceKey(@NonNull String sourceId, @UserIdInt int userId) { + private SafetySourceKey(String sourceId, @UserIdInt int userId) { mSourceId = sourceId; mUserId = userId; } /** Creates a {@link SafetySourceKey} for the given {@code sourceId} and {@code userId}. */ - @NonNull - public static SafetySourceKey of(@NonNull String sourceId, @UserIdInt int userId) { + public static SafetySourceKey of(String sourceId, @UserIdInt int userId) { return new SafetySourceKey(sourceId, userId); } /** Returns the source id of this {@link SafetySourceKey}. */ - @NonNull public String getSourceId() { return mSourceId; } diff --git a/service/java/com/android/safetycenter/SafetySources.java b/service/java/com/android/safetycenter/SafetySources.java index 6f9eb356e..f0f1ac7d6 100644 --- a/service/java/com/android/safetycenter/SafetySources.java +++ b/service/java/com/android/safetycenter/SafetySources.java @@ -18,7 +18,6 @@ package com.android.safetycenter; import static android.os.Build.VERSION_CODES.TIRAMISU; -import android.annotation.NonNull; import android.safetycenter.SafetySourceData; import android.safetycenter.config.SafetySource; import android.util.Log; @@ -39,7 +38,7 @@ public final class SafetySources { * Returns whether a {@link SafetySource} is external, i.e. if {@link SafetySourceData} can be * provided for it. */ - public static boolean isExternal(@NonNull SafetySource safetySource) { + public static boolean isExternal(SafetySource safetySource) { int safetySourceType = safetySource.getType(); switch (safetySourceType) { case SafetySource.SAFETY_SOURCE_TYPE_STATIC: @@ -53,13 +52,13 @@ public final class SafetySources { } /** Returns whether a {@link SafetySource} is issue-only. */ - public static boolean isIssueOnly(@NonNull SafetySource safetySource) { + public static boolean isIssueOnly(SafetySource safetySource) { int safetySourceType = safetySource.getType(); return safetySourceType == SafetySource.SAFETY_SOURCE_TYPE_ISSUE_ONLY; } /** Returns whether a {@link SafetySource} supports managed profiles. */ - public static boolean supportsManagedProfiles(@NonNull SafetySource safetySource) { + public static boolean supportsManagedProfiles(SafetySource safetySource) { int safetySourceProfile = safetySource.getProfile(); switch (safetySourceProfile) { case SafetySource.PROFILE_PRIMARY: @@ -73,7 +72,7 @@ public final class SafetySources { } /** Returns whether a {@link SafetySource} default entry should be hidden in the UI. */ - static boolean isDefaultEntryHidden(@NonNull SafetySource safetySource) { + static boolean isDefaultEntryHidden(SafetySource safetySource) { int safetySourceType = safetySource.getType(); switch (safetySourceType) { case SafetySource.SAFETY_SOURCE_TYPE_STATIC: @@ -88,7 +87,7 @@ public final class SafetySources { } /** Returns whether a {@link SafetySource} default entry should be disabled in the UI. */ - static boolean isDefaultEntryDisabled(@NonNull SafetySource safetySource) { + static boolean isDefaultEntryDisabled(SafetySource safetySource) { int safetySourceType = safetySource.getType(); switch (safetySourceType) { case SafetySource.SAFETY_SOURCE_TYPE_STATIC: @@ -106,7 +105,7 @@ public final class SafetySources { * Returns whether a {@link SafetySource} can be logged, without requiring a check of source * type first. */ - public static boolean isLoggable(@NonNull SafetySource safetySource) { + public static boolean isLoggable(SafetySource safetySource) { // Only external sources can have logging allowed values. Non-external sources cannot have // their loggability configured. Unfortunately isLoggingAllowed throws if called on a // non-external source. diff --git a/service/java/com/android/safetycenter/SafetySourcesGroups.java b/service/java/com/android/safetycenter/SafetySourcesGroups.java index 7afdde9ec..5233302aa 100644 --- a/service/java/com/android/safetycenter/SafetySourcesGroups.java +++ b/service/java/com/android/safetycenter/SafetySourcesGroups.java @@ -18,7 +18,6 @@ package com.android.safetycenter; import static android.os.Build.VERSION_CODES.TIRAMISU; -import android.annotation.NonNull; import android.safetycenter.config.SafetySourcesGroup; import androidx.annotation.RequiresApi; @@ -33,9 +32,7 @@ final class SafetySourcesGroups { * Returns a builder with all fields of the original group copied other than {@link * SafetySourcesGroup#getSafetySources()}. */ - @NonNull - static SafetySourcesGroup.Builder copyToBuilderWithoutSources( - @NonNull SafetySourcesGroup group) { + static SafetySourcesGroup.Builder copyToBuilderWithoutSources(SafetySourcesGroup group) { SafetySourcesGroup.Builder safetySourcesGroupBuilder = new SafetySourcesGroup.Builder() .setId(group.getId()) diff --git a/service/java/com/android/safetycenter/UserProfileGroup.java b/service/java/com/android/safetycenter/UserProfileGroup.java index e4c3336a8..bb9a2f704 100644 --- a/service/java/com/android/safetycenter/UserProfileGroup.java +++ b/service/java/com/android/safetycenter/UserProfileGroup.java @@ -20,7 +20,6 @@ import static android.os.Build.VERSION_CODES.TIRAMISU; import static java.util.Objects.requireNonNull; -import android.annotation.NonNull; import android.annotation.UserIdInt; import android.content.Context; import android.content.pm.PackageManager; @@ -49,12 +48,12 @@ import java.util.Objects; public final class UserProfileGroup { @UserIdInt private final int mProfileParentUserId; - @NonNull private final int[] mManagedProfilesUserIds; - @NonNull private final int[] mManagedRunningProfilesUserIds; + private final int[] mManagedProfilesUserIds; + private final int[] mManagedRunningProfilesUserIds; private UserProfileGroup( @UserIdInt int profileParentUserId, - @NonNull int[] managedProfilesUserIds, + int[] managedProfilesUserIds, int[] managedRunningProfilesUserIds) { mProfileParentUserId = profileParentUserId; mManagedProfilesUserIds = managedProfilesUserIds; @@ -62,7 +61,7 @@ public final class UserProfileGroup { } /** Returns all the alive {@link UserProfileGroup}s. */ - public static List<UserProfileGroup> getAllUserProfileGroups(@NonNull Context context) { + public static List<UserProfileGroup> getAllUserProfileGroups(Context context) { List<UserProfileGroup> userProfileGroups = new ArrayList<>(); List<UserHandle> userHandles = UserUtils.getUserHandles(context); for (int i = 0; i < userHandles.size(); i++) { @@ -80,7 +79,7 @@ public final class UserProfileGroup { } private static boolean userProfileGroupsContain( - @NonNull List<UserProfileGroup> userProfileGroups, @UserIdInt int userId) { + List<UserProfileGroup> userProfileGroups, @UserIdInt int userId) { for (int i = 0; i < userProfileGroups.size(); i++) { UserProfileGroup userProfileGroup = userProfileGroups.get(i); @@ -98,7 +97,7 @@ public final class UserProfileGroup { * <p>The given {@code userId} could be related to the profile parent or any of its associated * managed profile(s). */ - public static UserProfileGroup from(@NonNull Context context, @UserIdInt int userId) { + public static UserProfileGroup from(Context context, @UserIdInt int userId) { UserManager userManager = getUserManagerForUser(userId, context); List<UserHandle> userProfiles = getEnabledUserProfiles(userManager); UserHandle profileParent = getProfileParent(userManager, userId); @@ -130,16 +129,12 @@ public final class UserProfileGroup { Arrays.copyOf(managedRunningProfilesUserIds, managedRunningProfilesUserIdsLen)); } - @NonNull - private static UserManager getUserManagerForUser( - @UserIdInt int userId, @NonNull Context context) { + private static UserManager getUserManagerForUser(@UserIdInt int userId, Context context) { Context userContext = getUserContext(context, UserHandle.of(userId)); return requireNonNull(userContext.getSystemService(UserManager.class)); } - @NonNull - private static Context getUserContext( - @NonNull Context context, @NonNull UserHandle userHandle) { + private static Context getUserContext(Context context, UserHandle userHandle) { if (Process.myUserHandle().equals(userHandle)) { return context; } else { @@ -151,8 +146,7 @@ public final class UserProfileGroup { } } - @NonNull - private static List<UserHandle> getEnabledUserProfiles(@NonNull UserManager userManager) { + private static List<UserHandle> getEnabledUserProfiles(UserManager userManager) { // This call requires the QUERY_USERS permission. final long callingId = Binder.clearCallingIdentity(); try { @@ -163,8 +157,7 @@ public final class UserProfileGroup { } @Nullable - private static UserHandle getProfileParent( - @NonNull UserManager userManager, @UserIdInt int userId) { + private static UserHandle getProfileParent(UserManager userManager, @UserIdInt int userId) { // This call requires the INTERACT_ACROSS_USERS permission. final long callingId = Binder.clearCallingIdentity(); try { diff --git a/service/java/com/android/safetycenter/data/SafetyCenterDataManager.java b/service/java/com/android/safetycenter/data/SafetyCenterDataManager.java index 9d9febaec..9f6ffc257 100644 --- a/service/java/com/android/safetycenter/data/SafetyCenterDataManager.java +++ b/service/java/com/android/safetycenter/data/SafetyCenterDataManager.java @@ -18,7 +18,6 @@ package com.android.safetycenter.data; import static android.os.Build.VERSION_CODES.TIRAMISU; -import android.annotation.NonNull; import android.annotation.Nullable; import android.annotation.UserIdInt; import android.content.Context; @@ -61,24 +60,22 @@ import javax.annotation.concurrent.NotThreadSafe; @NotThreadSafe public final class SafetyCenterDataManager { - @NonNull private final SafetySourceDataRepository mSafetySourceDataRepository; + private final SafetySourceDataRepository mSafetySourceDataRepository; - @NonNull private final SafetyCenterIssueDismissalRepository mSafetyCenterIssueDismissalRepository; - @NonNull private final SafetyCenterIssueRepository mSafetyCenterIssueRepository; + private final SafetyCenterIssueRepository mSafetyCenterIssueRepository; - @NonNull private final SafetyCenterInFlightIssueActionRepository mSafetyCenterInFlightIssueActionRepository; /** Creates an instance of {@link SafetyCenterDataManager}. */ public SafetyCenterDataManager( - @NonNull Context context, - @NonNull SafetyCenterConfigReader safetyCenterConfigReader, - @NonNull SafetyCenterRefreshTracker safetyCenterRefreshTracker, - @NonNull SafetyCenterStatsdLogger safetyCenterStatsdLogger, - @NonNull ApiLock apiLock) { + Context context, + SafetyCenterConfigReader safetyCenterConfigReader, + SafetyCenterRefreshTracker safetyCenterRefreshTracker, + SafetyCenterStatsdLogger safetyCenterStatsdLogger, + ApiLock apiLock) { mSafetyCenterInFlightIssueActionRepository = new SafetyCenterInFlightIssueActionRepository(safetyCenterStatsdLogger); mSafetyCenterIssueDismissalRepository = @@ -122,9 +119,9 @@ public final class SafetyCenterDataManager { */ public boolean setSafetySourceData( @Nullable SafetySourceData safetySourceData, - @NonNull String safetySourceId, - @NonNull SafetyEvent safetyEvent, - @NonNull String packageName, + String safetySourceId, + SafetyEvent safetyEvent, + String packageName, @UserIdInt int userId) { boolean dataUpdated = mSafetySourceDataRepository.setSafetySourceData( @@ -141,7 +138,7 @@ public final class SafetyCenterDataManager { * * <p>That issue's notification (if any) is also marked as dismissed. */ - public void dismissSafetyCenterIssue(@NonNull SafetyCenterIssueKey safetyCenterIssueKey) { + public void dismissSafetyCenterIssue(SafetyCenterIssueKey safetyCenterIssueKey) { mSafetyCenterIssueDismissalRepository.dismissIssue(safetyCenterIssueKey); mSafetyCenterIssueRepository.updateIssues(safetyCenterIssueKey.getUserId()); } @@ -152,7 +149,7 @@ public final class SafetyCenterDataManager { * <p>The issue itself is <strong>not</strong> marked as dismissed and its warning card can * still appear in the Safety Center UI. */ - public void dismissNotification(@NonNull SafetyCenterIssueKey safetyCenterIssueKey) { + public void dismissNotification(SafetyCenterIssueKey safetyCenterIssueKey) { mSafetyCenterIssueDismissalRepository.dismissNotification(safetyCenterIssueKey); mSafetyCenterIssueRepository.updateIssues(safetyCenterIssueKey.getUserId()); } @@ -166,9 +163,9 @@ public final class SafetyCenterDataManager { * safetySourceId}, {@code packageName} and/or {@code userId} are unexpected. */ public boolean reportSafetySourceError( - @NonNull SafetySourceErrorDetails safetySourceErrorDetails, - @NonNull String safetySourceId, - @NonNull String packageName, + SafetySourceErrorDetails safetySourceErrorDetails, + String safetySourceId, + String packageName, @UserIdInt int userId) { boolean dataUpdated = mSafetySourceDataRepository.reportSafetySourceError( @@ -184,7 +181,7 @@ public final class SafetyCenterDataManager { * Marks the given {@link SafetySourceKey} as having errored-out and returns whether there was a * change to the underlying {@link SafetyCenterData}. */ - public boolean setSafetySourceError(@NonNull SafetySourceKey safetySourceKey) { + public boolean setSafetySourceError(SafetySourceKey safetySourceKey) { boolean dataUpdated = mSafetySourceDataRepository.setSafetySourceError(safetySourceKey); if (dataUpdated) { mSafetyCenterIssueRepository.updateIssues(safetySourceKey.getUserId()); @@ -197,14 +194,14 @@ public final class SafetyCenterDataManager { * Clears all safety source errors received so far for the given {@link UserProfileGroup}, this * is useful e.g. when starting a new broadcast. */ - public void clearSafetySourceErrors(@NonNull UserProfileGroup userProfileGroup) { + public void clearSafetySourceErrors(UserProfileGroup userProfileGroup) { mSafetySourceDataRepository.clearSafetySourceErrors(userProfileGroup); mSafetyCenterIssueRepository.updateIssues(userProfileGroup); } /** Marks the given {@link SafetyCenterIssueActionId} as in-flight. */ public void markSafetyCenterIssueActionInFlight( - @NonNull SafetyCenterIssueActionId safetyCenterIssueActionId) { + SafetyCenterIssueActionId safetyCenterIssueActionId) { mSafetyCenterInFlightIssueActionRepository.markSafetyCenterIssueActionInFlight( safetyCenterIssueActionId); mSafetyCenterIssueRepository.updateIssues( @@ -217,8 +214,8 @@ public final class SafetyCenterDataManager { * SafetyCenterData} changed. */ public boolean unmarkSafetyCenterIssueActionInFlight( - @NonNull SafetyCenterIssueActionId safetyCenterIssueActionId, - @NonNull SafetySourceIssue safetySourceIssue, + SafetyCenterIssueActionId safetyCenterIssueActionId, + SafetySourceIssue safetySourceIssue, @SafetyCenterStatsdLogger.SystemEventResult int result) { boolean dataUpdated = mSafetyCenterInFlightIssueActionRepository.unmarkSafetyCenterIssueActionInFlight( @@ -261,7 +258,7 @@ public final class SafetyCenterDataManager { * <p>If the given issue key is not found in the repository this method returns {@code false}. */ public boolean isIssueDismissed( - @NonNull SafetyCenterIssueKey safetyCenterIssueKey, + SafetyCenterIssueKey safetyCenterIssueKey, @SafetySourceData.SeverityLevel int safetySourceIssueSeverityLevel) { return mSafetyCenterIssueDismissalRepository.isIssueDismissed( safetyCenterIssueKey, safetySourceIssueSeverityLevel); @@ -272,7 +269,7 @@ public final class SafetyCenterDataManager { * dismissed. */ @Nullable - public Instant getNotificationDismissedAt(@NonNull SafetyCenterIssueKey safetyCenterIssueKey) { + public Instant getNotificationDismissedAt(SafetyCenterIssueKey safetyCenterIssueKey) { return mSafetyCenterIssueDismissalRepository.getNotificationDismissedAt( safetyCenterIssueKey); } @@ -291,7 +288,7 @@ public final class SafetyCenterDataManager { * Center. */ @Nullable - public Instant getIssueFirstSeenAt(@NonNull SafetyCenterIssueKey safetyCenterIssueKey) { + public Instant getIssueFirstSeenAt(SafetyCenterIssueKey safetyCenterIssueKey) { return mSafetyCenterIssueDismissalRepository.getIssueFirstSeenAt(safetyCenterIssueKey); } @@ -308,9 +305,8 @@ public final class SafetyCenterDataManager { * <p>Only includes issues related to active/running {@code userId}s in the given {@link * UserProfileGroup}. */ - @NonNull public List<SafetySourceIssueInfo> getIssuesDedupedSortedDescFor( - @NonNull UserProfileGroup userProfileGroup) { + UserProfileGroup userProfileGroup) { return mSafetyCenterIssueRepository.getIssuesDedupedSortedDescFor(userProfileGroup); } @@ -321,12 +317,11 @@ public final class SafetyCenterDataManager { * <p>Only includes issues related to active/running {@code userId}s in the given {@link * UserProfileGroup}. */ - public int countLoggableIssuesFor(@NonNull UserProfileGroup userProfileGroup) { + public int countLoggableIssuesFor(UserProfileGroup userProfileGroup) { return mSafetyCenterIssueRepository.countLoggableIssuesFor(userProfileGroup); } /** Gets an unmodifiable list of all issues for the given {@code userId}. */ - @NonNull public List<SafetySourceIssueInfo> getIssuesForUser(@UserIdInt int userId) { return mSafetyCenterIssueRepository.getIssuesForUser(userId); } @@ -336,7 +331,7 @@ public final class SafetyCenterDataManager { /////////////////////////////////////////////////////////////////////////////////////////////// /** Returns {@code true} if the given issue action is in flight. */ - public boolean actionIsInFlight(@NonNull SafetyCenterIssueActionId safetyCenterIssueActionId) { + public boolean actionIsInFlight(SafetyCenterIssueActionId safetyCenterIssueActionId) { return mSafetyCenterInFlightIssueActionRepository.actionIsInFlight( safetyCenterIssueActionId); } @@ -357,7 +352,7 @@ public final class SafetyCenterDataManager { */ @Nullable public SafetySourceData getSafetySourceData( - @NonNull String safetySourceId, @NonNull String packageName, @UserIdInt int userId) { + String safetySourceId, String packageName, @UserIdInt int userId) { return mSafetySourceDataRepository.getSafetySourceData(safetySourceId, packageName, userId); } @@ -372,12 +367,12 @@ public final class SafetyCenterDataManager { * {@link #setSafetySourceData} with a {@code null} value. */ @Nullable - public SafetySourceData getSafetySourceDataInternal(@NonNull SafetySourceKey safetySourceKey) { + public SafetySourceData getSafetySourceDataInternal(SafetySourceKey safetySourceKey) { return mSafetySourceDataRepository.getSafetySourceDataInternal(safetySourceKey); } /** Returns {@code true} if the given source has an error. */ - public boolean sourceHasError(@NonNull SafetySourceKey safetySourceKey) { + public boolean sourceHasError(SafetySourceKey safetySourceKey) { return mSafetySourceDataRepository.sourceHasError(safetySourceKey); } @@ -388,8 +383,7 @@ public final class SafetyCenterDataManager { * dismissed. */ @Nullable - public SafetySourceIssue getSafetySourceIssue( - @NonNull SafetyCenterIssueKey safetyCenterIssueKey) { + public SafetySourceIssue getSafetySourceIssue(SafetyCenterIssueKey safetyCenterIssueKey) { return mSafetySourceDataRepository.getSafetySourceIssue(safetyCenterIssueKey); } @@ -404,7 +398,7 @@ public final class SafetyCenterDataManager { */ @Nullable public SafetySourceIssue.Action getSafetySourceIssueAction( - @NonNull SafetyCenterIssueActionId safetyCenterIssueActionId) { + SafetyCenterIssueActionId safetyCenterIssueActionId) { return mSafetySourceDataRepository.getSafetySourceIssueAction(safetyCenterIssueActionId); } @@ -413,7 +407,7 @@ public final class SafetyCenterDataManager { /////////////////////////////////////////////////////////////////////////////////////////////// /** Dumps state for debugging purposes. */ - public void dump(@NonNull FileDescriptor fd, @NonNull PrintWriter fout) { + public void dump(FileDescriptor fd, PrintWriter fout) { mSafetySourceDataRepository.dump(fout); mSafetyCenterIssueDismissalRepository.dump(fd, fout); mSafetyCenterInFlightIssueActionRepository.dump(fout); diff --git a/service/java/com/android/safetycenter/data/SafetyCenterInFlightIssueActionRepository.java b/service/java/com/android/safetycenter/data/SafetyCenterInFlightIssueActionRepository.java index cf5c894fa..be740ebaa 100644 --- a/service/java/com/android/safetycenter/data/SafetyCenterInFlightIssueActionRepository.java +++ b/service/java/com/android/safetycenter/data/SafetyCenterInFlightIssueActionRepository.java @@ -20,7 +20,6 @@ import static android.os.Build.VERSION_CODES.TIRAMISU; import static com.android.safetycenter.internaldata.SafetyCenterIds.toUserFriendlyString; -import android.annotation.NonNull; import android.annotation.Nullable; import android.annotation.UserIdInt; import android.os.SystemClock; @@ -48,20 +47,18 @@ final class SafetyCenterInFlightIssueActionRepository { private static final String TAG = "SafetyCenterInFlight"; - @NonNull private final SafetyCenterStatsdLogger mSafetyCenterStatsdLogger; + private final SafetyCenterStatsdLogger mSafetyCenterStatsdLogger; private final ArrayMap<SafetyCenterIssueActionId, Long> mSafetyCenterIssueActionsInFlight = new ArrayMap<>(); /** Constructs a new instance of {@link SafetyCenterInFlightIssueActionRepository}. */ - SafetyCenterInFlightIssueActionRepository( - @NonNull SafetyCenterStatsdLogger safetyCenterStatsdLogger) { + SafetyCenterInFlightIssueActionRepository(SafetyCenterStatsdLogger safetyCenterStatsdLogger) { mSafetyCenterStatsdLogger = safetyCenterStatsdLogger; } /** Marks the given {@link SafetyCenterIssueActionId} as in-flight. */ - void markSafetyCenterIssueActionInFlight( - @NonNull SafetyCenterIssueActionId safetyCenterIssueActionId) { + void markSafetyCenterIssueActionInFlight(SafetyCenterIssueActionId safetyCenterIssueActionId) { mSafetyCenterIssueActionsInFlight.put( safetyCenterIssueActionId, SystemClock.elapsedRealtime()); } @@ -72,8 +69,8 @@ final class SafetyCenterInFlightIssueActionRepository { * SafetyCenterData} changed. */ boolean unmarkSafetyCenterIssueActionInFlight( - @NonNull SafetyCenterIssueActionId safetyCenterIssueActionId, - @NonNull SafetySourceIssue safetySourceIssue, + SafetyCenterIssueActionId safetyCenterIssueActionId, + SafetySourceIssue safetySourceIssue, @SafetyCenterStatsdLogger.SystemEventResult int result) { Long startElapsedMillis = mSafetyCenterIssueActionsInFlight.remove(safetyCenterIssueActionId); @@ -106,7 +103,7 @@ final class SafetyCenterInFlightIssueActionRepository { } /** Returns {@code true} if the given issue action is in flight. */ - boolean actionIsInFlight(@NonNull SafetyCenterIssueActionId safetyCenterIssueActionId) { + boolean actionIsInFlight(SafetyCenterIssueActionId safetyCenterIssueActionId) { return mSafetyCenterIssueActionsInFlight.containsKey(safetyCenterIssueActionId); } @@ -116,8 +113,8 @@ final class SafetyCenterInFlightIssueActionRepository { */ @Nullable SafetySourceIssue.Action getSafetySourceIssueAction( - @NonNull SafetyCenterIssueActionId safetyCenterIssueActionId, - @NonNull SafetySourceIssue safetySourceIssue) { + SafetyCenterIssueActionId safetyCenterIssueActionId, + SafetySourceIssue safetySourceIssue) { if (actionIsInFlight(safetyCenterIssueActionId)) { return null; } @@ -137,7 +134,7 @@ final class SafetyCenterInFlightIssueActionRepository { } /** Dumps in-flight action data for debugging purposes. */ - void dump(@NonNull PrintWriter fout) { + void dump(PrintWriter fout) { int actionInFlightCount = mSafetyCenterIssueActionsInFlight.size(); fout.println("ACTIONS IN FLIGHT (" + actionInFlightCount + ")"); for (int i = 0; i < actionInFlightCount; i++) { diff --git a/service/java/com/android/safetycenter/data/SafetyCenterIssueDeduplicator.java b/service/java/com/android/safetycenter/data/SafetyCenterIssueDeduplicator.java index 51b356778..3323dac95 100644 --- a/service/java/com/android/safetycenter/data/SafetyCenterIssueDeduplicator.java +++ b/service/java/com/android/safetycenter/data/SafetyCenterIssueDeduplicator.java @@ -18,7 +18,6 @@ package com.android.safetycenter.data; import static android.os.Build.VERSION_CODES.UPSIDE_DOWN_CAKE; -import android.annotation.NonNull; import android.annotation.Nullable; import android.annotation.UserIdInt; import android.util.ArrayMap; @@ -41,11 +40,10 @@ import javax.annotation.concurrent.NotThreadSafe; @NotThreadSafe final class SafetyCenterIssueDeduplicator { - @NonNull private final SafetyCenterIssueDismissalRepository mSafetyCenterIssueDismissalRepository; SafetyCenterIssueDeduplicator( - @NonNull SafetyCenterIssueDismissalRepository safetyCenterIssueDismissalRepository) { + SafetyCenterIssueDismissalRepository safetyCenterIssueDismissalRepository) { this.mSafetyCenterIssueDismissalRepository = safetyCenterIssueDismissalRepository; } @@ -61,7 +59,7 @@ final class SafetyCenterIssueDeduplicator { * * <p>This method modifies the given argument. */ - void deduplicateIssues(@NonNull List<SafetySourceIssueInfo> sortedIssues) { + void deduplicateIssues(List<SafetySourceIssueInfo> sortedIssues) { // (dedup key) -> list(issues) ArrayMap<DeduplicationKey, List<SafetySourceIssueInfo>> dedupBuckets = createDedupBuckets(sortedIssues); @@ -85,7 +83,7 @@ final class SafetyCenterIssueDeduplicator { * equal or lower severity (not priority). */ private void dismissDuplicateIssuesOfDismissedIssue( - @NonNull ArrayMap<DeduplicationKey, List<SafetySourceIssueInfo>> dedupBuckets) { + ArrayMap<DeduplicationKey, List<SafetySourceIssueInfo>> dedupBuckets) { for (int i = 0; i < dedupBuckets.size(); i++) { List<SafetySourceIssueInfo> duplicates = dedupBuckets.valueAt(i); SafetySourceIssueInfo topDismissed = getHighestPriorityDismissedIssue(duplicates); @@ -98,8 +96,7 @@ final class SafetyCenterIssueDeduplicator { * the bucket. */ private void alignDismissalsDataWithinBucket( - @Nullable SafetySourceIssueInfo topDismissed, - @NonNull List<SafetySourceIssueInfo> duplicates) { + @Nullable SafetySourceIssueInfo topDismissed, List<SafetySourceIssueInfo> duplicates) { if (topDismissed == null) { return; } @@ -120,7 +117,7 @@ final class SafetyCenterIssueDeduplicator { @Nullable private SafetySourceIssueInfo getHighestPriorityDismissedIssue( - @NonNull List<SafetySourceIssueInfo> duplicates) { + List<SafetySourceIssueInfo> duplicates) { for (int i = 0; i < duplicates.size(); i++) { SafetySourceIssueInfo issueInfo = duplicates.get(i); if (mSafetyCenterIssueDismissalRepository.isIssueDismissed( @@ -134,9 +131,8 @@ final class SafetyCenterIssueDeduplicator { } /** Returns a set of duplicate issues that need to be filtered out. */ - @NonNull private static ArraySet<SafetyCenterIssueKey> getDuplicatesToFilterOut( - @NonNull ArrayMap<DeduplicationKey, List<SafetySourceIssueInfo>> dedupBuckets) { + ArrayMap<DeduplicationKey, List<SafetySourceIssueInfo>> dedupBuckets) { ArraySet<SafetyCenterIssueKey> duplicatesToFilterOut = new ArraySet<>(); for (int i = 0; i < dedupBuckets.size(); i++) { @@ -151,9 +147,8 @@ final class SafetyCenterIssueDeduplicator { } /** Returns a mapping (dedup key) -> list(issues). */ - @NonNull private static ArrayMap<DeduplicationKey, List<SafetySourceIssueInfo>> createDedupBuckets( - @NonNull List<SafetySourceIssueInfo> sortedIssues) { + List<SafetySourceIssueInfo> sortedIssues) { ArrayMap<DeduplicationKey, List<SafetySourceIssueInfo>> dedupBuckets = new ArrayMap<>(); for (int i = 0; i < sortedIssues.size(); i++) { @@ -176,7 +171,7 @@ final class SafetyCenterIssueDeduplicator { /** Returns deduplication key of the given {@code issueInfo}. */ @Nullable - private static DeduplicationKey getDedupKey(@NonNull SafetySourceIssueInfo issueInfo) { + private static DeduplicationKey getDedupKey(SafetySourceIssueInfo issueInfo) { String deduplicationGroup = issueInfo.getSafetySource().getDeduplicationGroup(); String deduplicationId = issueInfo.getSafetySourceIssue().getDeduplicationId(); @@ -191,14 +186,12 @@ final class SafetyCenterIssueDeduplicator { private static class DeduplicationKey { - @NonNull private final String mDeduplicationGroup; - @NonNull private final String mDeduplicationId; + private final String mDeduplicationGroup; + private final String mDeduplicationId; private final int mUserId; private DeduplicationKey( - @NonNull String deduplicationGroup, - @NonNull String deduplicationId, - @UserIdInt int userId) { + String deduplicationGroup, String deduplicationId, @UserIdInt int userId) { mDeduplicationGroup = deduplicationGroup; mDeduplicationId = deduplicationId; mUserId = userId; diff --git a/service/java/com/android/safetycenter/data/SafetyCenterIssueDismissalRepository.java b/service/java/com/android/safetycenter/data/SafetyCenterIssueDismissalRepository.java index d4c67f3f7..65b7635a2 100644 --- a/service/java/com/android/safetycenter/data/SafetyCenterIssueDismissalRepository.java +++ b/service/java/com/android/safetycenter/data/SafetyCenterIssueDismissalRepository.java @@ -20,7 +20,6 @@ import static android.os.Build.VERSION_CODES.TIRAMISU; import static com.android.safetycenter.internaldata.SafetyCenterIds.toUserFriendlyString; -import android.annotation.NonNull; import android.annotation.Nullable; import android.annotation.UserIdInt; import android.annotation.WorkerThread; @@ -84,15 +83,15 @@ final class SafetyCenterIssueDismissalRepository { private final Handler mWriteHandler = BackgroundThread.getHandler(); - @NonNull private final ApiLock mApiLock; + private final ApiLock mApiLock; - @NonNull private final SafetyCenterConfigReader mSafetyCenterConfigReader; + private final SafetyCenterConfigReader mSafetyCenterConfigReader; private final ArrayMap<SafetyCenterIssueKey, IssueData> mIssues = new ArrayMap<>(); private boolean mWriteStateToFileScheduled = false; SafetyCenterIssueDismissalRepository( - @NonNull ApiLock apiLock, @NonNull SafetyCenterConfigReader safetyCenterConfigReader) { + ApiLock apiLock, SafetyCenterConfigReader safetyCenterConfigReader) { mApiLock = apiLock; mSafetyCenterConfigReader = safetyCenterConfigReader; } @@ -107,7 +106,7 @@ final class SafetyCenterIssueDismissalRepository { * <p>If the given issue key is not found in the repository this method returns {@code false}. */ boolean isIssueDismissed( - @NonNull SafetyCenterIssueKey safetyCenterIssueKey, + SafetyCenterIssueKey safetyCenterIssueKey, @SafetySourceData.SeverityLevel int safetySourceIssueSeverityLevel) { IssueData issueData = getOrWarn(safetyCenterIssueKey, "checking if dismissed"); if (issueData == null) { @@ -143,7 +142,7 @@ final class SafetyCenterIssueDismissalRepository { * * <p>That issue's notification (if any) is also marked as dismissed. */ - void dismissIssue(@NonNull SafetyCenterIssueKey safetyCenterIssueKey) { + void dismissIssue(SafetyCenterIssueKey safetyCenterIssueKey) { IssueData issueData = getOrWarn(safetyCenterIssueKey, "dismissing"); if (issueData == null) { return; @@ -161,8 +160,7 @@ final class SafetyCenterIssueDismissalRepository { * <p>This will align dismissal state of these issues, unless issues are of different * severities, in which case they can potentially differ in resurface times. */ - void copyDismissalData( - @NonNull SafetyCenterIssueKey keyFrom, @NonNull SafetyCenterIssueKey keyTo) { + void copyDismissalData(SafetyCenterIssueKey keyFrom, SafetyCenterIssueKey keyTo) { IssueData dataFrom = getOrWarn(keyFrom, "copying dismissed data"); IssueData dataTo = getOrWarn(keyTo, "copying dismissed data"); if (dataFrom == null || dataTo == null) { @@ -180,7 +178,7 @@ final class SafetyCenterIssueDismissalRepository { * <p>The issue itself is <strong>not</strong> marked as dismissed and its warning card can * still appear in the Safety Center UI. */ - void dismissNotification(@NonNull SafetyCenterIssueKey safetyCenterIssueKey) { + void dismissNotification(SafetyCenterIssueKey safetyCenterIssueKey) { IssueData issueData = getOrWarn(safetyCenterIssueKey, "dismissing notification"); if (issueData == null) { return; @@ -194,7 +192,7 @@ final class SafetyCenterIssueDismissalRepository { * Center. */ @Nullable - Instant getIssueFirstSeenAt(@NonNull SafetyCenterIssueKey safetyCenterIssueKey) { + Instant getIssueFirstSeenAt(SafetyCenterIssueKey safetyCenterIssueKey) { IssueData issueData = getOrWarn(safetyCenterIssueKey, "getting first seen"); if (issueData == null) { return null; @@ -208,7 +206,7 @@ final class SafetyCenterIssueDismissalRepository { */ // TODO(b/261429824): Handle mNotificationDismissedAt w.r.t. issue deduplication @Nullable - Instant getNotificationDismissedAt(@NonNull SafetyCenterIssueKey safetyCenterIssueKey) { + Instant getNotificationDismissedAt(SafetyCenterIssueKey safetyCenterIssueKey) { IssueData issueData = getOrWarn(safetyCenterIssueKey, "getting notification dismissed"); if (issueData == null) { return null; @@ -221,9 +219,7 @@ final class SafetyCenterIssueDismissalRepository { * the supplied source and user. */ void updateIssuesForSource( - @NonNull ArraySet<String> safetySourceIssueIds, - @NonNull String safetySourceId, - @UserIdInt int userId) { + ArraySet<String> safetySourceIssueIds, String safetySourceId, @UserIdInt int userId) { boolean someDataChanged = false; // Remove issues no longer reported by the source. @@ -263,7 +259,6 @@ final class SafetyCenterIssueDismissalRepository { } /** Takes a snapshot of the contents of the repository to be written to persistent storage. */ - @NonNull private List<PersistedSafetyCenterIssue> snapshot() { List<PersistedSafetyCenterIssue> persistedIssues = new ArrayList<>(); for (int i = 0; i < mIssues.size(); i++) { @@ -277,7 +272,7 @@ final class SafetyCenterIssueDismissalRepository { /** * Replaces the contents of the repository with the given issues read from persistent storage. */ - private void load(@NonNull List<PersistedSafetyCenterIssue> persistedSafetyCenterIssues) { + private void load(List<PersistedSafetyCenterIssue> persistedSafetyCenterIssues) { boolean someDataChanged = false; mIssues.clear(); for (int i = 0; i < persistedSafetyCenterIssues.size(); i++) { @@ -323,7 +318,7 @@ final class SafetyCenterIssueDismissalRepository { } /** Dumps state for debugging purposes. */ - void dump(@NonNull FileDescriptor fd, @NonNull PrintWriter fout) { + void dump(FileDescriptor fd, PrintWriter fout) { int issueRepositoryCount = mIssues.size(); fout.println( "ISSUE DISMISSAL REPOSITORY (" @@ -354,7 +349,7 @@ final class SafetyCenterIssueDismissalRepository { } @Nullable - private IssueData getOrWarn(@NonNull SafetyCenterIssueKey issueKey, @NonNull String reason) { + private IssueData getOrWarn(SafetyCenterIssueKey issueKey, String reason) { IssueData issueData = mIssues.get(issueKey); if (issueData == null) { Log.w( @@ -408,7 +403,6 @@ final class SafetyCenterIssueDismissalRepository { scheduleWriteStateToFile(); } - @NonNull private static File getIssueDismissalRepositoryFile() { ApexEnvironment apexEnvironment = ApexEnvironment.getApexEnvironment(APEX_MODULE_NAME); File dataDirectory = apexEnvironment.getDeviceProtectedDataDir(); @@ -422,9 +416,7 @@ final class SafetyCenterIssueDismissalRepository { */ private static final class IssueData { - @NonNull - private static IssueData fromPersistedIssue( - @NonNull PersistedSafetyCenterIssue persistedIssue) { + private static IssueData fromPersistedIssue(PersistedSafetyCenterIssue persistedIssue) { IssueData issueData = new IssueData(persistedIssue.getFirstSeenAt()); issueData.setDismissedAt(persistedIssue.getDismissedAt()); issueData.setDismissCount(persistedIssue.getDismissCount()); @@ -432,18 +424,17 @@ final class SafetyCenterIssueDismissalRepository { return issueData; } - @NonNull private final Instant mFirstSeenAt; + private final Instant mFirstSeenAt; @Nullable private Instant mDismissedAt; private int mDismissCount; @Nullable private Instant mNotificationDismissedAt; - private IssueData(@NonNull Instant firstSeenAt) { + private IssueData(Instant firstSeenAt) { mFirstSeenAt = firstSeenAt; } - @NonNull private Instant getFirstSeenAt() { return mFirstSeenAt; } @@ -474,7 +465,6 @@ final class SafetyCenterIssueDismissalRepository { mNotificationDismissedAt = notificationDismissedAt; } - @NonNull private PersistedSafetyCenterIssue.Builder toPersistedIssueBuilder() { return new PersistedSafetyCenterIssue.Builder() .setFirstSeenAt(mFirstSeenAt) diff --git a/service/java/com/android/safetycenter/data/SafetyCenterIssueRepository.java b/service/java/com/android/safetycenter/data/SafetyCenterIssueRepository.java index 55c7297f4..aa2feebf9 100644 --- a/service/java/com/android/safetycenter/data/SafetyCenterIssueRepository.java +++ b/service/java/com/android/safetycenter/data/SafetyCenterIssueRepository.java @@ -21,7 +21,6 @@ import static android.os.Build.VERSION_CODES.TIRAMISU; import static java.util.Collections.emptyList; import static java.util.Collections.unmodifiableList; -import android.annotation.NonNull; import android.annotation.Nullable; import android.annotation.UserIdInt; import android.content.Context; @@ -61,9 +60,9 @@ final class SafetyCenterIssueRepository { SAFETY_SOURCE_ISSUES_INFO_BY_SEVERITY_DESCENDING = new SafetySourceIssuesInfoBySeverityDescending(); - @NonNull private final Context mContext; - @NonNull private final SafetySourceDataRepository mSafetySourceDataRepository; - @NonNull private final SafetyCenterConfigReader mSafetyCenterConfigReader; + private final Context mContext; + private final SafetySourceDataRepository mSafetySourceDataRepository; + private final SafetyCenterConfigReader mSafetyCenterConfigReader; // Only available on Android U+. @Nullable private final SafetyCenterIssueDeduplicator mSafetyCenterIssueDeduplicator; @@ -73,9 +72,9 @@ final class SafetyCenterIssueRepository { new SparseArray<>(); SafetyCenterIssueRepository( - @NonNull Context context, - @NonNull SafetySourceDataRepository safetySourceDataRepository, - @NonNull SafetyCenterConfigReader safetyCenterConfigReader, + Context context, + SafetySourceDataRepository safetySourceDataRepository, + SafetyCenterConfigReader safetyCenterConfigReader, @Nullable SafetyCenterIssueDeduplicator safetyCenterIssueDeduplicator) { mContext = context; mSafetySourceDataRepository = safetySourceDataRepository; @@ -87,7 +86,7 @@ final class SafetyCenterIssueRepository { * Updates the class as per the current state of issues. Should be called after any state update * that can affect issues. */ - void updateIssues(@NonNull UserProfileGroup userProfileGroup) { + void updateIssues(UserProfileGroup userProfileGroup) { updateIssues(userProfileGroup.getProfileParentUserId(), /* isManagedProfile= */ false); int[] managedProfileUserIds = userProfileGroup.getManagedProfilesUserIds(); @@ -120,9 +119,7 @@ final class SafetyCenterIssueRepository { * <p>Only includes issues related to active/running {@code userId}s in the given {@link * UserProfileGroup}. */ - @NonNull - List<SafetySourceIssueInfo> getIssuesDedupedSortedDescFor( - @NonNull UserProfileGroup userProfileGroup) { + List<SafetySourceIssueInfo> getIssuesDedupedSortedDescFor(UserProfileGroup userProfileGroup) { List<SafetySourceIssueInfo> issuesInfo = getIssuesFor(userProfileGroup); issuesInfo.sort(SAFETY_SOURCE_ISSUES_INFO_BY_SEVERITY_DESCENDING); return issuesInfo; @@ -135,7 +132,7 @@ final class SafetyCenterIssueRepository { * <p>Only includes issues related to active/running {@code userId}s in the given {@link * UserProfileGroup}. */ - int countLoggableIssuesFor(@NonNull UserProfileGroup userProfileGroup) { + int countLoggableIssuesFor(UserProfileGroup userProfileGroup) { List<SafetySourceIssueInfo> relevantIssues = getIssuesFor(userProfileGroup); int issueCount = 0; for (int i = 0; i < relevantIssues.size(); i++) { @@ -148,12 +145,11 @@ final class SafetyCenterIssueRepository { } /** Gets an unmodifiable list of all issues for the given {@code userId}. */ - @NonNull List<SafetySourceIssueInfo> getIssuesForUser(@UserIdInt int userId) { return mUserIdToIssuesInfo.get(userId, emptyList()); } - private void processIssues(@NonNull List<SafetySourceIssueInfo> issuesInfo) { + private void processIssues(List<SafetySourceIssueInfo> issuesInfo) { issuesInfo.sort(SAFETY_SOURCE_ISSUES_INFO_BY_SEVERITY_DESCENDING); if (SdkLevel.isAtLeastU() && mSafetyCenterIssueDeduplicator != null) { @@ -161,7 +157,6 @@ final class SafetyCenterIssueRepository { } } - @NonNull private List<SafetySourceIssueInfo> getAllStoredIssuesFromRawSourceData( @UserIdInt int userId, boolean isManagedProfile) { List<SafetySourceIssueInfo> allIssuesInfo = new ArrayList<>(); @@ -177,8 +172,8 @@ final class SafetyCenterIssueRepository { } private void addSafetySourceIssuesInfo( - @NonNull List<SafetySourceIssueInfo> issuesInfo, - @NonNull SafetySourcesGroup safetySourcesGroup, + List<SafetySourceIssueInfo> issuesInfo, + SafetySourcesGroup safetySourcesGroup, @UserIdInt int userId, boolean isManagedProfile) { List<SafetySource> safetySources = safetySourcesGroup.getSafetySources(); @@ -197,9 +192,9 @@ final class SafetyCenterIssueRepository { } private void addSafetySourceIssuesInfo( - @NonNull List<SafetySourceIssueInfo> issuesInfo, - @NonNull SafetySource safetySource, - @NonNull SafetySourcesGroup safetySourcesGroup, + List<SafetySourceIssueInfo> issuesInfo, + SafetySource safetySource, + SafetySourcesGroup safetySourcesGroup, @UserIdInt int userId) { SafetySourceKey key = SafetySourceKey.of(safetySource.getId(), userId); SafetySourceData safetySourceData = @@ -224,8 +219,7 @@ final class SafetyCenterIssueRepository { * Only includes issues related to active/running {@code userId}s in the given {@link * UserProfileGroup}. */ - @NonNull - private List<SafetySourceIssueInfo> getIssuesFor(@NonNull UserProfileGroup userProfileGroup) { + private List<SafetySourceIssueInfo> getIssuesFor(UserProfileGroup userProfileGroup) { List<SafetySourceIssueInfo> issues = new ArrayList<>(getIssuesForUser(userProfileGroup.getProfileParentUserId())); @@ -244,8 +238,7 @@ final class SafetyCenterIssueRepository { private SafetySourceIssuesInfoBySeverityDescending() {} @Override - public int compare( - @NonNull SafetySourceIssueInfo left, @NonNull SafetySourceIssueInfo right) { + public int compare(SafetySourceIssueInfo left, SafetySourceIssueInfo right) { return Integer.compare( right.getSafetySourceIssue().getSeverityLevel(), left.getSafetySourceIssue().getSeverityLevel()); @@ -253,7 +246,7 @@ final class SafetyCenterIssueRepository { } /** Dumps state for debugging purposes. */ - void dump(@NonNull PrintWriter fout) { + void dump(PrintWriter fout) { fout.println("ISSUE REPOSITORY"); for (int i = 0; i < mUserIdToIssuesInfo.size(); i++) { List<SafetySourceIssueInfo> issues = mUserIdToIssuesInfo.valueAt(i); diff --git a/service/java/com/android/safetycenter/data/SafetySourceDataRepository.java b/service/java/com/android/safetycenter/data/SafetySourceDataRepository.java index e2b2cc6a7..bf54d9de6 100644 --- a/service/java/com/android/safetycenter/data/SafetySourceDataRepository.java +++ b/service/java/com/android/safetycenter/data/SafetySourceDataRepository.java @@ -20,7 +20,6 @@ import static android.os.Build.VERSION_CODES.TIRAMISU; import static com.android.safetycenter.logging.SafetyCenterStatsdLogger.toSystemEventResult; -import android.annotation.NonNull; import android.annotation.Nullable; import android.annotation.UserIdInt; import android.content.Context; @@ -75,27 +74,23 @@ final class SafetySourceDataRepository { private final ArraySet<SafetySourceKey> mSafetySourceErrors = new ArraySet<>(); - @NonNull private final Context mContext; - @NonNull private final SafetyCenterConfigReader mSafetyCenterConfigReader; - @NonNull private final SafetyCenterRefreshTracker mSafetyCenterRefreshTracker; + private final Context mContext; + private final SafetyCenterConfigReader mSafetyCenterConfigReader; + private final SafetyCenterRefreshTracker mSafetyCenterRefreshTracker; - @NonNull private final SafetyCenterInFlightIssueActionRepository mSafetyCenterInFlightIssueActionRepository; - @NonNull private final SafetyCenterIssueDismissalRepository mSafetyCenterIssueDismissalRepository; - @NonNull private final PackageManager mPackageManager; + private final PackageManager mPackageManager; SafetySourceDataRepository( - @NonNull Context context, - @NonNull SafetyCenterConfigReader safetyCenterConfigReader, - @NonNull SafetyCenterRefreshTracker safetyCenterRefreshTracker, - @NonNull - SafetyCenterInFlightIssueActionRepository - safetyCenterInFlightIssueActionRepository, - @NonNull SafetyCenterIssueDismissalRepository safetyCenterIssueDismissalRepository) { + Context context, + SafetyCenterConfigReader safetyCenterConfigReader, + SafetyCenterRefreshTracker safetyCenterRefreshTracker, + SafetyCenterInFlightIssueActionRepository safetyCenterInFlightIssueActionRepository, + SafetyCenterIssueDismissalRepository safetyCenterIssueDismissalRepository) { mContext = context; mSafetyCenterConfigReader = safetyCenterConfigReader; mSafetyCenterRefreshTracker = safetyCenterRefreshTracker; @@ -121,9 +116,9 @@ final class SafetySourceDataRepository { */ boolean setSafetySourceData( @Nullable SafetySourceData safetySourceData, - @NonNull String safetySourceId, - @NonNull SafetyEvent safetyEvent, - @NonNull String packageName, + String safetySourceId, + SafetyEvent safetyEvent, + String packageName, @UserIdInt int userId) { if (!validateRequest(safetySourceData, safetySourceId, packageName, userId)) { return false; @@ -166,7 +161,7 @@ final class SafetySourceDataRepository { */ @Nullable SafetySourceData getSafetySourceData( - @NonNull String safetySourceId, @NonNull String packageName, @UserIdInt int userId) { + String safetySourceId, String packageName, @UserIdInt int userId) { if (!validateRequest(null, safetySourceId, packageName, userId)) { return null; } @@ -184,7 +179,7 @@ final class SafetySourceDataRepository { * {@link #setSafetySourceData} with a {@code null} value. */ @Nullable - SafetySourceData getSafetySourceDataInternal(@NonNull SafetySourceKey safetySourceKey) { + SafetySourceData getSafetySourceDataInternal(SafetySourceKey safetySourceKey) { return mSafetySourceDataForKey.get(safetySourceKey); } @@ -197,9 +192,9 @@ final class SafetySourceDataRepository { * safetySourceId}, {@code packageName} and/or {@code userId} are unexpected. */ boolean reportSafetySourceError( - @NonNull SafetySourceErrorDetails safetySourceErrorDetails, - @NonNull String safetySourceId, - @NonNull String packageName, + SafetySourceErrorDetails safetySourceErrorDetails, + String safetySourceId, + String packageName, @UserIdInt int userId) { if (!validateRequest(null, safetySourceId, packageName, userId)) { return false; @@ -224,7 +219,7 @@ final class SafetySourceDataRepository { * Marks the given {@link SafetySourceKey} as having errored-out and returns whether there was a * change to the underlying {@link SafetyCenterData}. */ - boolean setSafetySourceError(@NonNull SafetySourceKey safetySourceKey) { + boolean setSafetySourceError(SafetySourceKey safetySourceKey) { boolean removingSafetySourceDataChangedSafetyCenterData = mSafetySourceDataForKey.remove(safetySourceKey) != null; boolean addingSafetySourceErrorChangedSafetyCenterData = @@ -237,7 +232,7 @@ final class SafetySourceDataRepository { * Clears all safety source errors received so far for the given {@link UserProfileGroup}, this * is useful e.g. when starting a new broadcast. */ - void clearSafetySourceErrors(@NonNull UserProfileGroup userProfileGroup) { + void clearSafetySourceErrors(UserProfileGroup userProfileGroup) { // Loop in reverse index order to be able to remove entries while iterating. for (int i = mSafetySourceErrors.size() - 1; i >= 0; i--) { SafetySourceKey sourceKey = mSafetySourceErrors.valueAt(i); @@ -254,7 +249,7 @@ final class SafetySourceDataRepository { * dismissed. */ @Nullable - SafetySourceIssue getSafetySourceIssue(@NonNull SafetyCenterIssueKey safetyCenterIssueKey) { + SafetySourceIssue getSafetySourceIssue(SafetyCenterIssueKey safetyCenterIssueKey) { SafetySourceKey key = SafetySourceKey.of( safetyCenterIssueKey.getSafetySourceId(), safetyCenterIssueKey.getUserId()); @@ -296,7 +291,7 @@ final class SafetySourceDataRepository { */ @Nullable SafetySourceIssue.Action getSafetySourceIssueAction( - @NonNull SafetyCenterIssueActionId safetyCenterIssueActionId) { + SafetyCenterIssueActionId safetyCenterIssueActionId) { SafetySourceIssue safetySourceIssue = getSafetySourceIssue(safetyCenterIssueActionId.getSafetyCenterIssueKey()); @@ -336,7 +331,7 @@ final class SafetySourceDataRepository { } /** Dumps state for debugging purposes. */ - void dump(@NonNull PrintWriter fout) { + void dump(PrintWriter fout) { int dataCount = mSafetySourceDataForKey.size(); fout.println("SOURCE DATA (" + dataCount + ")"); for (int i = 0; i < dataCount; i++) { @@ -356,7 +351,7 @@ final class SafetySourceDataRepository { } /** Returns {@code true} if the given source has an error. */ - boolean sourceHasError(@NonNull SafetySourceKey safetySourceKey) { + boolean sourceHasError(SafetySourceKey safetySourceKey) { return mSafetySourceErrors.contains(safetySourceKey); } @@ -366,8 +361,8 @@ final class SafetySourceDataRepository { */ private boolean validateRequest( @Nullable SafetySourceData safetySourceData, - @NonNull String safetySourceId, - @NonNull String packageName, + String safetySourceId, + String packageName, @UserIdInt int userId) { SafetyCenterConfigReader.ExternalSafetySource externalSafetySource = mSafetyCenterConfigReader.getExternalSafetySource(safetySourceId); @@ -456,9 +451,7 @@ final class SafetySourceDataRepository { } private void validateCallingPackage( - @NonNull SafetySource safetySource, - @NonNull String packageName, - @NonNull String safetySourceId) { + SafetySource safetySource, String packageName, String safetySourceId) { if (!packageName.equals(safetySource.getPackageName())) { throw new IllegalArgumentException( "Unexpected package name: " @@ -493,8 +486,7 @@ final class SafetySourceDataRepository { } } - private boolean checkCerts( - @NonNull String packageName, @NonNull Set<String> certificateHashes) { + private boolean checkCerts(String packageName, Set<String> certificateHashes) { boolean hasMatchingCert = false; for (String certHash : certificateHashes) { try { @@ -514,8 +506,8 @@ final class SafetySourceDataRepository { } private boolean processSafetyEvent( - @NonNull String safetySourceId, - @NonNull SafetyEvent safetyEvent, + String safetySourceId, + SafetyEvent safetyEvent, @UserIdInt int userId, boolean isError) { int type = safetyEvent.getType(); diff --git a/service/java/com/android/safetycenter/data/package-info.java b/service/java/com/android/safetycenter/data/package-info.java new file mode 100644 index 000000000..597847505 --- /dev/null +++ b/service/java/com/android/safetycenter/data/package-info.java @@ -0,0 +1,19 @@ +/* + * Copyright (C) 2023 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +@NonNullByDefault +package com.android.safetycenter.data; + +import com.android.safetycenter.annotations.NonNullByDefault; diff --git a/service/java/com/android/safetycenter/logging/SafetyCenterPullAtomCallback.java b/service/java/com/android/safetycenter/logging/SafetyCenterPullAtomCallback.java index bc520fd5c..2aab88ee7 100644 --- a/service/java/com/android/safetycenter/logging/SafetyCenterPullAtomCallback.java +++ b/service/java/com/android/safetycenter/logging/SafetyCenterPullAtomCallback.java @@ -22,7 +22,6 @@ import static com.android.permission.PermissionStatsLog.SAFETY_STATE; import static java.util.Collections.emptyList; -import android.annotation.NonNull; import android.annotation.UserIdInt; import android.app.StatsManager; import android.app.StatsManager.StatsPullAtomCallback; @@ -68,32 +67,28 @@ public final class SafetyCenterPullAtomCallback implements StatsPullAtomCallback private static final String TAG = "SafetyCenterPullAtom"; - @NonNull private final Context mContext; - @NonNull private final ApiLock mApiLock; + private final Context mContext; + private final ApiLock mApiLock; @GuardedBy("mApiLock") - @NonNull private final SafetyCenterStatsdLogger mSafetyCenterStatsdLogger; @GuardedBy("mApiLock") - @NonNull private final SafetyCenterConfigReader mSafetyCenterConfigReader; @GuardedBy("mApiLock") - @NonNull private final SafetyCenterDataFactory mSafetyCenterDataFactory; @GuardedBy("mApiLock") - @NonNull private final SafetyCenterDataManager mSafetyCenterDataManager; public SafetyCenterPullAtomCallback( - @NonNull Context context, - @NonNull ApiLock apiLock, - @NonNull SafetyCenterStatsdLogger safetyCenterStatsdLogger, - @NonNull SafetyCenterConfigReader safetyCenterConfigReader, - @NonNull SafetyCenterDataFactory safetyCenterDataFactory, - @NonNull SafetyCenterDataManager safetyCenterDataManager) { + Context context, + ApiLock apiLock, + SafetyCenterStatsdLogger safetyCenterStatsdLogger, + SafetyCenterConfigReader safetyCenterConfigReader, + SafetyCenterDataFactory safetyCenterDataFactory, + SafetyCenterDataManager safetyCenterDataManager) { mContext = context; mApiLock = apiLock; mSafetyCenterStatsdLogger = safetyCenterStatsdLogger; @@ -103,7 +98,7 @@ public final class SafetyCenterPullAtomCallback implements StatsPullAtomCallback } @Override - public int onPullAtom(int atomTag, @NonNull List<StatsEvent> statsEvents) { + public int onPullAtom(int atomTag, List<StatsEvent> statsEvents) { if (atomTag != SAFETY_STATE) { Log.w(TAG, "Attempt to pull atom: " + atomTag + ", but only SAFETY_STATE is supported"); return StatsManager.PULL_SKIP; @@ -136,10 +131,8 @@ public final class SafetyCenterPullAtomCallback implements StatsPullAtomCallback } @GuardedBy("mApiLock") - @NonNull private StatsEvent createOverallSafetyStateAtomLocked( - @NonNull UserProfileGroup userProfileGroup, - @NonNull List<SafetySourcesGroup> loggableGroups) { + UserProfileGroup userProfileGroup, List<SafetySourcesGroup> loggableGroups) { SafetyCenterData loggableData = mSafetyCenterDataFactory.assembleSafetyCenterData( "android", userProfileGroup, loggableGroups); @@ -152,7 +145,7 @@ public final class SafetyCenterPullAtomCallback implements StatsPullAtomCallback @GuardedBy("mApiLock") private long getDismissedIssuesCountLocked( - @NonNull SafetyCenterData loggableData, @NonNull UserProfileGroup userProfileGroup) { + SafetyCenterData loggableData, UserProfileGroup userProfileGroup) { if (SdkLevel.isAtLeastU()) { return loggableData.getDismissedIssues().size(); } @@ -162,8 +155,7 @@ public final class SafetyCenterPullAtomCallback implements StatsPullAtomCallback @GuardedBy("mApiLock") private void writeSafetySourceStateCollectedAtomsLocked( - @NonNull UserProfileGroup userProfileGroup, - @NonNull List<SafetySourcesGroup> loggableGroups) { + UserProfileGroup userProfileGroup, List<SafetySourcesGroup> loggableGroups) { for (int i = 0; i < loggableGroups.size(); i++) { List<SafetySource> loggableSources = loggableGroups.get(i).getSafetySources(); @@ -197,7 +189,7 @@ public final class SafetyCenterPullAtomCallback implements StatsPullAtomCallback @GuardedBy("mApiLock") private void writeSafetySourceStateCollectedAtomLocked( - @NonNull SafetySource safetySource, @UserIdInt int userId, boolean isUserManaged) { + SafetySource safetySource, @UserIdInt int userId, boolean isUserManaged) { SafetySourceKey key = SafetySourceKey.of(safetySource.getId(), userId); SafetySourceData safetySourceData = mSafetyCenterDataManager.getSafetySourceDataInternal(key); diff --git a/service/java/com/android/safetycenter/logging/SafetyCenterStatsdLogger.java b/service/java/com/android/safetycenter/logging/SafetyCenterStatsdLogger.java index 4ae33d641..a94b69a57 100644 --- a/service/java/com/android/safetycenter/logging/SafetyCenterStatsdLogger.java +++ b/service/java/com/android/safetycenter/logging/SafetyCenterStatsdLogger.java @@ -46,7 +46,6 @@ import static com.android.permission.PermissionStatsLog.SAFETY_STATE__OVERALL_SE import static com.android.permission.PermissionStatsLog.SAFETY_STATE__OVERALL_SEVERITY_LEVEL__SAFETY_SEVERITY_RECOMMENDATION; import android.annotation.IntDef; -import android.annotation.NonNull; import android.annotation.Nullable; import android.annotation.UserIdInt; import android.content.Context; @@ -103,11 +102,11 @@ public final class SafetyCenterStatsdLogger { @Retention(RetentionPolicy.SOURCE) public @interface SystemEventResult {} - @NonNull private final Context mContext; - @NonNull private final SafetyCenterConfigReader mSafetyCenterConfigReader; + private final Context mContext; + private final SafetyCenterConfigReader mSafetyCenterConfigReader; public SafetyCenterStatsdLogger( - @NonNull Context context, @NonNull SafetyCenterConfigReader safetyCenterConfigReader) { + Context context, SafetyCenterConfigReader safetyCenterConfigReader) { mContext = context; mSafetyCenterConfigReader = safetyCenterConfigReader; } @@ -116,7 +115,6 @@ public final class SafetyCenterStatsdLogger { * Creates a {@link PermissionStatsLog#SAFETY_STATE} {@link StatsEvent} with the given * parameters. */ - @NonNull StatsEvent createSafetyStateEvent( @SafetyCenterStatus.OverallSeverityLevel int severityLevel, long openIssueCount, @@ -135,7 +133,7 @@ public final class SafetyCenterStatsdLogger { * source, or {@code null} if none/unknown severity should be recorded. */ void writeSafetySourceStateCollected( - @NonNull String sourceId, + String sourceId, boolean isManagedProfile, @Nullable @SafetySourceData.SeverityLevel Integer sourceSeverityLevel, long openIssuesCount, @@ -162,9 +160,9 @@ public final class SafetyCenterStatsdLogger { */ public void writeSourceRefreshSystemEvent( @RefreshRequestType int refreshType, - @NonNull String sourceId, + String sourceId, @UserIdInt int userId, - @NonNull Duration duration, + Duration duration, @SystemEventResult int result) { if (!mSafetyCenterConfigReader.allowsStatsdLogging()) { return; @@ -184,9 +182,7 @@ public final class SafetyCenterStatsdLogger { * COMPLETE_RESCAN} or {@code COMPLETE_GET_DATA}. */ public void writeWholeRefreshSystemEvent( - @RefreshRequestType int refreshType, - @NonNull Duration duration, - @SystemEventResult int result) { + @RefreshRequestType int refreshType, Duration duration, @SystemEventResult int result) { if (!mSafetyCenterConfigReader.allowsStatsdLogging()) { return; } @@ -205,10 +201,10 @@ public final class SafetyCenterStatsdLogger { * INLINE_ACTION}. */ public void writeInlineActionSystemEvent( - @NonNull String sourceId, + String sourceId, @UserIdInt int userId, @Nullable String issueTypeId, - @NonNull Duration duration, + Duration duration, @SystemEventResult int result) { if (!mSafetyCenterConfigReader.allowsStatsdLogging()) { return; @@ -266,7 +262,7 @@ public final class SafetyCenterStatsdLogger { * Converts a {@link String} ID (e.g. a Safety Source ID) to a {@code long} suitable for logging * to statsd. */ - private static long idStringToLong(@NonNull String id) { + private static long idStringToLong(String id) { MessageDigest messageDigest; try { messageDigest = MessageDigest.getInstance("MD5"); diff --git a/service/java/com/android/safetycenter/logging/package-info.java b/service/java/com/android/safetycenter/logging/package-info.java new file mode 100644 index 000000000..dcc1828b4 --- /dev/null +++ b/service/java/com/android/safetycenter/logging/package-info.java @@ -0,0 +1,19 @@ +/* + * Copyright (C) 2023 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +@NonNullByDefault +package com.android.safetycenter.logging; + +import com.android.safetycenter.annotations.NonNullByDefault; diff --git a/service/java/com/android/safetycenter/package-info.java b/service/java/com/android/safetycenter/package-info.java new file mode 100644 index 000000000..0bccf89fa --- /dev/null +++ b/service/java/com/android/safetycenter/package-info.java @@ -0,0 +1,19 @@ +/* + * Copyright (C) 2023 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +@NonNullByDefault +package com.android.safetycenter; + +import com.android.safetycenter.annotations.NonNullByDefault; |