[Thread] make ThreadNetworkController#setConfiguration a system API

This CL turns setConfiguration into a system API, including the
ThreadConfiguration#Builder
and the #setNat64Enabled method.

Bug: 368456504

Change-Id: I0ff2ed81271dcceea295d169a46a02f05aeda5d6
This commit is contained in:
Handa Wang 2024-09-23 08:48:53 +00:00
commit 651bfdaaf7
5 changed files with 53 additions and 14 deletions

View file

@ -35,3 +35,12 @@ flag {
description: "Controls whether the Android Thread Ephemeral Key feature is enabled"
bug: "348323500"
}
flag {
name: "set_nat64_configuration_enabled"
is_exported: true
is_fixed_read_only: true
namespace: "thread_network"
description: "Controls whether the setConfiguration API of NAT64 feature is enabled"
bug: "368456504"
}

View file

@ -506,6 +506,13 @@ package android.net.thread {
field @NonNull public static final android.os.Parcelable.Creator<android.net.thread.ThreadConfiguration> CREATOR;
}
@FlaggedApi("com.android.net.thread.flags.set_nat64_configuration_enabled") public static final class ThreadConfiguration.Builder {
ctor @FlaggedApi("com.android.net.thread.flags.set_nat64_configuration_enabled") public ThreadConfiguration.Builder();
ctor @FlaggedApi("com.android.net.thread.flags.set_nat64_configuration_enabled") public ThreadConfiguration.Builder(@NonNull android.net.thread.ThreadConfiguration);
method @FlaggedApi("com.android.net.thread.flags.set_nat64_configuration_enabled") @NonNull public android.net.thread.ThreadConfiguration build();
method @FlaggedApi("com.android.net.thread.flags.set_nat64_configuration_enabled") @NonNull public android.net.thread.ThreadConfiguration.Builder setNat64Enabled(boolean);
}
@FlaggedApi("com.android.net.thread.flags.thread_enabled") public final class ThreadNetworkController {
method @FlaggedApi("com.android.net.thread.flags.epskc_enabled") @RequiresPermission("android.permission.THREAD_NETWORK_PRIVILEGED") public void activateEphemeralKeyMode(@NonNull java.time.Duration, @NonNull java.util.concurrent.Executor, @NonNull android.os.OutcomeReceiver<java.lang.Void,android.net.thread.ThreadNetworkException>);
method public void createRandomizedDataset(@NonNull String, @NonNull java.util.concurrent.Executor, @NonNull android.os.OutcomeReceiver<android.net.thread.ActiveOperationalDataset,android.net.thread.ThreadNetworkException>);
@ -520,6 +527,7 @@ package android.net.thread {
method @RequiresPermission(android.Manifest.permission.ACCESS_NETWORK_STATE) public void registerStateCallback(@NonNull java.util.concurrent.Executor, @NonNull android.net.thread.ThreadNetworkController.StateCallback);
method @RequiresPermission("android.permission.THREAD_NETWORK_PRIVILEGED") public void scheduleMigration(@NonNull android.net.thread.PendingOperationalDataset, @NonNull java.util.concurrent.Executor, @NonNull android.os.OutcomeReceiver<java.lang.Void,android.net.thread.ThreadNetworkException>);
method @FlaggedApi("com.android.net.thread.flags.channel_max_powers_enabled") @RequiresPermission("android.permission.THREAD_NETWORK_PRIVILEGED") public void setChannelMaxPowers(@NonNull @Size(min=1) android.util.SparseIntArray, @NonNull java.util.concurrent.Executor, @NonNull android.os.OutcomeReceiver<java.lang.Void,android.net.thread.ThreadNetworkException>);
method @FlaggedApi("com.android.net.thread.flags.set_nat64_configuration_enabled") @RequiresPermission(android.Manifest.permission.THREAD_NETWORK_PRIVILEGED) public void setConfiguration(@NonNull android.net.thread.ThreadConfiguration, @NonNull java.util.concurrent.Executor, @NonNull android.os.OutcomeReceiver<java.lang.Void,android.net.thread.ThreadNetworkException>);
method @RequiresPermission("android.permission.THREAD_NETWORK_PRIVILEGED") public void setEnabled(boolean, @NonNull java.util.concurrent.Executor, @NonNull android.os.OutcomeReceiver<java.lang.Void,android.net.thread.ThreadNetworkException>);
method @FlaggedApi("com.android.net.thread.flags.configuration_enabled") @RequiresPermission(android.Manifest.permission.THREAD_NETWORK_PRIVILEGED) public void unregisterConfigurationCallback(@NonNull java.util.function.Consumer<android.net.thread.ThreadConfiguration>);
method @RequiresPermission(allOf={android.Manifest.permission.ACCESS_NETWORK_STATE, "android.permission.THREAD_NETWORK_PRIVILEGED"}) public void unregisterOperationalDatasetCallback(@NonNull android.net.thread.ThreadNetworkController.OperationalDatasetCallback);

View file

@ -126,18 +126,29 @@ public final class ThreadConfiguration implements Parcelable {
*
* @hide
*/
@FlaggedApi(Flags.FLAG_SET_NAT64_CONFIGURATION_ENABLED)
@SystemApi
public static final class Builder {
private boolean mNat64Enabled = false;
private boolean mDhcpv6PdEnabled = false;
/** Creates a new {@link Builder} object with all features disabled. */
/**
* Creates a new {@link Builder} object with all features disabled.
*
* @hide
*/
@FlaggedApi(Flags.FLAG_SET_NAT64_CONFIGURATION_ENABLED)
@SystemApi
public Builder() {}
/**
* Creates a new {@link Builder} object from a {@link ThreadConfiguration} object.
*
* @param config the Border Router configurations to be copied
* @hide
*/
@FlaggedApi(Flags.FLAG_SET_NAT64_CONFIGURATION_ENABLED)
@SystemApi
public Builder(@NonNull ThreadConfiguration config) {
Objects.requireNonNull(config);
@ -150,7 +161,11 @@ public final class ThreadConfiguration implements Parcelable {
*
* <p>Enabling this feature will allow Thread devices to connect to the internet/cloud over
* IPv4.
*
* @hide
*/
@FlaggedApi(Flags.FLAG_SET_NAT64_CONFIGURATION_ENABLED)
@SystemApi
@NonNull
public Builder setNat64Enabled(boolean enabled) {
this.mNat64Enabled = enabled;
@ -162,6 +177,8 @@ public final class ThreadConfiguration implements Parcelable {
*
* <p>Enabling this feature will allow Thread devices to connect to the internet/cloud over
* IPv6.
*
* @hide
*/
@NonNull
public Builder setDhcpv6PdEnabled(boolean enabled) {
@ -169,7 +186,13 @@ public final class ThreadConfiguration implements Parcelable {
return this;
}
/** Creates a new {@link ThreadConfiguration} object. */
/**
* Creates a new {@link ThreadConfiguration} object.
*
* @hide
*/
@FlaggedApi(Flags.FLAG_SET_NAT64_CONFIGURATION_ENABLED)
@SystemApi
@NonNull
public ThreadConfiguration build() {
return new ThreadConfiguration(this);

View file

@ -748,15 +748,19 @@ public final class ThreadNetworkController {
* OutcomeReceiver#onResult} will be called, and the {@code configuration} will be applied and
* persisted to the device; the configuration changes can be observed by {@link
* #registerConfigurationCallback}. On failure, {@link OutcomeReceiver#onError} of {@code
* receiver} will be invoked with a specific error.
* receiver} will be invoked with a specific error:
*
* <ul>
* <li>{@link ThreadNetworkException#ERROR_UNSUPPORTED_FEATURE} the configuration enables a
* feature which is not supported by the platform.
* </ul>
*
* @param configuration the configuration to set
* @param executor the executor to execute {@code receiver}
* @param receiver the receiver to receive result of this operation
* @hide
*/
// @FlaggedApi(ThreadNetworkFlags.FLAG_CONFIGURATION_ENABLED)
// @RequiresPermission(permission.THREAD_NETWORK_PRIVILEGED)
@FlaggedApi(Flags.FLAG_SET_NAT64_CONFIGURATION_ENABLED)
@RequiresPermission(permission.THREAD_NETWORK_PRIVILEGED)
public void setConfiguration(
@NonNull ThreadConfiguration configuration,
@NonNull @CallbackExecutor Executor executor,

View file

@ -182,6 +182,7 @@ public class ThreadNetworkControllerTest {
@After
public void tearDown() throws Exception {
dropAllPermissions();
setEnabledAndWait(mController, true);
leaveAndWait(mController);
tearDownTestNetwork();
setConfigurationAndWait(mController, DEFAULT_CONFIG);
@ -1148,15 +1149,9 @@ public class ThreadNetworkControllerTest {
CompletableFuture<Void> setFuture2 = new CompletableFuture<>();
ConfigurationListener listener = new ConfigurationListener(mController);
ThreadConfiguration config1 =
new ThreadConfiguration.Builder()
.setNat64Enabled(true)
.setDhcpv6PdEnabled(true)
.build();
new ThreadConfiguration.Builder().setNat64Enabled(true).build();
ThreadConfiguration config2 =
new ThreadConfiguration.Builder()
.setNat64Enabled(false)
.setDhcpv6PdEnabled(true)
.build();
new ThreadConfiguration.Builder().setNat64Enabled(false).build();
try {
runAsShell(