diff --git a/Android.bp b/Android.bp index 381e0466efbd3..4a2236980fa33 100644 --- a/Android.bp +++ b/Android.bp @@ -313,6 +313,7 @@ java_defaults { libs: [ "app-compat-annotations", "ext", + "framework-connectivity-annotations", "framework-updatable-stubs-module_libs_api", "unsupportedappusage", ], diff --git a/core/java/android/net/NetworkPolicyManager.java b/core/java/android/net/NetworkPolicyManager.java index 7ebb646ba3eb1..d8050ed5329d8 100644 --- a/core/java/android/net/NetworkPolicyManager.java +++ b/core/java/android/net/NetworkPolicyManager.java @@ -34,6 +34,8 @@ import android.content.Intent; import android.content.pm.PackageManager; import android.content.pm.PackageManager.NameNotFoundException; import android.content.pm.Signature; +import android.net.ConnectivityAnnotations.MultipathPreference; +import android.net.ConnectivityAnnotations.RestrictBackgroundStatus; import android.net.wifi.WifiConfiguration; import android.net.wifi.WifiInfo; import android.os.Build; @@ -463,6 +465,7 @@ public class NetworkPolicyManager { */ @SystemApi(client = SystemApi.Client.MODULE_LIBRARIES) @RequiresPermission(NetworkStack.PERMISSION_MAINLINE_NETWORK_STACK) + @RestrictBackgroundStatus public int getRestrictBackgroundStatus(int uid) { try { return mService.getRestrictBackgroundStatus(uid); @@ -588,6 +591,7 @@ public class NetworkPolicyManager { */ @SystemApi(client = SystemApi.Client.MODULE_LIBRARIES) @RequiresPermission(NetworkStack.PERMISSION_MAINLINE_NETWORK_STACK) + @MultipathPreference public int getMultipathPreference(@NonNull Network network) { try { return mService.getMultipathPreference(network); diff --git a/packages/Connectivity/framework/Android.bp b/packages/Connectivity/framework/Android.bp index a75792c940c30..6eb83484ccc84 100644 --- a/packages/Connectivity/framework/Android.bp +++ b/packages/Connectivity/framework/Android.bp @@ -59,6 +59,22 @@ filegroup { ], } +java_library { + name: "framework-connectivity-annotations", + sdk_version: "module_current", + srcs: [ + "src/android/net/ConnectivityAnnotations.java", + ], + libs: [ + "framework-annotations-lib", + "framework-connectivity", + ], + visibility: [ + "//frameworks/base:__subpackages__", + "//packages/modules/Connectivity:__subpackages__", + ], +} + java_sdk_library { name: "framework-connectivity", sdk_version: "module_current", diff --git a/packages/Connectivity/framework/src/android/net/ConnectivityAnnotations.java b/packages/Connectivity/framework/src/android/net/ConnectivityAnnotations.java new file mode 100644 index 0000000000000..eb1faa0aa25c3 --- /dev/null +++ b/packages/Connectivity/framework/src/android/net/ConnectivityAnnotations.java @@ -0,0 +1,51 @@ +/* + * Copyright (C) 2021 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 android.net; + +import android.annotation.IntDef; + +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; + +/** + * Type annotations for constants used in the connectivity API surface. + * + * The annotations are maintained in a separate class so that it can be built as + * a separate library that other modules can build against, as Typedef should not + * be exposed as SystemApi. + * + * @hide + */ +public final class ConnectivityAnnotations { + private ConnectivityAnnotations() {} + + @Retention(RetentionPolicy.SOURCE) + @IntDef(flag = true, value = { + ConnectivityManager.MULTIPATH_PREFERENCE_HANDOVER, + ConnectivityManager.MULTIPATH_PREFERENCE_RELIABILITY, + ConnectivityManager.MULTIPATH_PREFERENCE_PERFORMANCE, + }) + public @interface MultipathPreference {} + + @Retention(RetentionPolicy.SOURCE) + @IntDef(flag = false, value = { + ConnectivityManager.RESTRICT_BACKGROUND_STATUS_DISABLED, + ConnectivityManager.RESTRICT_BACKGROUND_STATUS_WHITELISTED, + ConnectivityManager.RESTRICT_BACKGROUND_STATUS_ENABLED, + }) + public @interface RestrictBackgroundStatus {} +} diff --git a/packages/Connectivity/framework/src/android/net/ConnectivityManager.java b/packages/Connectivity/framework/src/android/net/ConnectivityManager.java index df81603d00250..5a53af44f569c 100644 --- a/packages/Connectivity/framework/src/android/net/ConnectivityManager.java +++ b/packages/Connectivity/framework/src/android/net/ConnectivityManager.java @@ -40,6 +40,8 @@ import android.compat.annotation.UnsupportedAppUsage; import android.content.ComponentName; import android.content.Context; import android.content.Intent; +import android.net.ConnectivityAnnotations.MultipathPreference; +import android.net.ConnectivityAnnotations.RestrictBackgroundStatus; import android.net.ConnectivityDiagnosticsManager.DataStallReport.DetectionMethod; import android.net.IpSecManager.UdpEncapsulationSocket; import android.net.SocketKeepalive.Callback; @@ -4799,16 +4801,6 @@ public class ConnectivityManager { MULTIPATH_PREFERENCE_RELIABILITY | MULTIPATH_PREFERENCE_PERFORMANCE; - /** @hide */ - @Retention(RetentionPolicy.SOURCE) - @IntDef(flag = true, value = { - MULTIPATH_PREFERENCE_HANDOVER, - MULTIPATH_PREFERENCE_RELIABILITY, - MULTIPATH_PREFERENCE_PERFORMANCE, - }) - public @interface MultipathPreference { - } - /** * Provides a hint to the calling application on whether it is desirable to use the * multinetwork APIs (e.g., {@link Network#openConnection}, {@link Network#bindSocket}, etc.) @@ -5030,16 +5022,6 @@ public class ConnectivityManager { public static final String ACTION_RESTRICT_BACKGROUND_CHANGED = "android.net.conn.RESTRICT_BACKGROUND_CHANGED"; - /** @hide */ - @Retention(RetentionPolicy.SOURCE) - @IntDef(flag = false, value = { - RESTRICT_BACKGROUND_STATUS_DISABLED, - RESTRICT_BACKGROUND_STATUS_WHITELISTED, - RESTRICT_BACKGROUND_STATUS_ENABLED, - }) - public @interface RestrictBackgroundStatus { - } - /** * Determines if the calling application is subject to metered network restrictions while * running on background. diff --git a/packages/Connectivity/framework/src/android/net/ConnectivitySettingsManager.java b/packages/Connectivity/framework/src/android/net/ConnectivitySettingsManager.java index 07754e4af2ffe..bb2e62ef61389 100644 --- a/packages/Connectivity/framework/src/android/net/ConnectivitySettingsManager.java +++ b/packages/Connectivity/framework/src/android/net/ConnectivitySettingsManager.java @@ -27,7 +27,7 @@ import android.annotation.Nullable; import android.annotation.SystemApi; import android.content.ContentResolver; import android.content.Context; -import android.net.ConnectivityManager.MultipathPreference; +import android.net.ConnectivityAnnotations.MultipathPreference; import android.os.Process; import android.os.UserHandle; import android.provider.Settings; diff --git a/packages/Connectivity/service/Android.bp b/packages/Connectivity/service/Android.bp index 813a239bdaf28..72654260aeffe 100644 --- a/packages/Connectivity/service/Android.bp +++ b/packages/Connectivity/service/Android.bp @@ -65,6 +65,7 @@ java_library { "stable.core.platform.api.stubs", "android_system_server_stubs_current", "framework-annotations-lib", + "framework-connectivity-annotations", "framework-connectivity.impl", "framework-tethering.stubs.module_lib", "framework-wifi.stubs.module_lib", diff --git a/packages/Connectivity/service/src/com/android/server/ConnectivityService.java b/packages/Connectivity/service/src/com/android/server/ConnectivityService.java index ed2fe822de177..6f1466ce91f1b 100644 --- a/packages/Connectivity/service/src/com/android/server/ConnectivityService.java +++ b/packages/Connectivity/service/src/com/android/server/ConnectivityService.java @@ -105,12 +105,12 @@ import android.database.ContentObserver; import android.net.CaptivePortal; import android.net.CaptivePortalData; import android.net.ConnectionInfo; +import android.net.ConnectivityAnnotations.RestrictBackgroundStatus; import android.net.ConnectivityDiagnosticsManager.ConnectivityReport; import android.net.ConnectivityDiagnosticsManager.DataStallReport; import android.net.ConnectivityManager; import android.net.ConnectivityManager.BlockedReason; import android.net.ConnectivityManager.NetworkCallback; -import android.net.ConnectivityManager.RestrictBackgroundStatus; import android.net.ConnectivityResources; import android.net.ConnectivitySettingsManager; import android.net.DataStallReportParcelable;