diff options
2 files changed, 102 insertions, 0 deletions
diff --git a/packages/SettingsLib/src/com/android/settingslib/bluetooth/devicesettings/shared/model/DeviceSettingModel.kt b/packages/SettingsLib/src/com/android/settingslib/bluetooth/devicesettings/shared/model/DeviceSettingModel.kt new file mode 100644 index 000000000000..db782803937c --- /dev/null +++ b/packages/SettingsLib/src/com/android/settingslib/bluetooth/devicesettings/shared/model/DeviceSettingModel.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.settingslib.bluetooth.devicesettings.shared.model + +import android.content.Intent +import android.graphics.Bitmap +import com.android.settingslib.bluetooth.CachedBluetoothDevice +import com.android.settingslib.bluetooth.devicesettings.DeviceSettingId + +/** Models a device setting. */ +sealed interface DeviceSettingModel { + val cachedDevice: CachedBluetoothDevice + @DeviceSettingId val id: Int + + /** Models a device setting which should be displayed as an action/switch preference. */ + data class ActionSwitchPreference( + override val cachedDevice: CachedBluetoothDevice, + @DeviceSettingId override val id: Int, + val title: String, + val summary: String? = null, + val icon: Bitmap? = null, + val intent: Intent? = null, + val switchState: DeviceSettingStateModel.ActionSwitchPreferenceState? = null, + val isAllowedChangingState: Boolean = true, + val updateState: ((DeviceSettingStateModel.ActionSwitchPreferenceState) -> Unit)? = null, + ) : DeviceSettingModel + + /** Models a device setting which should be displayed as a multi-toggle preference. */ + data class MultiTogglePreference( + override val cachedDevice: CachedBluetoothDevice, + @DeviceSettingId override val id: Int, + val title: String, + val toggles: List<ToggleModel>, + val isActive: Boolean, + val state: DeviceSettingStateModel.MultiTogglePreferenceState, + val isAllowedChangingState: Boolean, + val updateState: (DeviceSettingStateModel.MultiTogglePreferenceState) -> Unit + ) : DeviceSettingModel + + /** Models an unknown preference. */ + data class Unknown( + override val cachedDevice: CachedBluetoothDevice, + @DeviceSettingId override val id: Int + ) : DeviceSettingModel +} + +/** Models a toggle in [DeviceSettingModel.MultiTogglePreference]. */ +data class ToggleModel(val label: String, val icon: Bitmap) diff --git a/packages/SettingsLib/src/com/android/settingslib/bluetooth/devicesettings/shared/model/DeviceSettingStateModel.kt b/packages/SettingsLib/src/com/android/settingslib/bluetooth/devicesettings/shared/model/DeviceSettingStateModel.kt new file mode 100644 index 000000000000..b404bb9be682 --- /dev/null +++ b/packages/SettingsLib/src/com/android/settingslib/bluetooth/devicesettings/shared/model/DeviceSettingStateModel.kt @@ -0,0 +1,40 @@ +/* + * 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.settingslib.bluetooth.devicesettings.shared.model + +import com.android.settingslib.bluetooth.devicesettings.DeviceSettingPreferenceState + +/** Models a device setting state. */ +sealed interface DeviceSettingStateModel { + fun toParcelable(): DeviceSettingPreferenceState + + /** Models a device setting state for action/switch preference. */ + data class ActionSwitchPreferenceState(val checked: Boolean) : DeviceSettingStateModel { + override fun toParcelable() = + com.android.settingslib.bluetooth.devicesettings.ActionSwitchPreferenceState.Builder() + .setChecked(checked) + .build() + } + + /** Models a device setting state for multi-toggle preference. */ + data class MultiTogglePreferenceState(val selectedIndex: Int) : DeviceSettingStateModel { + override fun toParcelable() = + com.android.settingslib.bluetooth.devicesettings.MultiTogglePreferenceState.Builder() + .setState(selectedIndex) + .build() + } +} |