diff options
| -rw-r--r-- | packages/SystemUI/src/com/android/systemui/qs/tiles/viewmodel/QSTileViewModelAdapter.kt | 12 |
1 files changed, 8 insertions, 4 deletions
diff --git a/packages/SystemUI/src/com/android/systemui/qs/tiles/viewmodel/QSTileViewModelAdapter.kt b/packages/SystemUI/src/com/android/systemui/qs/tiles/viewmodel/QSTileViewModelAdapter.kt index 045790c34043..d328bd93e62e 100644 --- a/packages/SystemUI/src/com/android/systemui/qs/tiles/viewmodel/QSTileViewModelAdapter.kt +++ b/packages/SystemUI/src/com/android/systemui/qs/tiles/viewmodel/QSTileViewModelAdapter.kt @@ -34,7 +34,6 @@ import dagger.assisted.AssistedFactory import dagger.assisted.AssistedInject import java.io.PrintWriter import java.util.concurrent.CopyOnWriteArraySet -import java.util.function.Supplier import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.Job import kotlinx.coroutines.flow.collectIndexed @@ -158,6 +157,8 @@ constructor( override fun isTileReady(): Boolean = qsTileViewModel.currentState != null + private var cachedState = QSTile.AdapterState() + override fun setListening(client: Any?, listening: Boolean) { client ?: return if (listening) { @@ -168,7 +169,10 @@ constructor( .filterNotNull() .map { mapState(context, it, qsTileViewModel.config) } .onEach { legacyState -> - callbacks.forEach { it.onStateChanged(legacyState) } + val changed = legacyState.copyTo(cachedState) + if (changed) { + callbacks.forEach { it.onStateChanged(legacyState) } + } } .launchIn(applicationScope) } @@ -235,7 +239,7 @@ constructor( handlesLongClick = viewModelState.supportedActions.contains(QSTileState.UserAction.LONG_CLICK) - iconSupplier = Supplier { + icon = when (val stateIcon = viewModelState.icon()) { is Icon.Loaded -> if (viewModelState.iconRes == null) DrawableIcon(stateIcon.drawable) @@ -243,7 +247,7 @@ constructor( is Icon.Resource -> ResourceIcon.get(stateIcon.res) null -> null } - } + state = viewModelState.activationState.legacyState contentDescription = viewModelState.contentDescription |