[Thread] Add NAT64 switch to Thread demo app
This CL adds a switch to the Thread demo app that allows the user to enable or disable NAT64. See screenshot https://screenshot.googleplex.com/3UDJ6wXqRf6WKRy. Bug: 375559106 Change-Id: I2a5c9f08ef664e62a5c34987eedb321e2b01fd85
This commit is contained in:
parent
bdeff0e8e6
commit
39f0ea9106
2 changed files with 66 additions and 2 deletions
|
|
@ -28,6 +28,7 @@ import android.net.RouteInfo;
|
|||
import android.net.thread.ActiveOperationalDataset;
|
||||
import android.net.thread.OperationalDatasetTimestamp;
|
||||
import android.net.thread.PendingOperationalDataset;
|
||||
import android.net.thread.ThreadConfiguration;
|
||||
import android.net.thread.ThreadNetworkController;
|
||||
import android.net.thread.ThreadNetworkException;
|
||||
import android.net.thread.ThreadNetworkManager;
|
||||
|
|
@ -45,6 +46,8 @@ import android.widget.TextView;
|
|||
import androidx.core.content.ContextCompat;
|
||||
import androidx.fragment.app.Fragment;
|
||||
|
||||
import com.google.android.material.switchmaterial.SwitchMaterial;
|
||||
|
||||
import java.time.Duration;
|
||||
import java.time.Instant;
|
||||
import java.time.temporal.ChronoUnit;
|
||||
|
|
@ -63,6 +66,7 @@ public final class ThreadNetworkSettingsFragment extends Fragment {
|
|||
private TextView mTextNetworkInfo;
|
||||
private TextView mMigrateNetworkState;
|
||||
private TextView mEphemeralKeyStateText;
|
||||
private SwitchMaterial mNat64Switch;
|
||||
private Executor mMainExecutor;
|
||||
|
||||
private int mDeviceRole;
|
||||
|
|
@ -72,6 +76,7 @@ public final class ThreadNetworkSettingsFragment extends Fragment {
|
|||
private String mEphemeralKey;
|
||||
private Instant mEphemeralKeyExpiry;
|
||||
private Timer mEphemeralKeyLifetimeTimer;
|
||||
private ThreadConfiguration mThreadConfiguration;
|
||||
|
||||
private static final byte[] DEFAULT_ACTIVE_DATASET_TLVS =
|
||||
base16().lowerCase()
|
||||
|
|
@ -110,6 +115,10 @@ public final class ThreadNetworkSettingsFragment extends Fragment {
|
|||
}
|
||||
}
|
||||
|
||||
private static String booleanToEnabledOrDisabled(boolean enabled) {
|
||||
return enabled ? "Enabled" : "Disabled";
|
||||
}
|
||||
|
||||
@Override
|
||||
public View onCreateView(
|
||||
LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
|
||||
|
|
@ -181,11 +190,16 @@ public final class ThreadNetworkSettingsFragment extends Fragment {
|
|||
this.mActiveDataset = newActiveDataset;
|
||||
updateState();
|
||||
});
|
||||
mThreadController.registerConfigurationCallback(
|
||||
mMainExecutor, this::updateConfiguration);
|
||||
}
|
||||
|
||||
mTextState = (TextView) view.findViewById(R.id.text_state);
|
||||
mTextNetworkInfo = (TextView) view.findViewById(R.id.text_network_info);
|
||||
mEphemeralKeyStateText = (TextView) view.findViewById(R.id.text_ephemeral_key_state);
|
||||
mNat64Switch = (SwitchMaterial) view.findViewById(R.id.switch_nat64);
|
||||
mNat64Switch.setOnCheckedChangeListener(
|
||||
(buttonView, isChecked) -> doSetNat64Enabled(isChecked));
|
||||
|
||||
if (mThreadController == null) {
|
||||
mTextState.setText("Thread not supported!");
|
||||
|
|
@ -303,6 +317,34 @@ public final class ThreadNetworkSettingsFragment extends Fragment {
|
|||
});
|
||||
}
|
||||
|
||||
private void doSetNat64Enabled(boolean enabled) {
|
||||
if (mThreadConfiguration == null) {
|
||||
Log.e(TAG, "Thread configuration is not available");
|
||||
return;
|
||||
}
|
||||
final ThreadConfiguration config =
|
||||
new ThreadConfiguration.Builder(mThreadConfiguration)
|
||||
.setNat64Enabled(enabled)
|
||||
.build();
|
||||
mThreadController.setConfiguration(
|
||||
config,
|
||||
mMainExecutor,
|
||||
new OutcomeReceiver<>() {
|
||||
@Override
|
||||
public void onError(ThreadNetworkException error) {
|
||||
Log.e(
|
||||
TAG,
|
||||
"Failed to set NAT64 " + booleanToEnabledOrDisabled(enabled),
|
||||
error);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onResult(Void v) {
|
||||
Log.i(TAG, "Successfully set NAT64 " + booleanToEnabledOrDisabled(enabled));
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
private void updateState() {
|
||||
Log.i(
|
||||
TAG,
|
||||
|
|
@ -368,4 +410,11 @@ public final class ThreadNetworkSettingsFragment extends Fragment {
|
|||
}
|
||||
mTextNetworkInfo.setText(sb.toString());
|
||||
}
|
||||
|
||||
private void updateConfiguration(ThreadConfiguration config) {
|
||||
Log.i(TAG, "Updating configuration: " + config);
|
||||
|
||||
mThreadConfiguration = config;
|
||||
mNat64Switch.setChecked(config.isNat64Enabled());
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -17,7 +17,8 @@
|
|||
<ScrollView
|
||||
xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent">
|
||||
android:layout_height="match_parent"
|
||||
android:fitsSystemWindows="true">
|
||||
<LinearLayout
|
||||
xmlns:app="http://schemas.android.com/apk/res-auto"
|
||||
xmlns:tools="http://schemas.android.com/tools"
|
||||
|
|
@ -92,7 +93,21 @@
|
|||
android:id="@+id/text_ephemeral_key_state"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginBottom="50dp"
|
||||
android:textSize="12sp" />
|
||||
|
||||
<TextView
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_width="wrap_content"
|
||||
android:text="Configuration"
|
||||
android:textSize="16sp"
|
||||
android:textStyle="bold" />
|
||||
<com.google.android.material.switchmaterial.SwitchMaterial
|
||||
android:id="@+id/switch_nat64"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_weight="1"
|
||||
android:checked="false"
|
||||
android:text="NAT64" />
|
||||
|
||||
</LinearLayout>
|
||||
</ScrollView>
|
||||
|
|
|
|||
Loading…
Reference in a new issue