From c4fea9d31ce3a97a0b87e7fb69835e100bb27e89 Mon Sep 17 00:00:00 2001 From: Motomu Utsumi Date: Sat, 13 Sep 2025 09:29:44 +0900 Subject: [PATCH] Use string for CREATE_APP_SPECIFIC_NETWORK permission This allows using the permission in 25Q4 before it becomes a public API in 26Q2. Flag: android.net.platform.flags.create_app_specific_network_permission Test: TH Bug: 435313135 Cherrypick-From: https://googleplex-android-review.googlesource.com/q/commit:60f7743f773b05a98e651c953631e93957291bf5 Merged-In: I8d336a588eddf9a027079e208b2b96bb6c163e86 Change-Id: I8d336a588eddf9a027079e208b2b96bb6c163e86 --- framework/src/android/net/ConnectivityManager.java | 8 ++++++-- service/src/com/android/server/ConnectivityService.java | 6 +++++- .../CSCreateAppSpecificNetworkPermissionTest.kt | 6 +++++- 3 files changed, 16 insertions(+), 4 deletions(-) diff --git a/framework/src/android/net/ConnectivityManager.java b/framework/src/android/net/ConnectivityManager.java index c076c25f1c..1a07d33f07 100644 --- a/framework/src/android/net/ConnectivityManager.java +++ b/framework/src/android/net/ConnectivityManager.java @@ -3967,6 +3967,10 @@ public class ConnectivityManager { } } + // TODO: Use android.Manifest.permission.CREATE_APP_SPECIFIC_NETWORK once it's available. + private static final String PERMISSION_CREATE_APP_SPECIFIC_NETWORK = + "android.permission.CREATE_APP_SPECIFIC_NETWORK"; + /** * @hide * Register a NetworkAgent with ConnectivityService. @@ -3975,7 +3979,7 @@ public class ConnectivityManager { @RequiresPermission(anyOf = { NetworkStack.PERMISSION_MAINLINE_NETWORK_STACK, android.Manifest.permission.NETWORK_FACTORY, - android.Manifest.permission.CREATE_APP_SPECIFIC_NETWORK}) + PERMISSION_CREATE_APP_SPECIFIC_NETWORK}) public NetworkAndAgentRegistryParcelable registerNetworkAgent( @NonNull INetworkAgent na, @NonNull NetworkInfo ni, @NonNull LinkProperties lp, @NonNull NetworkCapabilities nc, @@ -3992,7 +3996,7 @@ public class ConnectivityManager { @RequiresPermission(anyOf = { NetworkStack.PERMISSION_MAINLINE_NETWORK_STACK, android.Manifest.permission.NETWORK_FACTORY, - android.Manifest.permission.CREATE_APP_SPECIFIC_NETWORK}) + PERMISSION_CREATE_APP_SPECIFIC_NETWORK}) public NetworkAndAgentRegistryParcelable registerNetworkAgent( @NonNull INetworkAgent na, @NonNull NetworkInfo ni, @NonNull LinkProperties lp, @NonNull NetworkCapabilities nc, diff --git a/service/src/com/android/server/ConnectivityService.java b/service/src/com/android/server/ConnectivityService.java index aef22fbf74..27f6dd357d 100644 --- a/service/src/com/android/server/ConnectivityService.java +++ b/service/src/com/android/server/ConnectivityService.java @@ -531,6 +531,10 @@ public class ConnectivityService extends IConnectivityManager.Stub // CONNECTIVITY_ACTION broadcast. private static final char DELIVERY_GROUP_KEY_DELIMITER = ';'; + // TODO: Use android.Manifest.permission.CREATE_APP_SPECIFIC_NETWORK once it's available. + private static final String PERMISSION_CREATE_APP_SPECIFIC_NETWORK = + "android.permission.CREATE_APP_SPECIFIC_NETWORK"; + // The maximum value for the blocking validation result, in milliseconds. public static final int MAX_VALIDATION_IGNORE_AFTER_ROAM_TIME_MS = 10000; @@ -4144,7 +4148,7 @@ public class ConnectivityService extends IConnectivityManager.Stub // The CREATE_APP_SPECIFIC_NETWORK permission was introduced in 25Q4. // It must not be granted on earlier platform versions, even if an app declares it. return mDeps.isAtLeast25Q4() && hasAnyPermissionOf(mContext, - android.Manifest.permission.CREATE_APP_SPECIFIC_NETWORK); + PERMISSION_CREATE_APP_SPECIFIC_NETWORK); } private boolean hasNetworkFactoryPermission() { diff --git a/tests/unit/java/com/android/server/connectivityservice/CSCreateAppSpecificNetworkPermissionTest.kt b/tests/unit/java/com/android/server/connectivityservice/CSCreateAppSpecificNetworkPermissionTest.kt index 86e43a7fe0..876d417062 100644 --- a/tests/unit/java/com/android/server/connectivityservice/CSCreateAppSpecificNetworkPermissionTest.kt +++ b/tests/unit/java/com/android/server/connectivityservice/CSCreateAppSpecificNetworkPermissionTest.kt @@ -32,6 +32,10 @@ import com.android.testutils.TestableNetworkCallback.Event.CapabilitiesChanged import org.junit.Test import org.junit.runner.RunWith +// TODO: Use android.Manifest.permission.CREATE_APP_SPECIFIC_NETWORK once it's available. +private const val PERMISSION_CREATE_APP_SPECIFIC_NETWORK = + "android.permission.CREATE_APP_SPECIFIC_NETWORK" + @RunWith(DevSdkIgnoreRunner::class) @IgnoreUpTo(Build.VERSION_CODES.R) class CSCreateAppSpecificNetworkPermissionTest : CSTest() { @@ -47,7 +51,7 @@ class CSCreateAppSpecificNetworkPermissionTest : CSTest() { PERMISSION_DENIED ) context.setPermission( - android.Manifest.permission.CREATE_APP_SPECIFIC_NETWORK, + PERMISSION_CREATE_APP_SPECIFIC_NETWORK, PERMISSION_GRANTED )