Merge "Settings search for Carrier settings version" into main
diff --git a/res/xml/mobile_network_settings.xml b/res/xml/mobile_network_settings.xml
index 825d72c..4f16e12 100644
--- a/res/xml/mobile_network_settings.xml
+++ b/res/xml/mobile_network_settings.xml
@@ -176,12 +176,11 @@
settings:searchable="false"
settings:controller="com.android.settings.network.telephony.EnabledNetworkModePreferenceController"/>
+ <!-- Settings search is handled by CarrierSettingsVersionSearchItem. -->
<Preference
android:key="carrier_settings_version_key"
android:title="@string/carrier_settings_version"
- android:enabled="false"
- android:shouldDisableView="false"
- android:selectable="false"
+ settings:searchable="false"
settings:controller="com.android.settings.network.telephony.CarrierSettingsVersionPreferenceController"
settings:enableCopying="true"/>
diff --git a/src/com/android/settings/network/telephony/CarrierConfigRepository.kt b/src/com/android/settings/network/telephony/CarrierConfigRepository.kt
index 3ec529d..3f5c06e 100644
--- a/src/com/android/settings/network/telephony/CarrierConfigRepository.kt
+++ b/src/com/android/settings/network/telephony/CarrierConfigRepository.kt
@@ -199,7 +199,7 @@
}
@VisibleForTesting
- fun setStringForTest(subId: Int, key: String, value: String) {
+ fun setStringForTest(subId: Int, key: String, value: String?) {
check(key.endsWith("_string")) { "String key should ends with _string" }
getPerSubCache(subId)[key] = StringConfigValue(value)
}
diff --git a/src/com/android/settings/network/telephony/CarrierSettingsVersionPreferenceController.java b/src/com/android/settings/network/telephony/CarrierSettingsVersionPreferenceController.java
deleted file mode 100644
index 575d19c..0000000
--- a/src/com/android/settings/network/telephony/CarrierSettingsVersionPreferenceController.java
+++ /dev/null
@@ -1,56 +0,0 @@
-/*
- * Copyright (C) 2019 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 com.android.settings.network.telephony;
-
-import android.content.Context;
-import android.os.PersistableBundle;
-import android.telephony.CarrierConfigManager;
-import android.telephony.SubscriptionManager;
-import android.text.TextUtils;
-
-import com.android.settings.core.BasePreferenceController;
-import com.android.settings.network.CarrierConfigCache;
-
-public class CarrierSettingsVersionPreferenceController extends BasePreferenceController {
-
- private int mSubscriptionId;
- private CarrierConfigCache mCarrierConfigCache;
-
- public CarrierSettingsVersionPreferenceController(Context context, String preferenceKey) {
- super(context, preferenceKey);
- mCarrierConfigCache = CarrierConfigCache.getInstance(context);
- mSubscriptionId = SubscriptionManager.INVALID_SUBSCRIPTION_ID;
- }
-
- public void init(int subscriptionId) {
- mSubscriptionId = subscriptionId;
- }
-
- @Override
- public CharSequence getSummary() {
- final PersistableBundle config = mCarrierConfigCache.getConfigForSubId(mSubscriptionId);
- if (config == null) {
- return null;
- }
- return config.getString(CarrierConfigManager.KEY_CARRIER_CONFIG_VERSION_STRING);
- }
-
- @Override
- public int getAvailabilityStatus() {
- return TextUtils.isEmpty(getSummary()) ? UNSUPPORTED_ON_DEVICE : AVAILABLE;
- }
-}
diff --git a/src/com/android/settings/network/telephony/CarrierSettingsVersionPreferenceController.kt b/src/com/android/settings/network/telephony/CarrierSettingsVersionPreferenceController.kt
new file mode 100644
index 0000000..f949ab8
--- /dev/null
+++ b/src/com/android/settings/network/telephony/CarrierSettingsVersionPreferenceController.kt
@@ -0,0 +1,62 @@
+/*
+ * Copyright (C) 2024 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 com.android.settings.network.telephony
+
+import android.content.Context
+import android.telephony.CarrierConfigManager
+import android.telephony.SubscriptionManager
+import com.android.settings.R
+import com.android.settings.core.BasePreferenceController
+import com.android.settings.network.telephony.MobileNetworkSettingsSearchIndex.MobileNetworkSettingsSearchItem
+import com.android.settings.network.telephony.MobileNetworkSettingsSearchIndex.MobileNetworkSettingsSearchResult
+
+class CarrierSettingsVersionPreferenceController(context: Context, preferenceKey: String) :
+ BasePreferenceController(context, preferenceKey) {
+
+ private var subId: Int = SubscriptionManager.INVALID_SUBSCRIPTION_ID
+ private val searchItem = CarrierSettingsVersionSearchItem(context)
+
+ fun init(subId: Int) {
+ this.subId = subId
+ }
+
+ override fun getSummary() = searchItem.getSummary(subId)
+
+ override fun getAvailabilityStatus() =
+ if (searchItem.isAvailable(subId)) AVAILABLE else CONDITIONALLY_UNAVAILABLE
+
+ companion object {
+ class CarrierSettingsVersionSearchItem(private val context: Context) :
+ MobileNetworkSettingsSearchItem {
+ private val carrierConfigRepository = CarrierConfigRepository(context)
+
+ fun getSummary(subId: Int): String? =
+ carrierConfigRepository.getString(
+ subId, CarrierConfigManager.KEY_CARRIER_CONFIG_VERSION_STRING)
+
+ fun isAvailable(subId: Int): Boolean = !getSummary(subId).isNullOrEmpty()
+
+ override fun getSearchResult(subId: Int): MobileNetworkSettingsSearchResult? {
+ if (!isAvailable(subId)) return null
+ return MobileNetworkSettingsSearchResult(
+ key = "carrier_settings_version_key",
+ title = context.getString(R.string.carrier_settings_version),
+ )
+ }
+ }
+ }
+}
diff --git a/src/com/android/settings/network/telephony/MobileNetworkSettingsSearchIndex.kt b/src/com/android/settings/network/telephony/MobileNetworkSettingsSearchIndex.kt
index 55cb1fa..c63e7d2 100644
--- a/src/com/android/settings/network/telephony/MobileNetworkSettingsSearchIndex.kt
+++ b/src/com/android/settings/network/telephony/MobileNetworkSettingsSearchIndex.kt
@@ -21,6 +21,7 @@
import android.telephony.SubscriptionInfo
import com.android.settings.R
import com.android.settings.network.SubscriptionUtil
+import com.android.settings.network.telephony.CarrierSettingsVersionPreferenceController.Companion.CarrierSettingsVersionSearchItem
import com.android.settings.network.telephony.DataUsagePreferenceController.Companion.DataUsageSearchItem
import com.android.settings.network.telephony.MmsMessagePreferenceController.Companion.MmsMessageSearchItem
import com.android.settings.network.telephony.NrAdvancedCallingPreferenceController.Companion.NrAdvancedCallingSearchItem
@@ -115,6 +116,7 @@
fun createSearchItems(context: Context): List<MobileNetworkSettingsSearchItem> =
listOf(
+ CarrierSettingsVersionSearchItem(context),
DataUsageSearchItem(context),
MmsMessageSearchItem(context),
NrAdvancedCallingSearchItem(context),
diff --git a/tests/spa_unit/src/com/android/settings/network/telephony/CarrierSettingsVersionPreferenceControllerTest.kt b/tests/spa_unit/src/com/android/settings/network/telephony/CarrierSettingsVersionPreferenceControllerTest.kt
new file mode 100644
index 0000000..ed6c027
--- /dev/null
+++ b/tests/spa_unit/src/com/android/settings/network/telephony/CarrierSettingsVersionPreferenceControllerTest.kt
@@ -0,0 +1,70 @@
+/*
+ * Copyright (C) 2024 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 com.android.settings.network.telephony
+
+import android.content.Context
+import android.telephony.CarrierConfigManager
+import androidx.test.core.app.ApplicationProvider
+import androidx.test.ext.junit.runners.AndroidJUnit4
+import com.google.common.truth.Truth.assertThat
+import org.junit.Before
+import org.junit.Test
+import org.junit.runner.RunWith
+
+@RunWith(AndroidJUnit4::class)
+class CarrierSettingsVersionPreferenceControllerTest {
+
+ private val context: Context = ApplicationProvider.getApplicationContext()
+
+ private val controller =
+ CarrierSettingsVersionPreferenceController(context, TEST_KEY).apply { init(SUB_ID) }
+
+ @Before
+ fun setUp() {
+ CarrierConfigRepository.resetForTest()
+ }
+
+ @Test
+ fun getSummary_nullConfig_noCrash() {
+ controller.getSummary()
+ }
+
+ @Test
+ fun getSummary_nullVersionString_returnNull() {
+ CarrierConfigRepository.setStringForTest(
+ SUB_ID, CarrierConfigManager.KEY_CARRIER_CONFIG_VERSION_STRING, null)
+
+ val summary = controller.getSummary()
+
+ assertThat(summary).isNull()
+ }
+
+ @Test
+ fun getSummary_hasVersionString_returnCorrectSummary() {
+ CarrierConfigRepository.setStringForTest(
+ SUB_ID, CarrierConfigManager.KEY_CARRIER_CONFIG_VERSION_STRING, "test_version_123")
+
+ val summary = controller.getSummary()
+
+ assertThat(summary).isEqualTo("test_version_123")
+ }
+
+ private companion object {
+ const val TEST_KEY = "test_key"
+ const val SUB_ID = 10
+ }
+}
diff --git a/tests/unit/src/com/android/settings/network/telephony/CarrierSettingsVersionPreferenceControllerTest.java b/tests/unit/src/com/android/settings/network/telephony/CarrierSettingsVersionPreferenceControllerTest.java
deleted file mode 100644
index 40be07f..0000000
--- a/tests/unit/src/com/android/settings/network/telephony/CarrierSettingsVersionPreferenceControllerTest.java
+++ /dev/null
@@ -1,79 +0,0 @@
-/*
- * Copyright (C) 2020 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 com.android.settings.network.telephony;
-
-import static com.google.common.truth.Truth.assertThat;
-
-import static org.mockito.Mockito.doReturn;
-import static org.mockito.Mockito.spy;
-
-import android.content.Context;
-import android.os.PersistableBundle;
-import android.telephony.CarrierConfigManager;
-
-import androidx.test.core.app.ApplicationProvider;
-import androidx.test.ext.junit.runners.AndroidJUnit4;
-
-import com.android.settings.network.CarrierConfigCache;
-
-import org.junit.Before;
-import org.junit.Test;
-import org.junit.runner.RunWith;
-import org.mockito.Mock;
-import org.mockito.MockitoAnnotations;
-
-@RunWith(AndroidJUnit4.class)
-public class CarrierSettingsVersionPreferenceControllerTest {
- @Mock
- private CarrierConfigCache mCarrierConfigCache;
-
- private CarrierSettingsVersionPreferenceController mController;
- private int mSubscriptionId = 1234;
-
- @Before
- public void setUp() {
- MockitoAnnotations.initMocks(this);
- Context context = spy(ApplicationProvider.getApplicationContext());
- CarrierConfigCache.setTestInstance(context, mCarrierConfigCache);
- mController = new CarrierSettingsVersionPreferenceController(context, "mock_key");
- mController.init(mSubscriptionId);
- }
-
- @Test
- public void getSummary_nullConfig_noCrash() {
- doReturn(null).when(mCarrierConfigCache).getConfigForSubId(mSubscriptionId);
-
- assertThat(mController.getSummary()).isNull();
- }
-
- @Test
- public void getSummary_nullVersionString_noCrash() {
- doReturn(new PersistableBundle()).when(mCarrierConfigCache)
- .getConfigForSubId(mSubscriptionId);
- assertThat(mController.getSummary()).isNull();
- }
-
- @Test
- public void getSummary_hasVersionString_correctSummary() {
- final PersistableBundle bundle = new PersistableBundle();
- bundle.putString(CarrierConfigManager.KEY_CARRIER_CONFIG_VERSION_STRING,
- "test_version_123");
- doReturn(bundle).when(mCarrierConfigCache).getConfigForSubId(mSubscriptionId);
-
- assertThat(mController.getSummary()).isEqualTo("test_version_123");
- }
-}