make device setting be able to use both Intent and PendingIntent

BUG: 343317785
Test: local tested
Flag: com.android.settings.flags.enable_bluetooth_device_details_polish
Change-Id: I0c370d64bda1479778b55dc97e136ff73223f5d3
This commit is contained in:
Haijie Hong
2024-09-29 20:06:49 +08:00
parent 4e05cd99a9
commit 79f17d1188
3 changed files with 19 additions and 10 deletions

View File

@@ -18,6 +18,7 @@ package com.android.settings.bluetooth.ui.model
import android.content.Intent import android.content.Intent
import com.android.settingslib.bluetooth.devicesettings.DeviceSettingId import com.android.settingslib.bluetooth.devicesettings.DeviceSettingId
import com.android.settingslib.bluetooth.devicesettings.shared.model.DeviceSettingActionModel
import com.android.settingslib.bluetooth.devicesettings.shared.model.DeviceSettingIcon import com.android.settingslib.bluetooth.devicesettings.shared.model.DeviceSettingIcon
import com.android.settingslib.bluetooth.devicesettings.shared.model.ToggleModel import com.android.settingslib.bluetooth.devicesettings.shared.model.ToggleModel
@@ -32,7 +33,7 @@ sealed interface DeviceSettingPreferenceModel {
val title: String, val title: String,
val summary: String? = null, val summary: String? = null,
val icon: DeviceSettingIcon? = null, val icon: DeviceSettingIcon? = null,
val intent: Intent? = null, val action: DeviceSettingActionModel? = null,
) : DeviceSettingPreferenceModel ) : DeviceSettingPreferenceModel
/** Models a switch preference. */ /** Models a switch preference. */
@@ -43,7 +44,7 @@ sealed interface DeviceSettingPreferenceModel {
val icon: DeviceSettingIcon? = null, val icon: DeviceSettingIcon? = null,
val checked: Boolean, val checked: Boolean,
val onCheckedChange: ((Boolean) -> Unit), val onCheckedChange: ((Boolean) -> Unit),
val intent: Intent? = null, val action: DeviceSettingActionModel? = null,
) : DeviceSettingPreferenceModel ) : DeviceSettingPreferenceModel
/** Models a multi-toggle preference. */ /** Models a multi-toggle preference. */

View File

@@ -55,6 +55,7 @@ import com.android.settings.core.SubSettingLauncher
import com.android.settings.overlay.FeatureFactory.Companion.featureFactory import com.android.settings.overlay.FeatureFactory.Companion.featureFactory
import com.android.settings.spa.preference.ComposePreference import com.android.settings.spa.preference.ComposePreference
import com.android.settingslib.bluetooth.CachedBluetoothDevice import com.android.settingslib.bluetooth.CachedBluetoothDevice
import com.android.settingslib.bluetooth.devicesettings.shared.model.DeviceSettingActionModel
import com.android.settingslib.bluetooth.devicesettings.shared.model.DeviceSettingConfigItemModel import com.android.settingslib.bluetooth.devicesettings.shared.model.DeviceSettingConfigItemModel
import com.android.settingslib.bluetooth.devicesettings.shared.model.DeviceSettingIcon import com.android.settingslib.bluetooth.devicesettings.shared.model.DeviceSettingIcon
import com.android.settingslib.spa.framework.theme.SettingsDimension import com.android.settingslib.spa.framework.theme.SettingsDimension
@@ -313,10 +314,10 @@ class DeviceDetailsFragmentFormatterImpl(
return { deviceSettingIcon(model.icon) } return { deviceSettingIcon(model.icon) }
} }
} }
if (model.intent != null) { if (model.action != null) {
TwoTargetSwitchPreference( TwoTargetSwitchPreference(
switchPrefModel, switchPrefModel,
primaryOnClick = { startActivity(model.intent) }, primaryOnClick = { triggerAction(model.action) },
) )
} else { } else {
SwitchPreference(switchPrefModel) SwitchPreference(switchPrefModel)
@@ -330,7 +331,7 @@ class DeviceDetailsFragmentFormatterImpl(
override val title = model.title override val title = model.title
override val summary = { model.summary ?: "" } override val summary = { model.summary ?: "" }
override val onClick = { override val onClick = {
model.intent?.let { startActivity(it) } model.action?.let { triggerAction(it) }
Unit Unit
} }
override val icon: (@Composable () -> Unit)? override val icon: (@Composable () -> Unit)?
@@ -382,9 +383,16 @@ class DeviceDetailsFragmentFormatterImpl(
icon?.let { Icon(it, modifier = Modifier.size(SettingsDimension.itemIconSize)) } icon?.let { Icon(it, modifier = Modifier.size(SettingsDimension.itemIconSize)) }
} }
private fun startActivity(intent: Intent) { private fun triggerAction(action: DeviceSettingActionModel) {
intent.removeFlags(Intent.FLAG_ACTIVITY_NEW_TASK) when (action) {
context.startActivity(intent) is DeviceSettingActionModel.IntentAction -> {
action.intent.removeFlags(Intent.FLAG_ACTIVITY_NEW_TASK)
context.startActivity(action.intent)
}
is DeviceSettingActionModel.PendingIntentAction -> {
action.pendingIntent.send()
}
}
} }
private fun getPreferenceKey(settingId: Int) = "DEVICE_SETTING_${settingId}" private fun getPreferenceKey(settingId: Int) = "DEVICE_SETTING_${settingId}"

View File

@@ -101,7 +101,7 @@ class BluetoothDeviceDetailsViewModel(
DeviceSettingStateModel.ActionSwitchPreferenceState(newState) DeviceSettingStateModel.ActionSwitchPreferenceState(newState)
) )
}, },
intent = intent, action = action,
) )
} else { } else {
DeviceSettingPreferenceModel.PlainPreference( DeviceSettingPreferenceModel.PlainPreference(
@@ -109,7 +109,7 @@ class BluetoothDeviceDetailsViewModel(
title = title, title = title,
summary = summary, summary = summary,
icon = icon, icon = icon,
intent = intent, action = action,
) )
} }
} }