From 125a43c12bd130fe191dae88c1a1837d15af296b Mon Sep 17 00:00:00 2001 From: Zhanglong Xia Date: Mon, 27 Nov 2023 11:30:26 +0800 Subject: [PATCH] Add Thread resource overlay support This CL adds resource overlay support to allow developers to change the default configuration of using the location country code. Bug: b/311324956 Test: Set the resource overlay in cuttlefish, check the default configuration via the command `dumpsys thread_network`. Change-Id: Ide853975e8244f06a382b2eda4844e030539b95d --- .../res/values/config_thread.xml | 29 +++++++++++++++++++ .../res/values/overlayable.xml | 3 ++ thread/service/Android.bp | 1 + .../thread/ThreadNetworkCountryCode.java | 12 ++++++-- .../server/thread/ThreadNetworkService.java | 5 +++- thread/tests/unit/Android.bp | 2 ++ .../thread/ThreadNetworkCountryCodeTest.java | 26 ++++++++++++++++- 7 files changed, 73 insertions(+), 5 deletions(-) create mode 100644 service/ServiceConnectivityResources/res/values/config_thread.xml diff --git a/service/ServiceConnectivityResources/res/values/config_thread.xml b/service/ServiceConnectivityResources/res/values/config_thread.xml new file mode 100644 index 0000000000..14b54275c1 --- /dev/null +++ b/service/ServiceConnectivityResources/res/values/config_thread.xml @@ -0,0 +1,29 @@ + + + + + + + + true + + diff --git a/service/ServiceConnectivityResources/res/values/overlayable.xml b/service/ServiceConnectivityResources/res/values/overlayable.xml index 4c85e8c30f..1c0759999c 100644 --- a/service/ServiceConnectivityResources/res/values/overlayable.xml +++ b/service/ServiceConnectivityResources/res/values/overlayable.xml @@ -43,6 +43,9 @@ + + + diff --git a/thread/service/Android.bp b/thread/service/Android.bp index 92cdedc728..b5fee955b6 100644 --- a/thread/service/Android.bp +++ b/thread/service/Android.bp @@ -37,6 +37,7 @@ java_library { "framework-connectivity-t-pre-jarjar", "framework-location.stubs.module_lib", "service-connectivity-pre-jarjar", + "ServiceConnectivityResources", ], static_libs: [ "modules-utils-shell-command-handler", diff --git a/thread/service/java/com/android/server/thread/ThreadNetworkCountryCode.java b/thread/service/java/com/android/server/thread/ThreadNetworkCountryCode.java index b05183c9ae..df2c56e23c 100644 --- a/thread/service/java/com/android/server/thread/ThreadNetworkCountryCode.java +++ b/thread/service/java/com/android/server/thread/ThreadNetworkCountryCode.java @@ -27,7 +27,9 @@ import android.net.thread.IOperationReceiver; import android.os.Build; import android.util.Log; +import com.android.connectivity.resources.R; import com.android.internal.annotations.VisibleForTesting; +import com.android.server.connectivity.ConnectivityResources; import java.io.FileDescriptor; import java.io.PrintWriter; @@ -73,6 +75,7 @@ public class ThreadNetworkCountryCode { private static final CountryCodeInfo DEFAULT_COUNTRY_CODE_INFO = new CountryCodeInfo(DEFAULT_COUNTRY_CODE, COUNTRY_CODE_SOURCE_DEFAULT); + private final ConnectivityResources mResources; private final LocationManager mLocationManager; @Nullable private final Geocoder mGeocoder; private final ThreadNetworkControllerService mThreadNetworkControllerService; @@ -123,17 +126,20 @@ public class ThreadNetworkCountryCode { } private boolean isLocationUseForCountryCodeEnabled() { - // TODO: b/311324956 read the configuration from the overlay configuration. - return true; + return mResources + .get() + .getBoolean(R.bool.config_thread_location_use_for_country_code_enabled); } public ThreadNetworkCountryCode( LocationManager locationManager, ThreadNetworkControllerService threadNetworkControllerService, - @Nullable Geocoder geocoder) { + @Nullable Geocoder geocoder, + ConnectivityResources resources) { mLocationManager = locationManager; mThreadNetworkControllerService = threadNetworkControllerService; mGeocoder = geocoder; + mResources = resources; } /** Sets up this country code module to listen to location country code changes. */ diff --git a/thread/service/java/com/android/server/thread/ThreadNetworkService.java b/thread/service/java/com/android/server/thread/ThreadNetworkService.java index 287bb8a260..95c725680c 100644 --- a/thread/service/java/com/android/server/thread/ThreadNetworkService.java +++ b/thread/service/java/com/android/server/thread/ThreadNetworkService.java @@ -29,6 +29,7 @@ import android.os.Binder; import android.os.ParcelFileDescriptor; import com.android.server.SystemService; +import com.android.server.connectivity.ConnectivityResources; import java.io.FileDescriptor; import java.io.PrintWriter; @@ -62,8 +63,10 @@ public class ThreadNetworkService extends IThreadNetworkManager.Stub { new ThreadNetworkCountryCode( mContext.getSystemService(LocationManager.class), mControllerService, - Geocoder.isPresent() ? new Geocoder(mContext) : null); + Geocoder.isPresent() ? new Geocoder(mContext) : null, + new ConnectivityResources(mContext)); mCountryCode.initialize(); + mShellCommand = new ThreadNetworkShellCommand(mCountryCode); } } diff --git a/thread/tests/unit/Android.bp b/thread/tests/unit/Android.bp index 74b4a35dec..c7887bc56c 100644 --- a/thread/tests/unit/Android.bp +++ b/thread/tests/unit/Android.bp @@ -39,12 +39,14 @@ android_test { "guava-android-testlib", "mockito-target-extended-minus-junit4", "net-tests-utils", + "service-connectivity-pre-jarjar", "service-thread-pre-jarjar", "truth", ], libs: [ "android.test.base", "android.test.runner", + "ServiceConnectivityResources", ], jarjar_rules: ":connectivity-jarjar-rules", jni_libs: [ diff --git a/thread/tests/unit/src/com/android/server/thread/ThreadNetworkCountryCodeTest.java b/thread/tests/unit/src/com/android/server/thread/ThreadNetworkCountryCodeTest.java index f51aa0a2ba..a0eff6ccc6 100644 --- a/thread/tests/unit/src/com/android/server/thread/ThreadNetworkCountryCodeTest.java +++ b/thread/tests/unit/src/com/android/server/thread/ThreadNetworkCountryCodeTest.java @@ -34,9 +34,11 @@ import static org.mockito.Mockito.doAnswer; import static org.mockito.Mockito.eq; import static org.mockito.Mockito.never; import static org.mockito.Mockito.verify; +import static org.mockito.Mockito.verifyNoMoreInteractions; import static org.mockito.Mockito.when; import android.content.pm.PackageManager; +import android.content.res.Resources; import android.location.Address; import android.location.Geocoder; import android.location.Location; @@ -47,6 +49,9 @@ import android.net.thread.IOperationReceiver; import androidx.test.filters.SmallTest; import androidx.test.runner.AndroidJUnit4; +import com.android.connectivity.resources.R; +import com.android.server.connectivity.ConnectivityResources; + import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; @@ -71,6 +76,8 @@ public class ThreadNetworkCountryCodeTest { @Mock ThreadNetworkControllerService mThreadNetworkControllerService; @Mock PackageManager mPackageManager; @Mock Location mLocation; + @Mock Resources mResources; + @Mock ConnectivityResources mConnectivityResources; private ThreadNetworkCountryCode mThreadNetworkCountryCode; private boolean mErrorSetCountryCode; @@ -83,6 +90,9 @@ public class ThreadNetworkCountryCodeTest { public void setUp() throws Exception { MockitoAnnotations.initMocks(this); + when(mConnectivityResources.get()).thenReturn(mResources); + when(mResources.getBoolean(anyInt())).thenReturn(true); + when(mLocation.getLatitude()).thenReturn(0.0); when(mLocation.getLongitude()).thenReturn(0.0); @@ -105,7 +115,10 @@ public class ThreadNetworkCountryCodeTest { mThreadNetworkCountryCode = new ThreadNetworkCountryCode( - mLocationManager, mThreadNetworkControllerService, mGeocoder); + mLocationManager, + mThreadNetworkControllerService, + mGeocoder, + mConnectivityResources); } private static Address newAddress(String countryCode) { @@ -121,6 +134,17 @@ public class ThreadNetworkCountryCodeTest { assertThat(mThreadNetworkCountryCode.getCountryCode()).isEqualTo(DEFAULT_COUNTRY_CODE); } + @Test + public void initialize_locationUseIsDisabled_locationFunctionIsNotCalled() { + when(mResources.getBoolean(R.bool.config_thread_location_use_for_country_code_enabled)) + .thenReturn(false); + + mThreadNetworkCountryCode.initialize(); + + verifyNoMoreInteractions(mGeocoder); + verifyNoMoreInteractions(mLocationManager); + } + @Test public void locationCountryCode_locationChanged_locationCountryCodeIsUsed() { mThreadNetworkCountryCode.initialize();