Loading src/com/android/settings/network/telephony/CarrierConfigManagerExt.kt 0 → 100644 +39 −0 Original line number Diff line number Diff line /* * 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.os.PersistableBundle import android.telephony.CarrierConfigManager import android.telephony.SubscriptionManager import androidx.core.os.persistableBundleOf /** * Gets the configuration values of the specified config keys applied. */ fun CarrierConfigManager.safeGetConfig( keys: List<String>, subId: Int = SubscriptionManager.getDefaultSubscriptionId(), ): PersistableBundle = try { getConfigForSubId(subId, *keys.toTypedArray()) } catch (e: IllegalStateException) { // The CarrierConfigLoader (the service implemented the CarrierConfigManager) hasn't been // initialized yet. This may occurs during very early phase of phone booting up or when Phone // process has been restarted. // Settings should not assume Carrier config loader (and any other system services as well) are // always available. If not available, use default value instead. persistableBundleOf() } src/com/android/settings/system/ClientInitiatedActionRepository.kt +8 −5 Original line number Diff line number Diff line Loading @@ -20,6 +20,7 @@ import android.content.Context import android.content.Intent import android.telephony.CarrierConfigManager import android.util.Log import com.android.settings.network.telephony.safeGetConfig class ClientInitiatedActionRepository(private val context: Context) { private val configManager = context.getSystemService(CarrierConfigManager::class.java)!! Loading @@ -29,11 +30,13 @@ class ClientInitiatedActionRepository(private val context: Context) { */ fun onSystemUpdate() { val bundle = configManager.getConfig( configManager.safeGetConfig( keys = listOf( CarrierConfigManager.KEY_CI_ACTION_ON_SYS_UPDATE_BOOL, CarrierConfigManager.KEY_CI_ACTION_ON_SYS_UPDATE_INTENT_STRING, CarrierConfigManager.KEY_CI_ACTION_ON_SYS_UPDATE_EXTRA_STRING, CarrierConfigManager.KEY_CI_ACTION_ON_SYS_UPDATE_EXTRA_VAL_STRING, ), ) if (!bundle.getBoolean(CarrierConfigManager.KEY_CI_ACTION_ON_SYS_UPDATE_BOOL)) return Loading tests/spa_unit/src/com/android/settings/network/telephony/CarrierConfigManagerExtTest.kt 0 → 100644 +70 −0 Original line number Diff line number Diff line /* * 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.core.os.persistableBundleOf import androidx.test.ext.junit.runners.AndroidJUnit4 import com.google.common.truth.Truth.assertThat import org.junit.Test import org.junit.runner.RunWith import org.mockito.kotlin.any import org.mockito.kotlin.doReturn import org.mockito.kotlin.doThrow import org.mockito.kotlin.eq import org.mockito.kotlin.mock import org.mockito.kotlin.stub @RunWith(AndroidJUnit4::class) class CarrierConfigManagerExtTest { private val mockCarrierConfigManager = mock<CarrierConfigManager>() private val context = mock<Context> { on { getSystemService(CarrierConfigManager::class.java) } doReturn mockCarrierConfigManager } @Test fun safeGetConfig_managerReturnKeyValue_returnNonEmptyBundle() { mockCarrierConfigManager.stub { on { getConfigForSubId(any(), eq(KEY)) } doReturn persistableBundleOf(KEY to VALUE) } val carrierConfigManager = context.getSystemService(CarrierConfigManager::class.java)!! val bundle = carrierConfigManager.safeGetConfig(listOf(KEY)) assertThat(bundle.getString(KEY)).isEqualTo(VALUE) } @Test fun safeGetConfig_managerThrowIllegalStateException_returnEmptyBundle() { mockCarrierConfigManager.stub { on { getConfigForSubId(any(), eq(KEY)) } doThrow IllegalStateException() } val carrierConfigManager = context.getSystemService(CarrierConfigManager::class.java)!! val bundle = carrierConfigManager.safeGetConfig(listOf(KEY)) assertThat(bundle.containsKey(KEY)).isFalse() } private companion object { const val KEY = "key" const val VALUE = "value" } } tests/spa_unit/src/com/android/settings/system/ClientInitiatedActionRepositoryTest.kt +2 −3 Original line number Diff line number Diff line Loading @@ -25,7 +25,6 @@ import com.google.common.truth.Truth.assertThat import org.junit.Test import org.junit.runner.RunWith import org.mockito.kotlin.any import org.mockito.kotlin.anyVararg import org.mockito.kotlin.argumentCaptor import org.mockito.kotlin.doReturn import org.mockito.kotlin.mock Loading @@ -47,7 +46,7 @@ class ClientInitiatedActionRepositoryTest { @Test fun onSystemUpdate_notEnabled() { mockCarrierConfigManager.stub { on { getConfig(anyVararg()) } doReturn persistableBundleOf() on { getConfigForSubId(any(), any()) } doReturn persistableBundleOf() } repository.onSystemUpdate() Loading @@ -58,7 +57,7 @@ class ClientInitiatedActionRepositoryTest { @Test fun onSystemUpdate_enabled() { mockCarrierConfigManager.stub { on { getConfig(anyVararg()) } doReturn persistableBundleOf( on { getConfigForSubId(any(), any()) } doReturn persistableBundleOf( CarrierConfigManager.KEY_CI_ACTION_ON_SYS_UPDATE_BOOL to true, CarrierConfigManager.KEY_CI_ACTION_ON_SYS_UPDATE_INTENT_STRING to ACTION, ) Loading Loading
src/com/android/settings/network/telephony/CarrierConfigManagerExt.kt 0 → 100644 +39 −0 Original line number Diff line number Diff line /* * 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.os.PersistableBundle import android.telephony.CarrierConfigManager import android.telephony.SubscriptionManager import androidx.core.os.persistableBundleOf /** * Gets the configuration values of the specified config keys applied. */ fun CarrierConfigManager.safeGetConfig( keys: List<String>, subId: Int = SubscriptionManager.getDefaultSubscriptionId(), ): PersistableBundle = try { getConfigForSubId(subId, *keys.toTypedArray()) } catch (e: IllegalStateException) { // The CarrierConfigLoader (the service implemented the CarrierConfigManager) hasn't been // initialized yet. This may occurs during very early phase of phone booting up or when Phone // process has been restarted. // Settings should not assume Carrier config loader (and any other system services as well) are // always available. If not available, use default value instead. persistableBundleOf() }
src/com/android/settings/system/ClientInitiatedActionRepository.kt +8 −5 Original line number Diff line number Diff line Loading @@ -20,6 +20,7 @@ import android.content.Context import android.content.Intent import android.telephony.CarrierConfigManager import android.util.Log import com.android.settings.network.telephony.safeGetConfig class ClientInitiatedActionRepository(private val context: Context) { private val configManager = context.getSystemService(CarrierConfigManager::class.java)!! Loading @@ -29,11 +30,13 @@ class ClientInitiatedActionRepository(private val context: Context) { */ fun onSystemUpdate() { val bundle = configManager.getConfig( configManager.safeGetConfig( keys = listOf( CarrierConfigManager.KEY_CI_ACTION_ON_SYS_UPDATE_BOOL, CarrierConfigManager.KEY_CI_ACTION_ON_SYS_UPDATE_INTENT_STRING, CarrierConfigManager.KEY_CI_ACTION_ON_SYS_UPDATE_EXTRA_STRING, CarrierConfigManager.KEY_CI_ACTION_ON_SYS_UPDATE_EXTRA_VAL_STRING, ), ) if (!bundle.getBoolean(CarrierConfigManager.KEY_CI_ACTION_ON_SYS_UPDATE_BOOL)) return Loading
tests/spa_unit/src/com/android/settings/network/telephony/CarrierConfigManagerExtTest.kt 0 → 100644 +70 −0 Original line number Diff line number Diff line /* * 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.core.os.persistableBundleOf import androidx.test.ext.junit.runners.AndroidJUnit4 import com.google.common.truth.Truth.assertThat import org.junit.Test import org.junit.runner.RunWith import org.mockito.kotlin.any import org.mockito.kotlin.doReturn import org.mockito.kotlin.doThrow import org.mockito.kotlin.eq import org.mockito.kotlin.mock import org.mockito.kotlin.stub @RunWith(AndroidJUnit4::class) class CarrierConfigManagerExtTest { private val mockCarrierConfigManager = mock<CarrierConfigManager>() private val context = mock<Context> { on { getSystemService(CarrierConfigManager::class.java) } doReturn mockCarrierConfigManager } @Test fun safeGetConfig_managerReturnKeyValue_returnNonEmptyBundle() { mockCarrierConfigManager.stub { on { getConfigForSubId(any(), eq(KEY)) } doReturn persistableBundleOf(KEY to VALUE) } val carrierConfigManager = context.getSystemService(CarrierConfigManager::class.java)!! val bundle = carrierConfigManager.safeGetConfig(listOf(KEY)) assertThat(bundle.getString(KEY)).isEqualTo(VALUE) } @Test fun safeGetConfig_managerThrowIllegalStateException_returnEmptyBundle() { mockCarrierConfigManager.stub { on { getConfigForSubId(any(), eq(KEY)) } doThrow IllegalStateException() } val carrierConfigManager = context.getSystemService(CarrierConfigManager::class.java)!! val bundle = carrierConfigManager.safeGetConfig(listOf(KEY)) assertThat(bundle.containsKey(KEY)).isFalse() } private companion object { const val KEY = "key" const val VALUE = "value" } }
tests/spa_unit/src/com/android/settings/system/ClientInitiatedActionRepositoryTest.kt +2 −3 Original line number Diff line number Diff line Loading @@ -25,7 +25,6 @@ import com.google.common.truth.Truth.assertThat import org.junit.Test import org.junit.runner.RunWith import org.mockito.kotlin.any import org.mockito.kotlin.anyVararg import org.mockito.kotlin.argumentCaptor import org.mockito.kotlin.doReturn import org.mockito.kotlin.mock Loading @@ -47,7 +46,7 @@ class ClientInitiatedActionRepositoryTest { @Test fun onSystemUpdate_notEnabled() { mockCarrierConfigManager.stub { on { getConfig(anyVararg()) } doReturn persistableBundleOf() on { getConfigForSubId(any(), any()) } doReturn persistableBundleOf() } repository.onSystemUpdate() Loading @@ -58,7 +57,7 @@ class ClientInitiatedActionRepositoryTest { @Test fun onSystemUpdate_enabled() { mockCarrierConfigManager.stub { on { getConfig(anyVararg()) } doReturn persistableBundleOf( on { getConfigForSubId(any(), any()) } doReturn persistableBundleOf( CarrierConfigManager.KEY_CI_ACTION_ON_SYS_UPDATE_BOOL to true, CarrierConfigManager.KEY_CI_ACTION_ON_SYS_UPDATE_INTENT_STRING to ACTION, ) Loading