diff --git a/src/com/android/settings/deviceinfo/firmwareversion/BasebandVersionPreference.kt b/src/com/android/settings/deviceinfo/firmwareversion/BasebandVersionPreference.kt new file mode 100644 index 00000000000..fb27dd814c8 --- /dev/null +++ b/src/com/android/settings/deviceinfo/firmwareversion/BasebandVersionPreference.kt @@ -0,0 +1,57 @@ +/* + * 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.deviceinfo.firmwareversion + +import android.content.Context +import android.os.SystemProperties +import androidx.preference.Preference +import com.android.settings.R +import com.android.settings.Utils +import com.android.settingslib.metadata.PreferenceAvailabilityProvider +import com.android.settingslib.metadata.PreferenceMetadata +import com.android.settingslib.metadata.PreferenceSummaryProvider +import com.android.settingslib.preference.PreferenceBinding + +// LINT.IfChange +class BasebandVersionPreference : + PreferenceMetadata, + PreferenceSummaryProvider, + PreferenceAvailabilityProvider, + PreferenceBinding { + + override val key: String + get() = "base_band" + + override val title: Int + get() = R.string.baseband_version + + override fun getSummary(context: Context): CharSequence? = + SystemProperties.get(BASEBAND_PROPERTY, context.getString(R.string.device_info_default)) + + override fun isAvailable(context: Context) = !Utils.isWifiOnly(context) + + override fun bind(preference: Preference, metadata: PreferenceMetadata) { + super.bind(preference, metadata) + preference.isSelectable = false + preference.isCopyingEnabled = true + } + + companion object { + const val BASEBAND_PROPERTY: String = "gsm.version.baseband" + } +} +// LINT.ThenChange(BasebandVersionPreferenceController.java) diff --git a/src/com/android/settings/deviceinfo/firmwareversion/BasebandVersionPreferenceController.java b/src/com/android/settings/deviceinfo/firmwareversion/BasebandVersionPreferenceController.java index dd3d560282a..235638433be 100644 --- a/src/com/android/settings/deviceinfo/firmwareversion/BasebandVersionPreferenceController.java +++ b/src/com/android/settings/deviceinfo/firmwareversion/BasebandVersionPreferenceController.java @@ -25,6 +25,7 @@ import com.android.settings.R; import com.android.settings.Utils; import com.android.settings.core.BasePreferenceController; +// LINT.IfChange public class BasebandVersionPreferenceController extends BasePreferenceController { @VisibleForTesting @@ -45,3 +46,4 @@ public class BasebandVersionPreferenceController extends BasePreferenceControlle mContext.getString(R.string.device_info_default)); } } +// LINT.ThenChange(BasebandVersionPreference.kt) diff --git a/src/com/android/settings/deviceinfo/firmwareversion/FirmwareVersionScreen.kt b/src/com/android/settings/deviceinfo/firmwareversion/FirmwareVersionScreen.kt index 58fdefe6e4a..3b70e72ae47 100644 --- a/src/com/android/settings/deviceinfo/firmwareversion/FirmwareVersionScreen.kt +++ b/src/com/android/settings/deviceinfo/firmwareversion/FirmwareVersionScreen.kt @@ -50,7 +50,7 @@ class FirmwareVersionScreen : PreferenceScreenCreator, PreferenceSummaryProvider +PreferenceWidget("os_firmware_version", R.string.firmware_version) +PreferenceWidget("security_key", R.string.security_patch) +PreferenceWidget("module_version", R.string.module_version) - +PreferenceWidget("base_band", R.string.baseband_version) + +BasebandVersionPreference() +PreferenceWidget("kernel_version", R.string.kernel_version) +PreferenceWidget("os_build_number", R.string.build_number) } diff --git a/tests/robotests/Android.bp b/tests/robotests/Android.bp index 3fd430610d3..60a68033c95 100644 --- a/tests/robotests/Android.bp +++ b/tests/robotests/Android.bp @@ -69,6 +69,9 @@ android_robolectric_test { "com_android_server_accessibility_flags_lib", "flag-junit", "flag-junit-base", + "kotlin-test", + "mockito-robolectric-prebuilt", // mockito deps order matters! + "mockito-kotlin2", "notification_flags_lib", "platform-test-annotations", "testables", diff --git a/tests/robotests/src/com/android/settings/deviceinfo/firmwareversion/BasebandVersionPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/deviceinfo/firmwareversion/BasebandVersionPreferenceControllerTest.java index 87fdb222c42..5d7e82e98eb 100644 --- a/tests/robotests/src/com/android/settings/deviceinfo/firmwareversion/BasebandVersionPreferenceControllerTest.java +++ b/tests/robotests/src/com/android/settings/deviceinfo/firmwareversion/BasebandVersionPreferenceControllerTest.java @@ -38,6 +38,7 @@ import org.robolectric.RuntimeEnvironment; import java.util.Arrays; +// LINT.IfChange @RunWith(RobolectricTestRunner.class) public class BasebandVersionPreferenceControllerTest { @Mock @@ -68,3 +69,4 @@ public class BasebandVersionPreferenceControllerTest { assertThat(mController.getAvailabilityStatus()).isEqualTo(AVAILABLE); } } +// LINT.ThenChange(BasebandVersionPreferenceTest.kt) diff --git a/tests/robotests/src/com/android/settings/deviceinfo/firmwareversion/BasebandVersionPreferenceTest.kt b/tests/robotests/src/com/android/settings/deviceinfo/firmwareversion/BasebandVersionPreferenceTest.kt new file mode 100644 index 00000000000..27220380712 --- /dev/null +++ b/tests/robotests/src/com/android/settings/deviceinfo/firmwareversion/BasebandVersionPreferenceTest.kt @@ -0,0 +1,60 @@ +/* + * 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.deviceinfo.firmwareversion + +import android.content.Context +import android.content.ContextWrapper +import android.sysprop.TelephonyProperties +import android.telephony.TelephonyManager +import androidx.test.core.app.ApplicationProvider +import com.google.common.truth.Truth.assertThat +import org.junit.Test +import org.junit.runner.RunWith +import org.mockito.kotlin.doReturn +import org.mockito.kotlin.mock +import org.robolectric.RobolectricTestRunner + +// LINT.IfChange +@RunWith(RobolectricTestRunner::class) +class BasebandVersionPreferenceTest { + private lateinit var telephonyManager: TelephonyManager + + private val context: Context = + object : ContextWrapper(ApplicationProvider.getApplicationContext()) { + override fun getSystemService(name: String): Any? = + when { + name == getSystemServiceName(TelephonyManager::class.java) -> telephonyManager + else -> super.getSystemService(name) + } + } + + private val basebandVersionPreference = BasebandVersionPreference() + + @Test + fun isAvailable_wifiOnly_unavailable() { + telephonyManager = mock { on { isDataCapable } doReturn false } + assertThat(basebandVersionPreference.isAvailable(context)).isFalse() + } + + @Test + fun isAvailable_hasMobile_available() { + TelephonyProperties.baseband_version(listOf("test")) + telephonyManager = mock { on { isDataCapable } doReturn true } + assertThat(basebandVersionPreference.isAvailable(context)).isTrue() + } +} +// LINT.ThenChange(BasebandVersionPreferenceControllerTest.java)