Rearrange bluetooth device details fragment according to config
BUG: 343317785
Test: atest DeviceSettingRepositoryTest
Flag: com.android.settings.flags.enable_bluetooth_device_details_polish
Change-Id: I1058b5807bc6d7155bb01bf23fc05279f78ef50f
diff --git a/packages/SettingsLib/src/com/android/settingslib/bluetooth/devicesettings/DeviceSettingItem.kt b/packages/SettingsLib/src/com/android/settingslib/bluetooth/devicesettings/DeviceSettingItem.kt
index 9ee33b0..a0fe5d2 100644
--- a/packages/SettingsLib/src/com/android/settingslib/bluetooth/devicesettings/DeviceSettingItem.kt
+++ b/packages/SettingsLib/src/com/android/settingslib/bluetooth/devicesettings/DeviceSettingItem.kt
@@ -27,6 +27,7 @@
* @property packageName The package name for service binding.
* @property className The class name for service binding.
* @property intentAction The intent action for service binding.
+ * @property preferenceKey The preference key if it's a built-in preference.
* @property extras Extra bundle
*/
data class DeviceSettingItem(
@@ -34,6 +35,7 @@
val packageName: String,
val className: String,
val intentAction: String,
+ val preferenceKey: String? = null,
val extras: Bundle = Bundle.EMPTY,
) : Parcelable {
@@ -45,6 +47,7 @@
writeString(packageName)
writeString(className)
writeString(intentAction)
+ writeString(preferenceKey)
writeBundle(extras)
}
}
@@ -60,6 +63,7 @@
packageName = readString() ?: "",
className = readString() ?: "",
intentAction = readString() ?: "",
+ preferenceKey = readString() ?: "",
extras = readBundle((Bundle::class.java.classLoader)) ?: Bundle.EMPTY,
)
}
diff --git a/packages/SettingsLib/src/com/android/settingslib/bluetooth/devicesettings/data/repository/DeviceSettingRepository.kt b/packages/SettingsLib/src/com/android/settingslib/bluetooth/devicesettings/data/repository/DeviceSettingRepository.kt
index 326bb31..a599dd1 100644
--- a/packages/SettingsLib/src/com/android/settingslib/bluetooth/devicesettings/data/repository/DeviceSettingRepository.kt
+++ b/packages/SettingsLib/src/com/android/settingslib/bluetooth/devicesettings/data/repository/DeviceSettingRepository.kt
@@ -18,6 +18,7 @@
import android.bluetooth.BluetoothAdapter
import android.content.Context
+import android.text.TextUtils
import com.android.settingslib.bluetooth.CachedBluetoothDevice
import com.android.settingslib.bluetooth.devicesettings.ActionSwitchPreference
import com.android.settingslib.bluetooth.devicesettings.DeviceSetting
@@ -76,8 +77,7 @@
coroutineScope,
backgroundCoroutineContext,
)
- }
- )
+ })
override suspend fun getDeviceSettingsConfig(
cachedDevice: CachedBluetoothDevice
@@ -96,11 +96,15 @@
DeviceSettingConfigModel(
mainItems = mainContentItems.map { it.toModel() },
moreSettingsItems = moreSettingsItems.map { it.toModel() },
- moreSettingsPageFooter = moreSettingsFooter
- )
+ moreSettingsPageFooter = moreSettingsFooter)
- private fun DeviceSettingItem.toModel(): DeviceSettingConfigItemModel =
- DeviceSettingConfigItemModel(settingId)
+ private fun DeviceSettingItem.toModel(): DeviceSettingConfigItemModel {
+ return if (!TextUtils.isEmpty(preferenceKey)) {
+ DeviceSettingConfigItemModel.BuiltinItem(settingId, preferenceKey!!)
+ } else {
+ DeviceSettingConfigItemModel.AppProvidedItem(settingId)
+ }
+ }
private fun DeviceSetting.toModel(
cachedDevice: CachedBluetoothDevice,
diff --git a/packages/SettingsLib/src/com/android/settingslib/bluetooth/devicesettings/shared/model/DeviceSettingConfigModel.kt b/packages/SettingsLib/src/com/android/settingslib/bluetooth/devicesettings/shared/model/DeviceSettingConfigModel.kt
index cd597ee..136abad 100644
--- a/packages/SettingsLib/src/com/android/settingslib/bluetooth/devicesettings/shared/model/DeviceSettingConfigModel.kt
+++ b/packages/SettingsLib/src/com/android/settingslib/bluetooth/devicesettings/shared/model/DeviceSettingConfigModel.kt
@@ -25,9 +25,20 @@
/** Items need to be shown in device details more settings page. */
val moreSettingsItems: List<DeviceSettingConfigItemModel>,
/** Footer text in more settings page. */
- val moreSettingsPageFooter: String)
+ val moreSettingsPageFooter: String
+)
/** Models a device setting item in config. */
-data class DeviceSettingConfigItemModel(
- @DeviceSettingId val settingId: Int,
-)
+sealed interface DeviceSettingConfigItemModel {
+ @DeviceSettingId val settingId: Int
+
+ /** A built-in item in Settings. */
+ data class BuiltinItem(
+ @DeviceSettingId override val settingId: Int,
+ val preferenceKey: String
+ ) : DeviceSettingConfigItemModel
+
+ /** A remote item provided by other apps. */
+ data class AppProvidedItem(@DeviceSettingId override val settingId: Int) :
+ DeviceSettingConfigItemModel
+}
diff --git a/packages/SettingsLib/tests/robotests/src/com/android/settingslib/bluetooth/devicesettings/DeviceSettingsConfigTest.kt b/packages/SettingsLib/tests/robotests/src/com/android/settingslib/bluetooth/devicesettings/DeviceSettingsConfigTest.kt
index 2b29a6e..9568d66 100644
--- a/packages/SettingsLib/tests/robotests/src/com/android/settingslib/bluetooth/devicesettings/DeviceSettingsConfigTest.kt
+++ b/packages/SettingsLib/tests/robotests/src/com/android/settingslib/bluetooth/devicesettings/DeviceSettingsConfigTest.kt
@@ -37,9 +37,9 @@
"package_name_1",
"class_name_1",
"intent_action_1",
- Bundle()
- )
- ),
+ null,
+ Bundle(),
+ )),
moreSettingsItems =
listOf(
DeviceSettingItem(
@@ -47,9 +47,9 @@
"package_name_2",
"class_name_2",
"intent_action_2",
- Bundle()
- )
- ),
+ null,
+ Bundle(),
+ )),
moreSettingsFooter = "footer",
extras = Bundle().apply { putString("key1", "value1") },
)