From b3ee1d70c498be6a1d854f30b6cf0268cb088774 Mon Sep 17 00:00:00 2001 From: Chaohui Wang Date: Mon, 19 Aug 2024 12:04:14 +0800 Subject: [PATCH] Settings search for Carrier settings version Bug: 358238959 Flag: EXEMPT bug fix Test: manual - search carrier Test: unit test Change-Id: I4c13d22a6b689273684ff44df8071789a7a78d6e --- res/xml/mobile_network_settings.xml | 5 +- .../telephony/CarrierConfigRepository.kt | 2 +- ...erSettingsVersionPreferenceController.java | 56 ------------- ...rierSettingsVersionPreferenceController.kt | 62 +++++++++++++++ .../MobileNetworkSettingsSearchIndex.kt | 2 + ...SettingsVersionPreferenceControllerTest.kt | 70 ++++++++++++++++ ...ttingsVersionPreferenceControllerTest.java | 79 ------------------- 7 files changed, 137 insertions(+), 139 deletions(-) delete mode 100644 src/com/android/settings/network/telephony/CarrierSettingsVersionPreferenceController.java create mode 100644 src/com/android/settings/network/telephony/CarrierSettingsVersionPreferenceController.kt create mode 100644 tests/spa_unit/src/com/android/settings/network/telephony/CarrierSettingsVersionPreferenceControllerTest.kt delete mode 100644 tests/unit/src/com/android/settings/network/telephony/CarrierSettingsVersionPreferenceControllerTest.java diff --git a/res/xml/mobile_network_settings.xml b/res/xml/mobile_network_settings.xml index 825d72cd3e8..4f16e12f394 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"/> + diff --git a/src/com/android/settings/network/telephony/CarrierConfigRepository.kt b/src/com/android/settings/network/telephony/CarrierConfigRepository.kt index 3ec529dbe82..3f5c06efb93 100644 --- a/src/com/android/settings/network/telephony/CarrierConfigRepository.kt +++ b/src/com/android/settings/network/telephony/CarrierConfigRepository.kt @@ -199,7 +199,7 @@ class CarrierConfigRepository(private val context: Context) { } @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 575d19ce35b..00000000000 --- 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 00000000000..f949ab8a25d --- /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 55cb1fad8f3..c63e7d23bf1 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.provider.Settings 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 @@ class MobileNetworkSettingsSearchIndex( fun createSearchItems(context: Context): List = 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 00000000000..ed6c02711e3 --- /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 40be07f1717..00000000000 --- 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"); - } -}