From 75e9d8baf11a5831e0e6cdb715f963627776208a Mon Sep 17 00:00:00 2001 From: Fletcher Dostie Date: Tue, 24 Mar 2026 20:10:39 -0700 Subject: [PATCH 001/114] Add native Android media controls for HA media_player entities --- app/lint-baseline.xml | 61 ++- app/src/main/AndroidManifest.xml | 13 + .../mediacontrol/HaMediaSessionService.kt | 295 +++++++++++++++ .../mediacontrol/HaRemoteMediaPlayer.kt | 157 ++++++++ .../android/settings/SettingsFragment.kt | 16 + .../MediaControlSettingsFragment.kt | 35 ++ .../MediaControlSettingsViewModel.kt | 190 ++++++++++ .../views/MediaControlSettingsView.kt | 183 +++++++++ .../android/webview/WebViewActivity.kt | 6 + .../res/drawable/ic_play_circle_outline.xml | 7 + app/src/main/res/xml/changelog_master.xml | 1 + app/src/main/res/xml/preferences.xml | 10 + .../mediacontrol/HaRemoteMediaPlayerTest.kt | 254 +++++++++++++ .../MediaControlSettingsViewModelTest.kt | 143 +++++++ automotive/lint-baseline.xml | 81 +++- automotive/src/main/AndroidManifest.xml | 13 + .../android/common/data/integration/Entity.kt | 55 +++ .../data/mediacontrol/MediaControlModule.kt | 14 + .../mediacontrol/MediaControlRepository.kt | 22 ++ .../MediaControlRepositoryImpl.kt | 112 ++++++ .../data/mediacontrol/MediaControlState.kt | 33 ++ .../common/data/prefs/PrefsRepository.kt | 12 + .../common/data/prefs/PrefsRepositoryImpl.kt | 31 ++ common/src/main/res/values/strings.xml | 5 + .../MediaControlRepositoryImplTest.kt | 348 ++++++++++++++++++ 25 files changed, 2081 insertions(+), 16 deletions(-) create mode 100644 app/src/main/kotlin/io/homeassistant/companion/android/mediacontrol/HaMediaSessionService.kt create mode 100644 app/src/main/kotlin/io/homeassistant/companion/android/mediacontrol/HaRemoteMediaPlayer.kt create mode 100644 app/src/main/kotlin/io/homeassistant/companion/android/settings/mediacontrol/MediaControlSettingsFragment.kt create mode 100644 app/src/main/kotlin/io/homeassistant/companion/android/settings/mediacontrol/MediaControlSettingsViewModel.kt create mode 100644 app/src/main/kotlin/io/homeassistant/companion/android/settings/mediacontrol/views/MediaControlSettingsView.kt create mode 100644 app/src/main/res/drawable/ic_play_circle_outline.xml create mode 100644 app/src/test/kotlin/io/homeassistant/companion/android/mediacontrol/HaRemoteMediaPlayerTest.kt create mode 100644 app/src/test/kotlin/io/homeassistant/companion/android/settings/mediacontrol/MediaControlSettingsViewModelTest.kt create mode 100644 common/src/main/kotlin/io/homeassistant/companion/android/common/data/mediacontrol/MediaControlModule.kt create mode 100644 common/src/main/kotlin/io/homeassistant/companion/android/common/data/mediacontrol/MediaControlRepository.kt create mode 100644 common/src/main/kotlin/io/homeassistant/companion/android/common/data/mediacontrol/MediaControlRepositoryImpl.kt create mode 100644 common/src/main/kotlin/io/homeassistant/companion/android/common/data/mediacontrol/MediaControlState.kt create mode 100644 common/src/test/kotlin/io/homeassistant/companion/android/common/data/mediacontrol/MediaControlRepositoryImplTest.kt diff --git a/app/lint-baseline.xml b/app/lint-baseline.xml index 701d89855d3..bbf64da7637 100644 --- a/app/lint-baseline.xml +++ b/app/lint-baseline.xml @@ -404,7 +404,7 @@ errorLine2=" ~~~~~~~~~~~"> @@ -646,7 +646,7 @@ errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"> @@ -657,7 +657,7 @@ errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"> @@ -1609,6 +1609,61 @@ column="14"/> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + if (state == null) { + withContext(Dispatchers.Main) { + currentPlayer.updateState(state = null, artworkPngBytes = null) + } + return@collect + } + loadArtworkAndUpdatePlayer(state) + } + // Flow completed (WebSocket not ready, connection lost, etc) — retry + Timber.d("Media control observation completed, retrying in %s", OBSERVATION_RETRY_DELAY) + delay(OBSERVATION_RETRY_DELAY) + } + } + } + + override fun onGetSession(controllerInfo: MediaSession.ControllerInfo): MediaSession? = mediaSession + + override fun onTaskRemoved(rootIntent: Intent?) { + val currentPlayer = mediaSession?.player + if (currentPlayer == null || !currentPlayer.playWhenReady || currentPlayer.mediaItemCount == 0) { + stopSelf() + } + } + + override fun onDestroy() { + Timber.d("HaMediaSessionService destroyed") + serviceScope.cancel() + mediaSession?.run { + player.release() + release() + } + mediaSession = null + player = null + super.onDestroy() + } + + /** + * Restricts media session connections to trusted controllers (same app, system, + * or apps with MEDIA_CONTENT_CONTROL / notification listener access). + */ + @OptIn(UnstableApi::class) + private inner class MediaSessionCallback : MediaSession.Callback { + override fun onConnect( + session: MediaSession, + controller: MediaSession.ControllerInfo, + ): MediaSession.ConnectionResult { + if (!controller.isTrusted) { + Timber.w( + "Rejecting connection from untrusted media controller package=%s", + sensitive(controller.packageName), + ) + return MediaSession.ConnectionResult.reject() + } + return MediaSession.ConnectionResult.accept( + MediaSession.ConnectionResult.DEFAULT_SESSION_COMMANDS, + MediaSession.ConnectionResult.DEFAULT_PLAYER_COMMANDS, + ) + } + } + + private fun callMediaAction(action: String, extraData: Map = emptyMap()) { + serviceScope.launch(Dispatchers.IO) { + val serverId = mediaControlRepository.getConfiguredServerId() + val entityId = mediaControlRepository.getConfiguredEntityId() + if (serverId == null || entityId == null) { + Timber.w("Cannot call media action %s: no configured entity", action) + return@launch + } + + val actionData = hashMapOf("entity_id" to entityId) + actionData.putAll(extraData) + + try { + serverManager.integrationRepository(serverId) + .callAction(MEDIA_PLAYER_DOMAIN, action, actionData) + } catch (e: CancellationException) { + throw e + } catch (e: Exception) { + Timber.e(e, "Failed to call media action $action") + } + } + } + + private suspend fun loadArtworkAndUpdatePlayer(state: MediaControlState) { + val artworkUrl = resolveArtworkUrl(state) + val pngBytes = if (artworkUrl != null && artworkUrl != currentArtworkUrl) { + val bytes = loadBitmapAsPng(artworkUrl) + if (bytes != null) { + currentArtworkUrl = artworkUrl + currentArtworkBytes = bytes + } + bytes ?: currentArtworkBytes + } else if (artworkUrl == null) { + currentArtworkUrl = null + currentArtworkBytes = null + null + } else { + currentArtworkBytes + } + + withContext(Dispatchers.Main) { + player?.updateState(state = state, artworkPngBytes = pngBytes) + } + } + + private suspend fun resolveArtworkUrl(state: MediaControlState): String? { + val entityPictureUrl = state.entityPictureUrl ?: return null + if (entityPictureUrl.startsWith("http")) return entityPictureUrl + + val baseUrl = try { + serverManager.connectionStateProvider(state.serverId) + .urlFlow() + .firstUrlOrNull() + ?.toString() + ?.removeSuffix("/") + } catch (e: CancellationException) { + throw e + } catch (e: IllegalStateException) { + Timber.e(e, "Server does not exist for artwork URL resolution") + null + } ?: return null + + return "$baseUrl$entityPictureUrl" + } + + internal companion object { + const val ACTION_RESTART_OBSERVATION = + "io.homeassistant.companion.android.mediacontrol.RESTART_OBSERVATION" + val OBSERVATION_RETRY_DELAY = 5.seconds + private const val ARTWORK_SIZE_PX = 512 + + /** + * Starts the service if a media_player entity is configured. + * Should be called from a foreground context (e.g. Activity) to avoid + * Android 15+ restrictions on starting mediaPlayback foreground services from background. + */ + suspend fun startIfConfigured(context: Context, mediaControlRepository: MediaControlRepository) { + val serverId = mediaControlRepository.getConfiguredServerId() + val entityId = mediaControlRepository.getConfiguredEntityId() + if (serverId != null && entityId != null) { + Timber.d("Media control entity configured, starting HaMediaSessionService") + context.startService(Intent(context, HaMediaSessionService::class.java)) + } + } + } + + /** Loads album art and compresses to PNG bytes on the IO dispatcher. */ + private suspend fun loadBitmapAsPng(url: String): ByteArray? = withContext(Dispatchers.IO) { + try { + val request = ImageRequest.Builder(this@HaMediaSessionService) + .data(url) + .size(ARTWORK_SIZE_PX) + .build() + val result = imageLoader.execute(request) + result.image?.toBitmap()?.let { bitmap -> + val stream = ByteArrayOutputStream() + bitmap.compress(CompressFormat.PNG, 100, stream) + stream.toByteArray() + } + } catch (e: CancellationException) { + throw e + } catch (e: Exception) { + Timber.e(e, "Failed to load album art from ${sensitive(url)}") + null + } + } +} diff --git a/app/src/main/kotlin/io/homeassistant/companion/android/mediacontrol/HaRemoteMediaPlayer.kt b/app/src/main/kotlin/io/homeassistant/companion/android/mediacontrol/HaRemoteMediaPlayer.kt new file mode 100644 index 00000000000..fa665369088 --- /dev/null +++ b/app/src/main/kotlin/io/homeassistant/companion/android/mediacontrol/HaRemoteMediaPlayer.kt @@ -0,0 +1,157 @@ +package io.homeassistant.companion.android.mediacontrol + +import android.os.Looper +import androidx.annotation.OptIn +import androidx.media3.common.MediaMetadata +import androidx.media3.common.PlaybackParameters +import androidx.media3.common.Player +import androidx.media3.common.SimpleBasePlayer +import androidx.media3.common.util.UnstableApi +import com.google.common.util.concurrent.Futures +import com.google.common.util.concurrent.ListenableFuture +import io.homeassistant.companion.android.common.data.mediacontrol.MediaControlState +import io.homeassistant.companion.android.common.data.mediacontrol.MediaPlaybackState + +/** + * A [SimpleBasePlayer] that acts as a remote control proxy for a Home Assistant media_player entity. + * It does not play audio itself — it reports state and translates playback commands into callbacks. + */ +@OptIn(UnstableApi::class) +class HaRemoteMediaPlayer(looper: Looper, private val commandCallback: CommandCallback) : SimpleBasePlayer(looper) { + + /** Callback interface for translating player commands into HA service calls. */ + interface CommandCallback { + fun onPlayRequested() + fun onPauseRequested() + fun onSeekRequested(positionMs: Long) + fun onNextRequested() + fun onPreviousRequested() + } + + private var mediaState: MediaControlState? = null + private var artworkBytes: ByteArray? = null + + /** + * Updates the internal state from a new [MediaControlState] and triggers a state refresh. + * @param artworkPngBytes Pre-compressed PNG bytes for album art (compress off main thread). + */ + fun updateState(state: MediaControlState?, artworkPngBytes: ByteArray?) { + mediaState = state + artworkBytes = artworkPngBytes + invalidateState() + } + + override fun getState(): State { + val state = mediaState ?: return buildIdleState() + + val availableCommands = buildAvailableCommands(state) + + val playbackState = when (state.playbackState) { + is MediaPlaybackState.Playing -> STATE_READY + is MediaPlaybackState.Paused -> STATE_READY + is MediaPlaybackState.Buffering -> STATE_BUFFERING + is MediaPlaybackState.Idle -> STATE_ENDED + is MediaPlaybackState.Off -> STATE_IDLE + } + + val isPlaying = state.playbackState is MediaPlaybackState.Playing + + val metadataBuilder = MediaMetadata.Builder() + .setTitle(state.title) + .setArtist(state.artist) + .setAlbumTitle(state.albumName) + artworkBytes?.let { + metadataBuilder.setArtworkData(it, MediaMetadata.PICTURE_TYPE_FRONT_COVER) + } + + val durationUs = state.mediaDurationSeconds + ?.let { (it * 1_000_000).toLong() } + ?: DURATION_UNSET_US + val positionMs = state.mediaPositionSeconds + ?.let { (it * 1000).toLong() } + ?: 0L + + val currentItem = MediaItemData.Builder(state.entityId) + .setMediaMetadata(metadataBuilder.build()) + .setDurationUs(durationUs) + .build() + + // 3-item playlist with current at index 1 so SimpleBasePlayer's seekToNext/seekToPrevious + // find valid adjacent items instead of ignoring the seek on a single-item playlist. + val playlist = listOf( + MediaItemData.Builder(PLACEHOLDER_PREVIOUS_ID).build(), + currentItem, + MediaItemData.Builder(PLACEHOLDER_NEXT_ID).build(), + ) + + return State.Builder() + .setAvailableCommands(availableCommands) + .setPlaybackState(playbackState) + .setPlayWhenReady(isPlaying, PLAY_WHEN_READY_CHANGE_REASON_REMOTE) + .setPlaybackParameters(PlaybackParameters(PLAYBACK_SPEED)) + .setCurrentMediaItemIndex(CURRENT_ITEM_INDEX) + .setContentPositionMs(positionMs) + .setPlaylist(playlist) + .build() + } + + override fun handleSetPlayWhenReady(playWhenReady: Boolean): ListenableFuture<*> { + if (playWhenReady) { + commandCallback.onPlayRequested() + } else { + commandCallback.onPauseRequested() + } + return Futures.immediateVoidFuture() + } + + override fun handleSeek(mediaItemIndex: Int, positionMs: Long, seekCommand: Int): ListenableFuture<*> { + when (seekCommand) { + Player.COMMAND_SEEK_TO_NEXT, + Player.COMMAND_SEEK_TO_NEXT_MEDIA_ITEM, + -> commandCallback.onNextRequested() + + Player.COMMAND_SEEK_TO_PREVIOUS, + Player.COMMAND_SEEK_TO_PREVIOUS_MEDIA_ITEM, + -> commandCallback.onPreviousRequested() + + else -> { + if (mediaState?.supportsSeek == true) { + commandCallback.onSeekRequested(positionMs) + } + } + } + return Futures.immediateVoidFuture() + } + + private fun buildIdleState(): State = State.Builder() + .setAvailableCommands(Player.Commands.EMPTY) + .setPlaybackState(STATE_IDLE) + .setPlayWhenReady(false, PLAY_WHEN_READY_CHANGE_REASON_REMOTE) + .build() + + private fun buildAvailableCommands(state: MediaControlState): Player.Commands { + val builder = Player.Commands.Builder() + if (state.supportsPlay || state.supportsPause) builder.add(Player.COMMAND_PLAY_PAUSE) + if (state.supportsSeek) builder.add(Player.COMMAND_SEEK_IN_CURRENT_MEDIA_ITEM) + builder.add(Player.COMMAND_GET_CURRENT_MEDIA_ITEM) + if (state.supportsPreviousTrack) { + builder.add(Player.COMMAND_SEEK_TO_PREVIOUS) + builder.add(Player.COMMAND_SEEK_TO_PREVIOUS_MEDIA_ITEM) + } + if (state.supportsNextTrack) { + builder.add(Player.COMMAND_SEEK_TO_NEXT) + builder.add(Player.COMMAND_SEEK_TO_NEXT_MEDIA_ITEM) + } + builder.add(Player.COMMAND_GET_METADATA) + builder.add(Player.COMMAND_GET_TIMELINE) + return builder.build() + } + + private companion object { + const val DURATION_UNSET_US = androidx.media3.common.C.TIME_UNSET + const val CURRENT_ITEM_INDEX = 1 + const val PLAYBACK_SPEED = 1.0f + const val PLACEHOLDER_PREVIOUS_ID = "__ha_previous__" + const val PLACEHOLDER_NEXT_ID = "__ha_next__" + } +} diff --git a/app/src/main/kotlin/io/homeassistant/companion/android/settings/SettingsFragment.kt b/app/src/main/kotlin/io/homeassistant/companion/android/settings/SettingsFragment.kt index bc8e65db4e2..6983b657eab 100644 --- a/app/src/main/kotlin/io/homeassistant/companion/android/settings/SettingsFragment.kt +++ b/app/src/main/kotlin/io/homeassistant/companion/android/settings/SettingsFragment.kt @@ -40,6 +40,7 @@ import io.homeassistant.companion.android.settings.developer.DeveloperSettingsFr import io.homeassistant.companion.android.settings.gestures.GesturesFragment import io.homeassistant.companion.android.settings.language.LanguagesProvider import io.homeassistant.companion.android.settings.license.LicensesFragment +import io.homeassistant.companion.android.settings.mediacontrol.MediaControlSettingsFragment import io.homeassistant.companion.android.settings.notification.NotificationChannelFragment import io.homeassistant.companion.android.settings.notification.NotificationHistoryFragment import io.homeassistant.companion.android.settings.qs.ManageTilesFragment @@ -231,6 +232,21 @@ class SettingsFragment( } } + findPreference("media_controls")?.let { + it.isVisible = true + } + findPreference("manage_media_controls")?.setOnPreferenceClickListener { + parentFragmentManager.commit { + replace( + R.id.content, + MediaControlSettingsFragment::class.java, + null, + ) + addToBackStack(getString(commonR.string.media_controls)) + } + return@setOnPreferenceClickListener true + } + if (!isAutomotive && Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU) { findPreference("device_controls")?.let { it.isVisible = true diff --git a/app/src/main/kotlin/io/homeassistant/companion/android/settings/mediacontrol/MediaControlSettingsFragment.kt b/app/src/main/kotlin/io/homeassistant/companion/android/settings/mediacontrol/MediaControlSettingsFragment.kt new file mode 100644 index 00000000000..ef3357cb832 --- /dev/null +++ b/app/src/main/kotlin/io/homeassistant/companion/android/settings/mediacontrol/MediaControlSettingsFragment.kt @@ -0,0 +1,35 @@ +package io.homeassistant.companion.android.settings.mediacontrol + +import android.os.Bundle +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import androidx.compose.ui.platform.ComposeView +import androidx.fragment.app.Fragment +import androidx.fragment.app.viewModels +import dagger.hilt.android.AndroidEntryPoint +import io.homeassistant.companion.android.common.R as commonR +import io.homeassistant.companion.android.settings.addHelpMenuProvider +import io.homeassistant.companion.android.settings.mediacontrol.views.MediaControlSettingsView + +@AndroidEntryPoint +class MediaControlSettingsFragment : Fragment() { + private val viewModel: MediaControlSettingsViewModel by viewModels() + + override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View { + return ComposeView(requireContext()).apply { + setContent { + MediaControlSettingsView(viewModel = viewModel) + } + } + } + + override fun onViewCreated(view: View, savedInstanceState: Bundle?) { + addHelpMenuProvider("https://companion.home-assistant.io/docs/integrations/android-media-controls") + } + + override fun onResume() { + super.onResume() + activity?.title = getString(commonR.string.media_controls) + } +} diff --git a/app/src/main/kotlin/io/homeassistant/companion/android/settings/mediacontrol/MediaControlSettingsViewModel.kt b/app/src/main/kotlin/io/homeassistant/companion/android/settings/mediacontrol/MediaControlSettingsViewModel.kt new file mode 100644 index 00000000000..76f4eac337f --- /dev/null +++ b/app/src/main/kotlin/io/homeassistant/companion/android/settings/mediacontrol/MediaControlSettingsViewModel.kt @@ -0,0 +1,190 @@ +package io.homeassistant.companion.android.settings.mediacontrol + +import android.app.Application +import android.content.Intent +import androidx.lifecycle.AndroidViewModel +import androidx.lifecycle.viewModelScope +import dagger.hilt.android.lifecycle.HiltViewModel +import io.homeassistant.companion.android.common.data.integration.Entity +import io.homeassistant.companion.android.common.data.integration.IntegrationDomains.MEDIA_PLAYER_DOMAIN +import io.homeassistant.companion.android.common.data.mediacontrol.MediaControlRepository +import io.homeassistant.companion.android.common.data.servers.ServerManager +import io.homeassistant.companion.android.common.data.websocket.impl.entities.AreaRegistryResponse +import io.homeassistant.companion.android.common.data.websocket.impl.entities.DeviceRegistryResponse +import io.homeassistant.companion.android.common.data.websocket.impl.entities.EntityRegistryResponse +import io.homeassistant.companion.android.database.server.Server +import io.homeassistant.companion.android.mediacontrol.HaMediaSessionService +import java.util.concurrent.ConcurrentHashMap +import javax.inject.Inject +import kotlinx.coroutines.CancellationException +import kotlinx.coroutines.Dispatchers +import kotlinx.coroutines.async +import kotlinx.coroutines.awaitAll +import kotlinx.coroutines.flow.MutableStateFlow +import kotlinx.coroutines.flow.StateFlow +import kotlinx.coroutines.flow.asStateFlow +import kotlinx.coroutines.flow.update +import kotlinx.coroutines.launch +import timber.log.Timber + +data class MediaControlSettingsUiState( + val servers: List = emptyList(), + val entities: List = emptyList(), + val entityRegistry: List = emptyList(), + val deviceRegistry: List = emptyList(), + val areaRegistry: List = emptyList(), + val selectedServerId: Int = ServerManager.SERVER_ID_ACTIVE, + val selectedEntityId: String = "", + val isConfigured: Boolean = false, +) + +@HiltViewModel +class MediaControlSettingsViewModel @Inject constructor( + private val serverManager: ServerManager, + private val mediaControlRepository: MediaControlRepository, + application: Application, +) : AndroidViewModel(application) { + + private val _uiState = MutableStateFlow(MediaControlSettingsUiState()) + val uiState: StateFlow = _uiState.asStateFlow() + + private val entities = ConcurrentHashMap>() + private val entityRegistries = ConcurrentHashMap>() + private val deviceRegistries = ConcurrentHashMap>() + private val areaRegistries = ConcurrentHashMap>() + + private data class ServerRegistries( + val serverId: Int, + val entities: List, + val entityRegistry: List, + val deviceRegistry: List, + val areaRegistry: List, + ) + + init { + viewModelScope.launch(Dispatchers.IO) { + val loadedServers = serverManager.servers() + _uiState.update { it.copy(servers = loadedServers) } + val results = loadedServers.map { server -> + async { + ServerRegistries( + serverId = server.id, + entities = loadMediaPlayerEntities(server.id), + entityRegistry = loadRegistry(server.id, "entity registry") { + serverManager.webSocketRepository(it).getEntityRegistry() + }, + deviceRegistry = loadRegistry(server.id, "device registry") { + serverManager.webSocketRepository(it).getDeviceRegistry() + }, + areaRegistry = loadRegistry(server.id, "area registry") { + serverManager.webSocketRepository(it).getAreaRegistry() + }, + ) + } + }.awaitAll() + results.forEach { registries -> + entities[registries.serverId] = registries.entities + entityRegistries[registries.serverId] = registries.entityRegistry + deviceRegistries[registries.serverId] = registries.deviceRegistry + areaRegistries[registries.serverId] = registries.areaRegistry + } + + val configuredServerId = mediaControlRepository.getConfiguredServerId() + val configuredEntityId = mediaControlRepository.getConfiguredEntityId() + + if (configuredServerId != null && configuredEntityId != null) { + _uiState.update { + it.copy( + selectedServerId = configuredServerId, + selectedEntityId = configuredEntityId, + isConfigured = true, + ) + } + } else { + _uiState.update { + it.copy(selectedServerId = serverManager.getServer()?.id ?: 0) + } + } + loadEntities(_uiState.value.selectedServerId) + } + } + + fun selectServerId(serverId: Int) { + if (serverId != _uiState.value.selectedServerId) { + _uiState.update { + it.copy(selectedServerId = serverId, selectedEntityId = "") + } + loadEntities(serverId) + } + } + + fun selectEntityId(entityId: String) { + _uiState.update { it.copy(selectedEntityId = entityId) } + } + + /** Saves the current entity selection and starts the media session service. */ + fun saveConfiguration() { + viewModelScope.launch { + val state = _uiState.value + mediaControlRepository.setConfiguredEntity( + serverId = state.selectedServerId, + entityId = state.selectedEntityId, + ) + _uiState.update { it.copy(isConfigured = true) } + startService() + } + } + + /** Clears the configuration and stops the media session service. */ + fun clearConfiguration() { + viewModelScope.launch { + mediaControlRepository.setConfiguredEntity(serverId = null, entityId = null) + _uiState.update { it.copy(selectedEntityId = "", isConfigured = false) } + stopService() + } + } + + private fun loadEntities(serverId: Int) { + _uiState.update { + it.copy( + entities = entities[serverId] ?: emptyList(), + entityRegistry = entityRegistries[serverId] ?: emptyList(), + deviceRegistry = deviceRegistries[serverId] ?: emptyList(), + areaRegistry = areaRegistries[serverId] ?: emptyList(), + ) + } + } + + private fun startService() { + val context = getApplication() + val intent = Intent(context, HaMediaSessionService::class.java) + intent.action = HaMediaSessionService.ACTION_RESTART_OBSERVATION + context.startService(intent) + } + + private fun stopService() { + val context = getApplication() + val intent = Intent(context, HaMediaSessionService::class.java) + context.stopService(intent) + } + + private suspend fun loadMediaPlayerEntities(serverId: Int): List = try { + serverManager.integrationRepository(serverId).getEntities().orEmpty() + .filter { it.domain == MEDIA_PLAYER_DOMAIN } + } catch (e: CancellationException) { + throw e + } catch (e: Exception) { + Timber.e(e, "Couldn't load media_player entities for server") + emptyList() + } + + private suspend fun loadRegistry(serverId: Int, name: String, loader: suspend (Int) -> List?): List = + try { + loader(serverId).orEmpty() + } catch (e: CancellationException) { + throw e + } catch (e: Exception) { + Timber.e(e, "Couldn't load $name for server") + emptyList() + } +} diff --git a/app/src/main/kotlin/io/homeassistant/companion/android/settings/mediacontrol/views/MediaControlSettingsView.kt b/app/src/main/kotlin/io/homeassistant/companion/android/settings/mediacontrol/views/MediaControlSettingsView.kt new file mode 100644 index 00000000000..50a94bb0df6 --- /dev/null +++ b/app/src/main/kotlin/io/homeassistant/companion/android/settings/mediacontrol/views/MediaControlSettingsView.kt @@ -0,0 +1,183 @@ +package io.homeassistant.companion.android.settings.mediacontrol.views + +import androidx.compose.foundation.layout.Box +import androidx.compose.foundation.layout.Column +import androidx.compose.foundation.layout.Spacer +import androidx.compose.foundation.layout.fillMaxWidth +import androidx.compose.foundation.layout.height +import androidx.compose.foundation.layout.padding +import androidx.compose.foundation.rememberScrollState +import androidx.compose.foundation.verticalScroll +import androidx.compose.material3.Text +import androidx.compose.runtime.Composable +import androidx.compose.runtime.getValue +import androidx.compose.ui.Modifier +import androidx.compose.ui.res.stringResource +import androidx.compose.ui.tooling.preview.Preview +import androidx.compose.ui.unit.dp +import androidx.lifecycle.compose.collectAsStateWithLifecycle +import io.homeassistant.companion.android.common.R +import io.homeassistant.companion.android.common.compose.composable.HAFilledButton +import io.homeassistant.companion.android.common.compose.composable.HAPlainButton +import io.homeassistant.companion.android.common.compose.theme.HATextStyle +import io.homeassistant.companion.android.common.compose.theme.HATheme +import io.homeassistant.companion.android.common.compose.theme.HAThemeForPreview +import io.homeassistant.companion.android.common.compose.theme.LocalHAColorScheme +import io.homeassistant.companion.android.common.data.integration.Entity +import io.homeassistant.companion.android.common.data.websocket.impl.entities.AreaRegistryResponse +import io.homeassistant.companion.android.common.data.websocket.impl.entities.DeviceRegistryResponse +import io.homeassistant.companion.android.common.data.websocket.impl.entities.EntityRegistryResponse +import io.homeassistant.companion.android.database.server.Server +import io.homeassistant.companion.android.settings.mediacontrol.MediaControlSettingsViewModel +import io.homeassistant.companion.android.util.compose.ServerExposedDropdownMenu +import io.homeassistant.companion.android.util.compose.entity.EntityPicker +import io.homeassistant.companion.android.util.safeBottomPaddingValues + +/** Outer composable that extracts state from the ViewModel and delegates to the stateless content. */ +@Composable +fun MediaControlSettingsView(viewModel: MediaControlSettingsViewModel, modifier: Modifier = Modifier) { + val uiState by viewModel.uiState.collectAsStateWithLifecycle() + HATheme { + MediaControlSettingsContent( + servers = uiState.servers, + entities = uiState.entities, + entityRegistry = uiState.entityRegistry, + deviceRegistry = uiState.deviceRegistry, + areaRegistry = uiState.areaRegistry, + selectedServerId = uiState.selectedServerId, + selectedEntityId = uiState.selectedEntityId, + isConfigured = uiState.isConfigured, + onServerSelected = viewModel::selectServerId, + onEntitySelected = viewModel::selectEntityId, + onEntityCleared = { viewModel.selectEntityId("") }, + onSave = viewModel::saveConfiguration, + onClear = viewModel::clearConfiguration, + modifier = modifier, + ) + } +} + +@Composable +internal fun MediaControlSettingsContent( + servers: List, + entities: List, + entityRegistry: List, + deviceRegistry: List, + areaRegistry: List, + selectedServerId: Int, + selectedEntityId: String, + isConfigured: Boolean, + onServerSelected: (Int) -> Unit, + onEntitySelected: (String) -> Unit, + onEntityCleared: () -> Unit, + onSave: () -> Unit, + onClear: () -> Unit, + modifier: Modifier = Modifier, +) { + val scrollState = rememberScrollState() + val colorScheme = LocalHAColorScheme.current + val saveEnabled = selectedEntityId.isNotBlank() && + servers.any { it.id == selectedServerId } && + entities.any { it.entityId == selectedEntityId } + + Box( + modifier = modifier.verticalScroll(scrollState), + ) { + Column( + modifier = Modifier + .padding(safeBottomPaddingValues(applyHorizontal = false)) + .padding(all = 16.dp), + ) { + Text( + text = stringResource(R.string.media_control_description), + style = HATextStyle.Body, + color = colorScheme.colorTextSecondary, + ) + + Spacer(modifier = Modifier.height(16.dp)) + + if (servers.size > 1 || servers.none { it.id == selectedServerId }) { + ServerExposedDropdownMenu( + servers = servers, + current = selectedServerId, + onSelected = onServerSelected, + title = R.string.server, + ) + Spacer(modifier = Modifier.height(16.dp)) + } + + EntityPicker( + entities = entities, + selectedEntityId = selectedEntityId, + onEntitySelectedId = onEntitySelected, + onEntityCleared = onEntityCleared, + addButtonText = stringResource(R.string.media_control_select_entity), + entityRegistry = entityRegistry, + deviceRegistry = deviceRegistry, + areaRegistry = areaRegistry, + ) + + Spacer(modifier = Modifier.height(16.dp)) + + HAFilledButton( + text = stringResource(R.string.save), + onClick = onSave, + enabled = saveEnabled, + modifier = Modifier.fillMaxWidth(), + ) + + if (isConfigured) { + Spacer(modifier = Modifier.height(8.dp)) + HAPlainButton( + text = stringResource(R.string.media_control_clear), + onClick = onClear, + modifier = Modifier.fillMaxWidth(), + ) + } + } + } +} + +@Preview +@Composable +private fun MediaControlSettingsContentPreview() { + HAThemeForPreview { + MediaControlSettingsContent( + servers = emptyList(), + entities = emptyList(), + entityRegistry = emptyList(), + deviceRegistry = emptyList(), + areaRegistry = emptyList(), + selectedServerId = 0, + selectedEntityId = "", + isConfigured = false, + onServerSelected = {}, + onEntitySelected = {}, + onEntityCleared = {}, + onSave = {}, + onClear = {}, + ) + } +} + +@Preview +@Composable +private fun MediaControlSettingsContentConfiguredPreview() { + HAThemeForPreview { + MediaControlSettingsContent( + servers = emptyList(), + entities = emptyList(), + entityRegistry = emptyList(), + deviceRegistry = emptyList(), + areaRegistry = emptyList(), + selectedServerId = 1, + selectedEntityId = "media_player.living_room", + isConfigured = true, + onServerSelected = {}, + onEntitySelected = {}, + onEntityCleared = {}, + onSave = {}, + onClear = {}, + ) + } +} diff --git a/app/src/main/kotlin/io/homeassistant/companion/android/webview/WebViewActivity.kt b/app/src/main/kotlin/io/homeassistant/companion/android/webview/WebViewActivity.kt index 4408073a597..6921d7b80c3 100644 --- a/app/src/main/kotlin/io/homeassistant/companion/android/webview/WebViewActivity.kt +++ b/app/src/main/kotlin/io/homeassistant/companion/android/webview/WebViewActivity.kt @@ -99,6 +99,7 @@ import io.homeassistant.companion.android.barcode.BarcodeScannerActivity import io.homeassistant.companion.android.common.R as commonR import io.homeassistant.companion.android.common.data.keychain.KeyChainRepository import io.homeassistant.companion.android.common.data.keychain.NamedKeyChain +import io.homeassistant.companion.android.common.data.mediacontrol.MediaControlRepository import io.homeassistant.companion.android.common.data.prefs.NightModeTheme import io.homeassistant.companion.android.common.data.servers.ServerManager import io.homeassistant.companion.android.common.util.AppVersionProvider @@ -125,6 +126,7 @@ import io.homeassistant.companion.android.databinding.DialogAuthenticationBindin import io.homeassistant.companion.android.improv.ui.ImprovPermissionDialog import io.homeassistant.companion.android.improv.ui.ImprovSetupDialog import io.homeassistant.companion.android.launch.LaunchActivity +import io.homeassistant.companion.android.mediacontrol.HaMediaSessionService import io.homeassistant.companion.android.nfc.WriteNfcTag import io.homeassistant.companion.android.sensors.SensorReceiver import io.homeassistant.companion.android.sensors.SensorWorker @@ -255,6 +257,9 @@ class WebViewActivity : @Inject lateinit var entityAddToHandler: EntityAddToHandler + @Inject + lateinit var mediaControlRepository: MediaControlRepository + @Inject lateinit var dataSourceFactory: DataSource.Factory @@ -1205,6 +1210,7 @@ class WebViewActivity : lifecycleScope.launch { SensorWorker.start(this@WebViewActivity) WebsocketManager.start(this@WebViewActivity) + HaMediaSessionService.startIfConfigured(this@WebViewActivity, mediaControlRepository) WebView.setWebContentsDebuggingEnabled(BuildConfig.DEBUG || presenter.isWebViewDebugEnabled()) diff --git a/app/src/main/res/drawable/ic_play_circle_outline.xml b/app/src/main/res/drawable/ic_play_circle_outline.xml new file mode 100644 index 00000000000..136420a14e8 --- /dev/null +++ b/app/src/main/res/drawable/ic_play_circle_outline.xml @@ -0,0 +1,7 @@ + + + diff --git a/app/src/main/res/xml/changelog_master.xml b/app/src/main/res/xml/changelog_master.xml index 6ad3a5a11e5..9f9b219cc20 100755 --- a/app/src/main/res/xml/changelog_master.xml +++ b/app/src/main/res/xml/changelog_master.xml @@ -2,6 +2,7 @@ + Add native media controls in notification shade for HA media player entities Expanded wake word support to continue conversations after using your wake word to open Assist Assist conversations started with a wake word now auto-close after 30 seconds of inactivity Bug fixes and dependency updates diff --git a/app/src/main/res/xml/preferences.xml b/app/src/main/res/xml/preferences.xml index 90faa41c188..cc1243ec614 100644 --- a/app/src/main/res/xml/preferences.xml +++ b/app/src/main/res/xml/preferences.xml @@ -155,6 +155,16 @@ android:title="@string/aa_favorites" android:summary="@string/aa_favorites_summary" /> + + + ()) } returns null + coEvery { serverManager.integrationRepository(any()) } returns mockk(relaxed = true) + coEvery { serverManager.webSocketRepository(any()) } returns mockk(relaxed = true) + coEvery { mediaControlRepository.getConfiguredServerId() } returns null + coEvery { mediaControlRepository.getConfiguredEntityId() } returns null + } + + @AfterEach + fun tearDown() { + Dispatchers.resetMain() + } + + private fun createViewModel(): MediaControlSettingsViewModel { + return MediaControlSettingsViewModel( + serverManager = serverManager, + mediaControlRepository = mediaControlRepository, + application = application, + ) + } + + @Nested + inner class EntitySelectionTest { + + @Test + fun `Given viewModel when selectEntityId called then selectedEntityId is updated`() = runTest(testDispatcher) { + viewModel = createViewModel() + + viewModel.selectEntityId("media_player.bedroom") + + assertEquals("media_player.bedroom", viewModel.uiState.value.selectedEntityId) + } + + @Test + fun `Given viewModel when selectEntityId with empty then selectedEntityId is empty`() = runTest(testDispatcher) { + viewModel = createViewModel() + viewModel.selectEntityId("media_player.test") + + viewModel.selectEntityId("") + + assertEquals("", viewModel.uiState.value.selectedEntityId) + } + } + + @Nested + inner class ServerSelectionTest { + + @Test + fun `Given entity selected when switching server then entity is cleared`() = runTest(testDispatcher) { + viewModel = createViewModel() + viewModel.selectEntityId("media_player.living_room") + + viewModel.selectServerId(99) + + assertEquals("", viewModel.uiState.value.selectedEntityId) + } + + @Test + fun `Given entity selected when same server reselected then entity is preserved`() = runTest(testDispatcher) { + viewModel = createViewModel() + viewModel.selectEntityId("media_player.living_room") + + viewModel.selectServerId(viewModel.uiState.value.selectedServerId) + + assertEquals("media_player.living_room", viewModel.uiState.value.selectedEntityId) + } + } + + @Nested + inner class SaveConfigurationTest { + + @Test + fun `Given entity selected when saveConfiguration called then repository is updated`() = runTest(testDispatcher) { + viewModel = createViewModel() + viewModel.selectEntityId("media_player.living_room") + + viewModel.saveConfiguration() + + coVerify { + mediaControlRepository.setConfiguredEntity( + serverId = any(), + entityId = "media_player.living_room", + ) + } + assertTrue(viewModel.uiState.value.isConfigured) + } + } + + @Nested + inner class ClearConfigurationTest { + + @Test + fun `Given viewModel when clearConfiguration called then repository cleared and state reset`() = runTest(testDispatcher) { + viewModel = createViewModel() + + viewModel.clearConfiguration() + + coVerify { + mediaControlRepository.setConfiguredEntity(serverId = null, entityId = null) + } + assertEquals("", viewModel.uiState.value.selectedEntityId) + assertFalse(viewModel.uiState.value.isConfigured) + } + } +} diff --git a/automotive/lint-baseline.xml b/automotive/lint-baseline.xml index 95409a9d064..e06ada682eb 100644 --- a/automotive/lint-baseline.xml +++ b/automotive/lint-baseline.xml @@ -96,7 +96,7 @@ errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"> @@ -107,7 +107,7 @@ errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"> @@ -349,7 +349,7 @@ errorLine2=" ~~~~~~~~~~~"> @@ -360,7 +360,7 @@ errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"> @@ -1460,7 +1460,7 @@ errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"> @@ -1471,7 +1471,7 @@ errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"> @@ -1482,7 +1482,7 @@ errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"> @@ -1493,7 +1493,7 @@ errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"> @@ -1504,7 +1504,7 @@ errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"> @@ -1515,7 +1515,7 @@ errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"> @@ -1526,7 +1526,7 @@ errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"> @@ -1537,7 +1537,7 @@ errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"> @@ -1548,7 +1548,7 @@ errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"> @@ -3239,6 +3239,61 @@ column="14"/> + + + + + + + + + + + + + + + + + + + + + + + + + + + + state == "streaming" else -> true } + +/** Returns the bitmask of supported features for this entity, or 0 if unavailable. */ +private fun Entity.supportedFeatures(): Int = (attributes["supported_features"] as? Number)?.toInt() ?: 0 + +/** Whether this media_player entity supports pause. */ +internal fun Entity.supportsPause(): Boolean = domain == MEDIA_PLAYER_DOMAIN && + (supportedFeatures() and EntityExt.MEDIA_PLAYER_SUPPORT_PAUSE != 0) + +/** Whether this media_player entity supports seek. */ +internal fun Entity.supportsSeek(): Boolean = domain == MEDIA_PLAYER_DOMAIN && + (supportedFeatures() and EntityExt.MEDIA_PLAYER_SUPPORT_SEEK != 0) + +/** Whether this media_player entity supports previous track. */ +internal fun Entity.supportsPreviousTrack(): Boolean = domain == MEDIA_PLAYER_DOMAIN && + (supportedFeatures() and EntityExt.MEDIA_PLAYER_SUPPORT_PREVIOUS_TRACK != 0) + +/** Whether this media_player entity supports next track. */ +internal fun Entity.supportsNextTrack(): Boolean = domain == MEDIA_PLAYER_DOMAIN && + (supportedFeatures() and EntityExt.MEDIA_PLAYER_SUPPORT_NEXT_TRACK != 0) + +/** Whether this media_player entity supports play. */ +internal fun Entity.supportsPlay(): Boolean = domain == MEDIA_PLAYER_DOMAIN && + (supportedFeatures() and EntityExt.MEDIA_PLAYER_SUPPORT_PLAY != 0) + +/** Returns the media title, if available. */ +internal fun Entity.getMediaTitle(): String? = + if (domain == MEDIA_PLAYER_DOMAIN) attributes["media_title"]?.toString() else null + +/** Returns the media artist, falling back to album artist if available. */ +internal fun Entity.getMediaArtist(): String? = if (domain == MEDIA_PLAYER_DOMAIN) { + (attributes["media_artist"] ?: attributes["media_album_artist"])?.toString() +} else { + null +} + +/** Returns the media album name, if available. */ +internal fun Entity.getMediaAlbumName(): String? = + if (domain == MEDIA_PLAYER_DOMAIN) attributes["media_album_name"]?.toString() else null + +/** Returns the current media position in seconds, if available. */ +internal fun Entity.getMediaPosition(): Double? = + if (domain == MEDIA_PLAYER_DOMAIN) attributes["media_position"]?.toString()?.toDoubleOrNull() else null + +/** Returns the media duration in seconds, if available. */ +internal fun Entity.getMediaDuration(): Double? = + if (domain == MEDIA_PLAYER_DOMAIN) attributes["media_duration"]?.toString()?.toDoubleOrNull() else null + +/** Returns the entity_picture attribute URL, if available. */ +internal fun Entity.getEntityPictureUrl(): String? = + if (domain == MEDIA_PLAYER_DOMAIN) attributes["entity_picture"]?.toString() else null diff --git a/common/src/main/kotlin/io/homeassistant/companion/android/common/data/mediacontrol/MediaControlModule.kt b/common/src/main/kotlin/io/homeassistant/companion/android/common/data/mediacontrol/MediaControlModule.kt new file mode 100644 index 00000000000..5fb1003b062 --- /dev/null +++ b/common/src/main/kotlin/io/homeassistant/companion/android/common/data/mediacontrol/MediaControlModule.kt @@ -0,0 +1,14 @@ +package io.homeassistant.companion.android.common.data.mediacontrol + +import dagger.Binds +import dagger.Module +import dagger.hilt.InstallIn +import dagger.hilt.components.SingletonComponent + +@Module +@InstallIn(SingletonComponent::class) +internal abstract class MediaControlModule { + + @Binds + abstract fun bindMediaControlRepository(impl: MediaControlRepositoryImpl): MediaControlRepository +} diff --git a/common/src/main/kotlin/io/homeassistant/companion/android/common/data/mediacontrol/MediaControlRepository.kt b/common/src/main/kotlin/io/homeassistant/companion/android/common/data/mediacontrol/MediaControlRepository.kt new file mode 100644 index 00000000000..3d75981b66a --- /dev/null +++ b/common/src/main/kotlin/io/homeassistant/companion/android/common/data/mediacontrol/MediaControlRepository.kt @@ -0,0 +1,22 @@ +package io.homeassistant.companion.android.common.data.mediacontrol + +import kotlinx.coroutines.flow.Flow + +/** + * Manages the configuration and state observation for a single media_player entity + * used to drive native Android media controls in the notification shade. + */ +interface MediaControlRepository { + + /** Emits the current [MediaControlState] whenever the configured entity's state changes. Emits null when not configured. */ + fun observeMediaControlState(): Flow + + /** Returns the currently configured server ID, or null if not configured. */ + suspend fun getConfiguredServerId(): Int? + + /** Returns the currently configured entity ID, or null if not configured. */ + suspend fun getConfiguredEntityId(): String? + + /** Sets the configured media_player entity. Pass null values to clear the configuration. */ + suspend fun setConfiguredEntity(serverId: Int?, entityId: String?) +} diff --git a/common/src/main/kotlin/io/homeassistant/companion/android/common/data/mediacontrol/MediaControlRepositoryImpl.kt b/common/src/main/kotlin/io/homeassistant/companion/android/common/data/mediacontrol/MediaControlRepositoryImpl.kt new file mode 100644 index 00000000000..c1aed2a4283 --- /dev/null +++ b/common/src/main/kotlin/io/homeassistant/companion/android/common/data/mediacontrol/MediaControlRepositoryImpl.kt @@ -0,0 +1,112 @@ +package io.homeassistant.companion.android.common.data.mediacontrol + +import io.homeassistant.companion.android.common.data.integration.Entity +import io.homeassistant.companion.android.common.data.integration.applyCompressedStateDiff +import io.homeassistant.companion.android.common.data.integration.getEntityPictureUrl +import io.homeassistant.companion.android.common.data.integration.getMediaAlbumName +import io.homeassistant.companion.android.common.data.integration.getMediaArtist +import io.homeassistant.companion.android.common.data.integration.getMediaDuration +import io.homeassistant.companion.android.common.data.integration.getMediaPosition +import io.homeassistant.companion.android.common.data.integration.getMediaTitle +import io.homeassistant.companion.android.common.data.integration.supportsNextTrack +import io.homeassistant.companion.android.common.data.integration.supportsPause +import io.homeassistant.companion.android.common.data.integration.supportsPlay +import io.homeassistant.companion.android.common.data.integration.supportsPreviousTrack +import io.homeassistant.companion.android.common.data.integration.supportsSeek +import io.homeassistant.companion.android.common.data.prefs.PrefsRepository +import io.homeassistant.companion.android.common.data.servers.ServerManager +import io.homeassistant.companion.android.util.sensitive +import javax.inject.Inject +import kotlinx.coroutines.CancellationException +import kotlinx.coroutines.flow.Flow +import kotlinx.coroutines.flow.distinctUntilChanged +import kotlinx.coroutines.flow.flow +import timber.log.Timber + +internal class MediaControlRepositoryImpl @Inject constructor( + private val prefsRepository: PrefsRepository, + private val serverManager: ServerManager, +) : MediaControlRepository { + + override fun observeMediaControlState(): Flow = flow { + val serverId = prefsRepository.getMediaControlServerId() + val entityId = prefsRepository.getMediaControlEntityId() + if (serverId == null || entityId == null) { + emit(null) + return@flow + } + + try { + val stateFlow = serverManager.webSocketRepository(serverId) + .getCompressedStateAndChanges(listOf(entityId)) + if (stateFlow == null) { + Timber.w("WebSocket subscription returned null for entity ${sensitive(entityId)}") + emit(null) + return@flow + } + + var currentEntity: Entity? = null + stateFlow.collect { event -> + event.added?.get(entityId)?.let { + currentEntity = it.toEntity(entityId) + } + event.changed?.get(entityId)?.let { diff -> + currentEntity = currentEntity?.applyCompressedStateDiff(diff) + } + event.removed?.let { removed -> + if (entityId in removed) { + currentEntity = null + } + } + + val entity = currentEntity + if (entity != null) { + emit(entity.toMediaControlState(serverId = serverId)) + } else { + emit(null) + } + } + } catch (e: CancellationException) { + throw e + } catch (e: Exception) { + Timber.e(e, "Failed to subscribe to media control entity ${sensitive(entityId)}") + emit(null) + } + }.distinctUntilChanged() + + override suspend fun getConfiguredServerId(): Int? = prefsRepository.getMediaControlServerId() + + override suspend fun getConfiguredEntityId(): String? = prefsRepository.getMediaControlEntityId() + + override suspend fun setConfiguredEntity(serverId: Int?, entityId: String?) { + prefsRepository.setMediaControlServerId(serverId) + prefsRepository.setMediaControlEntityId(entityId) + } +} + +private fun Entity.toMediaControlState(serverId: Int): MediaControlState { + val playbackState = when (state) { + "playing" -> MediaPlaybackState.Playing + "paused" -> MediaPlaybackState.Paused + "buffering" -> MediaPlaybackState.Buffering + "idle", "standby" -> MediaPlaybackState.Idle + else -> MediaPlaybackState.Off + } + + return MediaControlState( + entityId = entityId, + serverId = serverId, + playbackState = playbackState, + title = getMediaTitle(), + artist = getMediaArtist(), + albumName = getMediaAlbumName(), + entityPictureUrl = getEntityPictureUrl(), + mediaDurationSeconds = getMediaDuration(), + mediaPositionSeconds = getMediaPosition(), + supportsPause = supportsPause(), + supportsPlay = supportsPlay(), + supportsSeek = supportsSeek(), + supportsPreviousTrack = supportsPreviousTrack(), + supportsNextTrack = supportsNextTrack(), + ) +} diff --git a/common/src/main/kotlin/io/homeassistant/companion/android/common/data/mediacontrol/MediaControlState.kt b/common/src/main/kotlin/io/homeassistant/companion/android/common/data/mediacontrol/MediaControlState.kt new file mode 100644 index 00000000000..eadb793687b --- /dev/null +++ b/common/src/main/kotlin/io/homeassistant/companion/android/common/data/mediacontrol/MediaControlState.kt @@ -0,0 +1,33 @@ +package io.homeassistant.companion.android.common.data.mediacontrol + +/** + * Represents the playback state of a media player entity used for native Android media controls. + */ +sealed interface MediaPlaybackState { + data object Playing : MediaPlaybackState + data object Paused : MediaPlaybackState + data object Idle : MediaPlaybackState + data object Buffering : MediaPlaybackState + data object Off : MediaPlaybackState +} + +/** + * Captures all the information from a Home Assistant media_player entity that is needed + * to populate an Android MediaSession. + */ +data class MediaControlState( + val entityId: String, + val serverId: Int, + val playbackState: MediaPlaybackState, + val title: String?, + val artist: String?, + val albumName: String?, + val entityPictureUrl: String?, + val mediaDurationSeconds: Double?, + val mediaPositionSeconds: Double?, + val supportsPause: Boolean, + val supportsPlay: Boolean, + val supportsSeek: Boolean, + val supportsPreviousTrack: Boolean, + val supportsNextTrack: Boolean, +) diff --git a/common/src/main/kotlin/io/homeassistant/companion/android/common/data/prefs/PrefsRepository.kt b/common/src/main/kotlin/io/homeassistant/companion/android/common/data/prefs/PrefsRepository.kt index c70b3d27b9c..13ea50fc747 100644 --- a/common/src/main/kotlin/io/homeassistant/companion/android/common/data/prefs/PrefsRepository.kt +++ b/common/src/main/kotlin/io/homeassistant/companion/android/common/data/prefs/PrefsRepository.kt @@ -140,4 +140,16 @@ interface PrefsRepository { suspend fun getSelectedWakeWord(): String? suspend fun setSelectedWakeWord(wakeWord: String) + + /** Returns the server ID of the configured media control entity, or null if not configured. */ + suspend fun getMediaControlServerId(): Int? + + /** Sets the server ID for the media control entity. Pass null to clear. */ + suspend fun setMediaControlServerId(serverId: Int?) + + /** Returns the entity ID of the configured media control entity, or null if not configured. */ + suspend fun getMediaControlEntityId(): String? + + /** Sets the entity ID for the media control entity. Pass null to clear. */ + suspend fun setMediaControlEntityId(entityId: String?) } diff --git a/common/src/main/kotlin/io/homeassistant/companion/android/common/data/prefs/PrefsRepositoryImpl.kt b/common/src/main/kotlin/io/homeassistant/companion/android/common/data/prefs/PrefsRepositoryImpl.kt index c70fd6abeed..d0aaa9a9ee9 100644 --- a/common/src/main/kotlin/io/homeassistant/companion/android/common/data/prefs/PrefsRepositoryImpl.kt +++ b/common/src/main/kotlin/io/homeassistant/companion/android/common/data/prefs/PrefsRepositoryImpl.kt @@ -46,6 +46,8 @@ private const val PREF_CHANGE_LOG_POPUP_ENABLED = "change_log_popup_enabled" private const val PREF_SHOW_PRIVACY_HINT = "show_privacy_hint" private const val PREF_WAKE_WORD_ENABLED = "wake_word_enabled" private const val PREF_SELECTED_WAKE_WORD = "selected_wake_word" +private const val PREF_MEDIA_CONTROL_SERVER_ID = "media_control_server_id" +private const val PREF_MEDIA_CONTROL_ENTITY_ID = "media_control_entity_id" /** * This class ensure that when we use the local storage in [PrefsRepositoryImpl] the migrations has been made @@ -356,6 +358,11 @@ internal class PrefsRepositoryImpl @Inject constructor( localStorage().remove(CONTROLS_PANEL_SERVER) setControlsPanelPath(null) } + + if (getMediaControlServerId() == serverId) { + setMediaControlServerId(null) + setMediaControlEntityId(null) + } } override suspend fun showPrivacyHint(): Boolean { @@ -381,4 +388,28 @@ internal class PrefsRepositoryImpl @Inject constructor( override suspend fun setSelectedWakeWord(wakeWord: String) { localStorage().putString(PREF_SELECTED_WAKE_WORD, wakeWord) } + + override suspend fun getMediaControlServerId(): Int? { + return localStorage().getInt(PREF_MEDIA_CONTROL_SERVER_ID) + } + + override suspend fun setMediaControlServerId(serverId: Int?) { + if (serverId == null) { + localStorage().remove(PREF_MEDIA_CONTROL_SERVER_ID) + } else { + localStorage().putInt(PREF_MEDIA_CONTROL_SERVER_ID, serverId) + } + } + + override suspend fun getMediaControlEntityId(): String? { + return localStorage().getString(PREF_MEDIA_CONTROL_ENTITY_ID) + } + + override suspend fun setMediaControlEntityId(entityId: String?) { + if (entityId == null) { + localStorage().remove(PREF_MEDIA_CONTROL_ENTITY_ID) + } else { + localStorage().putString(PREF_MEDIA_CONTROL_ENTITY_ID, entityId) + } + } } diff --git a/common/src/main/res/values/strings.xml b/common/src/main/res/values/strings.xml index 033e785cf63..9ffde2b5f64 100644 --- a/common/src/main/res/values/strings.xml +++ b/common/src/main/res/values/strings.xml @@ -451,6 +451,11 @@ Enter address manually What is your Home Assistant address? Unable to add Matter device? + Media controls + Control a media player entity from the notification shade + Select a media_player entity to show as a native media control in the notification shade. You can control playback without opening the app. + Select media player entity + Clear configuration Matter is currently unavailable Add Matter device Please connect to your Home Assistant server before adding a Matter device. diff --git a/common/src/test/kotlin/io/homeassistant/companion/android/common/data/mediacontrol/MediaControlRepositoryImplTest.kt b/common/src/test/kotlin/io/homeassistant/companion/android/common/data/mediacontrol/MediaControlRepositoryImplTest.kt new file mode 100644 index 00000000000..78681ccef4c --- /dev/null +++ b/common/src/test/kotlin/io/homeassistant/companion/android/common/data/mediacontrol/MediaControlRepositoryImplTest.kt @@ -0,0 +1,348 @@ +package io.homeassistant.companion.android.common.data.mediacontrol + +import app.cash.turbine.test +import io.homeassistant.companion.android.common.data.integration.EntityExt +import io.homeassistant.companion.android.common.data.prefs.PrefsRepository +import io.homeassistant.companion.android.common.data.servers.ServerManager +import io.homeassistant.companion.android.common.data.websocket.WebSocketRepository +import io.homeassistant.companion.android.common.data.websocket.impl.entities.CompressedEntityState +import io.homeassistant.companion.android.common.data.websocket.impl.entities.CompressedStateChangedEvent +import io.homeassistant.companion.android.testing.unit.ConsoleLogExtension +import io.mockk.coEvery +import io.mockk.coVerify +import io.mockk.mockk +import kotlinx.coroutines.flow.MutableSharedFlow +import kotlinx.coroutines.flow.flowOf +import kotlinx.coroutines.test.runTest +import kotlinx.serialization.json.JsonPrimitive +import org.junit.jupiter.api.Assertions.assertEquals +import org.junit.jupiter.api.Assertions.assertNull +import org.junit.jupiter.api.Assertions.assertTrue +import org.junit.jupiter.api.BeforeEach +import org.junit.jupiter.api.Nested +import org.junit.jupiter.api.Test +import org.junit.jupiter.api.extension.ExtendWith + +@ExtendWith(ConsoleLogExtension::class) +class MediaControlRepositoryImplTest { + + private val prefsRepository: PrefsRepository = mockk(relaxed = true) + private val serverManager: ServerManager = mockk(relaxed = true) + private val webSocketRepository: WebSocketRepository = mockk(relaxed = true) + + private lateinit var repository: MediaControlRepositoryImpl + + @BeforeEach + fun setUp() { + coEvery { serverManager.webSocketRepository(any()) } returns webSocketRepository + repository = MediaControlRepositoryImpl( + prefsRepository = prefsRepository, + serverManager = serverManager, + ) + } + + @Nested + inner class ObserveMediaControlStateTest { + + @Test + fun `Given no configured entity when observing then emit null`() = runTest { + coEvery { prefsRepository.getMediaControlServerId() } returns null + coEvery { prefsRepository.getMediaControlEntityId() } returns null + + repository.observeMediaControlState().test { + assertNull(awaitItem()) + awaitComplete() + } + } + + @Test + fun `Given configured entity when state arrives then emit MediaControlState`() = runTest { + coEvery { prefsRepository.getMediaControlServerId() } returns 1 + coEvery { prefsRepository.getMediaControlEntityId() } returns "media_player.test" + + val entityState = CompressedEntityState( + state = JsonPrimitive("playing"), + attributes = mapOf( + "friendly_name" to "Test Player", + "media_title" to "Test Song", + "media_artist" to "Test Artist", + "supported_features" to + (EntityExt.MEDIA_PLAYER_SUPPORT_PLAY or EntityExt.MEDIA_PLAYER_SUPPORT_PAUSE), + ), + lastChanged = 1000.0, + lastUpdated = 1000.0, + ) + val event = CompressedStateChangedEvent( + added = mapOf("media_player.test" to entityState), + ) + coEvery { + webSocketRepository.getCompressedStateAndChanges(listOf("media_player.test")) + } returns flowOf(event) + + repository.observeMediaControlState().test { + val state = awaitItem() + assertEquals("media_player.test", state?.entityId) + assertEquals(1, state?.serverId) + assertEquals(MediaPlaybackState.Playing, state?.playbackState) + assertEquals("Test Song", state?.title) + assertEquals("Test Artist", state?.artist) + awaitComplete() + } + } + + @Test + fun `Given configured entity when entity removed then emit null`() = runTest { + coEvery { prefsRepository.getMediaControlServerId() } returns 1 + coEvery { prefsRepository.getMediaControlEntityId() } returns "media_player.test" + + val event = CompressedStateChangedEvent( + removed = listOf("media_player.test"), + ) + coEvery { + webSocketRepository.getCompressedStateAndChanges(listOf("media_player.test")) + } returns flowOf(event) + + repository.observeMediaControlState().test { + assertNull(awaitItem()) + awaitComplete() + } + } + + @Test + fun `Given configured entity when websocket returns null then emit null`() = runTest { + coEvery { prefsRepository.getMediaControlServerId() } returns 1 + coEvery { prefsRepository.getMediaControlEntityId() } returns "media_player.test" + coEvery { + webSocketRepository.getCompressedStateAndChanges(listOf("media_player.test")) + } returns null + + repository.observeMediaControlState().test { + assertNull(awaitItem()) + awaitComplete() + } + } + } + + @Nested + inner class PlaybackStateMappingTest { + + private fun configureEntity() { + coEvery { prefsRepository.getMediaControlServerId() } returns 1 + coEvery { prefsRepository.getMediaControlEntityId() } returns "media_player.test" + } + + private fun entityWithState(state: String, attributes: Map = emptyMap()) = CompressedEntityState( + state = JsonPrimitive(state), + attributes = attributes, + lastChanged = 1000.0, + lastUpdated = 1000.0, + ) + + @Test + fun `Given paused state then maps to Paused`() = runTest { + configureEntity() + coEvery { + webSocketRepository.getCompressedStateAndChanges(any()) + } returns flowOf(CompressedStateChangedEvent(added = mapOf("media_player.test" to entityWithState("paused")))) + + repository.observeMediaControlState().test { + assertEquals(MediaPlaybackState.Paused, awaitItem()?.playbackState) + awaitComplete() + } + } + + @Test + fun `Given buffering state then maps to Buffering`() = runTest { + configureEntity() + coEvery { + webSocketRepository.getCompressedStateAndChanges(any()) + } returns flowOf(CompressedStateChangedEvent(added = mapOf("media_player.test" to entityWithState("buffering")))) + + repository.observeMediaControlState().test { + assertEquals(MediaPlaybackState.Buffering, awaitItem()?.playbackState) + awaitComplete() + } + } + + @Test + fun `Given idle state then maps to Idle`() = runTest { + configureEntity() + coEvery { + webSocketRepository.getCompressedStateAndChanges(any()) + } returns flowOf(CompressedStateChangedEvent(added = mapOf("media_player.test" to entityWithState("idle")))) + + repository.observeMediaControlState().test { + assertEquals(MediaPlaybackState.Idle, awaitItem()?.playbackState) + awaitComplete() + } + } + + @Test + fun `Given standby state then maps to Idle`() = runTest { + configureEntity() + coEvery { + webSocketRepository.getCompressedStateAndChanges(any()) + } returns flowOf(CompressedStateChangedEvent(added = mapOf("media_player.test" to entityWithState("standby")))) + + repository.observeMediaControlState().test { + assertEquals(MediaPlaybackState.Idle, awaitItem()?.playbackState) + awaitComplete() + } + } + + @Test + fun `Given off state then maps to Off`() = runTest { + configureEntity() + coEvery { + webSocketRepository.getCompressedStateAndChanges(any()) + } returns flowOf(CompressedStateChangedEvent(added = mapOf("media_player.test" to entityWithState("off")))) + + repository.observeMediaControlState().test { + assertEquals(MediaPlaybackState.Off, awaitItem()?.playbackState) + awaitComplete() + } + } + + @Test + fun `Given unknown state then maps to Off`() = runTest { + configureEntity() + coEvery { + webSocketRepository.getCompressedStateAndChanges(any()) + } returns flowOf(CompressedStateChangedEvent(added = mapOf("media_player.test" to entityWithState("unavailable")))) + + repository.observeMediaControlState().test { + assertEquals(MediaPlaybackState.Off, awaitItem()?.playbackState) + awaitComplete() + } + } + + @Test + fun `Given entity with partial attributes then null fields are null`() = runTest { + configureEntity() + val entityState = entityWithState("playing", attributes = mapOf("media_title" to "Only Title")) + coEvery { + webSocketRepository.getCompressedStateAndChanges(any()) + } returns flowOf(CompressedStateChangedEvent(added = mapOf("media_player.test" to entityState))) + + repository.observeMediaControlState().test { + val state = awaitItem()!! + assertEquals("Only Title", state.title) + assertNull(state.artist) + assertNull(state.albumName) + assertNull(state.entityPictureUrl) + assertNull(state.mediaDurationSeconds) + assertNull(state.mediaPositionSeconds) + awaitComplete() + } + } + + @Test + fun `Given entity with all attributes then all fields populated`() = runTest { + configureEntity() + val entityState = entityWithState( + "playing", + attributes = mapOf( + "media_title" to "Song", + "media_artist" to "Artist", + "media_album_name" to "Album", + "entity_picture" to "/api/picture", + "media_duration" to 300.0, + "media_position" to 120.5, + "supported_features" to ( + EntityExt.MEDIA_PLAYER_SUPPORT_PAUSE or + EntityExt.MEDIA_PLAYER_SUPPORT_SEEK or + EntityExt.MEDIA_PLAYER_SUPPORT_PREVIOUS_TRACK or + EntityExt.MEDIA_PLAYER_SUPPORT_NEXT_TRACK or + EntityExt.MEDIA_PLAYER_SUPPORT_PLAY + ), + ), + ) + coEvery { + webSocketRepository.getCompressedStateAndChanges(any()) + } returns flowOf(CompressedStateChangedEvent(added = mapOf("media_player.test" to entityState))) + + repository.observeMediaControlState().test { + val state = awaitItem()!! + assertEquals("Song", state.title) + assertEquals("Artist", state.artist) + assertEquals("Album", state.albumName) + assertEquals("/api/picture", state.entityPictureUrl) + assertEquals(300.0, state.mediaDurationSeconds) + assertEquals(120.5, state.mediaPositionSeconds) + assertTrue(state.supportsPause) + assertTrue(state.supportsPlay) + assertTrue(state.supportsSeek) + assertTrue(state.supportsPreviousTrack) + assertTrue(state.supportsNextTrack) + awaitComplete() + } + } + } + + @Nested + inner class DistinctUntilChangedTest { + + @Test + fun `Given duplicate state emissions then only first is emitted`() = runTest { + coEvery { prefsRepository.getMediaControlServerId() } returns 1 + coEvery { prefsRepository.getMediaControlEntityId() } returns "media_player.test" + + val entityState = CompressedEntityState( + state = JsonPrimitive("playing"), + attributes = mapOf("media_title" to "Song"), + lastChanged = 1000.0, + lastUpdated = 1000.0, + ) + val stateFlow = MutableSharedFlow() + coEvery { + webSocketRepository.getCompressedStateAndChanges(any()) + } returns stateFlow + + repository.observeMediaControlState().test { + // Emit the same entity state twice — distinctUntilChanged should filter the duplicate + stateFlow.emit(CompressedStateChangedEvent(added = mapOf("media_player.test" to entityState))) + val first = awaitItem() + assertEquals("Song", first?.title) + + stateFlow.emit(CompressedStateChangedEvent(added = mapOf("media_player.test" to entityState))) + expectNoEvents() + + cancelAndIgnoreRemainingEvents() + } + } + } + + @Nested + inner class ConfigurationTest { + + @Test + fun `Given server id when getConfiguredServerId then delegates to prefs`() = runTest { + coEvery { prefsRepository.getMediaControlServerId() } returns 42 + + assertEquals(42, repository.getConfiguredServerId()) + } + + @Test + fun `Given entity id when getConfiguredEntityId then delegates to prefs`() = runTest { + coEvery { prefsRepository.getMediaControlEntityId() } returns "media_player.kitchen" + + assertEquals("media_player.kitchen", repository.getConfiguredEntityId()) + } + + @Test + fun `Given values when setConfiguredEntity then updates both prefs`() = runTest { + repository.setConfiguredEntity(serverId = 5, entityId = "media_player.office") + + coVerify { prefsRepository.setMediaControlServerId(5) } + coVerify { prefsRepository.setMediaControlEntityId("media_player.office") } + } + + @Test + fun `Given null values when setConfiguredEntity then clears both prefs`() = runTest { + repository.setConfiguredEntity(serverId = null, entityId = null) + + coVerify { prefsRepository.setMediaControlServerId(null) } + coVerify { prefsRepository.setMediaControlEntityId(null) } + } + } +} From 20bb0b11a72b169fbb481ebe20a934cedb792c11 Mon Sep 17 00:00:00 2001 From: Fletcher Dostie Date: Wed, 25 Mar 2026 17:07:58 -0700 Subject: [PATCH 002/114] =?UTF-8?q?=20=201.=20Dispatchers.Main=20=E2=86=92?= =?UTF-8?q?=20Dispatchers.Default=20in=20service=20scope=20=20=202.=20sens?= =?UTF-8?q?itive(controller.packageName)=20=E2=86=92=20controller.packageN?= =?UTF-8?q?ame=20(package=20names=20aren't=20sensitive)=20=20=203.=20sensi?= =?UTF-8?q?tive(entityId)=20=E2=86=92=20entityId=20in=20both=20log=20lines?= =?UTF-8?q?=20in=20MediaControlRepositoryImpl.kt,=20and=20removed=20the=20?= =?UTF-8?q?now-unused=20import=20=20=204.=20Duration=20API=20=E2=80=94=20?= =?UTF-8?q?=3F.seconds=3F.inWholeMicroseconds=20/=20=3F.seconds=3F.inWhole?= =?UTF-8?q?Milliseconds=20instead=20of=20manual=20arithmetic?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../android/mediacontrol/HaMediaSessionService.kt | 4 ++-- .../companion/android/mediacontrol/HaRemoteMediaPlayer.kt | 7 +++++-- .../common/data/mediacontrol/MediaControlRepositoryImpl.kt | 5 ++--- 3 files changed, 9 insertions(+), 7 deletions(-) diff --git a/app/src/main/kotlin/io/homeassistant/companion/android/mediacontrol/HaMediaSessionService.kt b/app/src/main/kotlin/io/homeassistant/companion/android/mediacontrol/HaMediaSessionService.kt index cec1026c077..40e979f5ca9 100644 --- a/app/src/main/kotlin/io/homeassistant/companion/android/mediacontrol/HaMediaSessionService.kt +++ b/app/src/main/kotlin/io/homeassistant/companion/android/mediacontrol/HaMediaSessionService.kt @@ -51,7 +51,7 @@ class HaMediaSessionService : MediaSessionService() { private var mediaSession: MediaSession? = null private var player: HaRemoteMediaPlayer? = null - private val serviceScope = CoroutineScope(SupervisorJob() + Dispatchers.Main) + private val serviceScope = CoroutineScope(SupervisorJob() + Dispatchers.Default) private var observationJob: Job? = null private var currentArtworkUrl: String? = null @@ -175,7 +175,7 @@ class HaMediaSessionService : MediaSessionService() { if (!controller.isTrusted) { Timber.w( "Rejecting connection from untrusted media controller package=%s", - sensitive(controller.packageName), + controller.packageName, ) return MediaSession.ConnectionResult.reject() } diff --git a/app/src/main/kotlin/io/homeassistant/companion/android/mediacontrol/HaRemoteMediaPlayer.kt b/app/src/main/kotlin/io/homeassistant/companion/android/mediacontrol/HaRemoteMediaPlayer.kt index fa665369088..e81e320781c 100644 --- a/app/src/main/kotlin/io/homeassistant/companion/android/mediacontrol/HaRemoteMediaPlayer.kt +++ b/app/src/main/kotlin/io/homeassistant/companion/android/mediacontrol/HaRemoteMediaPlayer.kt @@ -11,6 +11,7 @@ import com.google.common.util.concurrent.Futures import com.google.common.util.concurrent.ListenableFuture import io.homeassistant.companion.android.common.data.mediacontrol.MediaControlState import io.homeassistant.companion.android.common.data.mediacontrol.MediaPlaybackState +import kotlin.time.Duration.Companion.seconds /** * A [SimpleBasePlayer] that acts as a remote control proxy for a Home Assistant media_player entity. @@ -65,10 +66,12 @@ class HaRemoteMediaPlayer(looper: Looper, private val commandCallback: CommandCa } val durationUs = state.mediaDurationSeconds - ?.let { (it * 1_000_000).toLong() } + ?.seconds + ?.inWholeMicroseconds ?: DURATION_UNSET_US val positionMs = state.mediaPositionSeconds - ?.let { (it * 1000).toLong() } + ?.seconds + ?.inWholeMilliseconds ?: 0L val currentItem = MediaItemData.Builder(state.entityId) diff --git a/common/src/main/kotlin/io/homeassistant/companion/android/common/data/mediacontrol/MediaControlRepositoryImpl.kt b/common/src/main/kotlin/io/homeassistant/companion/android/common/data/mediacontrol/MediaControlRepositoryImpl.kt index c1aed2a4283..64d6ee3880a 100644 --- a/common/src/main/kotlin/io/homeassistant/companion/android/common/data/mediacontrol/MediaControlRepositoryImpl.kt +++ b/common/src/main/kotlin/io/homeassistant/companion/android/common/data/mediacontrol/MediaControlRepositoryImpl.kt @@ -15,7 +15,6 @@ import io.homeassistant.companion.android.common.data.integration.supportsPrevio import io.homeassistant.companion.android.common.data.integration.supportsSeek import io.homeassistant.companion.android.common.data.prefs.PrefsRepository import io.homeassistant.companion.android.common.data.servers.ServerManager -import io.homeassistant.companion.android.util.sensitive import javax.inject.Inject import kotlinx.coroutines.CancellationException import kotlinx.coroutines.flow.Flow @@ -40,7 +39,7 @@ internal class MediaControlRepositoryImpl @Inject constructor( val stateFlow = serverManager.webSocketRepository(serverId) .getCompressedStateAndChanges(listOf(entityId)) if (stateFlow == null) { - Timber.w("WebSocket subscription returned null for entity ${sensitive(entityId)}") + Timber.w("WebSocket subscription returned null for entity $entityId") emit(null) return@flow } @@ -69,7 +68,7 @@ internal class MediaControlRepositoryImpl @Inject constructor( } catch (e: CancellationException) { throw e } catch (e: Exception) { - Timber.e(e, "Failed to subscribe to media control entity ${sensitive(entityId)}") + Timber.e(e, "Failed to subscribe to media control entity $entityId") emit(null) } }.distinctUntilChanged() From 3b3178de42899f406e6ce626a173e78361425299 Mon Sep 17 00:00:00 2001 From: Fletcher Dostie Date: Wed, 25 Mar 2026 17:57:07 -0700 Subject: [PATCH 003/114] Add volume control to native media controls Exposes media_player volume through Android's native media controls: volume buttons adjust the entity, the volume slider (shown when tapping the device name) reflects and sets the current level, and the muted state is surfaced. Also fixes the device label showing "This phone" by setting DeviceInfo.PLAYBACK_TYPE_REMOTE. --- .../mediacontrol/HaMediaSessionService.kt | 15 +++ .../mediacontrol/HaRemoteMediaPlayer.kt | 42 +++++++++ .../mediacontrol/HaRemoteMediaPlayerTest.kt | 82 ++++++++++++++++ .../android/common/data/integration/Entity.kt | 9 ++ .../MediaControlRepositoryImpl.kt | 6 ++ .../data/mediacontrol/MediaControlState.kt | 4 + .../MediaControlRepositoryImplTest.kt | 94 +++++++++++++++++++ 7 files changed, 252 insertions(+) diff --git a/app/src/main/kotlin/io/homeassistant/companion/android/mediacontrol/HaMediaSessionService.kt b/app/src/main/kotlin/io/homeassistant/companion/android/mediacontrol/HaMediaSessionService.kt index 40e979f5ca9..aa8bf1a85eb 100644 --- a/app/src/main/kotlin/io/homeassistant/companion/android/mediacontrol/HaMediaSessionService.kt +++ b/app/src/main/kotlin/io/homeassistant/companion/android/mediacontrol/HaMediaSessionService.kt @@ -84,6 +84,21 @@ class HaMediaSessionService : MediaSessionService() { override fun onPreviousRequested() { callMediaAction("media_previous_track") } + + override fun onSetVolumeRequested(volume: Float) { + callMediaAction( + action = "volume_set", + extraData = mapOf("volume_level" to volume), + ) + } + + override fun onIncreaseVolumeRequested() { + callMediaAction("volume_up") + } + + override fun onDecreaseVolumeRequested() { + callMediaAction("volume_down") + } } val newPlayer = HaRemoteMediaPlayer(Looper.getMainLooper(), commandCallback) diff --git a/app/src/main/kotlin/io/homeassistant/companion/android/mediacontrol/HaRemoteMediaPlayer.kt b/app/src/main/kotlin/io/homeassistant/companion/android/mediacontrol/HaRemoteMediaPlayer.kt index e81e320781c..07787ea56e0 100644 --- a/app/src/main/kotlin/io/homeassistant/companion/android/mediacontrol/HaRemoteMediaPlayer.kt +++ b/app/src/main/kotlin/io/homeassistant/companion/android/mediacontrol/HaRemoteMediaPlayer.kt @@ -2,6 +2,7 @@ package io.homeassistant.companion.android.mediacontrol import android.os.Looper import androidx.annotation.OptIn +import androidx.media3.common.DeviceInfo import androidx.media3.common.MediaMetadata import androidx.media3.common.PlaybackParameters import androidx.media3.common.Player @@ -27,6 +28,14 @@ class HaRemoteMediaPlayer(looper: Looper, private val commandCallback: CommandCa fun onSeekRequested(positionMs: Long) fun onNextRequested() fun onPreviousRequested() + + /** + * Called when the OS requests an exact volume level. + * @param volume the requested volume in the range [0.0, 1.0] + */ + fun onSetVolumeRequested(volume: Float) + fun onIncreaseVolumeRequested() + fun onDecreaseVolumeRequested() } private var mediaState: MediaControlState? = null @@ -87,6 +96,8 @@ class HaRemoteMediaPlayer(looper: Looper, private val commandCallback: CommandCa MediaItemData.Builder(PLACEHOLDER_NEXT_ID).build(), ) + val deviceVolume = state.volumeLevel?.let { (it * VOLUME_SCALE).toInt() } ?: 0 + return State.Builder() .setAvailableCommands(availableCommands) .setPlaybackState(playbackState) @@ -95,6 +106,9 @@ class HaRemoteMediaPlayer(looper: Looper, private val commandCallback: CommandCa .setCurrentMediaItemIndex(CURRENT_ITEM_INDEX) .setContentPositionMs(positionMs) .setPlaylist(playlist) + .setDeviceInfo(REMOTE_DEVICE_INFO) + .setDeviceVolume(deviceVolume) + .setIsDeviceMuted(state.isVolumeMuted) .build() } @@ -126,6 +140,21 @@ class HaRemoteMediaPlayer(looper: Looper, private val commandCallback: CommandCa return Futures.immediateVoidFuture() } + override fun handleSetDeviceVolume(deviceVolume: Int, flags: Int): ListenableFuture<*> { + commandCallback.onSetVolumeRequested(volume = deviceVolume / VOLUME_SCALE.toFloat()) + return Futures.immediateVoidFuture() + } + + override fun handleIncreaseDeviceVolume(flags: Int): ListenableFuture<*> { + commandCallback.onIncreaseVolumeRequested() + return Futures.immediateVoidFuture() + } + + override fun handleDecreaseDeviceVolume(flags: Int): ListenableFuture<*> { + commandCallback.onDecreaseVolumeRequested() + return Futures.immediateVoidFuture() + } + private fun buildIdleState(): State = State.Builder() .setAvailableCommands(Player.Commands.EMPTY) .setPlaybackState(STATE_IDLE) @@ -145,6 +174,11 @@ class HaRemoteMediaPlayer(looper: Looper, private val commandCallback: CommandCa builder.add(Player.COMMAND_SEEK_TO_NEXT) builder.add(Player.COMMAND_SEEK_TO_NEXT_MEDIA_ITEM) } + if (state.supportsVolumeSet) { + builder.add(Player.COMMAND_GET_DEVICE_VOLUME) + builder.add(Player.COMMAND_SET_DEVICE_VOLUME_WITH_FLAGS) + builder.add(Player.COMMAND_ADJUST_DEVICE_VOLUME_WITH_FLAGS) + } builder.add(Player.COMMAND_GET_METADATA) builder.add(Player.COMMAND_GET_TIMELINE) return builder.build() @@ -156,5 +190,13 @@ class HaRemoteMediaPlayer(looper: Looper, private val commandCallback: CommandCa const val PLAYBACK_SPEED = 1.0f const val PLACEHOLDER_PREVIOUS_ID = "__ha_previous__" const val PLACEHOLDER_NEXT_ID = "__ha_next__" + + /** HA uses 0.0–1.0, Media3 uses integer 0–100. */ + const val VOLUME_SCALE = 100 + + val REMOTE_DEVICE_INFO: DeviceInfo = DeviceInfo.Builder(DeviceInfo.PLAYBACK_TYPE_REMOTE) + .setMinVolume(0) + .setMaxVolume(VOLUME_SCALE) + .build() } } diff --git a/app/src/test/kotlin/io/homeassistant/companion/android/mediacontrol/HaRemoteMediaPlayerTest.kt b/app/src/test/kotlin/io/homeassistant/companion/android/mediacontrol/HaRemoteMediaPlayerTest.kt index 2adf88b7dd3..472823cbec8 100644 --- a/app/src/test/kotlin/io/homeassistant/companion/android/mediacontrol/HaRemoteMediaPlayerTest.kt +++ b/app/src/test/kotlin/io/homeassistant/companion/android/mediacontrol/HaRemoteMediaPlayerTest.kt @@ -41,6 +41,10 @@ class HaRemoteMediaPlayerTest { supportsSeek: Boolean = true, supportsPreviousTrack: Boolean = true, supportsNextTrack: Boolean = true, + supportsVolumeSet: Boolean = false, + volumeLevel: Float? = null, + isVolumeMuted: Boolean = false, + entityFriendlyName: String? = null, ) = MediaControlState( entityId = "media_player.test", serverId = 1, @@ -56,6 +60,10 @@ class HaRemoteMediaPlayerTest { supportsSeek = supportsSeek, supportsPreviousTrack = supportsPreviousTrack, supportsNextTrack = supportsNextTrack, + supportsVolumeSet = supportsVolumeSet, + volumeLevel = volumeLevel, + isVolumeMuted = isVolumeMuted, + entityFriendlyName = entityFriendlyName, ) // -- getState tests -- @@ -251,4 +259,78 @@ class HaRemoteMediaPlayerTest { assertEquals(1.0f, player.playbackParameters.speed) } + + // -- Volume command tests -- + + @Test + fun `Given volume supported when getState then volume commands available`() { + player.updateState(state = createState(supportsVolumeSet = true, volumeLevel = 0.5f), artworkPngBytes = null) + shadowOf(Looper.getMainLooper()).idle() + + assertTrue(player.availableCommands.contains(Player.COMMAND_GET_DEVICE_VOLUME)) + assertTrue(player.availableCommands.contains(Player.COMMAND_SET_DEVICE_VOLUME_WITH_FLAGS)) + assertTrue(player.availableCommands.contains(Player.COMMAND_ADJUST_DEVICE_VOLUME_WITH_FLAGS)) + } + + @Test + fun `Given volume not supported when getState then volume commands not available`() { + player.updateState(state = createState(supportsVolumeSet = false), artworkPngBytes = null) + shadowOf(Looper.getMainLooper()).idle() + + assertFalse(player.availableCommands.contains(Player.COMMAND_GET_DEVICE_VOLUME)) + assertFalse(player.availableCommands.contains(Player.COMMAND_SET_DEVICE_VOLUME_WITH_FLAGS)) + assertFalse(player.availableCommands.contains(Player.COMMAND_ADJUST_DEVICE_VOLUME_WITH_FLAGS)) + } + + @Test + fun `Given volumeLevel 0_5 when getState then deviceVolume is 50`() { + player.updateState(state = createState(supportsVolumeSet = true, volumeLevel = 0.5f), artworkPngBytes = null) + shadowOf(Looper.getMainLooper()).idle() + + assertEquals(50, player.deviceVolume) + } + + @Test + fun `Given isVolumeMuted true when getState then deviceMuted is true`() { + player.updateState( + state = createState(supportsVolumeSet = true, volumeLevel = 0.5f, isVolumeMuted = true), + artworkPngBytes = null, + ) + shadowOf(Looper.getMainLooper()).idle() + + assertTrue(player.isDeviceMuted) + } + + @Test + fun `Given player when setDeviceVolume 50 then onSetVolumeRequested called with 0_5`() { + player.updateState(state = createState(supportsVolumeSet = true, volumeLevel = 0.5f), artworkPngBytes = null) + shadowOf(Looper.getMainLooper()).idle() + + player.setDeviceVolume(50, 0) + shadowOf(Looper.getMainLooper()).idle() + + verify { commandCallback.onSetVolumeRequested(volume = 0.5f) } + } + + @Test + fun `Given player when increaseDeviceVolume then onIncreaseVolumeRequested called`() { + player.updateState(state = createState(supportsVolumeSet = true, volumeLevel = 0.5f), artworkPngBytes = null) + shadowOf(Looper.getMainLooper()).idle() + + player.increaseDeviceVolume(0) + shadowOf(Looper.getMainLooper()).idle() + + verify { commandCallback.onIncreaseVolumeRequested() } + } + + @Test + fun `Given player when decreaseDeviceVolume then onDecreaseVolumeRequested called`() { + player.updateState(state = createState(supportsVolumeSet = true, volumeLevel = 0.5f), artworkPngBytes = null) + shadowOf(Looper.getMainLooper()).idle() + + player.decreaseDeviceVolume(0) + shadowOf(Looper.getMainLooper()).idle() + + verify { commandCallback.onDecreaseVolumeRequested() } + } } diff --git a/common/src/main/kotlin/io/homeassistant/companion/android/common/data/integration/Entity.kt b/common/src/main/kotlin/io/homeassistant/companion/android/common/data/integration/Entity.kt index 500bb4a65cf..89c8bf1da6e 100644 --- a/common/src/main/kotlin/io/homeassistant/companion/android/common/data/integration/Entity.kt +++ b/common/src/main/kotlin/io/homeassistant/companion/android/common/data/integration/Entity.kt @@ -456,6 +456,15 @@ fun Entity.getVolumeLevel(): EntityPosition? { } } +fun Entity.getVolumeMuted(): Boolean { + return try { + (attributes["is_volume_muted"] as? Boolean) ?: false + } catch (e: Exception) { + Timber.tag(EntityExt.TAG).e(e, "Unable to get getVolumeMuted") + false + } +} + fun Entity.getVolumeStep(): Float { return try { if (!supportsVolumeSet()) return 0.1f diff --git a/common/src/main/kotlin/io/homeassistant/companion/android/common/data/mediacontrol/MediaControlRepositoryImpl.kt b/common/src/main/kotlin/io/homeassistant/companion/android/common/data/mediacontrol/MediaControlRepositoryImpl.kt index 64d6ee3880a..d69a359ac11 100644 --- a/common/src/main/kotlin/io/homeassistant/companion/android/common/data/mediacontrol/MediaControlRepositoryImpl.kt +++ b/common/src/main/kotlin/io/homeassistant/companion/android/common/data/mediacontrol/MediaControlRepositoryImpl.kt @@ -8,11 +8,13 @@ import io.homeassistant.companion.android.common.data.integration.getMediaArtist import io.homeassistant.companion.android.common.data.integration.getMediaDuration import io.homeassistant.companion.android.common.data.integration.getMediaPosition import io.homeassistant.companion.android.common.data.integration.getMediaTitle +import io.homeassistant.companion.android.common.data.integration.getVolumeMuted import io.homeassistant.companion.android.common.data.integration.supportsNextTrack import io.homeassistant.companion.android.common.data.integration.supportsPause import io.homeassistant.companion.android.common.data.integration.supportsPlay import io.homeassistant.companion.android.common.data.integration.supportsPreviousTrack import io.homeassistant.companion.android.common.data.integration.supportsSeek +import io.homeassistant.companion.android.common.data.integration.supportsVolumeSet import io.homeassistant.companion.android.common.data.prefs.PrefsRepository import io.homeassistant.companion.android.common.data.servers.ServerManager import javax.inject.Inject @@ -107,5 +109,9 @@ private fun Entity.toMediaControlState(serverId: Int): MediaControlState { supportsSeek = supportsSeek(), supportsPreviousTrack = supportsPreviousTrack(), supportsNextTrack = supportsNextTrack(), + supportsVolumeSet = supportsVolumeSet(), + volumeLevel = if (supportsVolumeSet()) (attributes["volume_level"] as? Number)?.toFloat() else null, + isVolumeMuted = getVolumeMuted(), + entityFriendlyName = attributes["friendly_name"] as? String, ) } diff --git a/common/src/main/kotlin/io/homeassistant/companion/android/common/data/mediacontrol/MediaControlState.kt b/common/src/main/kotlin/io/homeassistant/companion/android/common/data/mediacontrol/MediaControlState.kt index eadb793687b..0efa953bea6 100644 --- a/common/src/main/kotlin/io/homeassistant/companion/android/common/data/mediacontrol/MediaControlState.kt +++ b/common/src/main/kotlin/io/homeassistant/companion/android/common/data/mediacontrol/MediaControlState.kt @@ -30,4 +30,8 @@ data class MediaControlState( val supportsSeek: Boolean, val supportsPreviousTrack: Boolean, val supportsNextTrack: Boolean, + val supportsVolumeSet: Boolean, + val volumeLevel: Float?, + val isVolumeMuted: Boolean, + val entityFriendlyName: String?, ) diff --git a/common/src/test/kotlin/io/homeassistant/companion/android/common/data/mediacontrol/MediaControlRepositoryImplTest.kt b/common/src/test/kotlin/io/homeassistant/companion/android/common/data/mediacontrol/MediaControlRepositoryImplTest.kt index 78681ccef4c..cc1110bdb78 100644 --- a/common/src/test/kotlin/io/homeassistant/companion/android/common/data/mediacontrol/MediaControlRepositoryImplTest.kt +++ b/common/src/test/kotlin/io/homeassistant/companion/android/common/data/mediacontrol/MediaControlRepositoryImplTest.kt @@ -16,6 +16,7 @@ import kotlinx.coroutines.flow.flowOf import kotlinx.coroutines.test.runTest import kotlinx.serialization.json.JsonPrimitive import org.junit.jupiter.api.Assertions.assertEquals +import org.junit.jupiter.api.Assertions.assertFalse import org.junit.jupiter.api.Assertions.assertNull import org.junit.jupiter.api.Assertions.assertTrue import org.junit.jupiter.api.BeforeEach @@ -279,6 +280,99 @@ class MediaControlRepositoryImplTest { } } + @Nested + inner class VolumeMappingTest { + + private fun configureEntity() { + coEvery { prefsRepository.getMediaControlServerId() } returns 1 + coEvery { prefsRepository.getMediaControlEntityId() } returns "media_player.test" + } + + private fun entityWithVolumeAttributes(attributes: Map) = CompressedEntityState( + state = JsonPrimitive("playing"), + attributes = attributes, + lastChanged = 1000.0, + lastUpdated = 1000.0, + ) + + @Test + fun `Given entity with volume support and volume_level then volumeLevel and supportsVolumeSet are set`() = runTest { + configureEntity() + val entityState = entityWithVolumeAttributes( + mapOf( + "supported_features" to EntityExt.MEDIA_PLAYER_SUPPORT_VOLUME_SET, + "volume_level" to 0.7, + ), + ) + coEvery { + webSocketRepository.getCompressedStateAndChanges(any()) + } returns flowOf(CompressedStateChangedEvent(added = mapOf("media_player.test" to entityState))) + + repository.observeMediaControlState().test { + val state = awaitItem()!! + assertTrue(state.supportsVolumeSet) + assertEquals(0.7f, state.volumeLevel) + awaitComplete() + } + } + + @Test + fun `Given entity without volume support then volumeLevel is null and supportsVolumeSet is false`() = runTest { + configureEntity() + val entityState = entityWithVolumeAttributes( + mapOf("supported_features" to EntityExt.MEDIA_PLAYER_SUPPORT_PLAY), + ) + coEvery { + webSocketRepository.getCompressedStateAndChanges(any()) + } returns flowOf(CompressedStateChangedEvent(added = mapOf("media_player.test" to entityState))) + + repository.observeMediaControlState().test { + val state = awaitItem()!! + assertFalse(state.supportsVolumeSet) + assertNull(state.volumeLevel) + awaitComplete() + } + } + + @Test + fun `Given entity with is_volume_muted true then isVolumeMuted is true`() = runTest { + configureEntity() + val entityState = entityWithVolumeAttributes( + mapOf( + "supported_features" to EntityExt.MEDIA_PLAYER_SUPPORT_VOLUME_SET, + "volume_level" to 0.5, + "is_volume_muted" to true, + ), + ) + coEvery { + webSocketRepository.getCompressedStateAndChanges(any()) + } returns flowOf(CompressedStateChangedEvent(added = mapOf("media_player.test" to entityState))) + + repository.observeMediaControlState().test { + val state = awaitItem()!! + assertTrue(state.isVolumeMuted) + awaitComplete() + } + } + + @Test + fun `Given entity with friendly_name then entityFriendlyName is set`() = runTest { + configureEntity() + val entityState = entityWithVolumeAttributes( + mapOf("friendly_name" to "Living Room TV"), + ) + coEvery { + webSocketRepository.getCompressedStateAndChanges(any()) + } returns flowOf(CompressedStateChangedEvent(added = mapOf("media_player.test" to entityState))) + + repository.observeMediaControlState().test { + val state = awaitItem()!! + assertEquals("Living Room TV", state.entityFriendlyName) + awaitComplete() + } + } + } + @Nested inner class DistinctUntilChangedTest { From ba455029f2c8fda683146f23613e04ed486d8d7e Mon Sep 17 00:00:00 2001 From: Fletcher Dostie Date: Wed, 25 Mar 2026 18:24:21 -0700 Subject: [PATCH 004/114] Decouple session logic from HaMediaSessionService into HaMediaSession Moves state observation, artwork loading/caching, HA service calls, and MediaSessionCallback into a new HaMediaSession class so the service is responsible only for the Android service lifecycle. --- .../android/mediacontrol/HaMediaSession.kt | 268 ++++++++++++++++++ .../mediacontrol/HaMediaSessionService.kt | 258 ++--------------- 2 files changed, 286 insertions(+), 240 deletions(-) create mode 100644 app/src/main/kotlin/io/homeassistant/companion/android/mediacontrol/HaMediaSession.kt diff --git a/app/src/main/kotlin/io/homeassistant/companion/android/mediacontrol/HaMediaSession.kt b/app/src/main/kotlin/io/homeassistant/companion/android/mediacontrol/HaMediaSession.kt new file mode 100644 index 00000000000..66d91f71cf0 --- /dev/null +++ b/app/src/main/kotlin/io/homeassistant/companion/android/mediacontrol/HaMediaSession.kt @@ -0,0 +1,268 @@ +package io.homeassistant.companion.android.mediacontrol + +import android.content.Context +import android.graphics.Bitmap.CompressFormat +import android.os.Looper +import androidx.annotation.OptIn +import androidx.media3.common.util.UnstableApi +import androidx.media3.session.MediaSession +import coil3.imageLoader +import coil3.request.ImageRequest +import coil3.toBitmap +import io.homeassistant.companion.android.common.data.integration.IntegrationDomains.MEDIA_PLAYER_DOMAIN +import io.homeassistant.companion.android.common.data.mediacontrol.MediaControlRepository +import io.homeassistant.companion.android.common.data.mediacontrol.MediaControlState +import io.homeassistant.companion.android.common.data.servers.ServerManager +import io.homeassistant.companion.android.common.data.servers.firstUrlOrNull +import io.homeassistant.companion.android.util.sensitive +import java.io.ByteArrayOutputStream +import kotlin.time.Duration.Companion.seconds +import kotlinx.coroutines.CancellationException +import kotlinx.coroutines.CoroutineScope +import kotlinx.coroutines.Dispatchers +import kotlinx.coroutines.Job +import kotlinx.coroutines.SupervisorJob +import kotlinx.coroutines.cancel +import kotlinx.coroutines.delay +import kotlinx.coroutines.ensureActive +import kotlinx.coroutines.launch +import kotlinx.coroutines.withContext +import timber.log.Timber + +/** + * Owns the [MediaSession] and [HaRemoteMediaPlayer] for the Home Assistant media control feature. + * + * Observes [MediaControlRepository] for entity state changes, loads artwork via Coil, and + * translates Media3 player commands into Home Assistant service calls via [ServerManager]. + * + * Call [release] when the hosting service is destroyed to cancel observation and release + * Media3 resources. + * + * @param context Used for Coil image loading and [MediaSession] construction. + * @param mediaControlRepository Source of truth for configured entity and state flow. + * @param serverManager Used to resolve artwork base URLs and call HA integration actions. + * @param onStopRequested Called on the main thread when no entity is configured and the + * hosting service should stop itself. + */ +class HaMediaSession( + private val context: Context, + private val mediaControlRepository: MediaControlRepository, + private val serverManager: ServerManager, + private val onStopRequested: () -> Unit, +) { + val mediaSession: MediaSession + + private val scope = CoroutineScope(SupervisorJob() + Dispatchers.Default) + private val player: HaRemoteMediaPlayer + + private var observationJob: Job? = null + private var currentArtworkUrl: String? = null + private var currentArtworkBytes: ByteArray? = null + + /** Whether a state observation coroutine is currently active. */ + val isObserving: Boolean get() = observationJob?.isActive == true + + init { + val commandCallback = object : HaRemoteMediaPlayer.CommandCallback { + override fun onPlayRequested() { + callMediaAction("media_play") + } + + override fun onPauseRequested() { + callMediaAction("media_pause") + } + + override fun onSeekRequested(positionMs: Long) { + callMediaAction( + action = "media_seek", + extraData = mapOf("seek_position" to positionMs / 1000.0), + ) + } + + override fun onNextRequested() { + callMediaAction("media_next_track") + } + + override fun onPreviousRequested() { + callMediaAction("media_previous_track") + } + + override fun onSetVolumeRequested(volume: Float) { + callMediaAction( + action = "volume_set", + extraData = mapOf("volume_level" to volume), + ) + } + + override fun onIncreaseVolumeRequested() { + callMediaAction("volume_up") + } + + override fun onDecreaseVolumeRequested() { + callMediaAction("volume_down") + } + } + + player = HaRemoteMediaPlayer(Looper.getMainLooper(), commandCallback) + + mediaSession = MediaSession.Builder(context, player) + .setCallback(MediaSessionCallback()) + .build() + } + + /** + * Cancels any existing entity state observation and starts a new one, + * re-reading the current configuration from preferences. + */ + fun startObservingState() { + observationJob?.cancel() + currentArtworkUrl = null + currentArtworkBytes = null + observationJob = scope.launch(Dispatchers.IO) { + while (true) { + ensureActive() + val isConfigured = mediaControlRepository.getConfiguredServerId() != null && + mediaControlRepository.getConfiguredEntityId() != null + if (!isConfigured) { + Timber.d("No media control entity configured, stopping service") + withContext(Dispatchers.Main) { onStopRequested() } + return@launch + } + mediaControlRepository.observeMediaControlState().collect { state -> + if (state == null) { + withContext(Dispatchers.Main) { + player.updateState(state = null, artworkPngBytes = null) + } + return@collect + } + loadArtworkAndUpdatePlayer(state) + } + // Flow completed (WebSocket not ready, connection lost, etc) — retry + Timber.d("Media control observation completed, retrying in %s", OBSERVATION_RETRY_DELAY) + delay(OBSERVATION_RETRY_DELAY) + } + } + } + + /** Releases Media3 resources and cancels all coroutines. */ + fun release() { + scope.cancel() + mediaSession.player.release() + mediaSession.release() + } + + private fun callMediaAction(action: String, extraData: Map = emptyMap()) { + scope.launch(Dispatchers.IO) { + val serverId = mediaControlRepository.getConfiguredServerId() + val entityId = mediaControlRepository.getConfiguredEntityId() + if (serverId == null || entityId == null) { + Timber.w("Cannot call media action %s: no configured entity", action) + return@launch + } + + val actionData = hashMapOf("entity_id" to entityId) + actionData.putAll(extraData) + + try { + serverManager.integrationRepository(serverId) + .callAction(MEDIA_PLAYER_DOMAIN, action, actionData) + } catch (e: CancellationException) { + throw e + } catch (e: Exception) { + Timber.e(e, "Failed to call media action $action") + } + } + } + + private suspend fun loadArtworkAndUpdatePlayer(state: MediaControlState) { + val artworkUrl = resolveArtworkUrl(state) + val pngBytes = if (artworkUrl != null && artworkUrl != currentArtworkUrl) { + val bytes = loadBitmapAsPng(artworkUrl) + if (bytes != null) { + currentArtworkUrl = artworkUrl + currentArtworkBytes = bytes + } + bytes ?: currentArtworkBytes + } else if (artworkUrl == null) { + currentArtworkUrl = null + currentArtworkBytes = null + null + } else { + currentArtworkBytes + } + + withContext(Dispatchers.Main) { + player.updateState(state = state, artworkPngBytes = pngBytes) + } + } + + private suspend fun resolveArtworkUrl(state: MediaControlState): String? { + val entityPictureUrl = state.entityPictureUrl ?: return null + if (entityPictureUrl.startsWith("http")) return entityPictureUrl + + val baseUrl = try { + serverManager.connectionStateProvider(state.serverId) + .urlFlow() + .firstUrlOrNull() + ?.toString() + ?.removeSuffix("/") + } catch (e: CancellationException) { + throw e + } catch (e: IllegalStateException) { + Timber.e(e, "Server does not exist for artwork URL resolution") + null + } ?: return null + + return "$baseUrl$entityPictureUrl" + } + + /** Loads album art and compresses to PNG bytes on the IO dispatcher. */ + private suspend fun loadBitmapAsPng(url: String): ByteArray? = withContext(Dispatchers.IO) { + try { + val request = ImageRequest.Builder(context) + .data(url) + .size(ARTWORK_SIZE_PX) + .build() + val result = context.imageLoader.execute(request) + result.image?.toBitmap()?.let { bitmap -> + val stream = ByteArrayOutputStream() + bitmap.compress(CompressFormat.PNG, 100, stream) + stream.toByteArray() + } + } catch (e: CancellationException) { + throw e + } catch (e: Exception) { + Timber.e(e, "Failed to load album art from ${sensitive(url)}") + null + } + } + + /** + * Restricts media session connections to trusted controllers (same app, system, + * or apps with MEDIA_CONTENT_CONTROL / notification listener access). + */ + @OptIn(UnstableApi::class) + private inner class MediaSessionCallback : MediaSession.Callback { + override fun onConnect( + session: MediaSession, + controller: MediaSession.ControllerInfo, + ): MediaSession.ConnectionResult { + if (!controller.isTrusted) { + Timber.w( + "Rejecting connection from untrusted media controller package=%s", + controller.packageName, + ) + return MediaSession.ConnectionResult.reject() + } + return MediaSession.ConnectionResult.accept( + MediaSession.ConnectionResult.DEFAULT_SESSION_COMMANDS, + MediaSession.ConnectionResult.DEFAULT_PLAYER_COMMANDS, + ) + } + } + + private companion object { + val OBSERVATION_RETRY_DELAY = 5.seconds + const val ARTWORK_SIZE_PX = 512 + } +} diff --git a/app/src/main/kotlin/io/homeassistant/companion/android/mediacontrol/HaMediaSessionService.kt b/app/src/main/kotlin/io/homeassistant/companion/android/mediacontrol/HaMediaSessionService.kt index aa8bf1a85eb..74fa33abd47 100644 --- a/app/src/main/kotlin/io/homeassistant/companion/android/mediacontrol/HaMediaSessionService.kt +++ b/app/src/main/kotlin/io/homeassistant/companion/android/mediacontrol/HaMediaSessionService.kt @@ -2,43 +2,20 @@ package io.homeassistant.companion.android.mediacontrol import android.content.Context import android.content.Intent -import android.graphics.Bitmap.CompressFormat -import android.os.Looper -import androidx.annotation.OptIn -import androidx.media3.common.util.UnstableApi import androidx.media3.session.MediaSession import androidx.media3.session.MediaSessionService -import coil3.imageLoader -import coil3.request.ImageRequest -import coil3.toBitmap import dagger.hilt.android.AndroidEntryPoint -import io.homeassistant.companion.android.common.data.integration.IntegrationDomains.MEDIA_PLAYER_DOMAIN import io.homeassistant.companion.android.common.data.mediacontrol.MediaControlRepository -import io.homeassistant.companion.android.common.data.mediacontrol.MediaControlState import io.homeassistant.companion.android.common.data.servers.ServerManager -import io.homeassistant.companion.android.common.data.servers.firstUrlOrNull -import io.homeassistant.companion.android.util.sensitive -import java.io.ByteArrayOutputStream import javax.inject.Inject -import kotlin.time.Duration.Companion.seconds -import kotlinx.coroutines.CancellationException -import kotlinx.coroutines.CoroutineScope -import kotlinx.coroutines.Dispatchers -import kotlinx.coroutines.Job -import kotlinx.coroutines.SupervisorJob -import kotlinx.coroutines.cancel -import kotlinx.coroutines.delay -import kotlinx.coroutines.ensureActive -import kotlinx.coroutines.launch -import kotlinx.coroutines.withContext import timber.log.Timber /** * A [MediaSessionService] that exposes a Home Assistant media_player entity as a native * Android media control in the notification shade. * - * It creates a [HaRemoteMediaPlayer] that reports HA entity state and translates user - * interactions (play/pause/seek/next/previous) into HA service calls. + * This service is responsible only for the Android service lifecycle. All session logic — + * state observation, artwork loading, and HA service calls — is delegated to [HaMediaSession]. */ @AndroidEntryPoint class HaMediaSessionService : MediaSessionService() { @@ -49,117 +26,35 @@ class HaMediaSessionService : MediaSessionService() { @Inject lateinit var serverManager: ServerManager - private var mediaSession: MediaSession? = null - private var player: HaRemoteMediaPlayer? = null - private val serviceScope = CoroutineScope(SupervisorJob() + Dispatchers.Default) - - private var observationJob: Job? = null - private var currentArtworkUrl: String? = null - private var currentArtworkBytes: ByteArray? = null + private var haMediaSession: HaMediaSession? = null override fun onCreate() { super.onCreate() Timber.d("HaMediaSessionService created") - - val commandCallback = object : HaRemoteMediaPlayer.CommandCallback { - override fun onPlayRequested() { - callMediaAction("media_play") - } - - override fun onPauseRequested() { - callMediaAction("media_pause") - } - - override fun onSeekRequested(positionMs: Long) { - callMediaAction( - action = "media_seek", - extraData = mapOf("seek_position" to positionMs / 1000.0), - ) - } - - override fun onNextRequested() { - callMediaAction("media_next_track") - } - - override fun onPreviousRequested() { - callMediaAction("media_previous_track") - } - - override fun onSetVolumeRequested(volume: Float) { - callMediaAction( - action = "volume_set", - extraData = mapOf("volume_level" to volume), - ) - } - - override fun onIncreaseVolumeRequested() { - callMediaAction("volume_up") - } - - override fun onDecreaseVolumeRequested() { - callMediaAction("volume_down") - } - } - - val newPlayer = HaRemoteMediaPlayer(Looper.getMainLooper(), commandCallback) - player = newPlayer - - val session = MediaSession.Builder(this, newPlayer) - .setCallback(MediaSessionCallback()) - .build() - mediaSession = session - addSession(session) + haMediaSession = HaMediaSession( + context = this, + mediaControlRepository = mediaControlRepository, + serverManager = serverManager, + onStopRequested = { stopSelf() }, + ) } override fun onStartCommand(intent: Intent?, flags: Int, startId: Int): Int { val result = super.onStartCommand(intent, flags, startId) val configChanged = intent?.action == ACTION_RESTART_OBSERVATION - if (configChanged || observationJob?.isActive != true) { - Timber.d("Starting observation (configChanged=%s, jobActive=%s)", configChanged, observationJob?.isActive) - startObservingState() + val session = haMediaSession ?: return result + if (configChanged || !session.isObserving) { + Timber.d("Starting observation (configChanged=%s, isObserving=%s)", configChanged, session.isObserving) + session.startObservingState() } return result } - /** - * Cancels any existing entity state observation and starts a new one, - * re-reading the current configuration from preferences. - */ - private fun startObservingState() { - observationJob?.cancel() - currentArtworkUrl = null - currentArtworkBytes = null - val currentPlayer = player ?: return - observationJob = serviceScope.launch(Dispatchers.IO) { - while (true) { - ensureActive() - val isConfigured = mediaControlRepository.getConfiguredServerId() != null && - mediaControlRepository.getConfiguredEntityId() != null - if (!isConfigured) { - Timber.d("No media control entity configured, stopping service") - withContext(Dispatchers.Main) { stopSelf() } - return@launch - } - mediaControlRepository.observeMediaControlState().collect { state -> - if (state == null) { - withContext(Dispatchers.Main) { - currentPlayer.updateState(state = null, artworkPngBytes = null) - } - return@collect - } - loadArtworkAndUpdatePlayer(state) - } - // Flow completed (WebSocket not ready, connection lost, etc) — retry - Timber.d("Media control observation completed, retrying in %s", OBSERVATION_RETRY_DELAY) - delay(OBSERVATION_RETRY_DELAY) - } - } - } - - override fun onGetSession(controllerInfo: MediaSession.ControllerInfo): MediaSession? = mediaSession + override fun onGetSession(controllerInfo: MediaSession.ControllerInfo): MediaSession? = + haMediaSession?.mediaSession override fun onTaskRemoved(rootIntent: Intent?) { - val currentPlayer = mediaSession?.player + val currentPlayer = haMediaSession?.mediaSession?.player if (currentPlayer == null || !currentPlayer.playWhenReady || currentPlayer.mediaItemCount == 0) { stopSelf() } @@ -167,110 +62,14 @@ class HaMediaSessionService : MediaSessionService() { override fun onDestroy() { Timber.d("HaMediaSessionService destroyed") - serviceScope.cancel() - mediaSession?.run { - player.release() - release() - } - mediaSession = null - player = null + haMediaSession?.release() + haMediaSession = null super.onDestroy() } - /** - * Restricts media session connections to trusted controllers (same app, system, - * or apps with MEDIA_CONTENT_CONTROL / notification listener access). - */ - @OptIn(UnstableApi::class) - private inner class MediaSessionCallback : MediaSession.Callback { - override fun onConnect( - session: MediaSession, - controller: MediaSession.ControllerInfo, - ): MediaSession.ConnectionResult { - if (!controller.isTrusted) { - Timber.w( - "Rejecting connection from untrusted media controller package=%s", - controller.packageName, - ) - return MediaSession.ConnectionResult.reject() - } - return MediaSession.ConnectionResult.accept( - MediaSession.ConnectionResult.DEFAULT_SESSION_COMMANDS, - MediaSession.ConnectionResult.DEFAULT_PLAYER_COMMANDS, - ) - } - } - - private fun callMediaAction(action: String, extraData: Map = emptyMap()) { - serviceScope.launch(Dispatchers.IO) { - val serverId = mediaControlRepository.getConfiguredServerId() - val entityId = mediaControlRepository.getConfiguredEntityId() - if (serverId == null || entityId == null) { - Timber.w("Cannot call media action %s: no configured entity", action) - return@launch - } - - val actionData = hashMapOf("entity_id" to entityId) - actionData.putAll(extraData) - - try { - serverManager.integrationRepository(serverId) - .callAction(MEDIA_PLAYER_DOMAIN, action, actionData) - } catch (e: CancellationException) { - throw e - } catch (e: Exception) { - Timber.e(e, "Failed to call media action $action") - } - } - } - - private suspend fun loadArtworkAndUpdatePlayer(state: MediaControlState) { - val artworkUrl = resolveArtworkUrl(state) - val pngBytes = if (artworkUrl != null && artworkUrl != currentArtworkUrl) { - val bytes = loadBitmapAsPng(artworkUrl) - if (bytes != null) { - currentArtworkUrl = artworkUrl - currentArtworkBytes = bytes - } - bytes ?: currentArtworkBytes - } else if (artworkUrl == null) { - currentArtworkUrl = null - currentArtworkBytes = null - null - } else { - currentArtworkBytes - } - - withContext(Dispatchers.Main) { - player?.updateState(state = state, artworkPngBytes = pngBytes) - } - } - - private suspend fun resolveArtworkUrl(state: MediaControlState): String? { - val entityPictureUrl = state.entityPictureUrl ?: return null - if (entityPictureUrl.startsWith("http")) return entityPictureUrl - - val baseUrl = try { - serverManager.connectionStateProvider(state.serverId) - .urlFlow() - .firstUrlOrNull() - ?.toString() - ?.removeSuffix("/") - } catch (e: CancellationException) { - throw e - } catch (e: IllegalStateException) { - Timber.e(e, "Server does not exist for artwork URL resolution") - null - } ?: return null - - return "$baseUrl$entityPictureUrl" - } - internal companion object { const val ACTION_RESTART_OBSERVATION = "io.homeassistant.companion.android.mediacontrol.RESTART_OBSERVATION" - val OBSERVATION_RETRY_DELAY = 5.seconds - private const val ARTWORK_SIZE_PX = 512 /** * Starts the service if a media_player entity is configured. @@ -286,25 +85,4 @@ class HaMediaSessionService : MediaSessionService() { } } } - - /** Loads album art and compresses to PNG bytes on the IO dispatcher. */ - private suspend fun loadBitmapAsPng(url: String): ByteArray? = withContext(Dispatchers.IO) { - try { - val request = ImageRequest.Builder(this@HaMediaSessionService) - .data(url) - .size(ARTWORK_SIZE_PX) - .build() - val result = imageLoader.execute(request) - result.image?.toBitmap()?.let { bitmap -> - val stream = ByteArrayOutputStream() - bitmap.compress(CompressFormat.PNG, 100, stream) - stream.toByteArray() - } - } catch (e: CancellationException) { - throw e - } catch (e: Exception) { - Timber.e(e, "Failed to load album art from ${sensitive(url)}") - null - } - } } From 45a112beedcd7728cbf45c4768417b30168bd5a5 Mon Sep 17 00:00:00 2001 From: Fletcher Dostie Date: Wed, 25 Mar 2026 18:33:34 -0700 Subject: [PATCH 005/114] Stop media session service when its configured server is deleted --- .../android/mediacontrol/HaMediaSessionService.kt | 11 +++++++++++ .../settings/server/ServerSettingsPresenterImpl.kt | 5 +++++ 2 files changed, 16 insertions(+) diff --git a/app/src/main/kotlin/io/homeassistant/companion/android/mediacontrol/HaMediaSessionService.kt b/app/src/main/kotlin/io/homeassistant/companion/android/mediacontrol/HaMediaSessionService.kt index 74fa33abd47..869771c96d0 100644 --- a/app/src/main/kotlin/io/homeassistant/companion/android/mediacontrol/HaMediaSessionService.kt +++ b/app/src/main/kotlin/io/homeassistant/companion/android/mediacontrol/HaMediaSessionService.kt @@ -84,5 +84,16 @@ class HaMediaSessionService : MediaSessionService() { context.startService(Intent(context, HaMediaSessionService::class.java)) } } + + /** + * Should be called after a server is removed. If the service is running with the removed + * server's configuration, it will re-check its config, find no entity, and stop itself. + */ + fun onServerRemoved(context: Context) { + context.startService( + Intent(context, HaMediaSessionService::class.java) + .setAction(ACTION_RESTART_OBSERVATION), + ) + } } } diff --git a/app/src/main/kotlin/io/homeassistant/companion/android/settings/server/ServerSettingsPresenterImpl.kt b/app/src/main/kotlin/io/homeassistant/companion/android/settings/server/ServerSettingsPresenterImpl.kt index 67d8532c554..84150011057 100644 --- a/app/src/main/kotlin/io/homeassistant/companion/android/settings/server/ServerSettingsPresenterImpl.kt +++ b/app/src/main/kotlin/io/homeassistant/companion/android/settings/server/ServerSettingsPresenterImpl.kt @@ -1,8 +1,11 @@ package io.homeassistant.companion.android.settings.server +import android.content.Context import androidx.preference.PreferenceDataStore +import dagger.hilt.android.qualifiers.ApplicationContext import io.homeassistant.companion.android.common.data.network.WifiHelper import io.homeassistant.companion.android.common.data.servers.ServerManager +import io.homeassistant.companion.android.mediacontrol.HaMediaSessionService import javax.inject.Inject import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.Dispatchers @@ -13,6 +16,7 @@ import kotlinx.coroutines.runBlocking import timber.log.Timber class ServerSettingsPresenterImpl @Inject constructor( + @ApplicationContext private val context: Context, private val serverManager: ServerManager, private val wifiHelper: WifiHelper, ) : PreferenceDataStore(), @@ -115,6 +119,7 @@ class ServerSettingsPresenterImpl @Inject constructor( // Remove server anyway, the user wants to delete and we don't need the server for that } serverManager.removeServer(serverId) + HaMediaSessionService.onServerRemoved(context) view.onRemovedServer( success = true, hasAnyRemaining = serverManager.servers().any { it.id != serverId }, From 133c278ec191d5137747ed941059d9e5885bdf7a Mon Sep 17 00:00:00 2001 From: Fletcher Dostie Date: Wed, 25 Mar 2026 22:49:24 -0700 Subject: [PATCH 006/114] Support multiple media_player entities as native media controls Multiple media_player entities can now each appear as their own card in the Android notification shade, with independent playback controls. Configuration is stored as a list and the settings screen lets users add or remove entities individually. --- .../android/mediacontrol/HaMediaSession.kt | 48 ++-- .../mediacontrol/HaMediaSessionService.kt | 110 ++++++-- .../MediaControlSettingsFragment.kt | 23 ++ .../MediaControlSettingsViewModel.kt | 172 ++++++------ .../views/MediaControlSettingsView.kt | 248 ++++++++++++------ .../MediaControlSettingsViewModelTest.kt | 144 +++++++--- .../mediacontrol/MediaControlEntityConfig.kt | 7 + .../mediacontrol/MediaControlRepository.kt | 27 +- .../MediaControlRepositoryImpl.kt | 94 +++---- .../common/data/prefs/PrefsRepository.kt | 15 +- .../common/data/prefs/PrefsRepositoryImpl.kt | 52 ++-- common/src/main/res/values/strings.xml | 6 +- .../MediaControlRepositoryImplTest.kt | 192 +++++++------- .../data/prefs/PrefsRepositoryImplTest.kt | 82 ++++++ 14 files changed, 774 insertions(+), 446 deletions(-) create mode 100644 common/src/main/kotlin/io/homeassistant/companion/android/common/data/mediacontrol/MediaControlEntityConfig.kt diff --git a/app/src/main/kotlin/io/homeassistant/companion/android/mediacontrol/HaMediaSession.kt b/app/src/main/kotlin/io/homeassistant/companion/android/mediacontrol/HaMediaSession.kt index 66d91f71cf0..d4037d1855f 100644 --- a/app/src/main/kotlin/io/homeassistant/companion/android/mediacontrol/HaMediaSession.kt +++ b/app/src/main/kotlin/io/homeassistant/companion/android/mediacontrol/HaMediaSession.kt @@ -10,6 +10,7 @@ import coil3.imageLoader import coil3.request.ImageRequest import coil3.toBitmap import io.homeassistant.companion.android.common.data.integration.IntegrationDomains.MEDIA_PLAYER_DOMAIN +import io.homeassistant.companion.android.common.data.mediacontrol.MediaControlEntityConfig import io.homeassistant.companion.android.common.data.mediacontrol.MediaControlRepository import io.homeassistant.companion.android.common.data.mediacontrol.MediaControlState import io.homeassistant.companion.android.common.data.servers.ServerManager @@ -30,25 +31,27 @@ import kotlinx.coroutines.withContext import timber.log.Timber /** - * Owns the [MediaSession] and [HaRemoteMediaPlayer] for the Home Assistant media control feature. + * Owns the [MediaSession] and [HaRemoteMediaPlayer] for a single Home Assistant media_player entity. * * Observes [MediaControlRepository] for entity state changes, loads artwork via Coil, and * translates Media3 player commands into Home Assistant service calls via [ServerManager]. * - * Call [release] when the hosting service is destroyed to cancel observation and release + * Call [release] when the session is no longer needed to cancel observation and release * Media3 resources. * * @param context Used for Coil image loading and [MediaSession] construction. - * @param mediaControlRepository Source of truth for configured entity and state flow. + * @param config Identifies the media_player entity this session represents. + * @param mediaControlRepository Provides the per-entity state flow. * @param serverManager Used to resolve artwork base URLs and call HA integration actions. - * @param onStopRequested Called on the main thread when no entity is configured and the - * hosting service should stop itself. + * @param onEntityGone Called on the main thread when the WebSocket flow ends unexpectedly and + * the retry loop gives up, so the hosting service can remove this session. */ class HaMediaSession( private val context: Context, + private val config: MediaControlEntityConfig, private val mediaControlRepository: MediaControlRepository, private val serverManager: ServerManager, - private val onStopRequested: () -> Unit, + private val onEntityGone: () -> Unit, ) { val mediaSession: MediaSession @@ -111,8 +114,7 @@ class HaMediaSession( } /** - * Cancels any existing entity state observation and starts a new one, - * re-reading the current configuration from preferences. + * Cancels any existing entity state observation and starts a new one for [config]. */ fun startObservingState() { observationJob?.cancel() @@ -121,14 +123,7 @@ class HaMediaSession( observationJob = scope.launch(Dispatchers.IO) { while (true) { ensureActive() - val isConfigured = mediaControlRepository.getConfiguredServerId() != null && - mediaControlRepository.getConfiguredEntityId() != null - if (!isConfigured) { - Timber.d("No media control entity configured, stopping service") - withContext(Dispatchers.Main) { onStopRequested() } - return@launch - } - mediaControlRepository.observeMediaControlState().collect { state -> + mediaControlRepository.observeEntityState(config).collect { state -> if (state == null) { withContext(Dispatchers.Main) { player.updateState(state = null, artworkPngBytes = null) @@ -138,7 +133,11 @@ class HaMediaSession( loadArtworkAndUpdatePlayer(state) } // Flow completed (WebSocket not ready, connection lost, etc) — retry - Timber.d("Media control observation completed, retrying in %s", OBSERVATION_RETRY_DELAY) + Timber.d( + "Media control observation completed for %s, retrying in %s", + config.entityId, + OBSERVATION_RETRY_DELAY, + ) delay(OBSERVATION_RETRY_DELAY) } } @@ -153,23 +152,16 @@ class HaMediaSession( private fun callMediaAction(action: String, extraData: Map = emptyMap()) { scope.launch(Dispatchers.IO) { - val serverId = mediaControlRepository.getConfiguredServerId() - val entityId = mediaControlRepository.getConfiguredEntityId() - if (serverId == null || entityId == null) { - Timber.w("Cannot call media action %s: no configured entity", action) - return@launch - } - - val actionData = hashMapOf("entity_id" to entityId) + val actionData = hashMapOf("entity_id" to config.entityId) actionData.putAll(extraData) try { - serverManager.integrationRepository(serverId) + serverManager.integrationRepository(config.serverId) .callAction(MEDIA_PLAYER_DOMAIN, action, actionData) } catch (e: CancellationException) { throw e } catch (e: Exception) { - Timber.e(e, "Failed to call media action $action") + Timber.e(e, "Failed to call media action %s", action) } } } @@ -232,7 +224,7 @@ class HaMediaSession( } catch (e: CancellationException) { throw e } catch (e: Exception) { - Timber.e(e, "Failed to load album art from ${sensitive(url)}") + Timber.e(e, "Failed to load album art from %s", sensitive(url)) null } } diff --git a/app/src/main/kotlin/io/homeassistant/companion/android/mediacontrol/HaMediaSessionService.kt b/app/src/main/kotlin/io/homeassistant/companion/android/mediacontrol/HaMediaSessionService.kt index 869771c96d0..b3f4dc883b3 100644 --- a/app/src/main/kotlin/io/homeassistant/companion/android/mediacontrol/HaMediaSessionService.kt +++ b/app/src/main/kotlin/io/homeassistant/companion/android/mediacontrol/HaMediaSessionService.kt @@ -5,17 +5,24 @@ import android.content.Intent import androidx.media3.session.MediaSession import androidx.media3.session.MediaSessionService import dagger.hilt.android.AndroidEntryPoint +import io.homeassistant.companion.android.common.data.mediacontrol.MediaControlEntityConfig import io.homeassistant.companion.android.common.data.mediacontrol.MediaControlRepository import io.homeassistant.companion.android.common.data.servers.ServerManager import javax.inject.Inject +import kotlinx.coroutines.CoroutineScope +import kotlinx.coroutines.Dispatchers +import kotlinx.coroutines.SupervisorJob +import kotlinx.coroutines.cancel +import kotlinx.coroutines.launch import timber.log.Timber /** - * A [MediaSessionService] that exposes a Home Assistant media_player entity as a native - * Android media control in the notification shade. + * A [MediaSessionService] that exposes one or more Home Assistant media_player entities as native + * Android media controls in the notification shade. Each configured entity gets its own + * [HaMediaSession] and [MediaSession], which Media3 registers and presents individually. * - * This service is responsible only for the Android service lifecycle. All session logic — - * state observation, artwork loading, and HA service calls — is delegated to [HaMediaSession]. + * This service is responsible only for the Android service lifecycle and session reconciliation. + * All per-entity session logic is delegated to [HaMediaSession]. */ @AndroidEntryPoint class HaMediaSessionService : MediaSessionService() { @@ -26,68 +33,111 @@ class HaMediaSessionService : MediaSessionService() { @Inject lateinit var serverManager: ServerManager - private var haMediaSession: HaMediaSession? = null + // Keyed by "$serverId:$entityId" + private val activeSessions = mutableMapOf() + private val serviceScope = CoroutineScope(SupervisorJob() + Dispatchers.Main) override fun onCreate() { super.onCreate() Timber.d("HaMediaSessionService created") - haMediaSession = HaMediaSession( - context = this, - mediaControlRepository = mediaControlRepository, - serverManager = serverManager, - onStopRequested = { stopSelf() }, - ) + reconcileSessions() } override fun onStartCommand(intent: Intent?, flags: Int, startId: Int): Int { val result = super.onStartCommand(intent, flags, startId) - val configChanged = intent?.action == ACTION_RESTART_OBSERVATION - val session = haMediaSession ?: return result - if (configChanged || !session.isObserving) { - Timber.d("Starting observation (configChanged=%s, isObserving=%s)", configChanged, session.isObserving) - session.startObservingState() + if (intent?.action == ACTION_RESTART_OBSERVATION) { + Timber.d("Restarting observation due to config change") + reconcileSessions() } return result } override fun onGetSession(controllerInfo: MediaSession.ControllerInfo): MediaSession? = - haMediaSession?.mediaSession + activeSessions.values.firstOrNull()?.mediaSession override fun onTaskRemoved(rootIntent: Intent?) { - val currentPlayer = haMediaSession?.mediaSession?.player - if (currentPlayer == null || !currentPlayer.playWhenReady || currentPlayer.mediaItemCount == 0) { - stopSelf() + val anyPlaying = activeSessions.values.any { session -> + session.mediaSession.player.playWhenReady && session.mediaSession.player.mediaItemCount > 0 } + if (!anyPlaying) stopSelf() } override fun onDestroy() { Timber.d("HaMediaSessionService destroyed") - haMediaSession?.release() - haMediaSession = null + activeSessions.values.forEach { it.release() } + activeSessions.clear() + serviceScope.cancel() super.onDestroy() } + private fun reconcileSessions() { + serviceScope.launch { + val configuredEntities = mediaControlRepository.getConfiguredEntities() + if (configuredEntities.isEmpty()) { + Timber.d("No media control entities configured, stopping service") + stopSelf() + return@launch + } + + val desiredKeys = configuredEntities.map { it.sessionKey() }.toSet() + val currentKeys = activeSessions.keys.toSet() + + // Remove sessions that are no longer configured + (currentKeys - desiredKeys).forEach { key -> + val session = activeSessions.remove(key) ?: return@forEach + removeSession(session.mediaSession) + session.release() + Timber.d("Removed media session for %s", key) + } + + // Add sessions for newly configured entities + (desiredKeys - currentKeys).forEach { key -> + val entityConfig = configuredEntities.first { it.sessionKey() == key } + val session = HaMediaSession( + context = this@HaMediaSessionService, + config = entityConfig, + mediaControlRepository = mediaControlRepository, + serverManager = serverManager, + onEntityGone = { handleEntityGone(entityConfig) }, + ) + addSession(session.mediaSession) + session.startObservingState() + activeSessions[key] = session + Timber.d("Added media session for %s", key) + } + } + } + + private fun handleEntityGone(config: MediaControlEntityConfig) { + val key = config.sessionKey() + val session = activeSessions.remove(key) ?: return + removeSession(session.mediaSession) + session.release() + Timber.d("Entity gone, removed media session for %s", key) + if (activeSessions.isEmpty()) { + stopSelf() + } + } + internal companion object { const val ACTION_RESTART_OBSERVATION = "io.homeassistant.companion.android.mediacontrol.RESTART_OBSERVATION" /** - * Starts the service if a media_player entity is configured. + * Starts the service if any media_player entities are configured. * Should be called from a foreground context (e.g. Activity) to avoid * Android 15+ restrictions on starting mediaPlayback foreground services from background. */ suspend fun startIfConfigured(context: Context, mediaControlRepository: MediaControlRepository) { - val serverId = mediaControlRepository.getConfiguredServerId() - val entityId = mediaControlRepository.getConfiguredEntityId() - if (serverId != null && entityId != null) { - Timber.d("Media control entity configured, starting HaMediaSessionService") + if (mediaControlRepository.getConfiguredEntities().isNotEmpty()) { + Timber.d("Media control entities configured, starting HaMediaSessionService") context.startService(Intent(context, HaMediaSessionService::class.java)) } } /** - * Should be called after a server is removed. If the service is running with the removed - * server's configuration, it will re-check its config, find no entity, and stop itself. + * Should be called after a server is removed. The service will re-check its configuration, + * remove any sessions for the deleted server, and stop itself if none remain. */ fun onServerRemoved(context: Context) { context.startService( @@ -97,3 +147,5 @@ class HaMediaSessionService : MediaSessionService() { } } } + +private fun MediaControlEntityConfig.sessionKey(): String = "$serverId:$entityId" diff --git a/app/src/main/kotlin/io/homeassistant/companion/android/settings/mediacontrol/MediaControlSettingsFragment.kt b/app/src/main/kotlin/io/homeassistant/companion/android/settings/mediacontrol/MediaControlSettingsFragment.kt index ef3357cb832..17df5c59db3 100644 --- a/app/src/main/kotlin/io/homeassistant/companion/android/settings/mediacontrol/MediaControlSettingsFragment.kt +++ b/app/src/main/kotlin/io/homeassistant/companion/android/settings/mediacontrol/MediaControlSettingsFragment.kt @@ -1,5 +1,6 @@ package io.homeassistant.companion.android.settings.mediacontrol +import android.content.Intent import android.os.Bundle import android.view.LayoutInflater import android.view.View @@ -7,10 +8,15 @@ import android.view.ViewGroup import androidx.compose.ui.platform.ComposeView import androidx.fragment.app.Fragment import androidx.fragment.app.viewModels +import androidx.lifecycle.Lifecycle +import androidx.lifecycle.lifecycleScope +import androidx.lifecycle.repeatOnLifecycle import dagger.hilt.android.AndroidEntryPoint import io.homeassistant.companion.android.common.R as commonR +import io.homeassistant.companion.android.mediacontrol.HaMediaSessionService import io.homeassistant.companion.android.settings.addHelpMenuProvider import io.homeassistant.companion.android.settings.mediacontrol.views.MediaControlSettingsView +import kotlinx.coroutines.launch @AndroidEntryPoint class MediaControlSettingsFragment : Fragment() { @@ -26,6 +32,23 @@ class MediaControlSettingsFragment : Fragment() { override fun onViewCreated(view: View, savedInstanceState: Bundle?) { addHelpMenuProvider("https://companion.home-assistant.io/docs/integrations/android-media-controls") + viewLifecycleOwner.lifecycleScope.launch { + viewLifecycleOwner.repeatOnLifecycle(Lifecycle.State.STARTED) { + viewModel.serviceEvents.collect { event -> + when (event) { + MediaControlServiceEvent.Start -> { + requireContext().startService( + Intent(requireContext(), HaMediaSessionService::class.java) + .setAction(HaMediaSessionService.ACTION_RESTART_OBSERVATION), + ) + } + MediaControlServiceEvent.Stop -> { + requireContext().stopService(Intent(requireContext(), HaMediaSessionService::class.java)) + } + } + } + } + } } override fun onResume() { diff --git a/app/src/main/kotlin/io/homeassistant/companion/android/settings/mediacontrol/MediaControlSettingsViewModel.kt b/app/src/main/kotlin/io/homeassistant/companion/android/settings/mediacontrol/MediaControlSettingsViewModel.kt index 76f4eac337f..49e96876f38 100644 --- a/app/src/main/kotlin/io/homeassistant/companion/android/settings/mediacontrol/MediaControlSettingsViewModel.kt +++ b/app/src/main/kotlin/io/homeassistant/companion/android/settings/mediacontrol/MediaControlSettingsViewModel.kt @@ -1,41 +1,52 @@ package io.homeassistant.companion.android.settings.mediacontrol import android.app.Application -import android.content.Intent import androidx.lifecycle.AndroidViewModel import androidx.lifecycle.viewModelScope import dagger.hilt.android.lifecycle.HiltViewModel import io.homeassistant.companion.android.common.data.integration.Entity import io.homeassistant.companion.android.common.data.integration.IntegrationDomains.MEDIA_PLAYER_DOMAIN +import io.homeassistant.companion.android.common.data.mediacontrol.MediaControlEntityConfig import io.homeassistant.companion.android.common.data.mediacontrol.MediaControlRepository import io.homeassistant.companion.android.common.data.servers.ServerManager import io.homeassistant.companion.android.common.data.websocket.impl.entities.AreaRegistryResponse import io.homeassistant.companion.android.common.data.websocket.impl.entities.DeviceRegistryResponse import io.homeassistant.companion.android.common.data.websocket.impl.entities.EntityRegistryResponse import io.homeassistant.companion.android.database.server.Server -import io.homeassistant.companion.android.mediacontrol.HaMediaSessionService import java.util.concurrent.ConcurrentHashMap import javax.inject.Inject import kotlinx.coroutines.CancellationException -import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.async import kotlinx.coroutines.awaitAll +import kotlinx.coroutines.flow.MutableSharedFlow import kotlinx.coroutines.flow.MutableStateFlow +import kotlinx.coroutines.flow.SharedFlow import kotlinx.coroutines.flow.StateFlow +import kotlinx.coroutines.flow.asSharedFlow import kotlinx.coroutines.flow.asStateFlow import kotlinx.coroutines.flow.update import kotlinx.coroutines.launch import timber.log.Timber +/** One-shot events emitted by [MediaControlSettingsViewModel] for the UI layer to act on. */ +sealed interface MediaControlServiceEvent { + data object Start : MediaControlServiceEvent + data object Stop : MediaControlServiceEvent +} + data class MediaControlSettingsUiState( val servers: List = emptyList(), - val entities: List = emptyList(), - val entityRegistry: List = emptyList(), - val deviceRegistry: List = emptyList(), - val areaRegistry: List = emptyList(), - val selectedServerId: Int = ServerManager.SERVER_ID_ACTIVE, - val selectedEntityId: String = "", - val isConfigured: Boolean = false, + // All loaded entities/registries per server, used by the entity picker + val entitiesPerServer: Map> = emptyMap(), + val entityRegistryPerServer: Map> = emptyMap(), + val deviceRegistryPerServer: Map> = emptyMap(), + val areaRegistryPerServer: Map> = emptyMap(), + // The in-memory list of entities being configured + val configuredEntities: List = emptyList(), + // Whether the "add entity" inline form is currently shown + val showAddSlot: Boolean = false, + // Server selection within the pending add form + val pendingServerId: Int = ServerManager.SERVER_ID_ACTIVE, ) @HiltViewModel @@ -48,10 +59,13 @@ class MediaControlSettingsViewModel @Inject constructor( private val _uiState = MutableStateFlow(MediaControlSettingsUiState()) val uiState: StateFlow = _uiState.asStateFlow() - private val entities = ConcurrentHashMap>() - private val entityRegistries = ConcurrentHashMap>() - private val deviceRegistries = ConcurrentHashMap>() - private val areaRegistries = ConcurrentHashMap>() + private val _serviceEvents = MutableSharedFlow(extraBufferCapacity = 1) + val serviceEvents: SharedFlow = _serviceEvents.asSharedFlow() + + private val entitiesPerServer = ConcurrentHashMap>() + private val entityRegistriesPerServer = ConcurrentHashMap>() + private val deviceRegistriesPerServer = ConcurrentHashMap>() + private val areaRegistriesPerServer = ConcurrentHashMap>() private data class ServerRegistries( val serverId: Int, @@ -62,9 +76,11 @@ class MediaControlSettingsViewModel @Inject constructor( ) init { - viewModelScope.launch(Dispatchers.IO) { + viewModelScope.launch { val loadedServers = serverManager.servers() - _uiState.update { it.copy(servers = loadedServers) } + val defaultServerId = serverManager.getServer()?.id ?: ServerManager.SERVER_ID_ACTIVE + _uiState.update { it.copy(servers = loadedServers, pendingServerId = defaultServerId) } + val results = loadedServers.map { server -> async { ServerRegistries( @@ -83,89 +99,89 @@ class MediaControlSettingsViewModel @Inject constructor( } }.awaitAll() results.forEach { registries -> - entities[registries.serverId] = registries.entities - entityRegistries[registries.serverId] = registries.entityRegistry - deviceRegistries[registries.serverId] = registries.deviceRegistry - areaRegistries[registries.serverId] = registries.areaRegistry + entitiesPerServer[registries.serverId] = registries.entities + entityRegistriesPerServer[registries.serverId] = registries.entityRegistry + deviceRegistriesPerServer[registries.serverId] = registries.deviceRegistry + areaRegistriesPerServer[registries.serverId] = registries.areaRegistry } - val configuredServerId = mediaControlRepository.getConfiguredServerId() - val configuredEntityId = mediaControlRepository.getConfiguredEntityId() - - if (configuredServerId != null && configuredEntityId != null) { - _uiState.update { - it.copy( - selectedServerId = configuredServerId, - selectedEntityId = configuredEntityId, - isConfigured = true, - ) - } - } else { - _uiState.update { - it.copy(selectedServerId = serverManager.getServer()?.id ?: 0) - } + val configuredEntities = mediaControlRepository.getConfiguredEntities() + _uiState.update { state -> + state.copy( + entitiesPerServer = entitiesPerServer.toMap(), + entityRegistryPerServer = entityRegistriesPerServer.toMap(), + deviceRegistryPerServer = deviceRegistriesPerServer.toMap(), + areaRegistryPerServer = areaRegistriesPerServer.toMap(), + configuredEntities = configuredEntities, + ) } - loadEntities(_uiState.value.selectedServerId) } } - fun selectServerId(serverId: Int) { - if (serverId != _uiState.value.selectedServerId) { - _uiState.update { - it.copy(selectedServerId = serverId, selectedEntityId = "") - } - loadEntities(serverId) + /** Opens the inline form to add a new entity slot. */ + fun showAddEntity() { + val defaultServerId = _uiState.value.let { state -> + if (state.servers.isNotEmpty()) state.servers.first().id else ServerManager.SERVER_ID_ACTIVE } + _uiState.update { it.copy(showAddSlot = true, pendingServerId = defaultServerId) } } - fun selectEntityId(entityId: String) { - _uiState.update { it.copy(selectedEntityId = entityId) } + /** Cancels the pending add-entity form without making changes. */ + fun cancelAddEntity() { + _uiState.update { it.copy(showAddSlot = false) } } - /** Saves the current entity selection and starts the media session service. */ - fun saveConfiguration() { - viewModelScope.launch { - val state = _uiState.value - mediaControlRepository.setConfiguredEntity( - serverId = state.selectedServerId, - entityId = state.selectedEntityId, - ) - _uiState.update { it.copy(isConfigured = true) } - startService() - } + /** Updates the selected server in the pending add form, resetting entity selection. */ + fun selectPendingServerId(serverId: Int) { + _uiState.update { it.copy(pendingServerId = serverId) } } - /** Clears the configuration and stops the media session service. */ - fun clearConfiguration() { - viewModelScope.launch { - mediaControlRepository.setConfiguredEntity(serverId = null, entityId = null) - _uiState.update { it.copy(selectedEntityId = "", isConfigured = false) } - stopService() + /** + * Adds the entity identified by [entityId] from the pending server to the configured list, + * then hides the add form. Has no effect if the entity is already in the list. + */ + fun addPendingEntity(entityId: String) { + val config = MediaControlEntityConfig( + serverId = _uiState.value.pendingServerId, + entityId = entityId, + ) + _uiState.update { state -> + if (state.configuredEntities.contains(config)) { + state.copy(showAddSlot = false) + } else { + state.copy( + configuredEntities = state.configuredEntities + config, + showAddSlot = false, + ) + } } } - private fun loadEntities(serverId: Int) { - _uiState.update { - it.copy( - entities = entities[serverId] ?: emptyList(), - entityRegistry = entityRegistries[serverId] ?: emptyList(), - deviceRegistry = deviceRegistries[serverId] ?: emptyList(), - areaRegistry = areaRegistries[serverId] ?: emptyList(), - ) + /** Removes the configured entity at [index] from the list. */ + fun removeEntity(index: Int) { + _uiState.update { state -> + state.copy(configuredEntities = state.configuredEntities.toMutableList().also { it.removeAt(index) }) } } - private fun startService() { - val context = getApplication() - val intent = Intent(context, HaMediaSessionService::class.java) - intent.action = HaMediaSessionService.ACTION_RESTART_OBSERVATION - context.startService(intent) + /** Saves the current list of configured entities and emits a service event to the UI layer. */ + fun saveConfiguration() { + viewModelScope.launch { + val entities = _uiState.value.configuredEntities + mediaControlRepository.setConfiguredEntities(entities) + _serviceEvents.emit( + if (entities.isEmpty()) MediaControlServiceEvent.Stop else MediaControlServiceEvent.Start, + ) + } } - private fun stopService() { - val context = getApplication() - val intent = Intent(context, HaMediaSessionService::class.java) - context.stopService(intent) + /** Clears all configured entities and emits a stop event to the UI layer. */ + fun clearAllConfiguration() { + viewModelScope.launch { + mediaControlRepository.setConfiguredEntities(emptyList()) + _uiState.update { it.copy(configuredEntities = emptyList(), showAddSlot = false) } + _serviceEvents.emit(MediaControlServiceEvent.Stop) + } } private suspend fun loadMediaPlayerEntities(serverId: Int): List = try { diff --git a/app/src/main/kotlin/io/homeassistant/companion/android/settings/mediacontrol/views/MediaControlSettingsView.kt b/app/src/main/kotlin/io/homeassistant/companion/android/settings/mediacontrol/views/MediaControlSettingsView.kt index 50a94bb0df6..73bb3cacaae 100644 --- a/app/src/main/kotlin/io/homeassistant/companion/android/settings/mediacontrol/views/MediaControlSettingsView.kt +++ b/app/src/main/kotlin/io/homeassistant/companion/android/settings/mediacontrol/views/MediaControlSettingsView.kt @@ -1,33 +1,43 @@ package io.homeassistant.companion.android.settings.mediacontrol.views +import androidx.compose.foundation.layout.Arrangement import androidx.compose.foundation.layout.Box import androidx.compose.foundation.layout.Column +import androidx.compose.foundation.layout.Row import androidx.compose.foundation.layout.Spacer import androidx.compose.foundation.layout.fillMaxWidth import androidx.compose.foundation.layout.height import androidx.compose.foundation.layout.padding import androidx.compose.foundation.rememberScrollState import androidx.compose.foundation.verticalScroll +import androidx.compose.material.icons.Icons +import androidx.compose.material.icons.filled.Clear +import androidx.compose.material3.HorizontalDivider import androidx.compose.material3.Text import androidx.compose.runtime.Composable import androidx.compose.runtime.getValue +import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier import androidx.compose.ui.res.stringResource import androidx.compose.ui.tooling.preview.Preview import androidx.compose.ui.unit.dp import androidx.lifecycle.compose.collectAsStateWithLifecycle import io.homeassistant.companion.android.common.R +import io.homeassistant.companion.android.common.compose.composable.ButtonVariant import io.homeassistant.companion.android.common.compose.composable.HAFilledButton +import io.homeassistant.companion.android.common.compose.composable.HAIconButton import io.homeassistant.companion.android.common.compose.composable.HAPlainButton import io.homeassistant.companion.android.common.compose.theme.HATextStyle import io.homeassistant.companion.android.common.compose.theme.HATheme import io.homeassistant.companion.android.common.compose.theme.HAThemeForPreview import io.homeassistant.companion.android.common.compose.theme.LocalHAColorScheme import io.homeassistant.companion.android.common.data.integration.Entity +import io.homeassistant.companion.android.common.data.mediacontrol.MediaControlEntityConfig import io.homeassistant.companion.android.common.data.websocket.impl.entities.AreaRegistryResponse import io.homeassistant.companion.android.common.data.websocket.impl.entities.DeviceRegistryResponse import io.homeassistant.companion.android.common.data.websocket.impl.entities.EntityRegistryResponse import io.homeassistant.companion.android.database.server.Server +import io.homeassistant.companion.android.settings.mediacontrol.MediaControlSettingsUiState import io.homeassistant.companion.android.settings.mediacontrol.MediaControlSettingsViewModel import io.homeassistant.companion.android.util.compose.ServerExposedDropdownMenu import io.homeassistant.companion.android.util.compose.entity.EntityPicker @@ -39,19 +49,14 @@ fun MediaControlSettingsView(viewModel: MediaControlSettingsViewModel, modifier: val uiState by viewModel.uiState.collectAsStateWithLifecycle() HATheme { MediaControlSettingsContent( - servers = uiState.servers, - entities = uiState.entities, - entityRegistry = uiState.entityRegistry, - deviceRegistry = uiState.deviceRegistry, - areaRegistry = uiState.areaRegistry, - selectedServerId = uiState.selectedServerId, - selectedEntityId = uiState.selectedEntityId, - isConfigured = uiState.isConfigured, - onServerSelected = viewModel::selectServerId, - onEntitySelected = viewModel::selectEntityId, - onEntityCleared = { viewModel.selectEntityId("") }, + uiState = uiState, + onAddEntity = viewModel::showAddEntity, + onCancelAddEntity = viewModel::cancelAddEntity, + onPendingServerSelected = viewModel::selectPendingServerId, + onPendingEntitySelected = viewModel::addPendingEntity, + onRemoveEntity = viewModel::removeEntity, onSave = viewModel::saveConfiguration, - onClear = viewModel::clearConfiguration, + onClearAll = viewModel::clearAllConfiguration, modifier = modifier, ) } @@ -59,30 +64,21 @@ fun MediaControlSettingsView(viewModel: MediaControlSettingsViewModel, modifier: @Composable internal fun MediaControlSettingsContent( - servers: List, - entities: List, - entityRegistry: List, - deviceRegistry: List, - areaRegistry: List, - selectedServerId: Int, - selectedEntityId: String, - isConfigured: Boolean, - onServerSelected: (Int) -> Unit, - onEntitySelected: (String) -> Unit, - onEntityCleared: () -> Unit, + uiState: MediaControlSettingsUiState, + onAddEntity: () -> Unit, + onCancelAddEntity: () -> Unit, + onPendingServerSelected: (Int) -> Unit, + onPendingEntitySelected: (String) -> Unit, + onRemoveEntity: (Int) -> Unit, onSave: () -> Unit, - onClear: () -> Unit, + onClearAll: () -> Unit, modifier: Modifier = Modifier, ) { val scrollState = rememberScrollState() val colorScheme = LocalHAColorScheme.current - val saveEnabled = selectedEntityId.isNotBlank() && - servers.any { it.id == selectedServerId } && - entities.any { it.entityId == selectedEntityId } + val pendingEntities = uiState.entitiesPerServer[uiState.pendingServerId] ?: emptyList() - Box( - modifier = modifier.verticalScroll(scrollState), - ) { + Box(modifier = modifier.verticalScroll(scrollState)) { Column( modifier = Modifier .padding(safeBottomPaddingValues(applyHorizontal = false)) @@ -96,41 +92,56 @@ internal fun MediaControlSettingsContent( Spacer(modifier = Modifier.height(16.dp)) - if (servers.size > 1 || servers.none { it.id == selectedServerId }) { - ServerExposedDropdownMenu( - servers = servers, - current = selectedServerId, - onSelected = onServerSelected, - title = R.string.server, + uiState.configuredEntities.forEachIndexed { index, config -> + ConfiguredEntityRow( + config = config, + servers = uiState.servers, + entitiesPerServer = uiState.entitiesPerServer, + onRemove = { onRemoveEntity(index) }, ) - Spacer(modifier = Modifier.height(16.dp)) + if (index < uiState.configuredEntities.lastIndex) { + HorizontalDivider() + } } - EntityPicker( - entities = entities, - selectedEntityId = selectedEntityId, - onEntitySelectedId = onEntitySelected, - onEntityCleared = onEntityCleared, - addButtonText = stringResource(R.string.media_control_select_entity), - entityRegistry = entityRegistry, - deviceRegistry = deviceRegistry, - areaRegistry = areaRegistry, - ) + if (uiState.configuredEntities.isNotEmpty()) { + Spacer(modifier = Modifier.height(8.dp)) + } - Spacer(modifier = Modifier.height(16.dp)) + if (uiState.showAddSlot) { + AddEntitySlot( + servers = uiState.servers, + pendingServerId = uiState.pendingServerId, + pendingEntities = pendingEntities, + entityRegistry = uiState.entityRegistryPerServer[uiState.pendingServerId] ?: emptyList(), + deviceRegistry = uiState.deviceRegistryPerServer[uiState.pendingServerId] ?: emptyList(), + areaRegistry = uiState.areaRegistryPerServer[uiState.pendingServerId] ?: emptyList(), + onServerSelected = onPendingServerSelected, + onEntitySelected = onPendingEntitySelected, + onCancel = onCancelAddEntity, + ) + Spacer(modifier = Modifier.height(16.dp)) + } else { + HAFilledButton( + text = stringResource(R.string.media_control_add_entity), + onClick = onAddEntity, + modifier = Modifier.fillMaxWidth(), + ) + Spacer(modifier = Modifier.height(8.dp)) + } HAFilledButton( text = stringResource(R.string.save), onClick = onSave, - enabled = saveEnabled, + enabled = uiState.configuredEntities.isNotEmpty(), modifier = Modifier.fillMaxWidth(), ) - if (isConfigured) { + if (uiState.configuredEntities.isNotEmpty()) { Spacer(modifier = Modifier.height(8.dp)) HAPlainButton( text = stringResource(R.string.media_control_clear), - onClick = onClear, + onClick = onClearAll, modifier = Modifier.fillMaxWidth(), ) } @@ -138,46 +149,129 @@ internal fun MediaControlSettingsContent( } } +@Composable +private fun ConfiguredEntityRow( + config: MediaControlEntityConfig, + servers: List, + entitiesPerServer: Map>, + onRemove: () -> Unit, +) { + val colorScheme = LocalHAColorScheme.current + val serverName = servers.firstOrNull { it.id == config.serverId }?.friendlyName + val entityName = entitiesPerServer[config.serverId] + ?.firstOrNull { it.entityId == config.entityId } + ?.attributes?.get("friendly_name") as? String + val displayName = entityName ?: config.entityId + val subtitle = if (servers.size > 1 && serverName != null) serverName else null + + Row( + verticalAlignment = Alignment.CenterVertically, + horizontalArrangement = Arrangement.SpaceBetween, + modifier = Modifier + .fillMaxWidth() + .padding(vertical = 4.dp), + ) { + Column(modifier = Modifier.weight(1f)) { + Text( + text = displayName, + style = HATextStyle.Body, + color = colorScheme.colorTextPrimary, + ) + if (subtitle != null) { + Text( + text = subtitle, + style = HATextStyle.BodyMedium, + color = colorScheme.colorTextSecondary, + ) + } + } + HAIconButton( + icon = Icons.Default.Clear, + onClick = onRemove, + contentDescription = stringResource(R.string.media_control_remove_entity), + variant = ButtonVariant.NEUTRAL, + ) + } +} + +@Composable +private fun AddEntitySlot( + servers: List, + pendingServerId: Int, + pendingEntities: List, + entityRegistry: List, + deviceRegistry: List, + areaRegistry: List, + onServerSelected: (Int) -> Unit, + onEntitySelected: (String) -> Unit, + onCancel: () -> Unit, +) { + Column { + if (servers.size > 1 || servers.none { it.id == pendingServerId }) { + ServerExposedDropdownMenu( + servers = servers, + current = pendingServerId, + onSelected = onServerSelected, + title = R.string.server, + ) + Spacer(modifier = Modifier.height(8.dp)) + } + + EntityPicker( + entities = pendingEntities, + selectedEntityId = null, + onEntitySelectedId = onEntitySelected, + onEntityCleared = {}, + addButtonText = stringResource(R.string.media_control_select_entity), + entityRegistry = entityRegistry, + deviceRegistry = deviceRegistry, + areaRegistry = areaRegistry, + ) + + Spacer(modifier = Modifier.height(8.dp)) + HAPlainButton( + text = stringResource(R.string.cancel), + onClick = onCancel, + modifier = Modifier.fillMaxWidth(), + ) + } +} + @Preview @Composable -private fun MediaControlSettingsContentPreview() { +private fun MediaControlSettingsContentEmptyPreview() { HAThemeForPreview { MediaControlSettingsContent( - servers = emptyList(), - entities = emptyList(), - entityRegistry = emptyList(), - deviceRegistry = emptyList(), - areaRegistry = emptyList(), - selectedServerId = 0, - selectedEntityId = "", - isConfigured = false, - onServerSelected = {}, - onEntitySelected = {}, - onEntityCleared = {}, + uiState = MediaControlSettingsUiState(), + onAddEntity = {}, + onCancelAddEntity = {}, + onPendingServerSelected = {}, + onPendingEntitySelected = {}, + onRemoveEntity = {}, onSave = {}, - onClear = {}, + onClearAll = {}, ) } } @Preview @Composable -private fun MediaControlSettingsContentConfiguredPreview() { +private fun MediaControlSettingsContentWithEntitiesPreview() { HAThemeForPreview { MediaControlSettingsContent( - servers = emptyList(), - entities = emptyList(), - entityRegistry = emptyList(), - deviceRegistry = emptyList(), - areaRegistry = emptyList(), - selectedServerId = 1, - selectedEntityId = "media_player.living_room", - isConfigured = true, - onServerSelected = {}, - onEntitySelected = {}, - onEntityCleared = {}, + uiState = MediaControlSettingsUiState( + configuredEntities = listOf( + MediaControlEntityConfig(serverId = 1, entityId = "media_player.living_room"), + MediaControlEntityConfig(serverId = 1, entityId = "media_player.bedroom"), + ), + ), + onAddEntity = {}, + onCancelAddEntity = {}, + onPendingServerSelected = {}, + onPendingEntitySelected = {}, + onRemoveEntity = {}, onSave = {}, - onClear = {}, + onClearAll = {}, ) } } diff --git a/app/src/test/kotlin/io/homeassistant/companion/android/settings/mediacontrol/MediaControlSettingsViewModelTest.kt b/app/src/test/kotlin/io/homeassistant/companion/android/settings/mediacontrol/MediaControlSettingsViewModelTest.kt index 5199fed885b..fbcc95a5c7a 100644 --- a/app/src/test/kotlin/io/homeassistant/companion/android/settings/mediacontrol/MediaControlSettingsViewModelTest.kt +++ b/app/src/test/kotlin/io/homeassistant/companion/android/settings/mediacontrol/MediaControlSettingsViewModelTest.kt @@ -1,6 +1,8 @@ package io.homeassistant.companion.android.settings.mediacontrol import android.app.Application +import app.cash.turbine.test +import io.homeassistant.companion.android.common.data.mediacontrol.MediaControlEntityConfig import io.homeassistant.companion.android.common.data.mediacontrol.MediaControlRepository import io.homeassistant.companion.android.common.data.servers.ServerManager import io.homeassistant.companion.android.testing.unit.ConsoleLogExtension @@ -9,7 +11,8 @@ import io.mockk.coVerify import io.mockk.mockk import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.ExperimentalCoroutinesApi -import kotlinx.coroutines.test.UnconfinedTestDispatcher +import kotlinx.coroutines.test.StandardTestDispatcher +import kotlinx.coroutines.test.advanceUntilIdle import kotlinx.coroutines.test.resetMain import kotlinx.coroutines.test.runTest import kotlinx.coroutines.test.setMain @@ -26,7 +29,7 @@ import org.junit.jupiter.api.extension.ExtendWith @ExtendWith(ConsoleLogExtension::class) class MediaControlSettingsViewModelTest { - private val testDispatcher = UnconfinedTestDispatcher() + private val testDispatcher = StandardTestDispatcher() private val serverManager: ServerManager = mockk(relaxed = true) private val mediaControlRepository: MediaControlRepository = mockk(relaxed = true) private val application: Application = mockk(relaxed = true) @@ -40,8 +43,7 @@ class MediaControlSettingsViewModelTest { coEvery { serverManager.getServer(any()) } returns null coEvery { serverManager.integrationRepository(any()) } returns mockk(relaxed = true) coEvery { serverManager.webSocketRepository(any()) } returns mockk(relaxed = true) - coEvery { mediaControlRepository.getConfiguredServerId() } returns null - coEvery { mediaControlRepository.getConfiguredEntityId() } returns null + coEvery { mediaControlRepository.getConfiguredEntities() } returns emptyList() } @AfterEach @@ -58,86 +60,148 @@ class MediaControlSettingsViewModelTest { } @Nested - inner class EntitySelectionTest { + inner class InitializationTest { @Test - fun `Given viewModel when selectEntityId called then selectedEntityId is updated`() = runTest(testDispatcher) { + fun `Given no configured entities when viewModel created then configuredEntities is empty`() = runTest(testDispatcher) { viewModel = createViewModel() + advanceUntilIdle() - viewModel.selectEntityId("media_player.bedroom") - - assertEquals("media_player.bedroom", viewModel.uiState.value.selectedEntityId) + assertEquals(emptyList(), viewModel.uiState.value.configuredEntities) } @Test - fun `Given viewModel when selectEntityId with empty then selectedEntityId is empty`() = runTest(testDispatcher) { - viewModel = createViewModel() - viewModel.selectEntityId("media_player.test") + fun `Given configured entities when viewModel created then configuredEntities reflects repo`() = runTest(testDispatcher) { + val entities = listOf(MediaControlEntityConfig(serverId = 1, entityId = "media_player.tv")) + coEvery { mediaControlRepository.getConfiguredEntities() } returns entities - viewModel.selectEntityId("") + viewModel = createViewModel() + advanceUntilIdle() - assertEquals("", viewModel.uiState.value.selectedEntityId) + assertEquals(entities, viewModel.uiState.value.configuredEntities) } } @Nested - inner class ServerSelectionTest { + inner class AddEntityTest { + + @Test + fun `Given viewModel when showAddEntity called then showAddSlot is true`() = runTest(testDispatcher) { + viewModel = createViewModel() + + viewModel.showAddEntity() + + assertTrue(viewModel.uiState.value.showAddSlot) + } + + @Test + fun `Given add slot shown when cancelAddEntity called then showAddSlot is false`() = runTest(testDispatcher) { + viewModel = createViewModel() + viewModel.showAddEntity() + + viewModel.cancelAddEntity() + + assertFalse(viewModel.uiState.value.showAddSlot) + } @Test - fun `Given entity selected when switching server then entity is cleared`() = runTest(testDispatcher) { + fun `Given add slot shown when addPendingEntity called then entity appended and slot hidden`() = runTest(testDispatcher) { viewModel = createViewModel() - viewModel.selectEntityId("media_player.living_room") + viewModel.showAddEntity() - viewModel.selectServerId(99) + viewModel.addPendingEntity("media_player.living_room") - assertEquals("", viewModel.uiState.value.selectedEntityId) + assertEquals(1, viewModel.uiState.value.configuredEntities.size) + assertEquals("media_player.living_room", viewModel.uiState.value.configuredEntities.first().entityId) + assertFalse(viewModel.uiState.value.showAddSlot) } @Test - fun `Given entity selected when same server reselected then entity is preserved`() = runTest(testDispatcher) { + fun `Given entity already in list when addPendingEntity called with same entity then not duplicated`() = runTest(testDispatcher) { viewModel = createViewModel() - viewModel.selectEntityId("media_player.living_room") + viewModel.showAddEntity() + viewModel.addPendingEntity("media_player.tv") - viewModel.selectServerId(viewModel.uiState.value.selectedServerId) + viewModel.showAddEntity() + viewModel.addPendingEntity("media_player.tv") - assertEquals("media_player.living_room", viewModel.uiState.value.selectedEntityId) + assertEquals(1, viewModel.uiState.value.configuredEntities.size) + } + + @Test + fun `Given add slot shown when selectPendingServerId called then pendingServerId updated`() = runTest(testDispatcher) { + viewModel = createViewModel() + viewModel.showAddEntity() + + viewModel.selectPendingServerId(42) + + assertEquals(42, viewModel.uiState.value.pendingServerId) } } @Nested - inner class SaveConfigurationTest { + inner class RemoveEntityTest { @Test - fun `Given entity selected when saveConfiguration called then repository is updated`() = runTest(testDispatcher) { + fun `Given configured entity when removeEntity called then entity removed`() = runTest(testDispatcher) { viewModel = createViewModel() - viewModel.selectEntityId("media_player.living_room") + // Populate list via synchronous API to avoid racing with the async init coroutine + viewModel.showAddEntity() + viewModel.addPendingEntity("media_player.tv") + viewModel.showAddEntity() + viewModel.addPendingEntity("media_player.radio") - viewModel.saveConfiguration() + viewModel.removeEntity(0) - coVerify { - mediaControlRepository.setConfiguredEntity( - serverId = any(), - entityId = "media_player.living_room", - ) + assertEquals(1, viewModel.uiState.value.configuredEntities.size) + assertEquals("media_player.radio", viewModel.uiState.value.configuredEntities.first().entityId) + } + } + + @Nested + inner class SaveConfigurationTest { + + @Test + fun `Given entities added when saveConfiguration called then repository updated and start event emitted`() = runTest(testDispatcher) { + viewModel = createViewModel() + advanceUntilIdle() + viewModel.showAddEntity() + viewModel.addPendingEntity("media_player.living_room") + + viewModel.serviceEvents.test { + viewModel.saveConfiguration() + advanceUntilIdle() + + coVerify { + mediaControlRepository.setConfiguredEntities( + match { it.size == 1 && it[0].entityId == "media_player.living_room" }, + ) + } + assertEquals(MediaControlServiceEvent.Start, awaitItem()) + cancelAndIgnoreRemainingEvents() } - assertTrue(viewModel.uiState.value.isConfigured) } } @Nested - inner class ClearConfigurationTest { + inner class ClearAllConfigurationTest { @Test - fun `Given viewModel when clearConfiguration called then repository cleared and state reset`() = runTest(testDispatcher) { + fun `Given configured entities when clearAllConfiguration called then repository cleared and stop event emitted`() = runTest(testDispatcher) { + val entities = listOf(MediaControlEntityConfig(serverId = 1, entityId = "media_player.tv")) + coEvery { mediaControlRepository.getConfiguredEntities() } returns entities viewModel = createViewModel() + advanceUntilIdle() - viewModel.clearConfiguration() + viewModel.serviceEvents.test { + viewModel.clearAllConfiguration() + advanceUntilIdle() - coVerify { - mediaControlRepository.setConfiguredEntity(serverId = null, entityId = null) + coVerify { mediaControlRepository.setConfiguredEntities(emptyList()) } + assertEquals(emptyList(), viewModel.uiState.value.configuredEntities) + assertEquals(MediaControlServiceEvent.Stop, awaitItem()) + cancelAndIgnoreRemainingEvents() } - assertEquals("", viewModel.uiState.value.selectedEntityId) - assertFalse(viewModel.uiState.value.isConfigured) } } } diff --git a/common/src/main/kotlin/io/homeassistant/companion/android/common/data/mediacontrol/MediaControlEntityConfig.kt b/common/src/main/kotlin/io/homeassistant/companion/android/common/data/mediacontrol/MediaControlEntityConfig.kt new file mode 100644 index 00000000000..e819d8ccd5c --- /dev/null +++ b/common/src/main/kotlin/io/homeassistant/companion/android/common/data/mediacontrol/MediaControlEntityConfig.kt @@ -0,0 +1,7 @@ +package io.homeassistant.companion.android.common.data.mediacontrol + +import kotlinx.serialization.Serializable + +/** Identifies a single `media_player` entity to expose as a native media control. */ +@Serializable +data class MediaControlEntityConfig(val serverId: Int, val entityId: String) diff --git a/common/src/main/kotlin/io/homeassistant/companion/android/common/data/mediacontrol/MediaControlRepository.kt b/common/src/main/kotlin/io/homeassistant/companion/android/common/data/mediacontrol/MediaControlRepository.kt index 3d75981b66a..00e1927965f 100644 --- a/common/src/main/kotlin/io/homeassistant/companion/android/common/data/mediacontrol/MediaControlRepository.kt +++ b/common/src/main/kotlin/io/homeassistant/companion/android/common/data/mediacontrol/MediaControlRepository.kt @@ -3,20 +3,27 @@ package io.homeassistant.companion.android.common.data.mediacontrol import kotlinx.coroutines.flow.Flow /** - * Manages the configuration and state observation for a single media_player entity - * used to drive native Android media controls in the notification shade. + * Manages configuration and state observation for media_player entities + * exposed as native Android media controls in the notification shade. */ interface MediaControlRepository { - /** Emits the current [MediaControlState] whenever the configured entity's state changes. Emits null when not configured. */ - fun observeMediaControlState(): Flow + /** + * Emits the current [MediaControlState] for a single entity whenever its state changes. + * Emits null when the entity is unavailable or the WebSocket subscription fails. + */ + fun observeEntityState(config: MediaControlEntityConfig): Flow - /** Returns the currently configured server ID, or null if not configured. */ - suspend fun getConfiguredServerId(): Int? + /** + * Emits the combined state of all configured entities. Each emission is a list of non-null + * states for entities that are currently reachable. Emits an empty list when nothing is + * configured. + */ + fun observeMediaControlStates(): Flow> - /** Returns the currently configured entity ID, or null if not configured. */ - suspend fun getConfiguredEntityId(): String? + /** Returns the list of all configured media_player entities. */ + suspend fun getConfiguredEntities(): List - /** Sets the configured media_player entity. Pass null values to clear the configuration. */ - suspend fun setConfiguredEntity(serverId: Int?, entityId: String?) + /** Replaces the full list of configured media_player entities. */ + suspend fun setConfiguredEntities(entities: List) } diff --git a/common/src/main/kotlin/io/homeassistant/companion/android/common/data/mediacontrol/MediaControlRepositoryImpl.kt b/common/src/main/kotlin/io/homeassistant/companion/android/common/data/mediacontrol/MediaControlRepositoryImpl.kt index d69a359ac11..9fc8b83d9d7 100644 --- a/common/src/main/kotlin/io/homeassistant/companion/android/common/data/mediacontrol/MediaControlRepositoryImpl.kt +++ b/common/src/main/kotlin/io/homeassistant/companion/android/common/data/mediacontrol/MediaControlRepositoryImpl.kt @@ -20,6 +20,7 @@ import io.homeassistant.companion.android.common.data.servers.ServerManager import javax.inject.Inject import kotlinx.coroutines.CancellationException import kotlinx.coroutines.flow.Flow +import kotlinx.coroutines.flow.combine import kotlinx.coroutines.flow.distinctUntilChanged import kotlinx.coroutines.flow.flow import timber.log.Timber @@ -29,59 +30,64 @@ internal class MediaControlRepositoryImpl @Inject constructor( private val serverManager: ServerManager, ) : MediaControlRepository { - override fun observeMediaControlState(): Flow = flow { - val serverId = prefsRepository.getMediaControlServerId() - val entityId = prefsRepository.getMediaControlEntityId() - if (serverId == null || entityId == null) { - emit(null) - return@flow - } - - try { - val stateFlow = serverManager.webSocketRepository(serverId) - .getCompressedStateAndChanges(listOf(entityId)) - if (stateFlow == null) { - Timber.w("WebSocket subscription returned null for entity $entityId") - emit(null) - return@flow - } - - var currentEntity: Entity? = null - stateFlow.collect { event -> - event.added?.get(entityId)?.let { - currentEntity = it.toEntity(entityId) - } - event.changed?.get(entityId)?.let { diff -> - currentEntity = currentEntity?.applyCompressedStateDiff(diff) + override fun observeEntityState(config: MediaControlEntityConfig): Flow = + flow { + try { + val stateFlow = serverManager.webSocketRepository(config.serverId) + .getCompressedStateAndChanges(listOf(config.entityId)) + if (stateFlow == null) { + Timber.w("WebSocket subscription returned null for entity %s", config.entityId) + emit(null) + return@flow } - event.removed?.let { removed -> - if (entityId in removed) { - currentEntity = null + + var currentEntity: Entity? = null + stateFlow.collect { event -> + event.added?.get(config.entityId)?.let { + currentEntity = it.toEntity(config.entityId) + } + event.changed?.get(config.entityId)?.let { diff -> + currentEntity = currentEntity?.applyCompressedStateDiff(diff) + } + event.removed?.let { removed -> + if (config.entityId in removed) { + currentEntity = null + } } - } - val entity = currentEntity - if (entity != null) { - emit(entity.toMediaControlState(serverId = serverId)) - } else { - emit(null) + val entity = currentEntity + if (entity != null) { + emit(entity.toMediaControlState(serverId = config.serverId)) + } else { + emit(null) + } } + } catch (e: CancellationException) { + throw e + } catch (e: Exception) { + Timber.e(e, "Failed to subscribe to media control entity %s", config.entityId) + emit(null) } - } catch (e: CancellationException) { - throw e - } catch (e: Exception) { - Timber.e(e, "Failed to subscribe to media control entity $entityId") - emit(null) + }.distinctUntilChanged() + + override fun observeMediaControlStates(): Flow> = flow { + val entities = prefsRepository.getMediaControlEntities() + if (entities.isEmpty()) { + emit(emptyList()) + return@flow } - }.distinctUntilChanged() - override suspend fun getConfiguredServerId(): Int? = prefsRepository.getMediaControlServerId() + val perEntityFlows = entities.map { config -> observeEntityState(config) } + combine(perEntityFlows) { states -> states.filterNotNull() } + .distinctUntilChanged() + .collect { emit(it) } + } - override suspend fun getConfiguredEntityId(): String? = prefsRepository.getMediaControlEntityId() + override suspend fun getConfiguredEntities(): List = + prefsRepository.getMediaControlEntities() - override suspend fun setConfiguredEntity(serverId: Int?, entityId: String?) { - prefsRepository.setMediaControlServerId(serverId) - prefsRepository.setMediaControlEntityId(entityId) + override suspend fun setConfiguredEntities(entities: List) { + prefsRepository.setMediaControlEntities(entities) } } diff --git a/common/src/main/kotlin/io/homeassistant/companion/android/common/data/prefs/PrefsRepository.kt b/common/src/main/kotlin/io/homeassistant/companion/android/common/data/prefs/PrefsRepository.kt index 13ea50fc747..5a2d9b8cc08 100644 --- a/common/src/main/kotlin/io/homeassistant/companion/android/common/data/prefs/PrefsRepository.kt +++ b/common/src/main/kotlin/io/homeassistant/companion/android/common/data/prefs/PrefsRepository.kt @@ -2,6 +2,7 @@ package io.homeassistant.companion.android.common.data.prefs import android.os.Parcelable import io.homeassistant.companion.android.common.data.integration.ControlsAuthRequiredSetting +import io.homeassistant.companion.android.common.data.mediacontrol.MediaControlEntityConfig import io.homeassistant.companion.android.common.util.GestureAction import io.homeassistant.companion.android.common.util.HAGesture import kotlinx.parcelize.Parcelize @@ -141,15 +142,9 @@ interface PrefsRepository { suspend fun setSelectedWakeWord(wakeWord: String) - /** Returns the server ID of the configured media control entity, or null if not configured. */ - suspend fun getMediaControlServerId(): Int? + /** Returns all configured media control entities. */ + suspend fun getMediaControlEntities(): List - /** Sets the server ID for the media control entity. Pass null to clear. */ - suspend fun setMediaControlServerId(serverId: Int?) - - /** Returns the entity ID of the configured media control entity, or null if not configured. */ - suspend fun getMediaControlEntityId(): String? - - /** Sets the entity ID for the media control entity. Pass null to clear. */ - suspend fun setMediaControlEntityId(entityId: String?) + /** Sets the list of configured media control entities. */ + suspend fun setMediaControlEntities(entities: List) } diff --git a/common/src/main/kotlin/io/homeassistant/companion/android/common/data/prefs/PrefsRepositoryImpl.kt b/common/src/main/kotlin/io/homeassistant/companion/android/common/data/prefs/PrefsRepositoryImpl.kt index d0aaa9a9ee9..5e82feb6609 100644 --- a/common/src/main/kotlin/io/homeassistant/companion/android/common/data/prefs/PrefsRepositoryImpl.kt +++ b/common/src/main/kotlin/io/homeassistant/companion/android/common/data/prefs/PrefsRepositoryImpl.kt @@ -3,6 +3,7 @@ package io.homeassistant.companion.android.common.data.prefs import androidx.annotation.VisibleForTesting import io.homeassistant.companion.android.common.data.LocalStorage import io.homeassistant.companion.android.common.data.integration.ControlsAuthRequiredSetting +import io.homeassistant.companion.android.common.data.mediacontrol.MediaControlEntityConfig import io.homeassistant.companion.android.common.util.GestureAction import io.homeassistant.companion.android.common.util.HAGesture import io.homeassistant.companion.android.di.qualifiers.NamedIntegrationStorage @@ -11,12 +12,14 @@ import java.util.concurrent.atomic.AtomicBoolean import javax.inject.Inject import kotlinx.coroutines.sync.Mutex import kotlinx.coroutines.sync.withLock +import kotlinx.serialization.encodeToString +import kotlinx.serialization.json.Json @VisibleForTesting const val MIGRATION_PREF = "migration" @VisibleForTesting -const val MIGRATION_VERSION = 1 +const val MIGRATION_VERSION = 2 private const val PREF_VER = "version" private const val PREF_NIGHT_MODE_THEME = "theme" @@ -48,6 +51,7 @@ private const val PREF_WAKE_WORD_ENABLED = "wake_word_enabled" private const val PREF_SELECTED_WAKE_WORD = "selected_wake_word" private const val PREF_MEDIA_CONTROL_SERVER_ID = "media_control_server_id" private const val PREF_MEDIA_CONTROL_ENTITY_ID = "media_control_entity_id" +private const val PREF_MEDIA_CONTROL_ENTITIES = "media_control_entities" /** * This class ensure that when we use the local storage in [PrefsRepositoryImpl] the migrations has been made @@ -90,7 +94,20 @@ private class LocalStorageWithMigration( localStorage.putBoolean(PREF_WEBVIEW_DEBUG_ENABLED, it) } - localStorage.putInt(MIGRATION_PREF, MIGRATION_VERSION) + localStorage.putInt(MIGRATION_PREF, 1) + } + if (currentVersion == null || currentVersion < 2) { + val oldServerId = localStorage.getInt(PREF_MEDIA_CONTROL_SERVER_ID) + val oldEntityId = localStorage.getString(PREF_MEDIA_CONTROL_ENTITY_ID) + val entities = if (oldServerId != null && oldEntityId != null) { + listOf(MediaControlEntityConfig(serverId = oldServerId, entityId = oldEntityId)) + } else { + emptyList() + } + localStorage.putString(PREF_MEDIA_CONTROL_ENTITIES, Json.encodeToString(entities)) + localStorage.remove(PREF_MEDIA_CONTROL_SERVER_ID) + localStorage.remove(PREF_MEDIA_CONTROL_ENTITY_ID) + localStorage.putInt(MIGRATION_PREF, 2) } migrationChecked.set(true) } @@ -359,10 +376,8 @@ internal class PrefsRepositoryImpl @Inject constructor( setControlsPanelPath(null) } - if (getMediaControlServerId() == serverId) { - setMediaControlServerId(null) - setMediaControlEntityId(null) - } + val updatedEntities = getMediaControlEntities().filter { it.serverId != serverId } + setMediaControlEntities(updatedEntities) } override suspend fun showPrivacyHint(): Boolean { @@ -389,27 +404,12 @@ internal class PrefsRepositoryImpl @Inject constructor( localStorage().putString(PREF_SELECTED_WAKE_WORD, wakeWord) } - override suspend fun getMediaControlServerId(): Int? { - return localStorage().getInt(PREF_MEDIA_CONTROL_SERVER_ID) + override suspend fun getMediaControlEntities(): List { + val json = localStorage().getString(PREF_MEDIA_CONTROL_ENTITIES) ?: return emptyList() + return Json.decodeFromString(json) } - override suspend fun setMediaControlServerId(serverId: Int?) { - if (serverId == null) { - localStorage().remove(PREF_MEDIA_CONTROL_SERVER_ID) - } else { - localStorage().putInt(PREF_MEDIA_CONTROL_SERVER_ID, serverId) - } - } - - override suspend fun getMediaControlEntityId(): String? { - return localStorage().getString(PREF_MEDIA_CONTROL_ENTITY_ID) - } - - override suspend fun setMediaControlEntityId(entityId: String?) { - if (entityId == null) { - localStorage().remove(PREF_MEDIA_CONTROL_ENTITY_ID) - } else { - localStorage().putString(PREF_MEDIA_CONTROL_ENTITY_ID, entityId) - } + override suspend fun setMediaControlEntities(entities: List) { + localStorage().putString(PREF_MEDIA_CONTROL_ENTITIES, Json.encodeToString(entities)) } } diff --git a/common/src/main/res/values/strings.xml b/common/src/main/res/values/strings.xml index 9ffde2b5f64..d98f8fa2c3e 100644 --- a/common/src/main/res/values/strings.xml +++ b/common/src/main/res/values/strings.xml @@ -453,9 +453,11 @@ Unable to add Matter device? Media controls Control a media player entity from the notification shade - Select a media_player entity to show as a native media control in the notification shade. You can control playback without opening the app. + Select one or more media_player entities to show as native media controls in the notification shade. You can control playback without opening the app. Select media player entity - Clear configuration + Add entity + Remove entity + Clear all Matter is currently unavailable Add Matter device Please connect to your Home Assistant server before adding a Matter device. diff --git a/common/src/test/kotlin/io/homeassistant/companion/android/common/data/mediacontrol/MediaControlRepositoryImplTest.kt b/common/src/test/kotlin/io/homeassistant/companion/android/common/data/mediacontrol/MediaControlRepositoryImplTest.kt index cc1110bdb78..4144297dccd 100644 --- a/common/src/test/kotlin/io/homeassistant/companion/android/common/data/mediacontrol/MediaControlRepositoryImplTest.kt +++ b/common/src/test/kotlin/io/homeassistant/companion/android/common/data/mediacontrol/MediaControlRepositoryImplTest.kt @@ -33,6 +33,8 @@ class MediaControlRepositoryImplTest { private lateinit var repository: MediaControlRepositoryImpl + private val testConfig = MediaControlEntityConfig(serverId = 1, entityId = "media_player.test") + @BeforeEach fun setUp() { coEvery { serverManager.webSocketRepository(any()) } returns webSocketRepository @@ -43,24 +45,10 @@ class MediaControlRepositoryImplTest { } @Nested - inner class ObserveMediaControlStateTest { - - @Test - fun `Given no configured entity when observing then emit null`() = runTest { - coEvery { prefsRepository.getMediaControlServerId() } returns null - coEvery { prefsRepository.getMediaControlEntityId() } returns null - - repository.observeMediaControlState().test { - assertNull(awaitItem()) - awaitComplete() - } - } + inner class ObserveEntityStateTest { @Test - fun `Given configured entity when state arrives then emit MediaControlState`() = runTest { - coEvery { prefsRepository.getMediaControlServerId() } returns 1 - coEvery { prefsRepository.getMediaControlEntityId() } returns "media_player.test" - + fun `Given entity when state arrives then emit MediaControlState`() = runTest { val entityState = CompressedEntityState( state = JsonPrimitive("playing"), attributes = mapOf( @@ -80,7 +68,7 @@ class MediaControlRepositoryImplTest { webSocketRepository.getCompressedStateAndChanges(listOf("media_player.test")) } returns flowOf(event) - repository.observeMediaControlState().test { + repository.observeEntityState(testConfig).test { val state = awaitItem() assertEquals("media_player.test", state?.entityId) assertEquals(1, state?.serverId) @@ -92,10 +80,7 @@ class MediaControlRepositoryImplTest { } @Test - fun `Given configured entity when entity removed then emit null`() = runTest { - coEvery { prefsRepository.getMediaControlServerId() } returns 1 - coEvery { prefsRepository.getMediaControlEntityId() } returns "media_player.test" - + fun `Given entity when entity removed then emit null`() = runTest { val event = CompressedStateChangedEvent( removed = listOf("media_player.test"), ) @@ -103,21 +88,19 @@ class MediaControlRepositoryImplTest { webSocketRepository.getCompressedStateAndChanges(listOf("media_player.test")) } returns flowOf(event) - repository.observeMediaControlState().test { + repository.observeEntityState(testConfig).test { assertNull(awaitItem()) awaitComplete() } } @Test - fun `Given configured entity when websocket returns null then emit null`() = runTest { - coEvery { prefsRepository.getMediaControlServerId() } returns 1 - coEvery { prefsRepository.getMediaControlEntityId() } returns "media_player.test" + fun `Given entity when websocket returns null then emit null`() = runTest { coEvery { webSocketRepository.getCompressedStateAndChanges(listOf("media_player.test")) } returns null - repository.observeMediaControlState().test { + repository.observeEntityState(testConfig).test { assertNull(awaitItem()) awaitComplete() } @@ -125,12 +108,56 @@ class MediaControlRepositoryImplTest { } @Nested - inner class PlaybackStateMappingTest { + inner class ObserveMediaControlStatesTest { + + @Test + fun `Given no configured entities when observing then emit empty list`() = runTest { + coEvery { prefsRepository.getMediaControlEntities() } returns emptyList() + + repository.observeMediaControlStates().test { + assertEquals(emptyList(), awaitItem()) + awaitComplete() + } + } + + @Test + fun `Given two configured entities when states arrive then emit combined list`() = runTest { + val config1 = MediaControlEntityConfig(serverId = 1, entityId = "media_player.living_room") + val config2 = MediaControlEntityConfig(serverId = 1, entityId = "media_player.bedroom") + coEvery { prefsRepository.getMediaControlEntities() } returns listOf(config1, config2) - private fun configureEntity() { - coEvery { prefsRepository.getMediaControlServerId() } returns 1 - coEvery { prefsRepository.getMediaControlEntityId() } returns "media_player.test" + val state1 = CompressedEntityState( + state = JsonPrimitive("playing"), + attributes = mapOf("media_title" to "Song A"), + lastChanged = 1000.0, + lastUpdated = 1000.0, + ) + val state2 = CompressedEntityState( + state = JsonPrimitive("paused"), + attributes = mapOf("media_title" to "Song B"), + lastChanged = 1000.0, + lastUpdated = 1000.0, + ) + coEvery { serverManager.webSocketRepository(1) } returns webSocketRepository + coEvery { + webSocketRepository.getCompressedStateAndChanges(listOf("media_player.living_room")) + } returns flowOf(CompressedStateChangedEvent(added = mapOf("media_player.living_room" to state1))) + coEvery { + webSocketRepository.getCompressedStateAndChanges(listOf("media_player.bedroom")) + } returns flowOf(CompressedStateChangedEvent(added = mapOf("media_player.bedroom" to state2))) + + repository.observeMediaControlStates().test { + val states = awaitItem() + assertEquals(2, states.size) + assertTrue(states.any { it.entityId == "media_player.living_room" && it.title == "Song A" }) + assertTrue(states.any { it.entityId == "media_player.bedroom" && it.title == "Song B" }) + cancelAndIgnoreRemainingEvents() + } } + } + + @Nested + inner class PlaybackStateMappingTest { private fun entityWithState(state: String, attributes: Map = emptyMap()) = CompressedEntityState( state = JsonPrimitive(state), @@ -139,14 +166,17 @@ class MediaControlRepositoryImplTest { lastUpdated = 1000.0, ) - @Test - fun `Given paused state then maps to Paused`() = runTest { - configureEntity() + private fun configureWebSocketWith(state: String) { coEvery { webSocketRepository.getCompressedStateAndChanges(any()) - } returns flowOf(CompressedStateChangedEvent(added = mapOf("media_player.test" to entityWithState("paused")))) + } returns flowOf(CompressedStateChangedEvent(added = mapOf("media_player.test" to entityWithState(state)))) + } - repository.observeMediaControlState().test { + @Test + fun `Given paused state then maps to Paused`() = runTest { + configureWebSocketWith("paused") + + repository.observeEntityState(testConfig).test { assertEquals(MediaPlaybackState.Paused, awaitItem()?.playbackState) awaitComplete() } @@ -154,12 +184,9 @@ class MediaControlRepositoryImplTest { @Test fun `Given buffering state then maps to Buffering`() = runTest { - configureEntity() - coEvery { - webSocketRepository.getCompressedStateAndChanges(any()) - } returns flowOf(CompressedStateChangedEvent(added = mapOf("media_player.test" to entityWithState("buffering")))) + configureWebSocketWith("buffering") - repository.observeMediaControlState().test { + repository.observeEntityState(testConfig).test { assertEquals(MediaPlaybackState.Buffering, awaitItem()?.playbackState) awaitComplete() } @@ -167,12 +194,9 @@ class MediaControlRepositoryImplTest { @Test fun `Given idle state then maps to Idle`() = runTest { - configureEntity() - coEvery { - webSocketRepository.getCompressedStateAndChanges(any()) - } returns flowOf(CompressedStateChangedEvent(added = mapOf("media_player.test" to entityWithState("idle")))) + configureWebSocketWith("idle") - repository.observeMediaControlState().test { + repository.observeEntityState(testConfig).test { assertEquals(MediaPlaybackState.Idle, awaitItem()?.playbackState) awaitComplete() } @@ -180,12 +204,9 @@ class MediaControlRepositoryImplTest { @Test fun `Given standby state then maps to Idle`() = runTest { - configureEntity() - coEvery { - webSocketRepository.getCompressedStateAndChanges(any()) - } returns flowOf(CompressedStateChangedEvent(added = mapOf("media_player.test" to entityWithState("standby")))) + configureWebSocketWith("standby") - repository.observeMediaControlState().test { + repository.observeEntityState(testConfig).test { assertEquals(MediaPlaybackState.Idle, awaitItem()?.playbackState) awaitComplete() } @@ -193,12 +214,9 @@ class MediaControlRepositoryImplTest { @Test fun `Given off state then maps to Off`() = runTest { - configureEntity() - coEvery { - webSocketRepository.getCompressedStateAndChanges(any()) - } returns flowOf(CompressedStateChangedEvent(added = mapOf("media_player.test" to entityWithState("off")))) + configureWebSocketWith("off") - repository.observeMediaControlState().test { + repository.observeEntityState(testConfig).test { assertEquals(MediaPlaybackState.Off, awaitItem()?.playbackState) awaitComplete() } @@ -206,12 +224,9 @@ class MediaControlRepositoryImplTest { @Test fun `Given unknown state then maps to Off`() = runTest { - configureEntity() - coEvery { - webSocketRepository.getCompressedStateAndChanges(any()) - } returns flowOf(CompressedStateChangedEvent(added = mapOf("media_player.test" to entityWithState("unavailable")))) + configureWebSocketWith("unavailable") - repository.observeMediaControlState().test { + repository.observeEntityState(testConfig).test { assertEquals(MediaPlaybackState.Off, awaitItem()?.playbackState) awaitComplete() } @@ -219,13 +234,12 @@ class MediaControlRepositoryImplTest { @Test fun `Given entity with partial attributes then null fields are null`() = runTest { - configureEntity() val entityState = entityWithState("playing", attributes = mapOf("media_title" to "Only Title")) coEvery { webSocketRepository.getCompressedStateAndChanges(any()) } returns flowOf(CompressedStateChangedEvent(added = mapOf("media_player.test" to entityState))) - repository.observeMediaControlState().test { + repository.observeEntityState(testConfig).test { val state = awaitItem()!! assertEquals("Only Title", state.title) assertNull(state.artist) @@ -239,7 +253,6 @@ class MediaControlRepositoryImplTest { @Test fun `Given entity with all attributes then all fields populated`() = runTest { - configureEntity() val entityState = entityWithState( "playing", attributes = mapOf( @@ -262,7 +275,7 @@ class MediaControlRepositoryImplTest { webSocketRepository.getCompressedStateAndChanges(any()) } returns flowOf(CompressedStateChangedEvent(added = mapOf("media_player.test" to entityState))) - repository.observeMediaControlState().test { + repository.observeEntityState(testConfig).test { val state = awaitItem()!! assertEquals("Song", state.title) assertEquals("Artist", state.artist) @@ -283,11 +296,6 @@ class MediaControlRepositoryImplTest { @Nested inner class VolumeMappingTest { - private fun configureEntity() { - coEvery { prefsRepository.getMediaControlServerId() } returns 1 - coEvery { prefsRepository.getMediaControlEntityId() } returns "media_player.test" - } - private fun entityWithVolumeAttributes(attributes: Map) = CompressedEntityState( state = JsonPrimitive("playing"), attributes = attributes, @@ -297,7 +305,6 @@ class MediaControlRepositoryImplTest { @Test fun `Given entity with volume support and volume_level then volumeLevel and supportsVolumeSet are set`() = runTest { - configureEntity() val entityState = entityWithVolumeAttributes( mapOf( "supported_features" to EntityExt.MEDIA_PLAYER_SUPPORT_VOLUME_SET, @@ -308,7 +315,7 @@ class MediaControlRepositoryImplTest { webSocketRepository.getCompressedStateAndChanges(any()) } returns flowOf(CompressedStateChangedEvent(added = mapOf("media_player.test" to entityState))) - repository.observeMediaControlState().test { + repository.observeEntityState(testConfig).test { val state = awaitItem()!! assertTrue(state.supportsVolumeSet) assertEquals(0.7f, state.volumeLevel) @@ -318,7 +325,6 @@ class MediaControlRepositoryImplTest { @Test fun `Given entity without volume support then volumeLevel is null and supportsVolumeSet is false`() = runTest { - configureEntity() val entityState = entityWithVolumeAttributes( mapOf("supported_features" to EntityExt.MEDIA_PLAYER_SUPPORT_PLAY), ) @@ -326,7 +332,7 @@ class MediaControlRepositoryImplTest { webSocketRepository.getCompressedStateAndChanges(any()) } returns flowOf(CompressedStateChangedEvent(added = mapOf("media_player.test" to entityState))) - repository.observeMediaControlState().test { + repository.observeEntityState(testConfig).test { val state = awaitItem()!! assertFalse(state.supportsVolumeSet) assertNull(state.volumeLevel) @@ -336,7 +342,6 @@ class MediaControlRepositoryImplTest { @Test fun `Given entity with is_volume_muted true then isVolumeMuted is true`() = runTest { - configureEntity() val entityState = entityWithVolumeAttributes( mapOf( "supported_features" to EntityExt.MEDIA_PLAYER_SUPPORT_VOLUME_SET, @@ -348,7 +353,7 @@ class MediaControlRepositoryImplTest { webSocketRepository.getCompressedStateAndChanges(any()) } returns flowOf(CompressedStateChangedEvent(added = mapOf("media_player.test" to entityState))) - repository.observeMediaControlState().test { + repository.observeEntityState(testConfig).test { val state = awaitItem()!! assertTrue(state.isVolumeMuted) awaitComplete() @@ -357,7 +362,6 @@ class MediaControlRepositoryImplTest { @Test fun `Given entity with friendly_name then entityFriendlyName is set`() = runTest { - configureEntity() val entityState = entityWithVolumeAttributes( mapOf("friendly_name" to "Living Room TV"), ) @@ -365,7 +369,7 @@ class MediaControlRepositoryImplTest { webSocketRepository.getCompressedStateAndChanges(any()) } returns flowOf(CompressedStateChangedEvent(added = mapOf("media_player.test" to entityState))) - repository.observeMediaControlState().test { + repository.observeEntityState(testConfig).test { val state = awaitItem()!! assertEquals("Living Room TV", state.entityFriendlyName) awaitComplete() @@ -378,9 +382,6 @@ class MediaControlRepositoryImplTest { @Test fun `Given duplicate state emissions then only first is emitted`() = runTest { - coEvery { prefsRepository.getMediaControlServerId() } returns 1 - coEvery { prefsRepository.getMediaControlEntityId() } returns "media_player.test" - val entityState = CompressedEntityState( state = JsonPrimitive("playing"), attributes = mapOf("media_title" to "Song"), @@ -392,7 +393,7 @@ class MediaControlRepositoryImplTest { webSocketRepository.getCompressedStateAndChanges(any()) } returns stateFlow - repository.observeMediaControlState().test { + repository.observeEntityState(testConfig).test { // Emit the same entity state twice — distinctUntilChanged should filter the duplicate stateFlow.emit(CompressedStateChangedEvent(added = mapOf("media_player.test" to entityState))) val first = awaitItem() @@ -410,33 +411,20 @@ class MediaControlRepositoryImplTest { inner class ConfigurationTest { @Test - fun `Given server id when getConfiguredServerId then delegates to prefs`() = runTest { - coEvery { prefsRepository.getMediaControlServerId() } returns 42 + fun `Given entities when getConfiguredEntities then delegates to prefs`() = runTest { + val entities = listOf(MediaControlEntityConfig(serverId = 1, entityId = "media_player.tv")) + coEvery { prefsRepository.getMediaControlEntities() } returns entities - assertEquals(42, repository.getConfiguredServerId()) + assertEquals(entities, repository.getConfiguredEntities()) } @Test - fun `Given entity id when getConfiguredEntityId then delegates to prefs`() = runTest { - coEvery { prefsRepository.getMediaControlEntityId() } returns "media_player.kitchen" + fun `Given entities when setConfiguredEntities then updates prefs`() = runTest { + val entities = listOf(MediaControlEntityConfig(serverId = 5, entityId = "media_player.office")) - assertEquals("media_player.kitchen", repository.getConfiguredEntityId()) - } - - @Test - fun `Given values when setConfiguredEntity then updates both prefs`() = runTest { - repository.setConfiguredEntity(serverId = 5, entityId = "media_player.office") - - coVerify { prefsRepository.setMediaControlServerId(5) } - coVerify { prefsRepository.setMediaControlEntityId("media_player.office") } - } - - @Test - fun `Given null values when setConfiguredEntity then clears both prefs`() = runTest { - repository.setConfiguredEntity(serverId = null, entityId = null) + repository.setConfiguredEntities(entities) - coVerify { prefsRepository.setMediaControlServerId(null) } - coVerify { prefsRepository.setMediaControlEntityId(null) } + coVerify { prefsRepository.setMediaControlEntities(entities) } } } } diff --git a/common/src/test/kotlin/io/homeassistant/companion/android/common/data/prefs/PrefsRepositoryImplTest.kt b/common/src/test/kotlin/io/homeassistant/companion/android/common/data/prefs/PrefsRepositoryImplTest.kt index 43085f10b5b..6714f76c5ad 100644 --- a/common/src/test/kotlin/io/homeassistant/companion/android/common/data/prefs/PrefsRepositoryImplTest.kt +++ b/common/src/test/kotlin/io/homeassistant/companion/android/common/data/prefs/PrefsRepositoryImplTest.kt @@ -1,14 +1,18 @@ package io.homeassistant.companion.android.common.data.prefs import io.homeassistant.companion.android.common.data.LocalStorage +import io.homeassistant.companion.android.common.data.mediacontrol.MediaControlEntityConfig import io.homeassistant.companion.android.common.util.GestureAction import io.homeassistant.companion.android.common.util.HAGesture import io.mockk.coEvery import io.mockk.coVerify import io.mockk.mockk import kotlinx.coroutines.test.runTest +import kotlinx.serialization.encodeToString +import kotlinx.serialization.json.Json import org.junit.jupiter.api.Assertions.assertEquals import org.junit.jupiter.api.BeforeEach +import org.junit.jupiter.api.Nested import org.junit.jupiter.api.Test import org.junit.jupiter.params.ParameterizedTest import org.junit.jupiter.params.provider.CsvSource @@ -118,4 +122,82 @@ class PrefsRepositoryImplTest { // Verify no integration storage was accessed since no migration was needed coVerify(exactly = 0) { integrationStorage.getString(any()) } } + + @Nested + inner class MigrationV2Test { + + @Test + fun `Given version 1 prefs with single entity when migrating then entity written as list and old keys removed`() = runTest { + // Simulate a user at migration version 1 who had a single entity configured + coEvery { localStorage.getInt(MIGRATION_PREF) } returns 1 + coEvery { localStorage.getInt("media_control_server_id") } returns 42 + coEvery { localStorage.getString("media_control_entity_id") } returns "media_player.tv" + coEvery { localStorage.getString("media_control_entities") } returns null + coEvery { localStorage.putString(any(), any()) } returns Unit + coEvery { localStorage.remove(any()) } returns Unit + coEvery { localStorage.putInt(any(), any()) } returns Unit + + // Trigger migration by accessing the repository + repository.getMediaControlEntities() + + val expectedJson = Json.encodeToString(listOf(MediaControlEntityConfig(serverId = 42, entityId = "media_player.tv"))) + coVerify { localStorage.putString("media_control_entities", expectedJson) } + coVerify { localStorage.remove("media_control_server_id") } + coVerify { localStorage.remove("media_control_entity_id") } + coVerify { localStorage.putInt(MIGRATION_PREF, 2) } + } + + @Test + fun `Given version 1 prefs with no entity configured when migrating then empty list written`() = runTest { + coEvery { localStorage.getInt(MIGRATION_PREF) } returns 1 + coEvery { localStorage.getInt("media_control_server_id") } returns null + coEvery { localStorage.getString("media_control_entity_id") } returns null + coEvery { localStorage.getString("media_control_entities") } returns null + coEvery { localStorage.putString(any(), any()) } returns Unit + coEvery { localStorage.remove(any()) } returns Unit + coEvery { localStorage.putInt(any(), any()) } returns Unit + + repository.getMediaControlEntities() + + val expectedJson = Json.encodeToString(emptyList()) + coVerify { localStorage.putString("media_control_entities", expectedJson) } + coVerify { localStorage.putInt(MIGRATION_PREF, 2) } + } + } + + @Nested + inner class MediaControlEntitiesTest { + + @Test + fun `Given no stored entities when getMediaControlEntities called then empty list returned`() = runTest { + coEvery { localStorage.getString("media_control_entities") } returns null + + val result = repository.getMediaControlEntities() + + assertEquals(emptyList(), result) + } + + @Test + fun `Given stored entities when getMediaControlEntities called then list returned`() = runTest { + val entities = listOf( + MediaControlEntityConfig(serverId = 1, entityId = "media_player.tv"), + MediaControlEntityConfig(serverId = 2, entityId = "media_player.radio"), + ) + coEvery { localStorage.getString("media_control_entities") } returns Json.encodeToString(entities) + + val result = repository.getMediaControlEntities() + + assertEquals(entities, result) + } + + @Test + fun `Given entities when setMediaControlEntities called then serialized to prefs`() = runTest { + val entities = listOf(MediaControlEntityConfig(serverId = 1, entityId = "media_player.tv")) + coEvery { localStorage.putString(any(), any()) } returns Unit + + repository.setMediaControlEntities(entities) + + coVerify { localStorage.putString("media_control_entities", Json.encodeToString(entities)) } + } + } } From 3bd574e84c8576697575fe32fb288062b65379e6 Mon Sep 17 00:00:00 2001 From: Fletcher Dostie Date: Wed, 25 Mar 2026 23:10:15 -0700 Subject: [PATCH 007/114] add COMMAND_SET_DEVICE_VOLUME and COMMAND_ADJUST_DEVICE_VOLUME back alongside the _WITH_FLAGS ones --- app/lint-baseline.xml | 58 +++++++++++++------ .../mediacontrol/HaRemoteMediaPlayer.kt | 8 +++ .../mediacontrol/HaRemoteMediaPlayerTest.kt | 6 ++ 3 files changed, 54 insertions(+), 18 deletions(-) diff --git a/app/lint-baseline.xml b/app/lint-baseline.xml index bbf64da7637..1ff1f525f69 100644 --- a/app/lint-baseline.xml +++ b/app/lint-baseline.xml @@ -1,5 +1,5 @@ - + @@ -646,7 +646,7 @@ errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"> @@ -657,7 +657,7 @@ errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"> @@ -1183,12 +1183,12 @@ + errorLine1=" MapAnySerializer," + errorLine2=" ~~~~~~~~~~~~~~~~"> + line="318" + column="21"/> @@ -1616,19 +1616,41 @@ errorLine2=" ~~~~~~~~~~~~"> + message="The Compose Compiler cannot infer the stability of a parameter if a Map<Int, List<Entity>> is used in it, even if the item type is stable. You should use Kotlinx Immutable Collections instead: `entitiesPerServer: ImmutableMap<Int, List<Entity>>` or create an `@Immutable` wrapper for this class: `@Immutable data class EntitiesPerServerMap(val items: Map<Int, List<Entity>>)` See https://slackhq.github.io/compose-lints/rules/#avoid-using-unstable-collections for more information." + errorLine1=" entitiesPerServer: Map<Int, List<Entity>>," + errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~"> + line="156" + column="24"/> + + + + + + + + @@ -1649,7 +1671,7 @@ errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~"> @@ -1660,7 +1682,7 @@ errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~"> diff --git a/app/src/main/kotlin/io/homeassistant/companion/android/mediacontrol/HaRemoteMediaPlayer.kt b/app/src/main/kotlin/io/homeassistant/companion/android/mediacontrol/HaRemoteMediaPlayer.kt index 07787ea56e0..84cf31162a9 100644 --- a/app/src/main/kotlin/io/homeassistant/companion/android/mediacontrol/HaRemoteMediaPlayer.kt +++ b/app/src/main/kotlin/io/homeassistant/companion/android/mediacontrol/HaRemoteMediaPlayer.kt @@ -176,7 +176,15 @@ class HaRemoteMediaPlayer(looper: Looper, private val commandCallback: CommandCa } if (state.supportsVolumeSet) { builder.add(Player.COMMAND_GET_DEVICE_VOLUME) + // Both the deprecated and _WITH_FLAGS variants are required: the deprecated ones are + // checked by Media3's MediaSessionLegacyStub when setting up VolumeProviderCompat + // (which drives the SystemUI device-chip volume slider), while the _WITH_FLAGS variants + // are used by newer clients and the volume button key-event path. + @Suppress("DEPRECATION") + builder.add(Player.COMMAND_SET_DEVICE_VOLUME) builder.add(Player.COMMAND_SET_DEVICE_VOLUME_WITH_FLAGS) + @Suppress("DEPRECATION") + builder.add(Player.COMMAND_ADJUST_DEVICE_VOLUME) builder.add(Player.COMMAND_ADJUST_DEVICE_VOLUME_WITH_FLAGS) } builder.add(Player.COMMAND_GET_METADATA) diff --git a/app/src/test/kotlin/io/homeassistant/companion/android/mediacontrol/HaRemoteMediaPlayerTest.kt b/app/src/test/kotlin/io/homeassistant/companion/android/mediacontrol/HaRemoteMediaPlayerTest.kt index 472823cbec8..85ab5ea20ac 100644 --- a/app/src/test/kotlin/io/homeassistant/companion/android/mediacontrol/HaRemoteMediaPlayerTest.kt +++ b/app/src/test/kotlin/io/homeassistant/companion/android/mediacontrol/HaRemoteMediaPlayerTest.kt @@ -262,23 +262,29 @@ class HaRemoteMediaPlayerTest { // -- Volume command tests -- + @Suppress("DEPRECATION") @Test fun `Given volume supported when getState then volume commands available`() { player.updateState(state = createState(supportsVolumeSet = true, volumeLevel = 0.5f), artworkPngBytes = null) shadowOf(Looper.getMainLooper()).idle() assertTrue(player.availableCommands.contains(Player.COMMAND_GET_DEVICE_VOLUME)) + assertTrue(player.availableCommands.contains(Player.COMMAND_SET_DEVICE_VOLUME)) assertTrue(player.availableCommands.contains(Player.COMMAND_SET_DEVICE_VOLUME_WITH_FLAGS)) + assertTrue(player.availableCommands.contains(Player.COMMAND_ADJUST_DEVICE_VOLUME)) assertTrue(player.availableCommands.contains(Player.COMMAND_ADJUST_DEVICE_VOLUME_WITH_FLAGS)) } + @Suppress("DEPRECATION") @Test fun `Given volume not supported when getState then volume commands not available`() { player.updateState(state = createState(supportsVolumeSet = false), artworkPngBytes = null) shadowOf(Looper.getMainLooper()).idle() assertFalse(player.availableCommands.contains(Player.COMMAND_GET_DEVICE_VOLUME)) + assertFalse(player.availableCommands.contains(Player.COMMAND_SET_DEVICE_VOLUME)) assertFalse(player.availableCommands.contains(Player.COMMAND_SET_DEVICE_VOLUME_WITH_FLAGS)) + assertFalse(player.availableCommands.contains(Player.COMMAND_ADJUST_DEVICE_VOLUME)) assertFalse(player.availableCommands.contains(Player.COMMAND_ADJUST_DEVICE_VOLUME_WITH_FLAGS)) } From c83de107858d1f5cf035be1d2861dc289a9bae87 Mon Sep 17 00:00:00 2001 From: Fletcher Dostie Date: Wed, 25 Mar 2026 23:27:13 -0700 Subject: [PATCH 008/114] Put the player into STATE_BUFFERING on disconnect when the WebSocket connection drops --- .../android/mediacontrol/HaMediaSession.kt | 4 +- .../mediacontrol/HaRemoteMediaPlayer.kt | 44 +++++++++++++++++++ 2 files changed, 47 insertions(+), 1 deletion(-) diff --git a/app/src/main/kotlin/io/homeassistant/companion/android/mediacontrol/HaMediaSession.kt b/app/src/main/kotlin/io/homeassistant/companion/android/mediacontrol/HaMediaSession.kt index d4037d1855f..7069aecda2f 100644 --- a/app/src/main/kotlin/io/homeassistant/companion/android/mediacontrol/HaMediaSession.kt +++ b/app/src/main/kotlin/io/homeassistant/companion/android/mediacontrol/HaMediaSession.kt @@ -132,7 +132,9 @@ class HaMediaSession( } loadArtworkAndUpdatePlayer(state) } - // Flow completed (WebSocket not ready, connection lost, etc) — retry + // Flow completed (WebSocket not ready, connection lost, etc) — show buffering + // state so the notification stays visible but controls are disabled, then retry + withContext(Dispatchers.Main) { player.setConnecting() } Timber.d( "Media control observation completed for %s, retrying in %s", config.entityId, diff --git a/app/src/main/kotlin/io/homeassistant/companion/android/mediacontrol/HaRemoteMediaPlayer.kt b/app/src/main/kotlin/io/homeassistant/companion/android/mediacontrol/HaRemoteMediaPlayer.kt index 84cf31162a9..cb149920a88 100644 --- a/app/src/main/kotlin/io/homeassistant/companion/android/mediacontrol/HaRemoteMediaPlayer.kt +++ b/app/src/main/kotlin/io/homeassistant/companion/android/mediacontrol/HaRemoteMediaPlayer.kt @@ -40,18 +40,32 @@ class HaRemoteMediaPlayer(looper: Looper, private val commandCallback: CommandCa private var mediaState: MediaControlState? = null private var artworkBytes: ByteArray? = null + private var isConnecting: Boolean = false /** * Updates the internal state from a new [MediaControlState] and triggers a state refresh. * @param artworkPngBytes Pre-compressed PNG bytes for album art (compress off main thread). */ fun updateState(state: MediaControlState?, artworkPngBytes: ByteArray?) { + isConnecting = false mediaState = state artworkBytes = artworkPngBytes invalidateState() } + /** + * Signals that the connection to HA has been lost and is being retried. + * Transitions to [STATE_BUFFERING] with the last known metadata visible but all + * interactive commands disabled, so the notification stays visible without showing + * stale controls. + */ + fun setConnecting() { + isConnecting = true + invalidateState() + } + override fun getState(): State { + if (isConnecting) return buildConnectingState() val state = mediaState ?: return buildIdleState() val availableCommands = buildAvailableCommands(state) @@ -161,6 +175,36 @@ class HaRemoteMediaPlayer(looper: Looper, private val commandCallback: CommandCa .setPlayWhenReady(false, PLAY_WHEN_READY_CHANGE_REASON_REMOTE) .build() + /** + * Builds a buffering state that keeps the last known metadata visible while the + * connection is being re-established. All interactive commands are disabled so the + * user cannot act on stale state. + */ + private fun buildConnectingState(): State { + val state = mediaState ?: return buildIdleState() + val metadataBuilder = MediaMetadata.Builder() + .setTitle(state.title) + .setArtist(state.artist) + .setAlbumTitle(state.albumName) + artworkBytes?.let { metadataBuilder.setArtworkData(it, MediaMetadata.PICTURE_TYPE_FRONT_COVER) } + val currentItem = MediaItemData.Builder(state.entityId) + .setMediaMetadata(metadataBuilder.build()) + .build() + val playlist = listOf( + MediaItemData.Builder(PLACEHOLDER_PREVIOUS_ID).build(), + currentItem, + MediaItemData.Builder(PLACEHOLDER_NEXT_ID).build(), + ) + return State.Builder() + .setAvailableCommands(Player.Commands.EMPTY) + .setPlaybackState(STATE_BUFFERING) + .setPlayWhenReady(false, PLAY_WHEN_READY_CHANGE_REASON_REMOTE) + .setCurrentMediaItemIndex(CURRENT_ITEM_INDEX) + .setPlaylist(playlist) + .setDeviceInfo(REMOTE_DEVICE_INFO) + .build() + } + private fun buildAvailableCommands(state: MediaControlState): Player.Commands { val builder = Player.Commands.Builder() if (state.supportsPlay || state.supportsPause) builder.add(Player.COMMAND_PLAY_PAUSE) From 7028496d0e6d0fe6634782f486b61650c562b9c8 Mon Sep 17 00:00:00 2001 From: Fletcher Dostie Date: Thu, 26 Mar 2026 03:18:49 -0700 Subject: [PATCH 009/114] Address PR review feedback on media session code - Remove unused `onEntityGone` callback and `handleEntityGone` (session removal is handled via `reconcileSessions` instead) - Remove unused `isObserving` property - Add unique session ID to `MediaSession.Builder` using server+entity IDs - Remove `inner` from `MediaSessionCallback` (no outer class access needed) - Add `.allowHardware(false)` to Coil `ImageRequest` to avoid StrictMode violations when compressing bitmap to PNG - Drop explicit `Dispatchers.IO` from `callMediaAction` and `startObservingState` launches; `callAction` is main-safe and `loadBitmapAsPng` handles its own `withContext(Dispatchers.IO)` - Extract HA media_player action name strings to named constants - Switch all Timber calls from printf-style `%s` args to string interpolation --- .../android/mediacontrol/HaMediaSession.kt | 52 +++++++++---------- .../mediacontrol/HaMediaSessionService.kt | 16 +----- .../MediaControlRepositoryImpl.kt | 4 +- 3 files changed, 30 insertions(+), 42 deletions(-) diff --git a/app/src/main/kotlin/io/homeassistant/companion/android/mediacontrol/HaMediaSession.kt b/app/src/main/kotlin/io/homeassistant/companion/android/mediacontrol/HaMediaSession.kt index 7069aecda2f..04f7f23c685 100644 --- a/app/src/main/kotlin/io/homeassistant/companion/android/mediacontrol/HaMediaSession.kt +++ b/app/src/main/kotlin/io/homeassistant/companion/android/mediacontrol/HaMediaSession.kt @@ -43,15 +43,12 @@ import timber.log.Timber * @param config Identifies the media_player entity this session represents. * @param mediaControlRepository Provides the per-entity state flow. * @param serverManager Used to resolve artwork base URLs and call HA integration actions. - * @param onEntityGone Called on the main thread when the WebSocket flow ends unexpectedly and - * the retry loop gives up, so the hosting service can remove this session. */ class HaMediaSession( private val context: Context, private val config: MediaControlEntityConfig, private val mediaControlRepository: MediaControlRepository, private val serverManager: ServerManager, - private val onEntityGone: () -> Unit, ) { val mediaSession: MediaSession @@ -62,53 +59,51 @@ class HaMediaSession( private var currentArtworkUrl: String? = null private var currentArtworkBytes: ByteArray? = null - /** Whether a state observation coroutine is currently active. */ - val isObserving: Boolean get() = observationJob?.isActive == true - init { val commandCallback = object : HaRemoteMediaPlayer.CommandCallback { override fun onPlayRequested() { - callMediaAction("media_play") + callMediaAction(ACTION_MEDIA_PLAY) } override fun onPauseRequested() { - callMediaAction("media_pause") + callMediaAction(ACTION_MEDIA_PAUSE) } override fun onSeekRequested(positionMs: Long) { callMediaAction( - action = "media_seek", + action = ACTION_MEDIA_SEEK, extraData = mapOf("seek_position" to positionMs / 1000.0), ) } override fun onNextRequested() { - callMediaAction("media_next_track") + callMediaAction(ACTION_MEDIA_NEXT_TRACK) } override fun onPreviousRequested() { - callMediaAction("media_previous_track") + callMediaAction(ACTION_MEDIA_PREVIOUS_TRACK) } override fun onSetVolumeRequested(volume: Float) { callMediaAction( - action = "volume_set", + action = ACTION_VOLUME_SET, extraData = mapOf("volume_level" to volume), ) } override fun onIncreaseVolumeRequested() { - callMediaAction("volume_up") + callMediaAction(ACTION_VOLUME_UP) } override fun onDecreaseVolumeRequested() { - callMediaAction("volume_down") + callMediaAction(ACTION_VOLUME_DOWN) } } player = HaRemoteMediaPlayer(Looper.getMainLooper(), commandCallback) mediaSession = MediaSession.Builder(context, player) + .setId("${config.serverId}_${config.entityId}") .setCallback(MediaSessionCallback()) .build() } @@ -120,7 +115,7 @@ class HaMediaSession( observationJob?.cancel() currentArtworkUrl = null currentArtworkBytes = null - observationJob = scope.launch(Dispatchers.IO) { + observationJob = scope.launch { while (true) { ensureActive() mediaControlRepository.observeEntityState(config).collect { state -> @@ -136,9 +131,7 @@ class HaMediaSession( // state so the notification stays visible but controls are disabled, then retry withContext(Dispatchers.Main) { player.setConnecting() } Timber.d( - "Media control observation completed for %s, retrying in %s", - config.entityId, - OBSERVATION_RETRY_DELAY, + "Media control observation completed for ${config.entityId}, retrying in $OBSERVATION_RETRY_DELAY", ) delay(OBSERVATION_RETRY_DELAY) } @@ -153,7 +146,7 @@ class HaMediaSession( } private fun callMediaAction(action: String, extraData: Map = emptyMap()) { - scope.launch(Dispatchers.IO) { + scope.launch { val actionData = hashMapOf("entity_id" to config.entityId) actionData.putAll(extraData) @@ -163,7 +156,7 @@ class HaMediaSession( } catch (e: CancellationException) { throw e } catch (e: Exception) { - Timber.e(e, "Failed to call media action %s", action) + Timber.e(e, "Failed to call media action $action") } } } @@ -216,6 +209,7 @@ class HaMediaSession( val request = ImageRequest.Builder(context) .data(url) .size(ARTWORK_SIZE_PX) + .allowHardware(false) .build() val result = context.imageLoader.execute(request) result.image?.toBitmap()?.let { bitmap -> @@ -226,7 +220,7 @@ class HaMediaSession( } catch (e: CancellationException) { throw e } catch (e: Exception) { - Timber.e(e, "Failed to load album art from %s", sensitive(url)) + Timber.e(e, "Failed to load album art from ${sensitive(url)}") null } } @@ -236,16 +230,13 @@ class HaMediaSession( * or apps with MEDIA_CONTENT_CONTROL / notification listener access). */ @OptIn(UnstableApi::class) - private inner class MediaSessionCallback : MediaSession.Callback { + private class MediaSessionCallback : MediaSession.Callback { override fun onConnect( session: MediaSession, controller: MediaSession.ControllerInfo, ): MediaSession.ConnectionResult { if (!controller.isTrusted) { - Timber.w( - "Rejecting connection from untrusted media controller package=%s", - controller.packageName, - ) + Timber.w("Rejecting connection from untrusted media controller package=${controller.packageName}") return MediaSession.ConnectionResult.reject() } return MediaSession.ConnectionResult.accept( @@ -258,5 +249,14 @@ class HaMediaSession( private companion object { val OBSERVATION_RETRY_DELAY = 5.seconds const val ARTWORK_SIZE_PX = 512 + + const val ACTION_MEDIA_PLAY = "media_play" + const val ACTION_MEDIA_PAUSE = "media_pause" + const val ACTION_MEDIA_SEEK = "media_seek" + const val ACTION_MEDIA_NEXT_TRACK = "media_next_track" + const val ACTION_MEDIA_PREVIOUS_TRACK = "media_previous_track" + const val ACTION_VOLUME_SET = "volume_set" + const val ACTION_VOLUME_UP = "volume_up" + const val ACTION_VOLUME_DOWN = "volume_down" } } diff --git a/app/src/main/kotlin/io/homeassistant/companion/android/mediacontrol/HaMediaSessionService.kt b/app/src/main/kotlin/io/homeassistant/companion/android/mediacontrol/HaMediaSessionService.kt index b3f4dc883b3..bf16d1fd6aa 100644 --- a/app/src/main/kotlin/io/homeassistant/companion/android/mediacontrol/HaMediaSessionService.kt +++ b/app/src/main/kotlin/io/homeassistant/companion/android/mediacontrol/HaMediaSessionService.kt @@ -87,7 +87,7 @@ class HaMediaSessionService : MediaSessionService() { val session = activeSessions.remove(key) ?: return@forEach removeSession(session.mediaSession) session.release() - Timber.d("Removed media session for %s", key) + Timber.d("Removed media session for $key") } // Add sessions for newly configured entities @@ -98,27 +98,15 @@ class HaMediaSessionService : MediaSessionService() { config = entityConfig, mediaControlRepository = mediaControlRepository, serverManager = serverManager, - onEntityGone = { handleEntityGone(entityConfig) }, ) addSession(session.mediaSession) session.startObservingState() activeSessions[key] = session - Timber.d("Added media session for %s", key) + Timber.d("Added media session for $key") } } } - private fun handleEntityGone(config: MediaControlEntityConfig) { - val key = config.sessionKey() - val session = activeSessions.remove(key) ?: return - removeSession(session.mediaSession) - session.release() - Timber.d("Entity gone, removed media session for %s", key) - if (activeSessions.isEmpty()) { - stopSelf() - } - } - internal companion object { const val ACTION_RESTART_OBSERVATION = "io.homeassistant.companion.android.mediacontrol.RESTART_OBSERVATION" diff --git a/common/src/main/kotlin/io/homeassistant/companion/android/common/data/mediacontrol/MediaControlRepositoryImpl.kt b/common/src/main/kotlin/io/homeassistant/companion/android/common/data/mediacontrol/MediaControlRepositoryImpl.kt index 9fc8b83d9d7..7e5231e25bd 100644 --- a/common/src/main/kotlin/io/homeassistant/companion/android/common/data/mediacontrol/MediaControlRepositoryImpl.kt +++ b/common/src/main/kotlin/io/homeassistant/companion/android/common/data/mediacontrol/MediaControlRepositoryImpl.kt @@ -36,7 +36,7 @@ internal class MediaControlRepositoryImpl @Inject constructor( val stateFlow = serverManager.webSocketRepository(config.serverId) .getCompressedStateAndChanges(listOf(config.entityId)) if (stateFlow == null) { - Timber.w("WebSocket subscription returned null for entity %s", config.entityId) + Timber.w("WebSocket subscription returned null for entity ${config.entityId}") emit(null) return@flow } @@ -65,7 +65,7 @@ internal class MediaControlRepositoryImpl @Inject constructor( } catch (e: CancellationException) { throw e } catch (e: Exception) { - Timber.e(e, "Failed to subscribe to media control entity %s", config.entityId) + Timber.e(e, "Failed to subscribe to media control entity ${config.entityId}") emit(null) } }.distinctUntilChanged() From 4ee48ed191c7e26a14c71c5890f2ebb42e900412 Mon Sep 17 00:00:00 2001 From: Fletcher Dostie Date: Thu, 26 Mar 2026 03:46:31 -0700 Subject: [PATCH 010/114] Use URL for artwork path --- .../companion/android/mediacontrol/HaMediaSession.kt | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/app/src/main/kotlin/io/homeassistant/companion/android/mediacontrol/HaMediaSession.kt b/app/src/main/kotlin/io/homeassistant/companion/android/mediacontrol/HaMediaSession.kt index 04f7f23c685..7bfdc3dc7d0 100644 --- a/app/src/main/kotlin/io/homeassistant/companion/android/mediacontrol/HaMediaSession.kt +++ b/app/src/main/kotlin/io/homeassistant/companion/android/mediacontrol/HaMediaSession.kt @@ -17,6 +17,7 @@ import io.homeassistant.companion.android.common.data.servers.ServerManager import io.homeassistant.companion.android.common.data.servers.firstUrlOrNull import io.homeassistant.companion.android.util.sensitive import java.io.ByteArrayOutputStream +import java.net.URL import kotlin.time.Duration.Companion.seconds import kotlinx.coroutines.CancellationException import kotlinx.coroutines.CoroutineScope @@ -191,8 +192,6 @@ class HaMediaSession( serverManager.connectionStateProvider(state.serverId) .urlFlow() .firstUrlOrNull() - ?.toString() - ?.removeSuffix("/") } catch (e: CancellationException) { throw e } catch (e: IllegalStateException) { @@ -200,7 +199,7 @@ class HaMediaSession( null } ?: return null - return "$baseUrl$entityPictureUrl" + return URL(baseUrl, entityPictureUrl).toString() } /** Loads album art and compresses to PNG bytes on the IO dispatcher. */ From 2b1cbf29a02c496b65c9a5d292dbad6d898d5ce1 Mon Sep 17 00:00:00 2001 From: Fletcher Dostie Date: Thu, 26 Mar 2026 04:21:01 -0700 Subject: [PATCH 011/114] Refactor Media Control settings UI to use reorderable picker similar Automotive favorites UI --- .../android/mediacontrol/HaMediaSession.kt | 1 + .../MediaControlSettingsViewModel.kt | 61 +++-- .../views/MediaControlSettingsView.kt | 252 +++++++++--------- .../MediaControlSettingsViewModelTest.kt | 82 +++--- 4 files changed, 203 insertions(+), 193 deletions(-) diff --git a/app/src/main/kotlin/io/homeassistant/companion/android/mediacontrol/HaMediaSession.kt b/app/src/main/kotlin/io/homeassistant/companion/android/mediacontrol/HaMediaSession.kt index 7bfdc3dc7d0..b8045fdb196 100644 --- a/app/src/main/kotlin/io/homeassistant/companion/android/mediacontrol/HaMediaSession.kt +++ b/app/src/main/kotlin/io/homeassistant/companion/android/mediacontrol/HaMediaSession.kt @@ -8,6 +8,7 @@ import androidx.media3.common.util.UnstableApi import androidx.media3.session.MediaSession import coil3.imageLoader import coil3.request.ImageRequest +import coil3.request.allowHardware import coil3.toBitmap import io.homeassistant.companion.android.common.data.integration.IntegrationDomains.MEDIA_PLAYER_DOMAIN import io.homeassistant.companion.android.common.data.mediacontrol.MediaControlEntityConfig diff --git a/app/src/main/kotlin/io/homeassistant/companion/android/settings/mediacontrol/MediaControlSettingsViewModel.kt b/app/src/main/kotlin/io/homeassistant/companion/android/settings/mediacontrol/MediaControlSettingsViewModel.kt index 49e96876f38..b5e60be47ba 100644 --- a/app/src/main/kotlin/io/homeassistant/companion/android/settings/mediacontrol/MediaControlSettingsViewModel.kt +++ b/app/src/main/kotlin/io/homeassistant/companion/android/settings/mediacontrol/MediaControlSettingsViewModel.kt @@ -1,6 +1,7 @@ package io.homeassistant.companion.android.settings.mediacontrol import android.app.Application +import androidx.compose.foundation.lazy.LazyListItemInfo import androidx.lifecycle.AndroidViewModel import androidx.lifecycle.viewModelScope import dagger.hilt.android.lifecycle.HiltViewModel @@ -43,10 +44,8 @@ data class MediaControlSettingsUiState( val areaRegistryPerServer: Map> = emptyMap(), // The in-memory list of entities being configured val configuredEntities: List = emptyList(), - // Whether the "add entity" inline form is currently shown - val showAddSlot: Boolean = false, - // Server selection within the pending add form - val pendingServerId: Int = ServerManager.SERVER_ID_ACTIVE, + // Server selection for the entity picker + val selectedServerId: Int = ServerManager.SERVER_ID_ACTIVE, ) @HiltViewModel @@ -79,7 +78,7 @@ class MediaControlSettingsViewModel @Inject constructor( viewModelScope.launch { val loadedServers = serverManager.servers() val defaultServerId = serverManager.getServer()?.id ?: ServerManager.SERVER_ID_ACTIVE - _uiState.update { it.copy(servers = loadedServers, pendingServerId = defaultServerId) } + _uiState.update { it.copy(servers = loadedServers, selectedServerId = defaultServerId) } val results = loadedServers.map { server -> async { @@ -118,41 +117,25 @@ class MediaControlSettingsViewModel @Inject constructor( } } - /** Opens the inline form to add a new entity slot. */ - fun showAddEntity() { - val defaultServerId = _uiState.value.let { state -> - if (state.servers.isNotEmpty()) state.servers.first().id else ServerManager.SERVER_ID_ACTIVE - } - _uiState.update { it.copy(showAddSlot = true, pendingServerId = defaultServerId) } - } - - /** Cancels the pending add-entity form without making changes. */ - fun cancelAddEntity() { - _uiState.update { it.copy(showAddSlot = false) } - } - - /** Updates the selected server in the pending add form, resetting entity selection. */ - fun selectPendingServerId(serverId: Int) { - _uiState.update { it.copy(pendingServerId = serverId) } + /** Updates the selected server in the entity picker. */ + fun selectServerId(serverId: Int) { + _uiState.update { it.copy(selectedServerId = serverId) } } /** - * Adds the entity identified by [entityId] from the pending server to the configured list, - * then hides the add form. Has no effect if the entity is already in the list. + * Adds the entity identified by [entityId] from the currently selected server to the configured + * list. Has no effect if the entity is already in the list. */ - fun addPendingEntity(entityId: String) { + fun addEntity(entityId: String) { val config = MediaControlEntityConfig( - serverId = _uiState.value.pendingServerId, + serverId = _uiState.value.selectedServerId, entityId = entityId, ) _uiState.update { state -> if (state.configuredEntities.contains(config)) { - state.copy(showAddSlot = false) + state } else { - state.copy( - configuredEntities = state.configuredEntities + config, - showAddSlot = false, - ) + state.copy(configuredEntities = state.configuredEntities + config) } } } @@ -164,6 +147,22 @@ class MediaControlSettingsViewModel @Inject constructor( } } + /** + * Moves a configured entity from one position to another in response to a drag gesture. + * Does not persist the change — call [saveConfiguration] to save. + */ + fun onMove(from: LazyListItemInfo, to: LazyListItemInfo) { + _uiState.update { state -> + val list = state.configuredEntities.toMutableList() + val fromIndex = list.indexOfFirst { it == from.key } + val toIndex = list.indexOfFirst { it == to.key } + if (fromIndex >= 0 && toIndex >= 0) { + list.add(toIndex, list.removeAt(fromIndex)) + } + state.copy(configuredEntities = list) + } + } + /** Saves the current list of configured entities and emits a service event to the UI layer. */ fun saveConfiguration() { viewModelScope.launch { @@ -179,7 +178,7 @@ class MediaControlSettingsViewModel @Inject constructor( fun clearAllConfiguration() { viewModelScope.launch { mediaControlRepository.setConfiguredEntities(emptyList()) - _uiState.update { it.copy(configuredEntities = emptyList(), showAddSlot = false) } + _uiState.update { it.copy(configuredEntities = emptyList()) } _serviceEvents.emit(MediaControlServiceEvent.Stop) } } diff --git a/app/src/main/kotlin/io/homeassistant/companion/android/settings/mediacontrol/views/MediaControlSettingsView.kt b/app/src/main/kotlin/io/homeassistant/companion/android/settings/mediacontrol/views/MediaControlSettingsView.kt index 73bb3cacaae..6d5d6e038fb 100644 --- a/app/src/main/kotlin/io/homeassistant/companion/android/settings/mediacontrol/views/MediaControlSettingsView.kt +++ b/app/src/main/kotlin/io/homeassistant/companion/android/settings/mediacontrol/views/MediaControlSettingsView.kt @@ -1,27 +1,34 @@ package io.homeassistant.companion.android.settings.mediacontrol.views -import androidx.compose.foundation.layout.Arrangement -import androidx.compose.foundation.layout.Box +import androidx.compose.animation.core.animateDpAsState import androidx.compose.foundation.layout.Column +import androidx.compose.foundation.layout.PaddingValues import androidx.compose.foundation.layout.Row import androidx.compose.foundation.layout.Spacer import androidx.compose.foundation.layout.fillMaxWidth -import androidx.compose.foundation.layout.height +import androidx.compose.foundation.layout.heightIn import androidx.compose.foundation.layout.padding -import androidx.compose.foundation.rememberScrollState -import androidx.compose.foundation.verticalScroll +import androidx.compose.foundation.layout.size +import androidx.compose.foundation.lazy.LazyColumn +import androidx.compose.foundation.lazy.LazyListItemInfo +import androidx.compose.foundation.lazy.items +import androidx.compose.foundation.lazy.rememberLazyListState import androidx.compose.material.icons.Icons import androidx.compose.material.icons.filled.Clear import androidx.compose.material3.HorizontalDivider +import androidx.compose.material3.Surface import androidx.compose.material3.Text import androidx.compose.runtime.Composable import androidx.compose.runtime.getValue import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier +import androidx.compose.ui.graphics.ColorFilter import androidx.compose.ui.res.stringResource import androidx.compose.ui.tooling.preview.Preview import androidx.compose.ui.unit.dp import androidx.lifecycle.compose.collectAsStateWithLifecycle +import com.mikepenz.iconics.compose.Image +import com.mikepenz.iconics.typeface.library.community.material.CommunityMaterial import io.homeassistant.companion.android.common.R import io.homeassistant.companion.android.common.compose.composable.ButtonVariant import io.homeassistant.companion.android.common.compose.composable.HAFilledButton @@ -33,15 +40,16 @@ import io.homeassistant.companion.android.common.compose.theme.HAThemeForPreview import io.homeassistant.companion.android.common.compose.theme.LocalHAColorScheme import io.homeassistant.companion.android.common.data.integration.Entity import io.homeassistant.companion.android.common.data.mediacontrol.MediaControlEntityConfig -import io.homeassistant.companion.android.common.data.websocket.impl.entities.AreaRegistryResponse -import io.homeassistant.companion.android.common.data.websocket.impl.entities.DeviceRegistryResponse -import io.homeassistant.companion.android.common.data.websocket.impl.entities.EntityRegistryResponse import io.homeassistant.companion.android.database.server.Server import io.homeassistant.companion.android.settings.mediacontrol.MediaControlSettingsUiState import io.homeassistant.companion.android.settings.mediacontrol.MediaControlSettingsViewModel import io.homeassistant.companion.android.util.compose.ServerExposedDropdownMenu import io.homeassistant.companion.android.util.compose.entity.EntityPicker +import io.homeassistant.companion.android.util.plus import io.homeassistant.companion.android.util.safeBottomPaddingValues +import sh.calvin.reorderable.ReorderableCollectionItemScope +import sh.calvin.reorderable.ReorderableItem +import sh.calvin.reorderable.rememberReorderableLazyListState /** Outer composable that extracts state from the ViewModel and delegates to the stateless content. */ @Composable @@ -50,11 +58,10 @@ fun MediaControlSettingsView(viewModel: MediaControlSettingsViewModel, modifier: HATheme { MediaControlSettingsContent( uiState = uiState, - onAddEntity = viewModel::showAddEntity, - onCancelAddEntity = viewModel::cancelAddEntity, - onPendingServerSelected = viewModel::selectPendingServerId, - onPendingEntitySelected = viewModel::addPendingEntity, + onServerSelected = viewModel::selectServerId, + onEntitySelected = viewModel::addEntity, onRemoveEntity = viewModel::removeEntity, + onMove = viewModel::onMove, onSave = viewModel::saveConfiguration, onClearAll = viewModel::clearAllConfiguration, modifier = modifier, @@ -65,80 +72,101 @@ fun MediaControlSettingsView(viewModel: MediaControlSettingsViewModel, modifier: @Composable internal fun MediaControlSettingsContent( uiState: MediaControlSettingsUiState, - onAddEntity: () -> Unit, - onCancelAddEntity: () -> Unit, - onPendingServerSelected: (Int) -> Unit, - onPendingEntitySelected: (String) -> Unit, + onServerSelected: (Int) -> Unit, + onEntitySelected: (String) -> Unit, onRemoveEntity: (Int) -> Unit, + onMove: (LazyListItemInfo, LazyListItemInfo) -> Unit, onSave: () -> Unit, onClearAll: () -> Unit, modifier: Modifier = Modifier, ) { - val scrollState = rememberScrollState() val colorScheme = LocalHAColorScheme.current - val pendingEntities = uiState.entitiesPerServer[uiState.pendingServerId] ?: emptyList() + val lazyListState = rememberLazyListState() + val reorderState = rememberReorderableLazyListState(lazyListState) { from, to -> + onMove(from, to) + } - Box(modifier = modifier.verticalScroll(scrollState)) { - Column( - modifier = Modifier - .padding(safeBottomPaddingValues(applyHorizontal = false)) - .padding(all = 16.dp), - ) { + val availableEntities = uiState.entitiesPerServer[uiState.selectedServerId] + ?.filter { entity -> + uiState.configuredEntities.none { + it.serverId == uiState.selectedServerId && it.entityId == entity.entityId + } + } ?: emptyList() + + LazyColumn( + state = lazyListState, + contentPadding = PaddingValues(all = 16.dp) + safeBottomPaddingValues(applyHorizontal = false), + modifier = modifier, + ) { + item { Text( text = stringResource(R.string.media_control_description), style = HATextStyle.Body, color = colorScheme.colorTextSecondary, ) + Spacer(modifier = Modifier.size(16.dp)) + } - Spacer(modifier = Modifier.height(16.dp)) + if (uiState.servers.size > 1) { + item { + ServerExposedDropdownMenu( + servers = uiState.servers, + current = uiState.selectedServerId, + onSelected = onServerSelected, + title = R.string.server, + modifier = Modifier.fillMaxWidth(), + ) + Spacer(modifier = Modifier.size(8.dp)) + } + } + + item { + EntityPicker( + entities = availableEntities, + selectedEntityId = null, + onEntitySelectedId = onEntitySelected, + onEntityCleared = {}, + addButtonText = stringResource(R.string.media_control_select_entity), + entityRegistry = uiState.entityRegistryPerServer[uiState.selectedServerId] ?: emptyList(), + deviceRegistry = uiState.deviceRegistryPerServer[uiState.selectedServerId] ?: emptyList(), + areaRegistry = uiState.areaRegistryPerServer[uiState.selectedServerId] ?: emptyList(), + ) + if (uiState.configuredEntities.isNotEmpty()) { + Spacer(modifier = Modifier.size(8.dp)) + HorizontalDivider() + } + } - uiState.configuredEntities.forEachIndexed { index, config -> + items( + items = uiState.configuredEntities, + key = { it }, + ) { config -> + ReorderableItem(state = reorderState, key = config) { isDragging -> ConfiguredEntityRow( config = config, servers = uiState.servers, entitiesPerServer = uiState.entitiesPerServer, - onRemove = { onRemoveEntity(index) }, + onRemove = { onRemoveEntity(uiState.configuredEntities.indexOf(config)) }, + isDragging = isDragging, ) - if (index < uiState.configuredEntities.lastIndex) { + if (config != uiState.configuredEntities.last()) { HorizontalDivider() } } + } + item { if (uiState.configuredEntities.isNotEmpty()) { - Spacer(modifier = Modifier.height(8.dp)) - } - - if (uiState.showAddSlot) { - AddEntitySlot( - servers = uiState.servers, - pendingServerId = uiState.pendingServerId, - pendingEntities = pendingEntities, - entityRegistry = uiState.entityRegistryPerServer[uiState.pendingServerId] ?: emptyList(), - deviceRegistry = uiState.deviceRegistryPerServer[uiState.pendingServerId] ?: emptyList(), - areaRegistry = uiState.areaRegistryPerServer[uiState.pendingServerId] ?: emptyList(), - onServerSelected = onPendingServerSelected, - onEntitySelected = onPendingEntitySelected, - onCancel = onCancelAddEntity, - ) - Spacer(modifier = Modifier.height(16.dp)) - } else { - HAFilledButton( - text = stringResource(R.string.media_control_add_entity), - onClick = onAddEntity, - modifier = Modifier.fillMaxWidth(), - ) - Spacer(modifier = Modifier.height(8.dp)) + Spacer(modifier = Modifier.size(8.dp)) } - HAFilledButton( text = stringResource(R.string.save), onClick = onSave, enabled = uiState.configuredEntities.isNotEmpty(), modifier = Modifier.fillMaxWidth(), ) - if (uiState.configuredEntities.isNotEmpty()) { - Spacer(modifier = Modifier.height(8.dp)) + Spacer(modifier = Modifier.size(8.dp)) HAPlainButton( text = stringResource(R.string.media_control_clear), onClick = onClearAll, @@ -150,13 +178,15 @@ internal fun MediaControlSettingsContent( } @Composable -private fun ConfiguredEntityRow( +private fun ReorderableCollectionItemScope.ConfiguredEntityRow( config: MediaControlEntityConfig, servers: List, entitiesPerServer: Map>, onRemove: () -> Unit, + isDragging: Boolean, ) { val colorScheme = LocalHAColorScheme.current + val elevation = animateDpAsState(targetValue = if (isDragging) 8.dp else 0.dp) val serverName = servers.firstOrNull { it.id == config.serverId }?.friendlyName val entityName = entitiesPerServer[config.serverId] ?.firstOrNull { it.entityId == config.entityId } @@ -164,76 +194,44 @@ private fun ConfiguredEntityRow( val displayName = entityName ?: config.entityId val subtitle = if (servers.size > 1 && serverName != null) serverName else null - Row( - verticalAlignment = Alignment.CenterVertically, - horizontalArrangement = Arrangement.SpaceBetween, - modifier = Modifier - .fillMaxWidth() - .padding(vertical = 4.dp), - ) { - Column(modifier = Modifier.weight(1f)) { - Text( - text = displayName, - style = HATextStyle.Body, - color = colorScheme.colorTextPrimary, - ) - if (subtitle != null) { + Surface(shadowElevation = elevation.value) { + Row( + verticalAlignment = Alignment.CenterVertically, + modifier = Modifier + .fillMaxWidth() + .heightIn(min = 56.dp) + .longPressDraggableHandle() + .padding(vertical = 4.dp), + ) { + Column(modifier = Modifier.weight(1f)) { Text( - text = subtitle, - style = HATextStyle.BodyMedium, - color = colorScheme.colorTextSecondary, + text = displayName, + style = HATextStyle.Body, + color = colorScheme.colorTextPrimary, ) + if (subtitle != null) { + Text( + text = subtitle, + style = HATextStyle.BodyMedium, + color = colorScheme.colorTextSecondary, + ) + } } - } - HAIconButton( - icon = Icons.Default.Clear, - onClick = onRemove, - contentDescription = stringResource(R.string.media_control_remove_entity), - variant = ButtonVariant.NEUTRAL, - ) - } -} - -@Composable -private fun AddEntitySlot( - servers: List, - pendingServerId: Int, - pendingEntities: List, - entityRegistry: List, - deviceRegistry: List, - areaRegistry: List, - onServerSelected: (Int) -> Unit, - onEntitySelected: (String) -> Unit, - onCancel: () -> Unit, -) { - Column { - if (servers.size > 1 || servers.none { it.id == pendingServerId }) { - ServerExposedDropdownMenu( - servers = servers, - current = pendingServerId, - onSelected = onServerSelected, - title = R.string.server, + HAIconButton( + icon = Icons.Default.Clear, + onClick = onRemove, + contentDescription = stringResource(R.string.media_control_remove_entity), + variant = ButtonVariant.NEUTRAL, + ) + Image( + asset = CommunityMaterial.Icon.cmd_drag_horizontal_variant, + contentDescription = stringResource(R.string.hold_to_reorder), + colorFilter = ColorFilter.tint(colorScheme.colorTextSecondary), + modifier = Modifier + .size(width = 40.dp, height = 24.dp) + .padding(end = 16.dp), ) - Spacer(modifier = Modifier.height(8.dp)) } - - EntityPicker( - entities = pendingEntities, - selectedEntityId = null, - onEntitySelectedId = onEntitySelected, - onEntityCleared = {}, - addButtonText = stringResource(R.string.media_control_select_entity), - entityRegistry = entityRegistry, - deviceRegistry = deviceRegistry, - areaRegistry = areaRegistry, - ) - - Spacer(modifier = Modifier.height(8.dp)) - HAPlainButton( - text = stringResource(R.string.cancel), - onClick = onCancel, - modifier = Modifier.fillMaxWidth(), - ) } } @@ -243,11 +241,10 @@ private fun MediaControlSettingsContentEmptyPreview() { HAThemeForPreview { MediaControlSettingsContent( uiState = MediaControlSettingsUiState(), - onAddEntity = {}, - onCancelAddEntity = {}, - onPendingServerSelected = {}, - onPendingEntitySelected = {}, + onServerSelected = {}, + onEntitySelected = {}, onRemoveEntity = {}, + onMove = { _, _ -> }, onSave = {}, onClearAll = {}, ) @@ -265,11 +262,10 @@ private fun MediaControlSettingsContentWithEntitiesPreview() { MediaControlEntityConfig(serverId = 1, entityId = "media_player.bedroom"), ), ), - onAddEntity = {}, - onCancelAddEntity = {}, - onPendingServerSelected = {}, - onPendingEntitySelected = {}, + onServerSelected = {}, + onEntitySelected = {}, onRemoveEntity = {}, + onMove = { _, _ -> }, onSave = {}, onClearAll = {}, ) diff --git a/app/src/test/kotlin/io/homeassistant/companion/android/settings/mediacontrol/MediaControlSettingsViewModelTest.kt b/app/src/test/kotlin/io/homeassistant/companion/android/settings/mediacontrol/MediaControlSettingsViewModelTest.kt index fbcc95a5c7a..d70cbd6952f 100644 --- a/app/src/test/kotlin/io/homeassistant/companion/android/settings/mediacontrol/MediaControlSettingsViewModelTest.kt +++ b/app/src/test/kotlin/io/homeassistant/companion/android/settings/mediacontrol/MediaControlSettingsViewModelTest.kt @@ -1,13 +1,16 @@ package io.homeassistant.companion.android.settings.mediacontrol import android.app.Application +import androidx.compose.foundation.lazy.LazyListItemInfo import app.cash.turbine.test import io.homeassistant.companion.android.common.data.mediacontrol.MediaControlEntityConfig import io.homeassistant.companion.android.common.data.mediacontrol.MediaControlRepository import io.homeassistant.companion.android.common.data.servers.ServerManager +import io.homeassistant.companion.android.common.data.servers.ServerManager.Companion.SERVER_ID_ACTIVE import io.homeassistant.companion.android.testing.unit.ConsoleLogExtension import io.mockk.coEvery import io.mockk.coVerify +import io.mockk.every import io.mockk.mockk import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.ExperimentalCoroutinesApi @@ -18,8 +21,6 @@ import kotlinx.coroutines.test.runTest import kotlinx.coroutines.test.setMain import org.junit.jupiter.api.AfterEach import org.junit.jupiter.api.Assertions.assertEquals -import org.junit.jupiter.api.Assertions.assertFalse -import org.junit.jupiter.api.Assertions.assertTrue import org.junit.jupiter.api.BeforeEach import org.junit.jupiter.api.Nested import org.junit.jupiter.api.Test @@ -59,6 +60,10 @@ class MediaControlSettingsViewModelTest { ) } + private fun fakeLazyListItemInfo(key: Any): LazyListItemInfo = mockk { + every { this@mockk.key } returns key + } + @Nested inner class InitializationTest { @@ -86,56 +91,69 @@ class MediaControlSettingsViewModelTest { inner class AddEntityTest { @Test - fun `Given viewModel when showAddEntity called then showAddSlot is true`() = runTest(testDispatcher) { + fun `Given viewModel when addEntity called then entity appended to list`() = runTest(testDispatcher) { viewModel = createViewModel() - viewModel.showAddEntity() + viewModel.addEntity("media_player.living_room") - assertTrue(viewModel.uiState.value.showAddSlot) + assertEquals(1, viewModel.uiState.value.configuredEntities.size) + assertEquals("media_player.living_room", viewModel.uiState.value.configuredEntities.first().entityId) } @Test - fun `Given add slot shown when cancelAddEntity called then showAddSlot is false`() = runTest(testDispatcher) { + fun `Given entity already in list when addEntity called with same entity then not duplicated`() = runTest(testDispatcher) { viewModel = createViewModel() - viewModel.showAddEntity() + viewModel.addEntity("media_player.tv") - viewModel.cancelAddEntity() + viewModel.addEntity("media_player.tv") - assertFalse(viewModel.uiState.value.showAddSlot) + assertEquals(1, viewModel.uiState.value.configuredEntities.size) } @Test - fun `Given add slot shown when addPendingEntity called then entity appended and slot hidden`() = runTest(testDispatcher) { + fun `Given viewModel when selectServerId called then selectedServerId updated`() = runTest(testDispatcher) { viewModel = createViewModel() - viewModel.showAddEntity() - viewModel.addPendingEntity("media_player.living_room") + viewModel.selectServerId(42) - assertEquals(1, viewModel.uiState.value.configuredEntities.size) - assertEquals("media_player.living_room", viewModel.uiState.value.configuredEntities.first().entityId) - assertFalse(viewModel.uiState.value.showAddSlot) + assertEquals(42, viewModel.uiState.value.selectedServerId) } + } + + @Nested + inner class ReorderTest { @Test - fun `Given entity already in list when addPendingEntity called with same entity then not duplicated`() = runTest(testDispatcher) { + fun `Given two configured entities when onMove called then order is updated`() = runTest(testDispatcher) { + val entityA = MediaControlEntityConfig(serverId = SERVER_ID_ACTIVE, entityId = "media_player.a") + val entityB = MediaControlEntityConfig(serverId = SERVER_ID_ACTIVE, entityId = "media_player.b") viewModel = createViewModel() - viewModel.showAddEntity() - viewModel.addPendingEntity("media_player.tv") - - viewModel.showAddEntity() - viewModel.addPendingEntity("media_player.tv") - - assertEquals(1, viewModel.uiState.value.configuredEntities.size) + viewModel.addEntity(entityA.entityId) + viewModel.addEntity(entityB.entityId) + + viewModel.onMove( + from = fakeLazyListItemInfo(key = entityA), + to = fakeLazyListItemInfo(key = entityB), + ) + + assertEquals( + listOf(entityB, entityA), + viewModel.uiState.value.configuredEntities, + ) } @Test - fun `Given add slot shown when selectPendingServerId called then pendingServerId updated`() = runTest(testDispatcher) { + fun `Given entities when onMove called with unknown key then list unchanged`() = runTest(testDispatcher) { + val entityA = MediaControlEntityConfig(serverId = SERVER_ID_ACTIVE, entityId = "media_player.a") viewModel = createViewModel() - viewModel.showAddEntity() + viewModel.addEntity(entityA.entityId) - viewModel.selectPendingServerId(42) + viewModel.onMove( + from = fakeLazyListItemInfo(key = "unknown"), + to = fakeLazyListItemInfo(key = entityA), + ) - assertEquals(42, viewModel.uiState.value.pendingServerId) + assertEquals(listOf(entityA), viewModel.uiState.value.configuredEntities) } } @@ -145,11 +163,8 @@ class MediaControlSettingsViewModelTest { @Test fun `Given configured entity when removeEntity called then entity removed`() = runTest(testDispatcher) { viewModel = createViewModel() - // Populate list via synchronous API to avoid racing with the async init coroutine - viewModel.showAddEntity() - viewModel.addPendingEntity("media_player.tv") - viewModel.showAddEntity() - viewModel.addPendingEntity("media_player.radio") + viewModel.addEntity("media_player.tv") + viewModel.addEntity("media_player.radio") viewModel.removeEntity(0) @@ -165,8 +180,7 @@ class MediaControlSettingsViewModelTest { fun `Given entities added when saveConfiguration called then repository updated and start event emitted`() = runTest(testDispatcher) { viewModel = createViewModel() advanceUntilIdle() - viewModel.showAddEntity() - viewModel.addPendingEntity("media_player.living_room") + viewModel.addEntity("media_player.living_room") viewModel.serviceEvents.test { viewModel.saveConfiguration() From bbad9c2476bc0a92e7a7e919c14dddbb552c1c9f Mon Sep 17 00:00:00 2001 From: Fletcher Dostie Date: Thu, 26 Mar 2026 18:43:04 -0700 Subject: [PATCH 012/114] Refactor to avoid ComposeUnstableCollections issues, remove stale lint baselines --- app/lint-baseline.xml | 77 ----------- .../MediaControlSettingsViewModel.kt | 2 + .../views/MediaControlSettingsView.kt | 21 ++- automotive/lint-baseline.xml | 121 +++++------------- .../common/data/prefs/PrefsRepositoryImpl.kt | 2 +- 5 files changed, 46 insertions(+), 177 deletions(-) diff --git a/app/lint-baseline.xml b/app/lint-baseline.xml index 1ff1f525f69..e5aeb1f797d 100644 --- a/app/lint-baseline.xml +++ b/app/lint-baseline.xml @@ -1609,83 +1609,6 @@ column="14"/> - - - - - - - - - - - - - - - - - - - - - - - - - - - - = emptyList(), // All loaded entities/registries per server, used by the entity picker diff --git a/app/src/main/kotlin/io/homeassistant/companion/android/settings/mediacontrol/views/MediaControlSettingsView.kt b/app/src/main/kotlin/io/homeassistant/companion/android/settings/mediacontrol/views/MediaControlSettingsView.kt index 6d5d6e038fb..b765294415b 100644 --- a/app/src/main/kotlin/io/homeassistant/companion/android/settings/mediacontrol/views/MediaControlSettingsView.kt +++ b/app/src/main/kotlin/io/homeassistant/companion/android/settings/mediacontrol/views/MediaControlSettingsView.kt @@ -38,9 +38,7 @@ import io.homeassistant.companion.android.common.compose.theme.HATextStyle import io.homeassistant.companion.android.common.compose.theme.HATheme import io.homeassistant.companion.android.common.compose.theme.HAThemeForPreview import io.homeassistant.companion.android.common.compose.theme.LocalHAColorScheme -import io.homeassistant.companion.android.common.data.integration.Entity import io.homeassistant.companion.android.common.data.mediacontrol.MediaControlEntityConfig -import io.homeassistant.companion.android.database.server.Server import io.homeassistant.companion.android.settings.mediacontrol.MediaControlSettingsUiState import io.homeassistant.companion.android.settings.mediacontrol.MediaControlSettingsViewModel import io.homeassistant.companion.android.util.compose.ServerExposedDropdownMenu @@ -144,8 +142,14 @@ internal fun MediaControlSettingsContent( ReorderableItem(state = reorderState, key = config) { isDragging -> ConfiguredEntityRow( config = config, - servers = uiState.servers, - entitiesPerServer = uiState.entitiesPerServer, + subtitle = if (uiState.servers.size > 1) { + uiState.servers.firstOrNull { it.id == config.serverId }?.friendlyName + } else { + null + }, + entityName = uiState.entitiesPerServer[config.serverId] + ?.firstOrNull { it.entityId == config.entityId } + ?.attributes?.get("friendly_name") as? String, onRemove = { onRemoveEntity(uiState.configuredEntities.indexOf(config)) }, isDragging = isDragging, ) @@ -180,19 +184,14 @@ internal fun MediaControlSettingsContent( @Composable private fun ReorderableCollectionItemScope.ConfiguredEntityRow( config: MediaControlEntityConfig, - servers: List, - entitiesPerServer: Map>, + subtitle: String?, + entityName: String?, onRemove: () -> Unit, isDragging: Boolean, ) { val colorScheme = LocalHAColorScheme.current val elevation = animateDpAsState(targetValue = if (isDragging) 8.dp else 0.dp) - val serverName = servers.firstOrNull { it.id == config.serverId }?.friendlyName - val entityName = entitiesPerServer[config.serverId] - ?.firstOrNull { it.entityId == config.entityId } - ?.attributes?.get("friendly_name") as? String val displayName = entityName ?: config.entityId - val subtitle = if (servers.size > 1 && serverName != null) serverName else null Surface(shadowElevation = elevation.value) { Row( diff --git a/automotive/lint-baseline.xml b/automotive/lint-baseline.xml index e06ada682eb..28bfa528fc2 100644 --- a/automotive/lint-baseline.xml +++ b/automotive/lint-baseline.xml @@ -1,5 +1,5 @@ - + @@ -107,7 +107,7 @@ errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"> @@ -151,7 +151,7 @@ errorLine2=" ~~~~~~~~~~~~~"> @@ -360,7 +360,7 @@ errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"> @@ -646,7 +646,7 @@ errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"> @@ -657,7 +657,7 @@ errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"> @@ -668,7 +668,7 @@ errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"> @@ -679,7 +679,7 @@ errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"> @@ -1075,7 +1075,7 @@ errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"> @@ -1438,7 +1438,7 @@ errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"> @@ -1449,7 +1449,7 @@ errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"> @@ -1460,7 +1460,7 @@ errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"> @@ -1471,7 +1471,7 @@ errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"> @@ -1482,7 +1482,7 @@ errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"> @@ -1493,7 +1493,7 @@ errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"> @@ -1504,7 +1504,7 @@ errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"> @@ -1515,7 +1515,7 @@ errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"> @@ -1526,7 +1526,7 @@ errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"> @@ -1537,7 +1537,7 @@ errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"> @@ -1548,7 +1548,7 @@ errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"> @@ -2164,7 +2164,7 @@ errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"> @@ -2175,7 +2175,7 @@ errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"> @@ -2186,7 +2186,7 @@ errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"> @@ -2197,7 +2197,7 @@ errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"> @@ -2208,7 +2208,7 @@ errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"> @@ -2219,7 +2219,7 @@ errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"> @@ -2230,7 +2230,7 @@ errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"> @@ -2813,12 +2813,12 @@ + errorLine1=" MapAnySerializer," + errorLine2=" ~~~~~~~~~~~~~~~~"> + line="318" + column="21"/> @@ -3239,61 +3239,6 @@ column="14"/> - - - - - - - - - - - - - - - - - - - - Date: Thu, 26 Mar 2026 19:34:42 -0700 Subject: [PATCH 013/114] Store media control configuration in the database instead of PrefsRepository --- .../52.json | 1187 +++++++++++++++++ .../mediacontrol/MediaControlEntityConfig.kt | 3 - .../MediaControlRepositoryImpl.kt | 48 +- .../common/data/prefs/PrefsRepository.kt | 7 - .../common/data/prefs/PrefsRepositoryImpl.kt | 29 - .../common/data/servers/ServerManagerImpl.kt | 3 + .../companion/android/database/AppDatabase.kt | 7 +- .../android/database/DatabaseModule.kt | 4 + .../mediacontrol/MediaControlConfig.kt | 19 + .../database/mediacontrol/MediaControlDao.kt | 33 + .../MediaControlRepositoryImplTest.kt | 48 +- .../data/prefs/PrefsRepositoryImplTest.kt | 80 -- .../data/servers/ServerManagerImplTest.kt | 8 + 13 files changed, 1326 insertions(+), 150 deletions(-) create mode 100644 common/schemas/io.homeassistant.companion.android.database.AppDatabase/52.json create mode 100644 common/src/main/kotlin/io/homeassistant/companion/android/database/mediacontrol/MediaControlConfig.kt create mode 100644 common/src/main/kotlin/io/homeassistant/companion/android/database/mediacontrol/MediaControlDao.kt diff --git a/common/schemas/io.homeassistant.companion.android.database.AppDatabase/52.json b/common/schemas/io.homeassistant.companion.android.database.AppDatabase/52.json new file mode 100644 index 00000000000..f830e347c14 --- /dev/null +++ b/common/schemas/io.homeassistant.companion.android.database.AppDatabase/52.json @@ -0,0 +1,1187 @@ +{ + "formatVersion": 1, + "database": { + "version": 52, + "identityHash": "c4130a8113d8dec57f7821bcd94d52b1", + "entities": [ + { + "tableName": "sensor_attributes", + "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`sensor_id` TEXT NOT NULL, `name` TEXT NOT NULL, `value` TEXT NOT NULL, `value_type` TEXT NOT NULL, PRIMARY KEY(`sensor_id`, `name`))", + "fields": [ + { + "fieldPath": "sensorId", + "columnName": "sensor_id", + "affinity": "TEXT", + "notNull": true + }, + { + "fieldPath": "name", + "columnName": "name", + "affinity": "TEXT", + "notNull": true + }, + { + "fieldPath": "value", + "columnName": "value", + "affinity": "TEXT", + "notNull": true + }, + { + "fieldPath": "valueType", + "columnName": "value_type", + "affinity": "TEXT", + "notNull": true + } + ], + "primaryKey": { + "autoGenerate": false, + "columnNames": [ + "sensor_id", + "name" + ] + } + }, + { + "tableName": "authentication_list", + "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`host` TEXT NOT NULL, `username` TEXT NOT NULL, `password` TEXT NOT NULL, PRIMARY KEY(`host`))", + "fields": [ + { + "fieldPath": "host", + "columnName": "host", + "affinity": "TEXT", + "notNull": true + }, + { + "fieldPath": "username", + "columnName": "username", + "affinity": "TEXT", + "notNull": true + }, + { + "fieldPath": "password", + "columnName": "password", + "affinity": "TEXT", + "notNull": true + } + ], + "primaryKey": { + "autoGenerate": false, + "columnNames": [ + "host" + ] + } + }, + { + "tableName": "sensors", + "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`id` TEXT NOT NULL, `server_id` INTEGER NOT NULL DEFAULT 0, `enabled` INTEGER NOT NULL, `registered` INTEGER DEFAULT NULL, `state` TEXT NOT NULL, `last_sent_state` TEXT DEFAULT NULL, `last_sent_icon` TEXT DEFAULT NULL, `state_type` TEXT NOT NULL, `type` TEXT NOT NULL, `icon` TEXT NOT NULL, `name` TEXT NOT NULL, `device_class` TEXT, `unit_of_measurement` TEXT, `state_class` TEXT, `entity_category` TEXT, `core_registration` TEXT, `app_registration` TEXT, PRIMARY KEY(`id`, `server_id`))", + "fields": [ + { + "fieldPath": "id", + "columnName": "id", + "affinity": "TEXT", + "notNull": true + }, + { + "fieldPath": "serverId", + "columnName": "server_id", + "affinity": "INTEGER", + "notNull": true, + "defaultValue": "0" + }, + { + "fieldPath": "enabled", + "columnName": "enabled", + "affinity": "INTEGER", + "notNull": true + }, + { + "fieldPath": "registered", + "columnName": "registered", + "affinity": "INTEGER", + "defaultValue": "NULL" + }, + { + "fieldPath": "state", + "columnName": "state", + "affinity": "TEXT", + "notNull": true + }, + { + "fieldPath": "lastSentState", + "columnName": "last_sent_state", + "affinity": "TEXT", + "defaultValue": "NULL" + }, + { + "fieldPath": "lastSentIcon", + "columnName": "last_sent_icon", + "affinity": "TEXT", + "defaultValue": "NULL" + }, + { + "fieldPath": "stateType", + "columnName": "state_type", + "affinity": "TEXT", + "notNull": true + }, + { + "fieldPath": "type", + "columnName": "type", + "affinity": "TEXT", + "notNull": true + }, + { + "fieldPath": "icon", + "columnName": "icon", + "affinity": "TEXT", + "notNull": true + }, + { + "fieldPath": "name", + "columnName": "name", + "affinity": "TEXT", + "notNull": true + }, + { + "fieldPath": "deviceClass", + "columnName": "device_class", + "affinity": "TEXT" + }, + { + "fieldPath": "unitOfMeasurement", + "columnName": "unit_of_measurement", + "affinity": "TEXT" + }, + { + "fieldPath": "stateClass", + "columnName": "state_class", + "affinity": "TEXT" + }, + { + "fieldPath": "entityCategory", + "columnName": "entity_category", + "affinity": "TEXT" + }, + { + "fieldPath": "coreRegistration", + "columnName": "core_registration", + "affinity": "TEXT" + }, + { + "fieldPath": "appRegistration", + "columnName": "app_registration", + "affinity": "TEXT" + } + ], + "primaryKey": { + "autoGenerate": false, + "columnNames": [ + "id", + "server_id" + ] + } + }, + { + "tableName": "sensor_settings", + "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`sensor_id` TEXT NOT NULL, `name` TEXT NOT NULL, `value` TEXT NOT NULL, `value_type` TEXT NOT NULL, `enabled` INTEGER NOT NULL, `entries` TEXT NOT NULL, PRIMARY KEY(`sensor_id`, `name`))", + "fields": [ + { + "fieldPath": "sensorId", + "columnName": "sensor_id", + "affinity": "TEXT", + "notNull": true + }, + { + "fieldPath": "name", + "columnName": "name", + "affinity": "TEXT", + "notNull": true + }, + { + "fieldPath": "value", + "columnName": "value", + "affinity": "TEXT", + "notNull": true + }, + { + "fieldPath": "valueType", + "columnName": "value_type", + "affinity": "TEXT", + "notNull": true + }, + { + "fieldPath": "enabled", + "columnName": "enabled", + "affinity": "INTEGER", + "notNull": true + }, + { + "fieldPath": "entries", + "columnName": "entries", + "affinity": "TEXT", + "notNull": true + } + ], + "primaryKey": { + "autoGenerate": false, + "columnNames": [ + "sensor_id", + "name" + ] + } + }, + { + "tableName": "button_widgets", + "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`id` INTEGER NOT NULL, `server_id` INTEGER NOT NULL DEFAULT 0, `icon_name` TEXT NOT NULL, `domain` TEXT NOT NULL, `service` TEXT NOT NULL, `service_data` TEXT NOT NULL, `label` TEXT, `background_type` TEXT NOT NULL DEFAULT 'DAYNIGHT', `text_color` TEXT, `require_authentication` INTEGER NOT NULL DEFAULT 0, PRIMARY KEY(`id`))", + "fields": [ + { + "fieldPath": "id", + "columnName": "id", + "affinity": "INTEGER", + "notNull": true + }, + { + "fieldPath": "serverId", + "columnName": "server_id", + "affinity": "INTEGER", + "notNull": true, + "defaultValue": "0" + }, + { + "fieldPath": "iconName", + "columnName": "icon_name", + "affinity": "TEXT", + "notNull": true + }, + { + "fieldPath": "domain", + "columnName": "domain", + "affinity": "TEXT", + "notNull": true + }, + { + "fieldPath": "service", + "columnName": "service", + "affinity": "TEXT", + "notNull": true + }, + { + "fieldPath": "serviceData", + "columnName": "service_data", + "affinity": "TEXT", + "notNull": true + }, + { + "fieldPath": "label", + "columnName": "label", + "affinity": "TEXT" + }, + { + "fieldPath": "backgroundType", + "columnName": "background_type", + "affinity": "TEXT", + "notNull": true, + "defaultValue": "'DAYNIGHT'" + }, + { + "fieldPath": "textColor", + "columnName": "text_color", + "affinity": "TEXT" + }, + { + "fieldPath": "requireAuthentication", + "columnName": "require_authentication", + "affinity": "INTEGER", + "notNull": true, + "defaultValue": "0" + } + ], + "primaryKey": { + "autoGenerate": false, + "columnNames": [ + "id" + ] + } + }, + { + "tableName": "camera_widgets", + "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`id` INTEGER NOT NULL, `server_id` INTEGER NOT NULL DEFAULT 0, `entity_id` TEXT NOT NULL, `tap_action` TEXT NOT NULL DEFAULT 'REFRESH', PRIMARY KEY(`id`))", + "fields": [ + { + "fieldPath": "id", + "columnName": "id", + "affinity": "INTEGER", + "notNull": true + }, + { + "fieldPath": "serverId", + "columnName": "server_id", + "affinity": "INTEGER", + "notNull": true, + "defaultValue": "0" + }, + { + "fieldPath": "entityId", + "columnName": "entity_id", + "affinity": "TEXT", + "notNull": true + }, + { + "fieldPath": "tapAction", + "columnName": "tap_action", + "affinity": "TEXT", + "notNull": true, + "defaultValue": "'REFRESH'" + } + ], + "primaryKey": { + "autoGenerate": false, + "columnNames": [ + "id" + ] + } + }, + { + "tableName": "media_player_controls_widgets", + "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`id` INTEGER NOT NULL, `server_id` INTEGER NOT NULL DEFAULT 0, `entity_id` TEXT NOT NULL, `label` TEXT, `show_skip` INTEGER NOT NULL, `show_seek` INTEGER NOT NULL, `show_volume` INTEGER NOT NULL, `show_source` INTEGER NOT NULL DEFAULT false, `background_type` TEXT NOT NULL DEFAULT 'DAYNIGHT', `text_color` TEXT, PRIMARY KEY(`id`))", + "fields": [ + { + "fieldPath": "id", + "columnName": "id", + "affinity": "INTEGER", + "notNull": true + }, + { + "fieldPath": "serverId", + "columnName": "server_id", + "affinity": "INTEGER", + "notNull": true, + "defaultValue": "0" + }, + { + "fieldPath": "entityId", + "columnName": "entity_id", + "affinity": "TEXT", + "notNull": true + }, + { + "fieldPath": "label", + "columnName": "label", + "affinity": "TEXT" + }, + { + "fieldPath": "showSkip", + "columnName": "show_skip", + "affinity": "INTEGER", + "notNull": true + }, + { + "fieldPath": "showSeek", + "columnName": "show_seek", + "affinity": "INTEGER", + "notNull": true + }, + { + "fieldPath": "showVolume", + "columnName": "show_volume", + "affinity": "INTEGER", + "notNull": true + }, + { + "fieldPath": "showSource", + "columnName": "show_source", + "affinity": "INTEGER", + "notNull": true, + "defaultValue": "false" + }, + { + "fieldPath": "backgroundType", + "columnName": "background_type", + "affinity": "TEXT", + "notNull": true, + "defaultValue": "'DAYNIGHT'" + }, + { + "fieldPath": "textColor", + "columnName": "text_color", + "affinity": "TEXT" + } + ], + "primaryKey": { + "autoGenerate": false, + "columnNames": [ + "id" + ] + } + }, + { + "tableName": "static_widget", + "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`id` INTEGER NOT NULL, `server_id` INTEGER NOT NULL DEFAULT 0, `entity_id` TEXT NOT NULL, `attribute_ids` TEXT, `label` TEXT, `text_size` REAL NOT NULL, `state_separator` TEXT NOT NULL, `attribute_separator` TEXT NOT NULL, `tap_action` TEXT NOT NULL DEFAULT 'REFRESH', `last_update` TEXT NOT NULL, `background_type` TEXT NOT NULL DEFAULT 'DAYNIGHT', `text_color` TEXT, PRIMARY KEY(`id`))", + "fields": [ + { + "fieldPath": "id", + "columnName": "id", + "affinity": "INTEGER", + "notNull": true + }, + { + "fieldPath": "serverId", + "columnName": "server_id", + "affinity": "INTEGER", + "notNull": true, + "defaultValue": "0" + }, + { + "fieldPath": "entityId", + "columnName": "entity_id", + "affinity": "TEXT", + "notNull": true + }, + { + "fieldPath": "attributeIds", + "columnName": "attribute_ids", + "affinity": "TEXT" + }, + { + "fieldPath": "label", + "columnName": "label", + "affinity": "TEXT" + }, + { + "fieldPath": "textSize", + "columnName": "text_size", + "affinity": "REAL", + "notNull": true + }, + { + "fieldPath": "stateSeparator", + "columnName": "state_separator", + "affinity": "TEXT", + "notNull": true + }, + { + "fieldPath": "attributeSeparator", + "columnName": "attribute_separator", + "affinity": "TEXT", + "notNull": true + }, + { + "fieldPath": "tapAction", + "columnName": "tap_action", + "affinity": "TEXT", + "notNull": true, + "defaultValue": "'REFRESH'" + }, + { + "fieldPath": "lastUpdate", + "columnName": "last_update", + "affinity": "TEXT", + "notNull": true + }, + { + "fieldPath": "backgroundType", + "columnName": "background_type", + "affinity": "TEXT", + "notNull": true, + "defaultValue": "'DAYNIGHT'" + }, + { + "fieldPath": "textColor", + "columnName": "text_color", + "affinity": "TEXT" + } + ], + "primaryKey": { + "autoGenerate": false, + "columnNames": [ + "id" + ] + } + }, + { + "tableName": "todo_widget", + "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`id` INTEGER NOT NULL, `server_id` INTEGER NOT NULL DEFAULT 0, `entity_id` TEXT NOT NULL, `background_type` TEXT NOT NULL DEFAULT 'DAYNIGHT', `text_color` TEXT, `show_completed` INTEGER NOT NULL DEFAULT true, `latest_update_data` TEXT, PRIMARY KEY(`id`))", + "fields": [ + { + "fieldPath": "id", + "columnName": "id", + "affinity": "INTEGER", + "notNull": true + }, + { + "fieldPath": "serverId", + "columnName": "server_id", + "affinity": "INTEGER", + "notNull": true, + "defaultValue": "0" + }, + { + "fieldPath": "entityId", + "columnName": "entity_id", + "affinity": "TEXT", + "notNull": true + }, + { + "fieldPath": "backgroundType", + "columnName": "background_type", + "affinity": "TEXT", + "notNull": true, + "defaultValue": "'DAYNIGHT'" + }, + { + "fieldPath": "textColor", + "columnName": "text_color", + "affinity": "TEXT" + }, + { + "fieldPath": "showCompleted", + "columnName": "show_completed", + "affinity": "INTEGER", + "notNull": true, + "defaultValue": "true" + }, + { + "fieldPath": "latestUpdateData", + "columnName": "latest_update_data", + "affinity": "TEXT" + } + ], + "primaryKey": { + "autoGenerate": false, + "columnNames": [ + "id" + ] + } + }, + { + "tableName": "template_widgets", + "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`id` INTEGER NOT NULL, `server_id` INTEGER NOT NULL DEFAULT 0, `template` TEXT NOT NULL, `text_size` REAL NOT NULL DEFAULT 12.0, `last_update` TEXT NOT NULL, `background_type` TEXT NOT NULL DEFAULT 'DAYNIGHT', `text_color` TEXT, PRIMARY KEY(`id`))", + "fields": [ + { + "fieldPath": "id", + "columnName": "id", + "affinity": "INTEGER", + "notNull": true + }, + { + "fieldPath": "serverId", + "columnName": "server_id", + "affinity": "INTEGER", + "notNull": true, + "defaultValue": "0" + }, + { + "fieldPath": "template", + "columnName": "template", + "affinity": "TEXT", + "notNull": true + }, + { + "fieldPath": "textSize", + "columnName": "text_size", + "affinity": "REAL", + "notNull": true, + "defaultValue": "12.0" + }, + { + "fieldPath": "lastUpdate", + "columnName": "last_update", + "affinity": "TEXT", + "notNull": true + }, + { + "fieldPath": "backgroundType", + "columnName": "background_type", + "affinity": "TEXT", + "notNull": true, + "defaultValue": "'DAYNIGHT'" + }, + { + "fieldPath": "textColor", + "columnName": "text_color", + "affinity": "TEXT" + } + ], + "primaryKey": { + "autoGenerate": false, + "columnNames": [ + "id" + ] + } + }, + { + "tableName": "notification_history", + "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`id` INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, `received` INTEGER NOT NULL, `message` TEXT NOT NULL, `data` TEXT NOT NULL, `source` TEXT NOT NULL, `server_id` INTEGER)", + "fields": [ + { + "fieldPath": "id", + "columnName": "id", + "affinity": "INTEGER", + "notNull": true + }, + { + "fieldPath": "received", + "columnName": "received", + "affinity": "INTEGER", + "notNull": true + }, + { + "fieldPath": "message", + "columnName": "message", + "affinity": "TEXT", + "notNull": true + }, + { + "fieldPath": "data", + "columnName": "data", + "affinity": "TEXT", + "notNull": true + }, + { + "fieldPath": "source", + "columnName": "source", + "affinity": "TEXT", + "notNull": true + }, + { + "fieldPath": "serverId", + "columnName": "server_id", + "affinity": "INTEGER" + } + ], + "primaryKey": { + "autoGenerate": true, + "columnNames": [ + "id" + ] + } + }, + { + "tableName": "location_history", + "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`id` INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, `created` INTEGER NOT NULL, `trigger` TEXT NOT NULL, `result` TEXT NOT NULL, `latitude` REAL, `longitude` REAL, `location_name` TEXT, `accuracy` INTEGER, `data` TEXT, `server_id` INTEGER)", + "fields": [ + { + "fieldPath": "id", + "columnName": "id", + "affinity": "INTEGER", + "notNull": true + }, + { + "fieldPath": "created", + "columnName": "created", + "affinity": "INTEGER", + "notNull": true + }, + { + "fieldPath": "trigger", + "columnName": "trigger", + "affinity": "TEXT", + "notNull": true + }, + { + "fieldPath": "result", + "columnName": "result", + "affinity": "TEXT", + "notNull": true + }, + { + "fieldPath": "latitude", + "columnName": "latitude", + "affinity": "REAL" + }, + { + "fieldPath": "longitude", + "columnName": "longitude", + "affinity": "REAL" + }, + { + "fieldPath": "locationName", + "columnName": "location_name", + "affinity": "TEXT" + }, + { + "fieldPath": "accuracy", + "columnName": "accuracy", + "affinity": "INTEGER" + }, + { + "fieldPath": "data", + "columnName": "data", + "affinity": "TEXT" + }, + { + "fieldPath": "serverId", + "columnName": "server_id", + "affinity": "INTEGER" + } + ], + "primaryKey": { + "autoGenerate": true, + "columnNames": [ + "id" + ] + } + }, + { + "tableName": "qs_tiles", + "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`id` INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, `tile_id` TEXT NOT NULL, `added` INTEGER NOT NULL DEFAULT 1, `server_id` INTEGER NOT NULL DEFAULT 0, `icon_name` TEXT, `entity_id` TEXT NOT NULL, `label` TEXT NOT NULL, `subtitle` TEXT, `should_vibrate` INTEGER NOT NULL DEFAULT 0, `auth_required` INTEGER NOT NULL DEFAULT 0)", + "fields": [ + { + "fieldPath": "id", + "columnName": "id", + "affinity": "INTEGER", + "notNull": true + }, + { + "fieldPath": "tileId", + "columnName": "tile_id", + "affinity": "TEXT", + "notNull": true + }, + { + "fieldPath": "added", + "columnName": "added", + "affinity": "INTEGER", + "notNull": true, + "defaultValue": "1" + }, + { + "fieldPath": "serverId", + "columnName": "server_id", + "affinity": "INTEGER", + "notNull": true, + "defaultValue": "0" + }, + { + "fieldPath": "iconName", + "columnName": "icon_name", + "affinity": "TEXT" + }, + { + "fieldPath": "entityId", + "columnName": "entity_id", + "affinity": "TEXT", + "notNull": true + }, + { + "fieldPath": "label", + "columnName": "label", + "affinity": "TEXT", + "notNull": true + }, + { + "fieldPath": "subtitle", + "columnName": "subtitle", + "affinity": "TEXT" + }, + { + "fieldPath": "shouldVibrate", + "columnName": "should_vibrate", + "affinity": "INTEGER", + "notNull": true, + "defaultValue": "0" + }, + { + "fieldPath": "authRequired", + "columnName": "auth_required", + "affinity": "INTEGER", + "notNull": true, + "defaultValue": "0" + } + ], + "primaryKey": { + "autoGenerate": true, + "columnNames": [ + "id" + ] + } + }, + { + "tableName": "favorites", + "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`id` TEXT NOT NULL, `position` INTEGER NOT NULL, PRIMARY KEY(`id`))", + "fields": [ + { + "fieldPath": "id", + "columnName": "id", + "affinity": "TEXT", + "notNull": true + }, + { + "fieldPath": "position", + "columnName": "position", + "affinity": "INTEGER", + "notNull": true + } + ], + "primaryKey": { + "autoGenerate": false, + "columnNames": [ + "id" + ] + } + }, + { + "tableName": "favorite_cache", + "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`id` TEXT NOT NULL, `friendly_name` TEXT NOT NULL, `icon` TEXT, PRIMARY KEY(`id`))", + "fields": [ + { + "fieldPath": "id", + "columnName": "id", + "affinity": "TEXT", + "notNull": true + }, + { + "fieldPath": "friendlyName", + "columnName": "friendly_name", + "affinity": "TEXT", + "notNull": true + }, + { + "fieldPath": "icon", + "columnName": "icon", + "affinity": "TEXT" + } + ], + "primaryKey": { + "autoGenerate": false, + "columnNames": [ + "id" + ] + } + }, + { + "tableName": "camera_tiles", + "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`id` INTEGER NOT NULL, `entity_id` TEXT, `refresh_interval` INTEGER, PRIMARY KEY(`id`))", + "fields": [ + { + "fieldPath": "id", + "columnName": "id", + "affinity": "INTEGER", + "notNull": true + }, + { + "fieldPath": "entityId", + "columnName": "entity_id", + "affinity": "TEXT" + }, + { + "fieldPath": "refreshInterval", + "columnName": "refresh_interval", + "affinity": "INTEGER" + } + ], + "primaryKey": { + "autoGenerate": false, + "columnNames": [ + "id" + ] + } + }, + { + "tableName": "thermostat_tiles", + "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`id` INTEGER NOT NULL, `entity_id` TEXT, `refresh_interval` INTEGER, `target_temperature` REAL, `show_entity_name` INTEGER, PRIMARY KEY(`id`))", + "fields": [ + { + "fieldPath": "id", + "columnName": "id", + "affinity": "INTEGER", + "notNull": true + }, + { + "fieldPath": "entityId", + "columnName": "entity_id", + "affinity": "TEXT" + }, + { + "fieldPath": "refreshInterval", + "columnName": "refresh_interval", + "affinity": "INTEGER" + }, + { + "fieldPath": "targetTemperature", + "columnName": "target_temperature", + "affinity": "REAL" + }, + { + "fieldPath": "showEntityName", + "columnName": "show_entity_name", + "affinity": "INTEGER" + } + ], + "primaryKey": { + "autoGenerate": false, + "columnNames": [ + "id" + ] + } + }, + { + "tableName": "entity_state_complications", + "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`id` INTEGER NOT NULL, `entity_id` TEXT NOT NULL, `show_title` INTEGER NOT NULL DEFAULT 1, `show_unit` INTEGER NOT NULL DEFAULT 0, PRIMARY KEY(`id`))", + "fields": [ + { + "fieldPath": "id", + "columnName": "id", + "affinity": "INTEGER", + "notNull": true + }, + { + "fieldPath": "entityId", + "columnName": "entity_id", + "affinity": "TEXT", + "notNull": true + }, + { + "fieldPath": "showTitle", + "columnName": "show_title", + "affinity": "INTEGER", + "notNull": true, + "defaultValue": "1" + }, + { + "fieldPath": "showUnit", + "columnName": "show_unit", + "affinity": "INTEGER", + "notNull": true, + "defaultValue": "0" + } + ], + "primaryKey": { + "autoGenerate": false, + "columnNames": [ + "id" + ] + } + }, + { + "tableName": "servers", + "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`id` INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, `_name` TEXT NOT NULL, `name_override` TEXT, `_version` TEXT, `device_registry_id` TEXT, `list_order` INTEGER NOT NULL, `device_name` TEXT, `external_url` TEXT NOT NULL, `internal_url` TEXT, `cloud_url` TEXT, `webhook_id` TEXT, `secret` TEXT, `cloudhook_url` TEXT, `use_cloud` INTEGER NOT NULL, `internal_ssids` TEXT NOT NULL, `internal_ethernet` INTEGER, `internal_vpn` INTEGER, `prioritize_internal` INTEGER NOT NULL, `allow_insecure_connection` INTEGER, `access_token` TEXT, `refresh_token` TEXT, `token_expiration` INTEGER, `token_type` TEXT, `install_id` TEXT, `user_id` TEXT, `user_name` TEXT, `user_is_owner` INTEGER, `user_is_admin` INTEGER)", + "fields": [ + { + "fieldPath": "id", + "columnName": "id", + "affinity": "INTEGER", + "notNull": true + }, + { + "fieldPath": "_name", + "columnName": "_name", + "affinity": "TEXT", + "notNull": true + }, + { + "fieldPath": "nameOverride", + "columnName": "name_override", + "affinity": "TEXT" + }, + { + "fieldPath": "_version", + "columnName": "_version", + "affinity": "TEXT" + }, + { + "fieldPath": "deviceRegistryId", + "columnName": "device_registry_id", + "affinity": "TEXT" + }, + { + "fieldPath": "listOrder", + "columnName": "list_order", + "affinity": "INTEGER", + "notNull": true + }, + { + "fieldPath": "deviceName", + "columnName": "device_name", + "affinity": "TEXT" + }, + { + "fieldPath": "connection.externalUrl", + "columnName": "external_url", + "affinity": "TEXT", + "notNull": true + }, + { + "fieldPath": "connection.internalUrl", + "columnName": "internal_url", + "affinity": "TEXT" + }, + { + "fieldPath": "connection.cloudUrl", + "columnName": "cloud_url", + "affinity": "TEXT" + }, + { + "fieldPath": "connection.webhookId", + "columnName": "webhook_id", + "affinity": "TEXT" + }, + { + "fieldPath": "connection.secret", + "columnName": "secret", + "affinity": "TEXT" + }, + { + "fieldPath": "connection.cloudhookUrl", + "columnName": "cloudhook_url", + "affinity": "TEXT" + }, + { + "fieldPath": "connection.useCloud", + "columnName": "use_cloud", + "affinity": "INTEGER", + "notNull": true + }, + { + "fieldPath": "connection.internalSsids", + "columnName": "internal_ssids", + "affinity": "TEXT", + "notNull": true + }, + { + "fieldPath": "connection.internalEthernet", + "columnName": "internal_ethernet", + "affinity": "INTEGER" + }, + { + "fieldPath": "connection.internalVpn", + "columnName": "internal_vpn", + "affinity": "INTEGER" + }, + { + "fieldPath": "connection.prioritizeInternal", + "columnName": "prioritize_internal", + "affinity": "INTEGER", + "notNull": true + }, + { + "fieldPath": "connection.allowInsecureConnection", + "columnName": "allow_insecure_connection", + "affinity": "INTEGER" + }, + { + "fieldPath": "session.accessToken", + "columnName": "access_token", + "affinity": "TEXT" + }, + { + "fieldPath": "session.refreshToken", + "columnName": "refresh_token", + "affinity": "TEXT" + }, + { + "fieldPath": "session.tokenExpiration", + "columnName": "token_expiration", + "affinity": "INTEGER" + }, + { + "fieldPath": "session.tokenType", + "columnName": "token_type", + "affinity": "TEXT" + }, + { + "fieldPath": "session.installId", + "columnName": "install_id", + "affinity": "TEXT" + }, + { + "fieldPath": "user.id", + "columnName": "user_id", + "affinity": "TEXT" + }, + { + "fieldPath": "user.name", + "columnName": "user_name", + "affinity": "TEXT" + }, + { + "fieldPath": "user.isOwner", + "columnName": "user_is_owner", + "affinity": "INTEGER" + }, + { + "fieldPath": "user.isAdmin", + "columnName": "user_is_admin", + "affinity": "INTEGER" + } + ], + "primaryKey": { + "autoGenerate": true, + "columnNames": [ + "id" + ] + } + }, + { + "tableName": "settings", + "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`id` INTEGER NOT NULL, `websocket_setting` TEXT NOT NULL, `sensor_update_frequency` TEXT NOT NULL, PRIMARY KEY(`id`))", + "fields": [ + { + "fieldPath": "id", + "columnName": "id", + "affinity": "INTEGER", + "notNull": true + }, + { + "fieldPath": "websocketSetting", + "columnName": "websocket_setting", + "affinity": "TEXT", + "notNull": true + }, + { + "fieldPath": "sensorUpdateFrequency", + "columnName": "sensor_update_frequency", + "affinity": "TEXT", + "notNull": true + } + ], + "primaryKey": { + "autoGenerate": false, + "columnNames": [ + "id" + ] + } + }, + { + "tableName": "media_control_entity_config", + "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`id` INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, `server_id` INTEGER NOT NULL, `entity_id` TEXT NOT NULL, `position` INTEGER NOT NULL)", + "fields": [ + { + "fieldPath": "id", + "columnName": "id", + "affinity": "INTEGER", + "notNull": true + }, + { + "fieldPath": "serverId", + "columnName": "server_id", + "affinity": "INTEGER", + "notNull": true + }, + { + "fieldPath": "entityId", + "columnName": "entity_id", + "affinity": "TEXT", + "notNull": true + }, + { + "fieldPath": "position", + "columnName": "position", + "affinity": "INTEGER", + "notNull": true + } + ], + "primaryKey": { + "autoGenerate": true, + "columnNames": [ + "id" + ] + } + } + ], + "setupQueries": [ + "CREATE TABLE IF NOT EXISTS room_master_table (id INTEGER PRIMARY KEY,identity_hash TEXT)", + "INSERT OR REPLACE INTO room_master_table (id,identity_hash) VALUES(42, 'c4130a8113d8dec57f7821bcd94d52b1')" + ] + } +} \ No newline at end of file diff --git a/common/src/main/kotlin/io/homeassistant/companion/android/common/data/mediacontrol/MediaControlEntityConfig.kt b/common/src/main/kotlin/io/homeassistant/companion/android/common/data/mediacontrol/MediaControlEntityConfig.kt index e819d8ccd5c..2ff9f7791d5 100644 --- a/common/src/main/kotlin/io/homeassistant/companion/android/common/data/mediacontrol/MediaControlEntityConfig.kt +++ b/common/src/main/kotlin/io/homeassistant/companion/android/common/data/mediacontrol/MediaControlEntityConfig.kt @@ -1,7 +1,4 @@ package io.homeassistant.companion.android.common.data.mediacontrol -import kotlinx.serialization.Serializable - /** Identifies a single `media_player` entity to expose as a native media control. */ -@Serializable data class MediaControlEntityConfig(val serverId: Int, val entityId: String) diff --git a/common/src/main/kotlin/io/homeassistant/companion/android/common/data/mediacontrol/MediaControlRepositoryImpl.kt b/common/src/main/kotlin/io/homeassistant/companion/android/common/data/mediacontrol/MediaControlRepositoryImpl.kt index 7e5231e25bd..96836d8d463 100644 --- a/common/src/main/kotlin/io/homeassistant/companion/android/common/data/mediacontrol/MediaControlRepositoryImpl.kt +++ b/common/src/main/kotlin/io/homeassistant/companion/android/common/data/mediacontrol/MediaControlRepositoryImpl.kt @@ -15,18 +15,22 @@ import io.homeassistant.companion.android.common.data.integration.supportsPlay import io.homeassistant.companion.android.common.data.integration.supportsPreviousTrack import io.homeassistant.companion.android.common.data.integration.supportsSeek import io.homeassistant.companion.android.common.data.integration.supportsVolumeSet -import io.homeassistant.companion.android.common.data.prefs.PrefsRepository import io.homeassistant.companion.android.common.data.servers.ServerManager +import io.homeassistant.companion.android.database.mediacontrol.MediaControlConfig +import io.homeassistant.companion.android.database.mediacontrol.MediaControlDao import javax.inject.Inject import kotlinx.coroutines.CancellationException +import kotlinx.coroutines.ExperimentalCoroutinesApi import kotlinx.coroutines.flow.Flow import kotlinx.coroutines.flow.combine import kotlinx.coroutines.flow.distinctUntilChanged +import kotlinx.coroutines.flow.flatMapLatest import kotlinx.coroutines.flow.flow +import kotlinx.coroutines.flow.flowOf import timber.log.Timber internal class MediaControlRepositoryImpl @Inject constructor( - private val prefsRepository: PrefsRepository, + private val dao: MediaControlDao, private val serverManager: ServerManager, ) : MediaControlRepository { @@ -70,27 +74,41 @@ internal class MediaControlRepositoryImpl @Inject constructor( } }.distinctUntilChanged() - override fun observeMediaControlStates(): Flow> = flow { - val entities = prefsRepository.getMediaControlEntities() - if (entities.isEmpty()) { - emit(emptyList()) - return@flow - } - - val perEntityFlows = entities.map { config -> observeEntityState(config) } - combine(perEntityFlows) { states -> states.filterNotNull() } + @OptIn(ExperimentalCoroutinesApi::class) + override fun observeMediaControlStates(): Flow> = + dao.getAllFlow() + .flatMapLatest { entities -> + if (entities.isEmpty()) { + flowOf(emptyList()) + } else { + combine(entities.map { observeEntityState(it.toEntityConfig()) }) { states -> + states.filterNotNull() + } + } + } .distinctUntilChanged() - .collect { emit(it) } - } override suspend fun getConfiguredEntities(): List = - prefsRepository.getMediaControlEntities() + dao.getAll().map { it.toEntityConfig() } override suspend fun setConfiguredEntities(entities: List) { - prefsRepository.setMediaControlEntities(entities) + dao.replaceAll( + entities.mapIndexed { index, config -> + MediaControlConfig( + serverId = config.serverId, + entityId = config.entityId, + position = index, + ) + }, + ) } } +private fun MediaControlConfig.toEntityConfig() = MediaControlEntityConfig( + serverId = serverId, + entityId = entityId, +) + private fun Entity.toMediaControlState(serverId: Int): MediaControlState { val playbackState = when (state) { "playing" -> MediaPlaybackState.Playing diff --git a/common/src/main/kotlin/io/homeassistant/companion/android/common/data/prefs/PrefsRepository.kt b/common/src/main/kotlin/io/homeassistant/companion/android/common/data/prefs/PrefsRepository.kt index 5a2d9b8cc08..c70b3d27b9c 100644 --- a/common/src/main/kotlin/io/homeassistant/companion/android/common/data/prefs/PrefsRepository.kt +++ b/common/src/main/kotlin/io/homeassistant/companion/android/common/data/prefs/PrefsRepository.kt @@ -2,7 +2,6 @@ package io.homeassistant.companion.android.common.data.prefs import android.os.Parcelable import io.homeassistant.companion.android.common.data.integration.ControlsAuthRequiredSetting -import io.homeassistant.companion.android.common.data.mediacontrol.MediaControlEntityConfig import io.homeassistant.companion.android.common.util.GestureAction import io.homeassistant.companion.android.common.util.HAGesture import kotlinx.parcelize.Parcelize @@ -141,10 +140,4 @@ interface PrefsRepository { suspend fun getSelectedWakeWord(): String? suspend fun setSelectedWakeWord(wakeWord: String) - - /** Returns all configured media control entities. */ - suspend fun getMediaControlEntities(): List - - /** Sets the list of configured media control entities. */ - suspend fun setMediaControlEntities(entities: List) } diff --git a/common/src/main/kotlin/io/homeassistant/companion/android/common/data/prefs/PrefsRepositoryImpl.kt b/common/src/main/kotlin/io/homeassistant/companion/android/common/data/prefs/PrefsRepositoryImpl.kt index 292f9ec8883..62f94ccff1c 100644 --- a/common/src/main/kotlin/io/homeassistant/companion/android/common/data/prefs/PrefsRepositoryImpl.kt +++ b/common/src/main/kotlin/io/homeassistant/companion/android/common/data/prefs/PrefsRepositoryImpl.kt @@ -3,7 +3,6 @@ package io.homeassistant.companion.android.common.data.prefs import androidx.annotation.VisibleForTesting import io.homeassistant.companion.android.common.data.LocalStorage import io.homeassistant.companion.android.common.data.integration.ControlsAuthRequiredSetting -import io.homeassistant.companion.android.common.data.mediacontrol.MediaControlEntityConfig import io.homeassistant.companion.android.common.util.GestureAction import io.homeassistant.companion.android.common.util.HAGesture import io.homeassistant.companion.android.di.qualifiers.NamedIntegrationStorage @@ -12,8 +11,6 @@ import java.util.concurrent.atomic.AtomicBoolean import javax.inject.Inject import kotlinx.coroutines.sync.Mutex import kotlinx.coroutines.sync.withLock -import kotlinx.serialization.encodeToString -import kotlinx.serialization.json.Json @VisibleForTesting const val MIGRATION_PREF = "migration" @@ -49,9 +46,6 @@ private const val PREF_CHANGE_LOG_POPUP_ENABLED = "change_log_popup_enabled" private const val PREF_SHOW_PRIVACY_HINT = "show_privacy_hint" private const val PREF_WAKE_WORD_ENABLED = "wake_word_enabled" private const val PREF_SELECTED_WAKE_WORD = "selected_wake_word" -private const val PREF_MEDIA_CONTROL_SERVER_ID = "media_control_server_id" -private const val PREF_MEDIA_CONTROL_ENTITY_ID = "media_control_entity_id" -private const val PREF_MEDIA_CONTROL_ENTITIES = "media_control_entities" /** * This class ensure that when we use the local storage in [PrefsRepositoryImpl] the migrations has been made @@ -96,19 +90,6 @@ private class LocalStorageWithMigration( localStorage.putInt(MIGRATION_PREF, 1) } - if (currentVersion == null || currentVersion < 2) { - val oldServerId = localStorage.getInt(PREF_MEDIA_CONTROL_SERVER_ID) - val oldEntityId = localStorage.getString(PREF_MEDIA_CONTROL_ENTITY_ID) - val entities = if (oldServerId != null && oldEntityId != null) { - listOf(MediaControlEntityConfig(serverId = oldServerId, entityId = oldEntityId)) - } else { - emptyList() - } - localStorage.putString(PREF_MEDIA_CONTROL_ENTITIES, Json.encodeToString(entities)) - localStorage.remove(PREF_MEDIA_CONTROL_SERVER_ID) - localStorage.remove(PREF_MEDIA_CONTROL_ENTITY_ID) - localStorage.putInt(MIGRATION_PREF, 2) - } migrationChecked.set(true) } } @@ -376,8 +357,6 @@ internal class PrefsRepositoryImpl @Inject constructor( setControlsPanelPath(null) } - val updatedEntities = getMediaControlEntities().filter { it.serverId != serverId } - setMediaControlEntities(updatedEntities) } override suspend fun showPrivacyHint(): Boolean { @@ -404,12 +383,4 @@ internal class PrefsRepositoryImpl @Inject constructor( localStorage().putString(PREF_SELECTED_WAKE_WORD, wakeWord) } - override suspend fun getMediaControlEntities(): List { - val json = localStorage().getString(PREF_MEDIA_CONTROL_ENTITIES) ?: return emptyList() - return Json.decodeFromString(json) - } - - override suspend fun setMediaControlEntities(entities: List) { - localStorage().putString(PREF_MEDIA_CONTROL_ENTITIES, Json.encodeToString(entities)) - } } diff --git a/common/src/main/kotlin/io/homeassistant/companion/android/common/data/servers/ServerManagerImpl.kt b/common/src/main/kotlin/io/homeassistant/companion/android/common/data/servers/ServerManagerImpl.kt index 325f2c5a9dd..10d544dee0a 100644 --- a/common/src/main/kotlin/io/homeassistant/companion/android/common/data/servers/ServerManagerImpl.kt +++ b/common/src/main/kotlin/io/homeassistant/companion/android/common/data/servers/ServerManagerImpl.kt @@ -11,6 +11,7 @@ import io.homeassistant.companion.android.common.data.servers.ServerManager.Comp import io.homeassistant.companion.android.common.data.websocket.WebSocketRepository import io.homeassistant.companion.android.common.data.websocket.WebSocketRepositoryFactory import io.homeassistant.companion.android.common.util.FailFast +import io.homeassistant.companion.android.database.mediacontrol.MediaControlDao import io.homeassistant.companion.android.database.sensor.SensorDao import io.homeassistant.companion.android.database.server.Server import io.homeassistant.companion.android.database.server.ServerDao @@ -75,6 +76,7 @@ internal class ServerManagerImpl @Inject constructor( private val serverDao: ServerDao, private val sensorDao: SensorDao, private val settingsDao: SettingsDao, + private val mediaControlDao: MediaControlDao, @NamedSessionStorage private val localStorage: LocalStorage, ) : ServerManager { @@ -143,6 +145,7 @@ internal class ServerManagerImpl @Inject constructor( if (localStorage.getInt(PREF_ACTIVE_SERVER) == id) localStorage.remove(PREF_ACTIVE_SERVER) settingsDao.delete(id) sensorDao.removeServer(id) + mediaControlDao.deleteByServerId(id) serverDao.delete(id) } diff --git a/common/src/main/kotlin/io/homeassistant/companion/android/database/AppDatabase.kt b/common/src/main/kotlin/io/homeassistant/companion/android/database/AppDatabase.kt index 2829621f4fd..73d33c6b32f 100644 --- a/common/src/main/kotlin/io/homeassistant/companion/android/database/AppDatabase.kt +++ b/common/src/main/kotlin/io/homeassistant/companion/android/database/AppDatabase.kt @@ -8,6 +8,8 @@ import io.homeassistant.companion.android.database.authentication.Authentication import io.homeassistant.companion.android.database.authentication.AuthenticationDao import io.homeassistant.companion.android.database.location.LocationHistoryDao import io.homeassistant.companion.android.database.location.LocationHistoryItem +import io.homeassistant.companion.android.database.mediacontrol.MediaControlConfig +import io.homeassistant.companion.android.database.mediacontrol.MediaControlDao import io.homeassistant.companion.android.database.migration.Migration27to28 import io.homeassistant.companion.android.database.migration.Migration36to37 import io.homeassistant.companion.android.database.notification.NotificationDao @@ -73,8 +75,9 @@ import io.homeassistant.companion.android.database.widget.WidgetTapActionConvert EntityStateComplications::class, Server::class, Setting::class, + MediaControlConfig::class, ], - version = 51, + version = 52, autoMigrations = [ AutoMigration(from = 24, to = 25), AutoMigration(from = 25, to = 26), @@ -101,6 +104,7 @@ import io.homeassistant.companion.android.database.widget.WidgetTapActionConvert AutoMigration(from = 48, to = 49), AutoMigration(from = 49, to = 50), AutoMigration(from = 50, to = 51), + AutoMigration(from = 51, to = 52), ], ) @TypeConverters( @@ -130,4 +134,5 @@ internal abstract class AppDatabase : RoomDatabase() { abstract fun entityStateComplicationsDao(): EntityStateComplicationsDao abstract fun serverDao(): ServerDao abstract fun settingsDao(): SettingsDao + abstract fun mediaControlDao(): MediaControlDao } diff --git a/common/src/main/kotlin/io/homeassistant/companion/android/database/DatabaseModule.kt b/common/src/main/kotlin/io/homeassistant/companion/android/database/DatabaseModule.kt index 51154b29a31..db48ac2b225 100644 --- a/common/src/main/kotlin/io/homeassistant/companion/android/database/DatabaseModule.kt +++ b/common/src/main/kotlin/io/homeassistant/companion/android/database/DatabaseModule.kt @@ -8,6 +8,7 @@ import dagger.hilt.InstallIn import dagger.hilt.android.qualifiers.ApplicationContext import dagger.hilt.components.SingletonComponent import io.homeassistant.companion.android.database.authentication.AuthenticationDao +import io.homeassistant.companion.android.database.mediacontrol.MediaControlDao import io.homeassistant.companion.android.database.location.LocationHistoryDao import io.homeassistant.companion.android.database.migration.migrationPath import io.homeassistant.companion.android.database.notification.NotificationDao @@ -97,4 +98,7 @@ internal object DatabaseModule { @Provides fun provideEntityStateComplicationsDao(database: AppDatabase): EntityStateComplicationsDao = database.entityStateComplicationsDao() + + @Provides + fun provideMediaControlDao(database: AppDatabase): MediaControlDao = database.mediaControlDao() } diff --git a/common/src/main/kotlin/io/homeassistant/companion/android/database/mediacontrol/MediaControlConfig.kt b/common/src/main/kotlin/io/homeassistant/companion/android/database/mediacontrol/MediaControlConfig.kt new file mode 100644 index 00000000000..e5292a81cf9 --- /dev/null +++ b/common/src/main/kotlin/io/homeassistant/companion/android/database/mediacontrol/MediaControlConfig.kt @@ -0,0 +1,19 @@ +package io.homeassistant.companion.android.database.mediacontrol + +import androidx.room.ColumnInfo +import androidx.room.Entity +import androidx.room.PrimaryKey + +/** Stores a single `media_player` entity configured to be exposed as a native media control. */ +@Entity(tableName = "media_control_entity_config") +data class MediaControlConfig( + @PrimaryKey(autoGenerate = true) + @ColumnInfo(name = "id") + val id: Int = 0, + @ColumnInfo(name = "server_id") + val serverId: Int, + @ColumnInfo(name = "entity_id") + val entityId: String, + @ColumnInfo(name = "position") + val position: Int, +) diff --git a/common/src/main/kotlin/io/homeassistant/companion/android/database/mediacontrol/MediaControlDao.kt b/common/src/main/kotlin/io/homeassistant/companion/android/database/mediacontrol/MediaControlDao.kt new file mode 100644 index 00000000000..0ee592b6c1f --- /dev/null +++ b/common/src/main/kotlin/io/homeassistant/companion/android/database/mediacontrol/MediaControlDao.kt @@ -0,0 +1,33 @@ +package io.homeassistant.companion.android.database.mediacontrol + +import androidx.room.Dao +import androidx.room.Insert +import androidx.room.OnConflictStrategy +import androidx.room.Query +import androidx.room.Transaction +import kotlinx.coroutines.flow.Flow + +@Dao +interface MediaControlDao { + + @Query("SELECT * FROM media_control_entity_config ORDER BY position ASC") + fun getAllFlow(): Flow> + + @Query("SELECT * FROM media_control_entity_config ORDER BY position ASC") + suspend fun getAll(): List + + @Insert(onConflict = OnConflictStrategy.REPLACE) + suspend fun insertAll(entities: List) + + @Query("DELETE FROM media_control_entity_config") + suspend fun deleteAll() + + @Query("DELETE FROM media_control_entity_config WHERE server_id = :serverId") + suspend fun deleteByServerId(serverId: Int) + + @Transaction + suspend fun replaceAll(entities: List) { + deleteAll() + insertAll(entities) + } +} diff --git a/common/src/test/kotlin/io/homeassistant/companion/android/common/data/mediacontrol/MediaControlRepositoryImplTest.kt b/common/src/test/kotlin/io/homeassistant/companion/android/common/data/mediacontrol/MediaControlRepositoryImplTest.kt index 4144297dccd..88e0e2ade56 100644 --- a/common/src/test/kotlin/io/homeassistant/companion/android/common/data/mediacontrol/MediaControlRepositoryImplTest.kt +++ b/common/src/test/kotlin/io/homeassistant/companion/android/common/data/mediacontrol/MediaControlRepositoryImplTest.kt @@ -2,8 +2,9 @@ package io.homeassistant.companion.android.common.data.mediacontrol import app.cash.turbine.test import io.homeassistant.companion.android.common.data.integration.EntityExt -import io.homeassistant.companion.android.common.data.prefs.PrefsRepository import io.homeassistant.companion.android.common.data.servers.ServerManager +import io.homeassistant.companion.android.database.mediacontrol.MediaControlConfig +import io.homeassistant.companion.android.database.mediacontrol.MediaControlDao import io.homeassistant.companion.android.common.data.websocket.WebSocketRepository import io.homeassistant.companion.android.common.data.websocket.impl.entities.CompressedEntityState import io.homeassistant.companion.android.common.data.websocket.impl.entities.CompressedStateChangedEvent @@ -27,7 +28,7 @@ import org.junit.jupiter.api.extension.ExtendWith @ExtendWith(ConsoleLogExtension::class) class MediaControlRepositoryImplTest { - private val prefsRepository: PrefsRepository = mockk(relaxed = true) + private val dao: MediaControlDao = mockk(relaxed = true) private val serverManager: ServerManager = mockk(relaxed = true) private val webSocketRepository: WebSocketRepository = mockk(relaxed = true) @@ -39,7 +40,7 @@ class MediaControlRepositoryImplTest { fun setUp() { coEvery { serverManager.webSocketRepository(any()) } returns webSocketRepository repository = MediaControlRepositoryImpl( - prefsRepository = prefsRepository, + dao = dao, serverManager = serverManager, ) } @@ -112,19 +113,22 @@ class MediaControlRepositoryImplTest { @Test fun `Given no configured entities when observing then emit empty list`() = runTest { - coEvery { prefsRepository.getMediaControlEntities() } returns emptyList() + coEvery { dao.getAllFlow() } returns flowOf(emptyList()) repository.observeMediaControlStates().test { assertEquals(emptyList(), awaitItem()) - awaitComplete() + cancelAndIgnoreRemainingEvents() } } @Test fun `Given two configured entities when states arrive then emit combined list`() = runTest { - val config1 = MediaControlEntityConfig(serverId = 1, entityId = "media_player.living_room") - val config2 = MediaControlEntityConfig(serverId = 1, entityId = "media_player.bedroom") - coEvery { prefsRepository.getMediaControlEntities() } returns listOf(config1, config2) + coEvery { dao.getAllFlow() } returns flowOf( + listOf( + MediaControlConfig(id = 1, serverId = 1, entityId = "media_player.living_room", position = 0), + MediaControlConfig(id = 2, serverId = 1, entityId = "media_player.bedroom", position = 1), + ), + ) val state1 = CompressedEntityState( state = JsonPrimitive("playing"), @@ -411,20 +415,34 @@ class MediaControlRepositoryImplTest { inner class ConfigurationTest { @Test - fun `Given entities when getConfiguredEntities then delegates to prefs`() = runTest { - val entities = listOf(MediaControlEntityConfig(serverId = 1, entityId = "media_player.tv")) - coEvery { prefsRepository.getMediaControlEntities() } returns entities + fun `Given entities in database when getConfiguredEntities then returns mapped list`() = runTest { + coEvery { dao.getAll() } returns listOf( + MediaControlConfig(id = 1, serverId = 1, entityId = "media_player.tv", position = 0), + ) - assertEquals(entities, repository.getConfiguredEntities()) + assertEquals( + listOf(MediaControlEntityConfig(serverId = 1, entityId = "media_player.tv")), + repository.getConfiguredEntities(), + ) } @Test - fun `Given entities when setConfiguredEntities then updates prefs`() = runTest { - val entities = listOf(MediaControlEntityConfig(serverId = 5, entityId = "media_player.office")) + fun `Given entities when setConfiguredEntities then replaces all in database with positions`() = runTest { + val entities = listOf( + MediaControlEntityConfig(serverId = 1, entityId = "media_player.tv"), + MediaControlEntityConfig(serverId = 2, entityId = "media_player.office"), + ) repository.setConfiguredEntities(entities) - coVerify { prefsRepository.setMediaControlEntities(entities) } + coVerify { + dao.replaceAll( + listOf( + MediaControlConfig(serverId = 1, entityId = "media_player.tv", position = 0), + MediaControlConfig(serverId = 2, entityId = "media_player.office", position = 1), + ), + ) + } } } } diff --git a/common/src/test/kotlin/io/homeassistant/companion/android/common/data/prefs/PrefsRepositoryImplTest.kt b/common/src/test/kotlin/io/homeassistant/companion/android/common/data/prefs/PrefsRepositoryImplTest.kt index 6714f76c5ad..69a6bd84cf8 100644 --- a/common/src/test/kotlin/io/homeassistant/companion/android/common/data/prefs/PrefsRepositoryImplTest.kt +++ b/common/src/test/kotlin/io/homeassistant/companion/android/common/data/prefs/PrefsRepositoryImplTest.kt @@ -1,15 +1,12 @@ package io.homeassistant.companion.android.common.data.prefs import io.homeassistant.companion.android.common.data.LocalStorage -import io.homeassistant.companion.android.common.data.mediacontrol.MediaControlEntityConfig import io.homeassistant.companion.android.common.util.GestureAction import io.homeassistant.companion.android.common.util.HAGesture import io.mockk.coEvery import io.mockk.coVerify import io.mockk.mockk import kotlinx.coroutines.test.runTest -import kotlinx.serialization.encodeToString -import kotlinx.serialization.json.Json import org.junit.jupiter.api.Assertions.assertEquals import org.junit.jupiter.api.BeforeEach import org.junit.jupiter.api.Nested @@ -123,81 +120,4 @@ class PrefsRepositoryImplTest { coVerify(exactly = 0) { integrationStorage.getString(any()) } } - @Nested - inner class MigrationV2Test { - - @Test - fun `Given version 1 prefs with single entity when migrating then entity written as list and old keys removed`() = runTest { - // Simulate a user at migration version 1 who had a single entity configured - coEvery { localStorage.getInt(MIGRATION_PREF) } returns 1 - coEvery { localStorage.getInt("media_control_server_id") } returns 42 - coEvery { localStorage.getString("media_control_entity_id") } returns "media_player.tv" - coEvery { localStorage.getString("media_control_entities") } returns null - coEvery { localStorage.putString(any(), any()) } returns Unit - coEvery { localStorage.remove(any()) } returns Unit - coEvery { localStorage.putInt(any(), any()) } returns Unit - - // Trigger migration by accessing the repository - repository.getMediaControlEntities() - - val expectedJson = Json.encodeToString(listOf(MediaControlEntityConfig(serverId = 42, entityId = "media_player.tv"))) - coVerify { localStorage.putString("media_control_entities", expectedJson) } - coVerify { localStorage.remove("media_control_server_id") } - coVerify { localStorage.remove("media_control_entity_id") } - coVerify { localStorage.putInt(MIGRATION_PREF, 2) } - } - - @Test - fun `Given version 1 prefs with no entity configured when migrating then empty list written`() = runTest { - coEvery { localStorage.getInt(MIGRATION_PREF) } returns 1 - coEvery { localStorage.getInt("media_control_server_id") } returns null - coEvery { localStorage.getString("media_control_entity_id") } returns null - coEvery { localStorage.getString("media_control_entities") } returns null - coEvery { localStorage.putString(any(), any()) } returns Unit - coEvery { localStorage.remove(any()) } returns Unit - coEvery { localStorage.putInt(any(), any()) } returns Unit - - repository.getMediaControlEntities() - - val expectedJson = Json.encodeToString(emptyList()) - coVerify { localStorage.putString("media_control_entities", expectedJson) } - coVerify { localStorage.putInt(MIGRATION_PREF, 2) } - } - } - - @Nested - inner class MediaControlEntitiesTest { - - @Test - fun `Given no stored entities when getMediaControlEntities called then empty list returned`() = runTest { - coEvery { localStorage.getString("media_control_entities") } returns null - - val result = repository.getMediaControlEntities() - - assertEquals(emptyList(), result) - } - - @Test - fun `Given stored entities when getMediaControlEntities called then list returned`() = runTest { - val entities = listOf( - MediaControlEntityConfig(serverId = 1, entityId = "media_player.tv"), - MediaControlEntityConfig(serverId = 2, entityId = "media_player.radio"), - ) - coEvery { localStorage.getString("media_control_entities") } returns Json.encodeToString(entities) - - val result = repository.getMediaControlEntities() - - assertEquals(entities, result) - } - - @Test - fun `Given entities when setMediaControlEntities called then serialized to prefs`() = runTest { - val entities = listOf(MediaControlEntityConfig(serverId = 1, entityId = "media_player.tv")) - coEvery { localStorage.putString(any(), any()) } returns Unit - - repository.setMediaControlEntities(entities) - - coVerify { localStorage.putString("media_control_entities", Json.encodeToString(entities)) } - } - } } diff --git a/common/src/test/kotlin/io/homeassistant/companion/android/common/data/servers/ServerManagerImplTest.kt b/common/src/test/kotlin/io/homeassistant/companion/android/common/data/servers/ServerManagerImplTest.kt index 8ffe93bcbfa..214810bab1b 100644 --- a/common/src/test/kotlin/io/homeassistant/companion/android/common/data/servers/ServerManagerImplTest.kt +++ b/common/src/test/kotlin/io/homeassistant/companion/android/common/data/servers/ServerManagerImplTest.kt @@ -10,6 +10,7 @@ import io.homeassistant.companion.android.common.data.prefs.PrefsRepository import io.homeassistant.companion.android.common.data.servers.ServerManager.Companion.SERVER_ID_ACTIVE import io.homeassistant.companion.android.common.data.websocket.WebSocketRepository import io.homeassistant.companion.android.common.data.websocket.WebSocketRepositoryFactory +import io.homeassistant.companion.android.database.mediacontrol.MediaControlDao import io.homeassistant.companion.android.database.sensor.SensorDao import io.homeassistant.companion.android.database.server.Server import io.homeassistant.companion.android.database.server.ServerConnectionInfo @@ -56,6 +57,7 @@ class ServerManagerImplTest { private val serverDao: ServerDao = mockk() private val sensorDao: SensorDao = mockk() private val settingsDao: SettingsDao = mockk() + private val mediaControlDao: MediaControlDao = mockk() private val localStorage: LocalStorage = mockk() private lateinit var serverManager: ServerManagerImpl @@ -84,6 +86,7 @@ class ServerManagerImplTest { serverDao = serverDao, sensorDao = sensorDao, settingsDao = settingsDao, + mediaControlDao = mediaControlDao, localStorage = localStorage, ) } @@ -346,6 +349,7 @@ class ServerManagerImplTest { coEvery { localStorage.getInt("active_server") } returns null coEvery { settingsDao.delete(serverId) } just Runs coEvery { sensorDao.removeServer(serverId) } just Runs + coEvery { mediaControlDao.deleteByServerId(serverId) } just Runs coEvery { serverDao.delete(serverId) } just Runs coEvery { webSocketRepo.shutdown() } just Runs @@ -360,6 +364,7 @@ class ServerManagerImplTest { webSocketRepo.shutdown() settingsDao.delete(serverId) sensorDao.removeServer(serverId) + mediaControlDao.deleteByServerId(serverId) serverDao.delete(serverId) } } @@ -380,6 +385,7 @@ class ServerManagerImplTest { coEvery { localStorage.remove("active_server") } just Runs coEvery { settingsDao.delete(serverId) } just Runs coEvery { sensorDao.removeServer(serverId) } just Runs + coEvery { mediaControlDao.deleteByServerId(serverId) } just Runs coEvery { serverDao.delete(serverId) } just Runs serverManager.removeServer(serverId) @@ -402,6 +408,7 @@ class ServerManagerImplTest { coEvery { localStorage.getInt("active_server") } returns 10 coEvery { settingsDao.delete(serverId) } just Runs coEvery { sensorDao.removeServer(serverId) } just Runs + coEvery { mediaControlDao.deleteByServerId(serverId) } just Runs coEvery { serverDao.delete(serverId) } just Runs serverManager.removeServer(serverId) @@ -426,6 +433,7 @@ class ServerManagerImplTest { coEvery { localStorage.getInt("active_server") } returns null coEvery { settingsDao.delete(serverId) } just Runs coEvery { sensorDao.removeServer(serverId) } just Runs + coEvery { mediaControlDao.deleteByServerId(serverId) } just Runs coEvery { serverDao.delete(serverId) } just Runs coEvery { webSocketRepo.shutdown() } just Runs From c434c30ee5f5ae8b5f1f944a14376612e4fe3cab Mon Sep 17 00:00:00 2001 From: Fletcher Dostie Date: Thu, 26 Mar 2026 20:14:57 -0700 Subject: [PATCH 014/114] Fix crash when adding media control entity; Fix artwork disappearing on track transition; always show full track as buffered --- .../companion/android/mediacontrol/HaMediaSession.kt | 3 +-- .../companion/android/mediacontrol/HaRemoteMediaPlayer.kt | 3 +++ .../settings/mediacontrol/views/MediaControlSettingsView.kt | 4 ++-- 3 files changed, 6 insertions(+), 4 deletions(-) diff --git a/app/src/main/kotlin/io/homeassistant/companion/android/mediacontrol/HaMediaSession.kt b/app/src/main/kotlin/io/homeassistant/companion/android/mediacontrol/HaMediaSession.kt index b8045fdb196..fb5eb99a748 100644 --- a/app/src/main/kotlin/io/homeassistant/companion/android/mediacontrol/HaMediaSession.kt +++ b/app/src/main/kotlin/io/homeassistant/companion/android/mediacontrol/HaMediaSession.kt @@ -174,8 +174,7 @@ class HaMediaSession( bytes ?: currentArtworkBytes } else if (artworkUrl == null) { currentArtworkUrl = null - currentArtworkBytes = null - null + currentArtworkBytes } else { currentArtworkBytes } diff --git a/app/src/main/kotlin/io/homeassistant/companion/android/mediacontrol/HaRemoteMediaPlayer.kt b/app/src/main/kotlin/io/homeassistant/companion/android/mediacontrol/HaRemoteMediaPlayer.kt index cb149920a88..97eaa6b856c 100644 --- a/app/src/main/kotlin/io/homeassistant/companion/android/mediacontrol/HaRemoteMediaPlayer.kt +++ b/app/src/main/kotlin/io/homeassistant/companion/android/mediacontrol/HaRemoteMediaPlayer.kt @@ -112,6 +112,8 @@ class HaRemoteMediaPlayer(looper: Looper, private val commandCallback: CommandCa val deviceVolume = state.volumeLevel?.let { (it * VOLUME_SCALE).toInt() } ?: 0 + val bufferedPositionMs = if (durationUs != DURATION_UNSET_US) durationUs / 1000 else positionMs + return State.Builder() .setAvailableCommands(availableCommands) .setPlaybackState(playbackState) @@ -119,6 +121,7 @@ class HaRemoteMediaPlayer(looper: Looper, private val commandCallback: CommandCa .setPlaybackParameters(PlaybackParameters(PLAYBACK_SPEED)) .setCurrentMediaItemIndex(CURRENT_ITEM_INDEX) .setContentPositionMs(positionMs) + .setContentBufferedPositionMs(bufferedPositionMs) .setPlaylist(playlist) .setDeviceInfo(REMOTE_DEVICE_INFO) .setDeviceVolume(deviceVolume) diff --git a/app/src/main/kotlin/io/homeassistant/companion/android/settings/mediacontrol/views/MediaControlSettingsView.kt b/app/src/main/kotlin/io/homeassistant/companion/android/settings/mediacontrol/views/MediaControlSettingsView.kt index b765294415b..5791951b485 100644 --- a/app/src/main/kotlin/io/homeassistant/companion/android/settings/mediacontrol/views/MediaControlSettingsView.kt +++ b/app/src/main/kotlin/io/homeassistant/companion/android/settings/mediacontrol/views/MediaControlSettingsView.kt @@ -137,9 +137,9 @@ internal fun MediaControlSettingsContent( items( items = uiState.configuredEntities, - key = { it }, + key = { "${it.serverId}_${it.entityId}" }, ) { config -> - ReorderableItem(state = reorderState, key = config) { isDragging -> + ReorderableItem(state = reorderState, key = "${config.serverId}_${config.entityId}") { isDragging -> ConfiguredEntityRow( config = config, subtitle = if (uiState.servers.size > 1) { From e75df178a318e815ae5a074c2d15b0f6184184fd Mon Sep 17 00:00:00 2001 From: Fletcher Dostie Date: Thu, 26 Mar 2026 20:24:39 -0700 Subject: [PATCH 015/114] Fetch media information and artwork immediately on startObservingState --- .../companion/android/mediacontrol/HaMediaSession.kt | 2 +- .../android/mediacontrol/HaRemoteMediaPlayer.kt | 3 ++- .../data/mediacontrol/MediaControlRepository.kt | 6 ++++++ .../data/mediacontrol/MediaControlRepositoryImpl.kt | 12 ++++++++++++ 4 files changed, 21 insertions(+), 2 deletions(-) diff --git a/app/src/main/kotlin/io/homeassistant/companion/android/mediacontrol/HaMediaSession.kt b/app/src/main/kotlin/io/homeassistant/companion/android/mediacontrol/HaMediaSession.kt index fb5eb99a748..16d556c7e1e 100644 --- a/app/src/main/kotlin/io/homeassistant/companion/android/mediacontrol/HaMediaSession.kt +++ b/app/src/main/kotlin/io/homeassistant/companion/android/mediacontrol/HaMediaSession.kt @@ -116,8 +116,8 @@ class HaMediaSession( fun startObservingState() { observationJob?.cancel() currentArtworkUrl = null - currentArtworkBytes = null observationJob = scope.launch { + mediaControlRepository.getEntityState(config)?.let { loadArtworkAndUpdatePlayer(it) } while (true) { ensureActive() mediaControlRepository.observeEntityState(config).collect { state -> diff --git a/app/src/main/kotlin/io/homeassistant/companion/android/mediacontrol/HaRemoteMediaPlayer.kt b/app/src/main/kotlin/io/homeassistant/companion/android/mediacontrol/HaRemoteMediaPlayer.kt index 97eaa6b856c..cee40b40dee 100644 --- a/app/src/main/kotlin/io/homeassistant/companion/android/mediacontrol/HaRemoteMediaPlayer.kt +++ b/app/src/main/kotlin/io/homeassistant/companion/android/mediacontrol/HaRemoteMediaPlayer.kt @@ -7,6 +7,7 @@ import androidx.media3.common.MediaMetadata import androidx.media3.common.PlaybackParameters import androidx.media3.common.Player import androidx.media3.common.SimpleBasePlayer +import androidx.media3.common.SimpleBasePlayer.PositionSupplier import androidx.media3.common.util.UnstableApi import com.google.common.util.concurrent.Futures import com.google.common.util.concurrent.ListenableFuture @@ -121,7 +122,7 @@ class HaRemoteMediaPlayer(looper: Looper, private val commandCallback: CommandCa .setPlaybackParameters(PlaybackParameters(PLAYBACK_SPEED)) .setCurrentMediaItemIndex(CURRENT_ITEM_INDEX) .setContentPositionMs(positionMs) - .setContentBufferedPositionMs(bufferedPositionMs) + .setContentBufferedPositionMs(PositionSupplier.getConstant(bufferedPositionMs)) .setPlaylist(playlist) .setDeviceInfo(REMOTE_DEVICE_INFO) .setDeviceVolume(deviceVolume) diff --git a/common/src/main/kotlin/io/homeassistant/companion/android/common/data/mediacontrol/MediaControlRepository.kt b/common/src/main/kotlin/io/homeassistant/companion/android/common/data/mediacontrol/MediaControlRepository.kt index 00e1927965f..f24ff2d4a60 100644 --- a/common/src/main/kotlin/io/homeassistant/companion/android/common/data/mediacontrol/MediaControlRepository.kt +++ b/common/src/main/kotlin/io/homeassistant/companion/android/common/data/mediacontrol/MediaControlRepository.kt @@ -8,6 +8,12 @@ import kotlinx.coroutines.flow.Flow */ interface MediaControlRepository { + /** + * Returns the current [MediaControlState] for a single entity via a one-shot REST fetch, + * or null if the entity is unavailable or the request fails. + */ + suspend fun getEntityState(config: MediaControlEntityConfig): MediaControlState? + /** * Emits the current [MediaControlState] for a single entity whenever its state changes. * Emits null when the entity is unavailable or the WebSocket subscription fails. diff --git a/common/src/main/kotlin/io/homeassistant/companion/android/common/data/mediacontrol/MediaControlRepositoryImpl.kt b/common/src/main/kotlin/io/homeassistant/companion/android/common/data/mediacontrol/MediaControlRepositoryImpl.kt index 96836d8d463..241ae63cb79 100644 --- a/common/src/main/kotlin/io/homeassistant/companion/android/common/data/mediacontrol/MediaControlRepositoryImpl.kt +++ b/common/src/main/kotlin/io/homeassistant/companion/android/common/data/mediacontrol/MediaControlRepositoryImpl.kt @@ -34,6 +34,18 @@ internal class MediaControlRepositoryImpl @Inject constructor( private val serverManager: ServerManager, ) : MediaControlRepository { + override suspend fun getEntityState(config: MediaControlEntityConfig): MediaControlState? = + try { + serverManager.integrationRepository(config.serverId) + .getEntity(config.entityId) + ?.toMediaControlState(serverId = config.serverId) + } catch (e: CancellationException) { + throw e + } catch (e: Exception) { + Timber.e(e, "Failed to fetch entity state for ${config.entityId}") + null + } + override fun observeEntityState(config: MediaControlEntityConfig): Flow = flow { try { From 16805bde4a385b1274296c4502e1a076d0b25234 Mon Sep 17 00:00:00 2001 From: Fletcher Dostie Date: Thu, 26 Mar 2026 20:51:31 -0700 Subject: [PATCH 016/114] Remove Save and Clear All buttons from media control settings page, save immediately on change instead --- .../MediaControlSettingsViewModel.kt | 25 +++--- .../views/MediaControlSettingsView.kt | 38 ++------- .../MediaControlSettingsViewModelTest.kt | 85 +++++++++++++++---- 3 files changed, 88 insertions(+), 60 deletions(-) diff --git a/app/src/main/kotlin/io/homeassistant/companion/android/settings/mediacontrol/MediaControlSettingsViewModel.kt b/app/src/main/kotlin/io/homeassistant/companion/android/settings/mediacontrol/MediaControlSettingsViewModel.kt index 7d5afb25a38..cbca39e5bb6 100644 --- a/app/src/main/kotlin/io/homeassistant/companion/android/settings/mediacontrol/MediaControlSettingsViewModel.kt +++ b/app/src/main/kotlin/io/homeassistant/companion/android/settings/mediacontrol/MediaControlSettingsViewModel.kt @@ -126,7 +126,7 @@ class MediaControlSettingsViewModel @Inject constructor( /** * Adds the entity identified by [entityId] from the currently selected server to the configured - * list. Has no effect if the entity is already in the list. + * list, then persists the change immediately. Has no effect if the entity is already in the list. */ fun addEntity(entityId: String) { val config = MediaControlEntityConfig( @@ -140,18 +140,20 @@ class MediaControlSettingsViewModel @Inject constructor( state.copy(configuredEntities = state.configuredEntities + config) } } + persistAndNotifyService() } - /** Removes the configured entity at [index] from the list. */ + /** Removes the configured entity at [index] from the list, then persists the change immediately. */ fun removeEntity(index: Int) { _uiState.update { state -> state.copy(configuredEntities = state.configuredEntities.toMutableList().also { it.removeAt(index) }) } + persistAndNotifyService() } /** * Moves a configured entity from one position to another in response to a drag gesture. - * Does not persist the change — call [saveConfiguration] to save. + * Does not persist — call [onReorderComplete] once the drag ends to save the final order. */ fun onMove(from: LazyListItemInfo, to: LazyListItemInfo) { _uiState.update { state -> @@ -165,8 +167,12 @@ class MediaControlSettingsViewModel @Inject constructor( } } - /** Saves the current list of configured entities and emits a service event to the UI layer. */ - fun saveConfiguration() { + /** Persists the current entity order after a drag-to-reorder gesture completes. */ + fun onReorderComplete() { + persistAndNotifyService() + } + + private fun persistAndNotifyService() { viewModelScope.launch { val entities = _uiState.value.configuredEntities mediaControlRepository.setConfiguredEntities(entities) @@ -176,15 +182,6 @@ class MediaControlSettingsViewModel @Inject constructor( } } - /** Clears all configured entities and emits a stop event to the UI layer. */ - fun clearAllConfiguration() { - viewModelScope.launch { - mediaControlRepository.setConfiguredEntities(emptyList()) - _uiState.update { it.copy(configuredEntities = emptyList()) } - _serviceEvents.emit(MediaControlServiceEvent.Stop) - } - } - private suspend fun loadMediaPlayerEntities(serverId: Int): List = try { serverManager.integrationRepository(serverId).getEntities().orEmpty() .filter { it.domain == MEDIA_PLAYER_DOMAIN } diff --git a/app/src/main/kotlin/io/homeassistant/companion/android/settings/mediacontrol/views/MediaControlSettingsView.kt b/app/src/main/kotlin/io/homeassistant/companion/android/settings/mediacontrol/views/MediaControlSettingsView.kt index 5791951b485..4a0182230e3 100644 --- a/app/src/main/kotlin/io/homeassistant/companion/android/settings/mediacontrol/views/MediaControlSettingsView.kt +++ b/app/src/main/kotlin/io/homeassistant/companion/android/settings/mediacontrol/views/MediaControlSettingsView.kt @@ -31,9 +31,7 @@ import com.mikepenz.iconics.compose.Image import com.mikepenz.iconics.typeface.library.community.material.CommunityMaterial import io.homeassistant.companion.android.common.R import io.homeassistant.companion.android.common.compose.composable.ButtonVariant -import io.homeassistant.companion.android.common.compose.composable.HAFilledButton import io.homeassistant.companion.android.common.compose.composable.HAIconButton -import io.homeassistant.companion.android.common.compose.composable.HAPlainButton import io.homeassistant.companion.android.common.compose.theme.HATextStyle import io.homeassistant.companion.android.common.compose.theme.HATheme import io.homeassistant.companion.android.common.compose.theme.HAThemeForPreview @@ -60,8 +58,7 @@ fun MediaControlSettingsView(viewModel: MediaControlSettingsViewModel, modifier: onEntitySelected = viewModel::addEntity, onRemoveEntity = viewModel::removeEntity, onMove = viewModel::onMove, - onSave = viewModel::saveConfiguration, - onClearAll = viewModel::clearAllConfiguration, + onReorderComplete = viewModel::onReorderComplete, modifier = modifier, ) } @@ -74,8 +71,7 @@ internal fun MediaControlSettingsContent( onEntitySelected: (String) -> Unit, onRemoveEntity: (Int) -> Unit, onMove: (LazyListItemInfo, LazyListItemInfo) -> Unit, - onSave: () -> Unit, - onClearAll: () -> Unit, + onReorderComplete: () -> Unit, modifier: Modifier = Modifier, ) { val colorScheme = LocalHAColorScheme.current @@ -151,6 +147,7 @@ internal fun MediaControlSettingsContent( ?.firstOrNull { it.entityId == config.entityId } ?.attributes?.get("friendly_name") as? String, onRemove = { onRemoveEntity(uiState.configuredEntities.indexOf(config)) }, + onReorderComplete = onReorderComplete, isDragging = isDragging, ) if (config != uiState.configuredEntities.last()) { @@ -158,26 +155,6 @@ internal fun MediaControlSettingsContent( } } } - - item { - if (uiState.configuredEntities.isNotEmpty()) { - Spacer(modifier = Modifier.size(8.dp)) - } - HAFilledButton( - text = stringResource(R.string.save), - onClick = onSave, - enabled = uiState.configuredEntities.isNotEmpty(), - modifier = Modifier.fillMaxWidth(), - ) - if (uiState.configuredEntities.isNotEmpty()) { - Spacer(modifier = Modifier.size(8.dp)) - HAPlainButton( - text = stringResource(R.string.media_control_clear), - onClick = onClearAll, - modifier = Modifier.fillMaxWidth(), - ) - } - } } } @@ -187,6 +164,7 @@ private fun ReorderableCollectionItemScope.ConfiguredEntityRow( subtitle: String?, entityName: String?, onRemove: () -> Unit, + onReorderComplete: () -> Unit, isDragging: Boolean, ) { val colorScheme = LocalHAColorScheme.current @@ -199,7 +177,7 @@ private fun ReorderableCollectionItemScope.ConfiguredEntityRow( modifier = Modifier .fillMaxWidth() .heightIn(min = 56.dp) - .longPressDraggableHandle() + .longPressDraggableHandle(onDragStopped = { onReorderComplete() }) .padding(vertical = 4.dp), ) { Column(modifier = Modifier.weight(1f)) { @@ -244,8 +222,7 @@ private fun MediaControlSettingsContentEmptyPreview() { onEntitySelected = {}, onRemoveEntity = {}, onMove = { _, _ -> }, - onSave = {}, - onClearAll = {}, + onReorderComplete = {}, ) } } @@ -265,8 +242,7 @@ private fun MediaControlSettingsContentWithEntitiesPreview() { onEntitySelected = {}, onRemoveEntity = {}, onMove = { _, _ -> }, - onSave = {}, - onClearAll = {}, + onReorderComplete = {}, ) } } diff --git a/app/src/test/kotlin/io/homeassistant/companion/android/settings/mediacontrol/MediaControlSettingsViewModelTest.kt b/app/src/test/kotlin/io/homeassistant/companion/android/settings/mediacontrol/MediaControlSettingsViewModelTest.kt index d70cbd6952f..b7bb3c3d829 100644 --- a/app/src/test/kotlin/io/homeassistant/companion/android/settings/mediacontrol/MediaControlSettingsViewModelTest.kt +++ b/app/src/test/kotlin/io/homeassistant/companion/android/settings/mediacontrol/MediaControlSettingsViewModelTest.kt @@ -110,6 +110,25 @@ class MediaControlSettingsViewModelTest { assertEquals(1, viewModel.uiState.value.configuredEntities.size) } + @Test + fun `Given viewModel when addEntity called then repository updated and start event emitted`() = runTest(testDispatcher) { + viewModel = createViewModel() + advanceUntilIdle() + + viewModel.serviceEvents.test { + viewModel.addEntity("media_player.living_room") + advanceUntilIdle() + + coVerify { + mediaControlRepository.setConfiguredEntities( + match { it.size == 1 && it[0].entityId == "media_player.living_room" }, + ) + } + assertEquals(MediaControlServiceEvent.Start, awaitItem()) + cancelAndIgnoreRemainingEvents() + } + } + @Test fun `Given viewModel when selectServerId called then selectedServerId updated`() = runTest(testDispatcher) { viewModel = createViewModel() @@ -171,24 +190,46 @@ class MediaControlSettingsViewModelTest { assertEquals(1, viewModel.uiState.value.configuredEntities.size) assertEquals("media_player.radio", viewModel.uiState.value.configuredEntities.first().entityId) } - } - @Nested - inner class SaveConfigurationTest { + @Test + fun `Given one entity when removeEntity called then repository cleared and stop event emitted`() = runTest(testDispatcher) { + viewModel = createViewModel() + advanceUntilIdle() + viewModel.addEntity("media_player.tv") + + viewModel.serviceEvents.test { + // Drain the Start event from addEntity + advanceUntilIdle() + awaitItem() + + viewModel.removeEntity(0) + advanceUntilIdle() + + coVerify { mediaControlRepository.setConfiguredEntities(emptyList()) } + assertEquals(MediaControlServiceEvent.Stop, awaitItem()) + cancelAndIgnoreRemainingEvents() + } + } @Test - fun `Given entities added when saveConfiguration called then repository updated and start event emitted`() = runTest(testDispatcher) { + fun `Given two entities when removeEntity called then repository updated and start event emitted`() = runTest(testDispatcher) { viewModel = createViewModel() advanceUntilIdle() - viewModel.addEntity("media_player.living_room") + viewModel.addEntity("media_player.tv") + viewModel.addEntity("media_player.radio") viewModel.serviceEvents.test { - viewModel.saveConfiguration() + // Drain the Start events from addEntity calls + advanceUntilIdle() + awaitItem() + awaitItem() + + viewModel.removeEntity(0) advanceUntilIdle() coVerify { mediaControlRepository.setConfiguredEntities( - match { it.size == 1 && it[0].entityId == "media_player.living_room" }, + match { it.size == 1 && it[0].entityId == "media_player.radio" }, ) } assertEquals(MediaControlServiceEvent.Start, awaitItem()) @@ -198,22 +239,36 @@ class MediaControlSettingsViewModelTest { } @Nested - inner class ClearAllConfigurationTest { + inner class ReorderCompleteTest { @Test - fun `Given configured entities when clearAllConfiguration called then repository cleared and stop event emitted`() = runTest(testDispatcher) { - val entities = listOf(MediaControlEntityConfig(serverId = 1, entityId = "media_player.tv")) - coEvery { mediaControlRepository.getConfiguredEntities() } returns entities + fun `Given reordered entities when onReorderComplete called then repository updated and start event emitted`() = runTest(testDispatcher) { + val entityA = MediaControlEntityConfig(serverId = SERVER_ID_ACTIVE, entityId = "media_player.a") + val entityB = MediaControlEntityConfig(serverId = SERVER_ID_ACTIVE, entityId = "media_player.b") viewModel = createViewModel() advanceUntilIdle() + viewModel.addEntity(entityA.entityId) + viewModel.addEntity(entityB.entityId) + viewModel.onMove( + from = fakeLazyListItemInfo(key = entityA), + to = fakeLazyListItemInfo(key = entityB), + ) viewModel.serviceEvents.test { - viewModel.clearAllConfiguration() + // Drain Start events from addEntity calls advanceUntilIdle() + awaitItem() + awaitItem() - coVerify { mediaControlRepository.setConfiguredEntities(emptyList()) } - assertEquals(emptyList(), viewModel.uiState.value.configuredEntities) - assertEquals(MediaControlServiceEvent.Stop, awaitItem()) + viewModel.onReorderComplete() + advanceUntilIdle() + + coVerify { + mediaControlRepository.setConfiguredEntities( + match { it == listOf(entityB, entityA) }, + ) + } + assertEquals(MediaControlServiceEvent.Start, awaitItem()) cancelAndIgnoreRemainingEvents() } } From eea9e85147b33843c7a613a4f1ae9c815f26f147 Mon Sep 17 00:00:00 2001 From: Fletcher Dostie Date: Thu, 26 Mar 2026 21:14:16 -0700 Subject: [PATCH 017/114] Minor cleanup --- .../MediaControlRepositoryImpl.kt | 40 +++++++++---------- .../common/data/prefs/PrefsRepositoryImpl.kt | 4 +- .../android/database/DatabaseModule.kt | 2 +- .../MediaControlRepositoryImplTest.kt | 4 +- .../data/prefs/PrefsRepositoryImplTest.kt | 2 - 5 files changed, 23 insertions(+), 29 deletions(-) diff --git a/common/src/main/kotlin/io/homeassistant/companion/android/common/data/mediacontrol/MediaControlRepositoryImpl.kt b/common/src/main/kotlin/io/homeassistant/companion/android/common/data/mediacontrol/MediaControlRepositoryImpl.kt index 241ae63cb79..08a20df3e4d 100644 --- a/common/src/main/kotlin/io/homeassistant/companion/android/common/data/mediacontrol/MediaControlRepositoryImpl.kt +++ b/common/src/main/kotlin/io/homeassistant/companion/android/common/data/mediacontrol/MediaControlRepositoryImpl.kt @@ -34,17 +34,16 @@ internal class MediaControlRepositoryImpl @Inject constructor( private val serverManager: ServerManager, ) : MediaControlRepository { - override suspend fun getEntityState(config: MediaControlEntityConfig): MediaControlState? = - try { - serverManager.integrationRepository(config.serverId) - .getEntity(config.entityId) - ?.toMediaControlState(serverId = config.serverId) - } catch (e: CancellationException) { - throw e - } catch (e: Exception) { - Timber.e(e, "Failed to fetch entity state for ${config.entityId}") - null - } + override suspend fun getEntityState(config: MediaControlEntityConfig): MediaControlState? = try { + serverManager.integrationRepository(config.serverId) + .getEntity(config.entityId) + ?.toMediaControlState(serverId = config.serverId) + } catch (e: CancellationException) { + throw e + } catch (e: Exception) { + Timber.e(e, "Failed to fetch entity state for ${config.entityId}") + null + } override fun observeEntityState(config: MediaControlEntityConfig): Flow = flow { @@ -87,18 +86,17 @@ internal class MediaControlRepositoryImpl @Inject constructor( }.distinctUntilChanged() @OptIn(ExperimentalCoroutinesApi::class) - override fun observeMediaControlStates(): Flow> = - dao.getAllFlow() - .flatMapLatest { entities -> - if (entities.isEmpty()) { - flowOf(emptyList()) - } else { - combine(entities.map { observeEntityState(it.toEntityConfig()) }) { states -> - states.filterNotNull() - } + override fun observeMediaControlStates(): Flow> = dao.getAllFlow() + .flatMapLatest { entities -> + if (entities.isEmpty()) { + flowOf(emptyList()) + } else { + combine(entities.map { observeEntityState(it.toEntityConfig()) }) { states -> + states.filterNotNull() } } - .distinctUntilChanged() + } + .distinctUntilChanged() override suspend fun getConfiguredEntities(): List = dao.getAll().map { it.toEntityConfig() } diff --git a/common/src/main/kotlin/io/homeassistant/companion/android/common/data/prefs/PrefsRepositoryImpl.kt b/common/src/main/kotlin/io/homeassistant/companion/android/common/data/prefs/PrefsRepositoryImpl.kt index 62f94ccff1c..c70fd6abeed 100644 --- a/common/src/main/kotlin/io/homeassistant/companion/android/common/data/prefs/PrefsRepositoryImpl.kt +++ b/common/src/main/kotlin/io/homeassistant/companion/android/common/data/prefs/PrefsRepositoryImpl.kt @@ -88,7 +88,7 @@ private class LocalStorageWithMigration( localStorage.putBoolean(PREF_WEBVIEW_DEBUG_ENABLED, it) } - localStorage.putInt(MIGRATION_PREF, 1) + localStorage.putInt(MIGRATION_PREF, MIGRATION_VERSION) } migrationChecked.set(true) } @@ -356,7 +356,6 @@ internal class PrefsRepositoryImpl @Inject constructor( localStorage().remove(CONTROLS_PANEL_SERVER) setControlsPanelPath(null) } - } override suspend fun showPrivacyHint(): Boolean { @@ -382,5 +381,4 @@ internal class PrefsRepositoryImpl @Inject constructor( override suspend fun setSelectedWakeWord(wakeWord: String) { localStorage().putString(PREF_SELECTED_WAKE_WORD, wakeWord) } - } diff --git a/common/src/main/kotlin/io/homeassistant/companion/android/database/DatabaseModule.kt b/common/src/main/kotlin/io/homeassistant/companion/android/database/DatabaseModule.kt index db48ac2b225..2e0a1e977b7 100644 --- a/common/src/main/kotlin/io/homeassistant/companion/android/database/DatabaseModule.kt +++ b/common/src/main/kotlin/io/homeassistant/companion/android/database/DatabaseModule.kt @@ -8,8 +8,8 @@ import dagger.hilt.InstallIn import dagger.hilt.android.qualifiers.ApplicationContext import dagger.hilt.components.SingletonComponent import io.homeassistant.companion.android.database.authentication.AuthenticationDao -import io.homeassistant.companion.android.database.mediacontrol.MediaControlDao import io.homeassistant.companion.android.database.location.LocationHistoryDao +import io.homeassistant.companion.android.database.mediacontrol.MediaControlDao import io.homeassistant.companion.android.database.migration.migrationPath import io.homeassistant.companion.android.database.notification.NotificationDao import io.homeassistant.companion.android.database.qs.TileDao diff --git a/common/src/test/kotlin/io/homeassistant/companion/android/common/data/mediacontrol/MediaControlRepositoryImplTest.kt b/common/src/test/kotlin/io/homeassistant/companion/android/common/data/mediacontrol/MediaControlRepositoryImplTest.kt index 88e0e2ade56..a2f7ac054ab 100644 --- a/common/src/test/kotlin/io/homeassistant/companion/android/common/data/mediacontrol/MediaControlRepositoryImplTest.kt +++ b/common/src/test/kotlin/io/homeassistant/companion/android/common/data/mediacontrol/MediaControlRepositoryImplTest.kt @@ -3,11 +3,11 @@ package io.homeassistant.companion.android.common.data.mediacontrol import app.cash.turbine.test import io.homeassistant.companion.android.common.data.integration.EntityExt import io.homeassistant.companion.android.common.data.servers.ServerManager -import io.homeassistant.companion.android.database.mediacontrol.MediaControlConfig -import io.homeassistant.companion.android.database.mediacontrol.MediaControlDao import io.homeassistant.companion.android.common.data.websocket.WebSocketRepository import io.homeassistant.companion.android.common.data.websocket.impl.entities.CompressedEntityState import io.homeassistant.companion.android.common.data.websocket.impl.entities.CompressedStateChangedEvent +import io.homeassistant.companion.android.database.mediacontrol.MediaControlConfig +import io.homeassistant.companion.android.database.mediacontrol.MediaControlDao import io.homeassistant.companion.android.testing.unit.ConsoleLogExtension import io.mockk.coEvery import io.mockk.coVerify diff --git a/common/src/test/kotlin/io/homeassistant/companion/android/common/data/prefs/PrefsRepositoryImplTest.kt b/common/src/test/kotlin/io/homeassistant/companion/android/common/data/prefs/PrefsRepositoryImplTest.kt index 69a6bd84cf8..43085f10b5b 100644 --- a/common/src/test/kotlin/io/homeassistant/companion/android/common/data/prefs/PrefsRepositoryImplTest.kt +++ b/common/src/test/kotlin/io/homeassistant/companion/android/common/data/prefs/PrefsRepositoryImplTest.kt @@ -9,7 +9,6 @@ import io.mockk.mockk import kotlinx.coroutines.test.runTest import org.junit.jupiter.api.Assertions.assertEquals import org.junit.jupiter.api.BeforeEach -import org.junit.jupiter.api.Nested import org.junit.jupiter.api.Test import org.junit.jupiter.params.ParameterizedTest import org.junit.jupiter.params.provider.CsvSource @@ -119,5 +118,4 @@ class PrefsRepositoryImplTest { // Verify no integration storage was accessed since no migration was needed coVerify(exactly = 0) { integrationStorage.getString(any()) } } - } From cf2db984506ef148601faa2298811ef11076fc00 Mon Sep 17 00:00:00 2001 From: Fletcher Dostie Date: Fri, 27 Mar 2026 00:28:37 -0700 Subject: [PATCH 018/114] Fix multi-entity session routing; add @AssistedInject and unit tests Bug fixes: - onGetSession returns null so Media3 routes controllers by session ID instead of always returning the first active session - resolveArtworkUrl catches all exceptions, not just IllegalStateException - Use itemsIndexed in settings view so divider and remove use the stable index directly, fixing potential flicker during drag-to-reorder - Use Entity.friendlyName extension instead of raw attribute map lookup Refactoring: - HaMediaSession uses @AssistedInject/@AssistedFactory; service injects HaMediaSession.Factory instead of constructing sessions manually - MediaControlSettingsViewModel extends ViewModel (Application was unused) - reconcileSessions() and activeSessions made internal for testability - observeMediaControlStates() added to MediaControlRepository interface and implemented in MediaControlRepositoryImpl Tests added: - HaMediaSessionTest: state mapping, connecting state on flow completion, null/cleared artwork, command dispatch, release cancels observation - HaMediaSessionServiceTest: session add/remove/deduplication, stopSelf - HaRemoteMediaPlayerTest: setConnecting buffering state, empty commands, retained metadata - MediaControlSettingsViewModelTest: non-default server selection preserved when adding an entity --- .../android/mediacontrol/HaMediaSession.kt | 25 +- .../mediacontrol/HaMediaSessionService.kt | 14 +- .../MediaControlSettingsViewModel.kt | 6 +- .../views/MediaControlSettingsView.kt | 14 +- .../mediacontrol/HaMediaSessionServiceTest.kt | 144 ++++++++ .../mediacontrol/HaMediaSessionTest.kt | 347 ++++++++++++++++++ .../mediacontrol/HaRemoteMediaPlayerTest.kt | 59 +++ .../MediaControlSettingsViewModelTest.kt | 16 +- .../mediacontrol/MediaControlRepository.kt | 7 - .../MediaControlRepositoryImpl.kt | 17 - .../MediaControlRepositoryImplTest.kt | 52 --- 11 files changed, 598 insertions(+), 103 deletions(-) create mode 100644 app/src/test/kotlin/io/homeassistant/companion/android/mediacontrol/HaMediaSessionServiceTest.kt create mode 100644 app/src/test/kotlin/io/homeassistant/companion/android/mediacontrol/HaMediaSessionTest.kt diff --git a/app/src/main/kotlin/io/homeassistant/companion/android/mediacontrol/HaMediaSession.kt b/app/src/main/kotlin/io/homeassistant/companion/android/mediacontrol/HaMediaSession.kt index 16d556c7e1e..f61b1dad2d7 100644 --- a/app/src/main/kotlin/io/homeassistant/companion/android/mediacontrol/HaMediaSession.kt +++ b/app/src/main/kotlin/io/homeassistant/companion/android/mediacontrol/HaMediaSession.kt @@ -10,6 +10,9 @@ import coil3.imageLoader import coil3.request.ImageRequest import coil3.request.allowHardware import coil3.toBitmap +import dagger.assisted.Assisted +import dagger.assisted.AssistedFactory +import dagger.assisted.AssistedInject import io.homeassistant.companion.android.common.data.integration.IntegrationDomains.MEDIA_PLAYER_DOMAIN import io.homeassistant.companion.android.common.data.mediacontrol.MediaControlEntityConfig import io.homeassistant.companion.android.common.data.mediacontrol.MediaControlRepository @@ -46,9 +49,9 @@ import timber.log.Timber * @param mediaControlRepository Provides the per-entity state flow. * @param serverManager Used to resolve artwork base URLs and call HA integration actions. */ -class HaMediaSession( - private val context: Context, - private val config: MediaControlEntityConfig, +class HaMediaSession @AssistedInject constructor( + @Assisted private val context: Context, + @Assisted private val config: MediaControlEntityConfig, private val mediaControlRepository: MediaControlRepository, private val serverManager: ServerManager, ) { @@ -58,6 +61,9 @@ class HaMediaSession( private val player: HaRemoteMediaPlayer private var observationJob: Job? = null + // Accessed only from loadArtworkAndUpdatePlayer, which is always called sequentially + // within a single observationJob on the Default dispatcher. The observationJob is + // cancelled before a new one starts, so there is no concurrent write risk. private var currentArtworkUrl: String? = null private var currentArtworkBytes: ByteArray? = null @@ -173,6 +179,9 @@ class HaMediaSession( } bytes ?: currentArtworkBytes } else if (artworkUrl == null) { + // The HA server temporarily removes entity_picture during track transitions + // before sending the new URL. Keep the previous artwork visible to avoid a + // blank flash; clearing currentArtworkUrl ensures the next URL triggers a fetch. currentArtworkUrl = null currentArtworkBytes } else { @@ -194,8 +203,8 @@ class HaMediaSession( .firstUrlOrNull() } catch (e: CancellationException) { throw e - } catch (e: IllegalStateException) { - Timber.e(e, "Server does not exist for artwork URL resolution") + } catch (e: Exception) { + Timber.e(e, "Failed to resolve artwork URL for server ${state.serverId}") null } ?: return null @@ -258,4 +267,10 @@ class HaMediaSession( const val ACTION_VOLUME_UP = "volume_up" const val ACTION_VOLUME_DOWN = "volume_down" } + + /** Creates [HaMediaSession] instances with runtime-provided [context] and [config]. */ + @AssistedFactory + interface Factory { + fun create(context: Context, config: MediaControlEntityConfig): HaMediaSession + } } diff --git a/app/src/main/kotlin/io/homeassistant/companion/android/mediacontrol/HaMediaSessionService.kt b/app/src/main/kotlin/io/homeassistant/companion/android/mediacontrol/HaMediaSessionService.kt index bf16d1fd6aa..4584c65853f 100644 --- a/app/src/main/kotlin/io/homeassistant/companion/android/mediacontrol/HaMediaSessionService.kt +++ b/app/src/main/kotlin/io/homeassistant/companion/android/mediacontrol/HaMediaSessionService.kt @@ -7,7 +7,6 @@ import androidx.media3.session.MediaSessionService import dagger.hilt.android.AndroidEntryPoint import io.homeassistant.companion.android.common.data.mediacontrol.MediaControlEntityConfig import io.homeassistant.companion.android.common.data.mediacontrol.MediaControlRepository -import io.homeassistant.companion.android.common.data.servers.ServerManager import javax.inject.Inject import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.Dispatchers @@ -31,10 +30,10 @@ class HaMediaSessionService : MediaSessionService() { lateinit var mediaControlRepository: MediaControlRepository @Inject - lateinit var serverManager: ServerManager + lateinit var haMediaSessionFactory: HaMediaSession.Factory // Keyed by "$serverId:$entityId" - private val activeSessions = mutableMapOf() + internal val activeSessions = mutableMapOf() private val serviceScope = CoroutineScope(SupervisorJob() + Dispatchers.Main) override fun onCreate() { @@ -52,8 +51,7 @@ class HaMediaSessionService : MediaSessionService() { return result } - override fun onGetSession(controllerInfo: MediaSession.ControllerInfo): MediaSession? = - activeSessions.values.firstOrNull()?.mediaSession + override fun onGetSession(controllerInfo: MediaSession.ControllerInfo): MediaSession? = null override fun onTaskRemoved(rootIntent: Intent?) { val anyPlaying = activeSessions.values.any { session -> @@ -70,7 +68,7 @@ class HaMediaSessionService : MediaSessionService() { super.onDestroy() } - private fun reconcileSessions() { + internal fun reconcileSessions() { serviceScope.launch { val configuredEntities = mediaControlRepository.getConfiguredEntities() if (configuredEntities.isEmpty()) { @@ -93,11 +91,9 @@ class HaMediaSessionService : MediaSessionService() { // Add sessions for newly configured entities (desiredKeys - currentKeys).forEach { key -> val entityConfig = configuredEntities.first { it.sessionKey() == key } - val session = HaMediaSession( + val session = haMediaSessionFactory.create( context = this@HaMediaSessionService, config = entityConfig, - mediaControlRepository = mediaControlRepository, - serverManager = serverManager, ) addSession(session.mediaSession) session.startObservingState() diff --git a/app/src/main/kotlin/io/homeassistant/companion/android/settings/mediacontrol/MediaControlSettingsViewModel.kt b/app/src/main/kotlin/io/homeassistant/companion/android/settings/mediacontrol/MediaControlSettingsViewModel.kt index cbca39e5bb6..cac8978cb05 100644 --- a/app/src/main/kotlin/io/homeassistant/companion/android/settings/mediacontrol/MediaControlSettingsViewModel.kt +++ b/app/src/main/kotlin/io/homeassistant/companion/android/settings/mediacontrol/MediaControlSettingsViewModel.kt @@ -1,9 +1,8 @@ package io.homeassistant.companion.android.settings.mediacontrol -import android.app.Application import androidx.compose.foundation.lazy.LazyListItemInfo import androidx.compose.runtime.Stable -import androidx.lifecycle.AndroidViewModel +import androidx.lifecycle.ViewModel import androidx.lifecycle.viewModelScope import dagger.hilt.android.lifecycle.HiltViewModel import io.homeassistant.companion.android.common.data.integration.Entity @@ -54,8 +53,7 @@ data class MediaControlSettingsUiState( class MediaControlSettingsViewModel @Inject constructor( private val serverManager: ServerManager, private val mediaControlRepository: MediaControlRepository, - application: Application, -) : AndroidViewModel(application) { +) : ViewModel() { private val _uiState = MutableStateFlow(MediaControlSettingsUiState()) val uiState: StateFlow = _uiState.asStateFlow() diff --git a/app/src/main/kotlin/io/homeassistant/companion/android/settings/mediacontrol/views/MediaControlSettingsView.kt b/app/src/main/kotlin/io/homeassistant/companion/android/settings/mediacontrol/views/MediaControlSettingsView.kt index 4a0182230e3..b6b98de168c 100644 --- a/app/src/main/kotlin/io/homeassistant/companion/android/settings/mediacontrol/views/MediaControlSettingsView.kt +++ b/app/src/main/kotlin/io/homeassistant/companion/android/settings/mediacontrol/views/MediaControlSettingsView.kt @@ -12,6 +12,7 @@ import androidx.compose.foundation.layout.size import androidx.compose.foundation.lazy.LazyColumn import androidx.compose.foundation.lazy.LazyListItemInfo import androidx.compose.foundation.lazy.items +import androidx.compose.foundation.lazy.itemsIndexed import androidx.compose.foundation.lazy.rememberLazyListState import androidx.compose.material.icons.Icons import androidx.compose.material.icons.filled.Clear @@ -36,6 +37,7 @@ import io.homeassistant.companion.android.common.compose.theme.HATextStyle import io.homeassistant.companion.android.common.compose.theme.HATheme import io.homeassistant.companion.android.common.compose.theme.HAThemeForPreview import io.homeassistant.companion.android.common.compose.theme.LocalHAColorScheme +import io.homeassistant.companion.android.common.data.integration.friendlyName import io.homeassistant.companion.android.common.data.mediacontrol.MediaControlEntityConfig import io.homeassistant.companion.android.settings.mediacontrol.MediaControlSettingsUiState import io.homeassistant.companion.android.settings.mediacontrol.MediaControlSettingsViewModel @@ -131,10 +133,10 @@ internal fun MediaControlSettingsContent( } } - items( + itemsIndexed( items = uiState.configuredEntities, - key = { "${it.serverId}_${it.entityId}" }, - ) { config -> + key = { _, config -> "${config.serverId}_${config.entityId}" }, + ) { index, config -> ReorderableItem(state = reorderState, key = "${config.serverId}_${config.entityId}") { isDragging -> ConfiguredEntityRow( config = config, @@ -145,12 +147,12 @@ internal fun MediaControlSettingsContent( }, entityName = uiState.entitiesPerServer[config.serverId] ?.firstOrNull { it.entityId == config.entityId } - ?.attributes?.get("friendly_name") as? String, - onRemove = { onRemoveEntity(uiState.configuredEntities.indexOf(config)) }, + ?.friendlyName, + onRemove = { onRemoveEntity(index) }, onReorderComplete = onReorderComplete, isDragging = isDragging, ) - if (config != uiState.configuredEntities.last()) { + if (index < uiState.configuredEntities.lastIndex) { HorizontalDivider() } } diff --git a/app/src/test/kotlin/io/homeassistant/companion/android/mediacontrol/HaMediaSessionServiceTest.kt b/app/src/test/kotlin/io/homeassistant/companion/android/mediacontrol/HaMediaSessionServiceTest.kt new file mode 100644 index 00000000000..8f34680ea91 --- /dev/null +++ b/app/src/test/kotlin/io/homeassistant/companion/android/mediacontrol/HaMediaSessionServiceTest.kt @@ -0,0 +1,144 @@ +package io.homeassistant.companion.android.mediacontrol + +import android.content.Context +import io.homeassistant.companion.android.common.data.mediacontrol.MediaControlEntityConfig +import io.homeassistant.companion.android.common.data.mediacontrol.MediaControlRepository +import io.homeassistant.companion.android.common.data.servers.ServerManager +import io.homeassistant.companion.android.testing.unit.ConsoleLogRule +import io.homeassistant.companion.android.testing.unit.MainDispatcherJUnit4Rule +import io.mockk.coEvery +import io.mockk.every +import io.mockk.mockk +import io.mockk.unmockkAll +import kotlinx.coroutines.ExperimentalCoroutinesApi +import kotlinx.coroutines.flow.flowOf +import kotlinx.coroutines.test.advanceUntilIdle +import kotlinx.coroutines.test.runTest +import org.junit.After +import org.junit.Assert.assertEquals +import org.junit.Assert.assertTrue +import org.junit.Before +import org.junit.Rule +import org.junit.Test +import org.junit.runner.RunWith +import org.robolectric.Robolectric +import org.robolectric.RobolectricTestRunner +import org.robolectric.Shadows +import org.robolectric.annotation.Config + +/** + * Tests for [HaMediaSessionService] session reconciliation logic. + * + * Dependencies are injected directly into the service's lateinit fields, bypassing Hilt. + * Reconciliation results are asserted via [HaMediaSessionService.activeSessions], which is + * the service's source of truth for which sessions are currently active. + */ +@OptIn(ExperimentalCoroutinesApi::class) +@RunWith(RobolectricTestRunner::class) +@Config(application = dagger.hilt.android.testing.HiltTestApplication::class) +class HaMediaSessionServiceTest { + + @get:Rule(order = 0) + val consoleLogRule = ConsoleLogRule() + + @get:Rule(order = 1) + val mainDispatcherRule = MainDispatcherJUnit4Rule() + + private val mediaControlRepository: MediaControlRepository = mockk(relaxed = true) + private val serverManager: ServerManager = mockk(relaxed = true) + private val haMediaSessionFactory: HaMediaSession.Factory = mockk() + + private lateinit var service: HaMediaSessionService + + @Before + fun setUp() { + coEvery { mediaControlRepository.observeEntityState(any()) } returns flowOf(null) + coEvery { mediaControlRepository.getEntityState(any()) } returns null + every { haMediaSessionFactory.create(any(), any()) } answers { + HaMediaSession( + context = firstArg(), + config = secondArg(), + mediaControlRepository = mediaControlRepository, + serverManager = serverManager, + ) + } + + service = Robolectric.buildService(HaMediaSessionService::class.java).get() + service.mediaControlRepository = mediaControlRepository + service.haMediaSessionFactory = haMediaSessionFactory + } + + @After + fun tearDown() { + service.activeSessions.values.forEach { it.release() } + unmockkAll() + } + + @Test + fun `Given new entity in config when reconcileSessions then session is added`() = runTest(mainDispatcherRule.testDispatcher) { + val config = MediaControlEntityConfig(serverId = 1, entityId = "media_player.living_room") + coEvery { mediaControlRepository.getConfiguredEntities() } returns listOf(config) + + service.reconcileSessions() + advanceUntilIdle() + + assertEquals(1, service.activeSessions.size) + assertTrue(service.activeSessions.containsKey("1:media_player.living_room")) + } + + @Test + fun `Given two entities in config when reconcileSessions then sessions added for each`() = runTest(mainDispatcherRule.testDispatcher) { + val configA = MediaControlEntityConfig(serverId = 1, entityId = "media_player.living_room") + val configB = MediaControlEntityConfig(serverId = 1, entityId = "media_player.bedroom") + coEvery { mediaControlRepository.getConfiguredEntities() } returns listOf(configA, configB) + + service.reconcileSessions() + advanceUntilIdle() + + assertEquals(2, service.activeSessions.size) + assertTrue(service.activeSessions.containsKey("1:media_player.living_room")) + assertTrue(service.activeSessions.containsKey("1:media_player.bedroom")) + } + + @Test + fun `Given active session when entity removed from config then session is removed`() = runTest(mainDispatcherRule.testDispatcher) { + val configA = MediaControlEntityConfig(serverId = 1, entityId = "media_player.living_room") + val configB = MediaControlEntityConfig(serverId = 1, entityId = "media_player.bedroom") + coEvery { mediaControlRepository.getConfiguredEntities() } returns listOf(configA, configB) + service.reconcileSessions() + advanceUntilIdle() + + coEvery { mediaControlRepository.getConfiguredEntities() } returns listOf(configB) + service.reconcileSessions() + advanceUntilIdle() + + assertEquals(1, service.activeSessions.size) + assertTrue(service.activeSessions.containsKey("1:media_player.bedroom")) + } + + @Test + fun `Given existing session when entity remains in config then session is not recreated`() = runTest(mainDispatcherRule.testDispatcher) { + val config = MediaControlEntityConfig(serverId = 1, entityId = "media_player.living_room") + coEvery { mediaControlRepository.getConfiguredEntities() } returns listOf(config) + service.reconcileSessions() + advanceUntilIdle() + + val sessionBefore = service.activeSessions["1:media_player.living_room"] + + service.reconcileSessions() + advanceUntilIdle() + + assertEquals(1, service.activeSessions.size) + assertTrue(service.activeSessions["1:media_player.living_room"] === sessionBefore) + } + + @Test + fun `Given empty config when reconcileSessions then service stops itself`() = runTest(mainDispatcherRule.testDispatcher) { + coEvery { mediaControlRepository.getConfiguredEntities() } returns emptyList() + + service.reconcileSessions() + advanceUntilIdle() + + assertTrue(Shadows.shadowOf(service).isStoppedBySelf) + } +} diff --git a/app/src/test/kotlin/io/homeassistant/companion/android/mediacontrol/HaMediaSessionTest.kt b/app/src/test/kotlin/io/homeassistant/companion/android/mediacontrol/HaMediaSessionTest.kt new file mode 100644 index 00000000000..d94d558af28 --- /dev/null +++ b/app/src/test/kotlin/io/homeassistant/companion/android/mediacontrol/HaMediaSessionTest.kt @@ -0,0 +1,347 @@ +package io.homeassistant.companion.android.mediacontrol + +import android.os.Looper +import androidx.media3.common.Player +import androidx.test.core.app.ApplicationProvider +import io.homeassistant.companion.android.common.data.integration.IntegrationDomains.MEDIA_PLAYER_DOMAIN +import io.homeassistant.companion.android.common.data.integration.IntegrationRepository +import io.homeassistant.companion.android.common.data.mediacontrol.MediaControlEntityConfig +import io.homeassistant.companion.android.common.data.mediacontrol.MediaControlRepository +import io.homeassistant.companion.android.common.data.mediacontrol.MediaControlState +import io.homeassistant.companion.android.common.data.mediacontrol.MediaPlaybackState +import io.homeassistant.companion.android.common.data.servers.ServerManager +import io.mockk.coEvery +import io.mockk.coVerify +import io.mockk.mockk +import io.mockk.slot +import java.util.concurrent.atomic.AtomicInteger +import kotlinx.coroutines.CoroutineScope +import kotlinx.coroutines.isActive +import kotlinx.coroutines.flow.MutableSharedFlow +import kotlinx.coroutines.flow.emptyFlow +import kotlinx.coroutines.flow.flowOf +import org.junit.Assert.assertEquals +import org.junit.Assert.assertNull +import org.junit.Before +import org.junit.Test +import org.junit.runner.RunWith +import org.robolectric.RobolectricTestRunner +import org.robolectric.Shadows.shadowOf +import org.robolectric.annotation.Config + +private const val SERVER_ID = 1 + +/** Counter used to generate unique MediaSession IDs across tests within the same JVM process. */ +private val sessionCounter = AtomicInteger(0) + +@RunWith(RobolectricTestRunner::class) +@Config(application = dagger.hilt.android.testing.HiltTestApplication::class) +class HaMediaSessionTest { + + private lateinit var mediaControlRepository: MediaControlRepository + private lateinit var serverManager: ServerManager + private lateinit var integrationRepository: IntegrationRepository + private lateinit var config: MediaControlEntityConfig + + @Before + fun setUp() { + mediaControlRepository = mockk() + serverManager = mockk() + integrationRepository = mockk(relaxed = true) + + val uniqueEntityId = "media_player.test_${sessionCounter.incrementAndGet()}" + config = MediaControlEntityConfig(serverId = SERVER_ID, entityId = uniqueEntityId) + + coEvery { mediaControlRepository.getEntityState(config) } returns null + coEvery { mediaControlRepository.observeEntityState(config) } returns flowOf() + coEvery { serverManager.integrationRepository(SERVER_ID) } returns integrationRepository + } + + private fun createState( + playbackState: MediaPlaybackState = MediaPlaybackState.Playing, + title: String? = "Test Title", + entityPictureUrl: String? = null, + ) = MediaControlState( + entityId = config.entityId, + serverId = SERVER_ID, + playbackState = playbackState, + title = title, + artist = null, + albumName = null, + entityPictureUrl = entityPictureUrl, + mediaDurationSeconds = 300.0, + mediaPositionSeconds = 60.0, + supportsPause = true, + supportsPlay = true, + supportsSeek = false, + supportsPreviousTrack = false, + supportsNextTrack = false, + supportsVolumeSet = false, + volumeLevel = null, + isVolumeMuted = false, + entityFriendlyName = null, + ) + + private fun buildSession(): HaMediaSession = + HaMediaSession( + context = ApplicationProvider.getApplicationContext(), + config = config, + mediaControlRepository = mediaControlRepository, + serverManager = serverManager, + ) + + /** + * Waits for `HaMediaSession`'s internal `Dispatchers.Default` coroutines to settle, + * then drains the Robolectric main looper so that `player.updateState` calls take effect. + * + * `HaMediaSession` uses its own `CoroutineScope(SupervisorJob() + Dispatchers.Default)`, + * which is not controlled by `runTest`'s fake scheduler. A short real-time wait is required + * before draining the main looper. + */ + private fun drainDefaultDispatcherAndMainLooper() { + Thread.sleep(REAL_DISPATCHER_SETTLE_MS) + shadowOf(Looper.getMainLooper()).idle() + } + + // -- State observation tests -- + + /** + * Verifies that when `observeEntityState` emits a playing state, the player transitions + * to STATE_READY with `playWhenReady = true`. + * + * Uses `replay=1` so the emission is cached and replayed to the collector on + * `Dispatchers.Default` regardless of when it subscribes. The flow stays open so the + * observation loop does not immediately call `setConnecting()` and overwrite the READY state. + */ + @Test + fun `Given observeEntityState emits playing state when startObservingState then player is ready and playing`() { + val stateFlow = MutableSharedFlow(replay = 1) + stateFlow.tryEmit(createState(playbackState = MediaPlaybackState.Playing)) + coEvery { mediaControlRepository.observeEntityState(config) } returns stateFlow + + val session = buildSession() + session.startObservingState() + drainDefaultDispatcherAndMainLooper() + + val player = session.mediaSession.player + assertEquals(Player.STATE_READY, player.playbackState) + assertEquals(true, player.playWhenReady) + + session.release() + } + + /** + * Verifies that when `observeEntityState` emits a paused state, the player transitions + * to STATE_READY with `playWhenReady = false`. + * + * Uses `replay=1` so the emission is cached and replayed to the late collector. + */ + @Test + fun `Given observeEntityState emits paused state when startObservingState then player is ready and not playing`() { + val stateFlow = MutableSharedFlow(replay = 1) + stateFlow.tryEmit(createState(playbackState = MediaPlaybackState.Paused)) + coEvery { mediaControlRepository.observeEntityState(config) } returns stateFlow + + val session = buildSession() + session.startObservingState() + drainDefaultDispatcherAndMainLooper() + + val player = session.mediaSession.player + assertEquals(Player.STATE_READY, player.playbackState) + assertEquals(false, player.playWhenReady) + + session.release() + } + + /** + * Verifies that when `observeEntityState` flow completes (entity disconnects), the player + * enters STATE_BUFFERING (the "connecting" state) and exposes an empty command set so + * that the notification remains visible but controls are disabled. + * + * Both flows complete immediately so the observation loop calls `setConnecting()` right after + * the first iteration without needing the retry delay. Two settle cycles are used: the first + * allows the playing-state update to reach the Main looper, and the second allows the + * `setConnecting()` call (which follows on the Default dispatcher) to reach the Main looper. + */ + @Test + fun `Given observeEntityState flow completes when startObservingState then player enters connecting state`() { + coEvery { mediaControlRepository.observeEntityState(config) } returns flowOf( + createState(playbackState = MediaPlaybackState.Playing), + ) andThen emptyFlow() + + val session = buildSession() + session.startObservingState() + drainDefaultDispatcherAndMainLooper() + drainDefaultDispatcherAndMainLooper() + + val player = session.mediaSession.player + assertEquals(Player.STATE_BUFFERING, player.playbackState) + assertEquals(Player.Commands.EMPTY, player.availableCommands) + + session.release() + } + + // -- Artwork caching tests -- + + /** + * Verifies that when the emitted state has a null artwork URL, the player's media metadata + * contains no artwork bytes. + * + * Uses `replay=1` so the emission is available when the Default dispatcher starts collecting. + */ + @Test + fun `Given state with null artwork URL when startObservingState then player artwork is null`() { + val stateFlow = MutableSharedFlow(replay = 1) + stateFlow.tryEmit(createState(entityPictureUrl = null)) + coEvery { mediaControlRepository.observeEntityState(config) } returns stateFlow + + val session = buildSession() + session.startObservingState() + drainDefaultDispatcherAndMainLooper() + + val player = session.mediaSession.player + assertNull(player.mediaMetadata.artworkData) + + session.release() + } + + /** + * Verifies that when a second state emission has a null artwork URL, old artwork is not + * retained — the player's metadata artwork is null and the second state's title is applied. + * + * This exercises the branch in `loadArtworkAndUpdatePlayer` where the URL is null: + * `currentArtworkUrl` is cleared and `currentArtworkBytes` is passed through (which is + * null here because no real image was ever loaded in this test). + * + * Uses `replay=1` for reliable delivery to the late-starting Default dispatcher collector. + * The second emission is made after the first is confirmed to be processed. + */ + @Test + fun `Given two consecutive states where second has null artwork URL when startObservingState then artwork is null`() { + val stateFlow = MutableSharedFlow(replay = 1) + stateFlow.tryEmit(createState(entityPictureUrl = null, title = "Track 1")) + coEvery { mediaControlRepository.observeEntityState(config) } returns stateFlow + + val session = buildSession() + session.startObservingState() + drainDefaultDispatcherAndMainLooper() + + stateFlow.tryEmit(createState(entityPictureUrl = null, title = "Track 2")) + drainDefaultDispatcherAndMainLooper() + + val player = session.mediaSession.player + assertNull(player.mediaMetadata.artworkData) + assertEquals("Track 2", player.mediaMetadata.title?.toString()) + + session.release() + } + + // -- callMediaAction tests -- + + /** + * Verifies that triggering play on the media session player causes `callMediaAction` to + * dispatch a `media_play` action to the integration repository for the configured entity. + * + * Uses `replay=1` so the paused state is reliably received by the Default dispatcher + * collector before `player.play()` is invoked. `callMediaAction` also runs on the Default + * dispatcher, so a real-time wait is required after triggering the player command. + */ + @Test + fun `Given paused player when play requested then media_play action is called`() { + val stateFlow = MutableSharedFlow(replay = 1) + stateFlow.tryEmit(createState(playbackState = MediaPlaybackState.Paused)) + coEvery { mediaControlRepository.observeEntityState(config) } returns stateFlow + + val session = buildSession() + session.startObservingState() + drainDefaultDispatcherAndMainLooper() + + session.mediaSession.player.play() + shadowOf(Looper.getMainLooper()).idle() + Thread.sleep(REAL_DISPATCHER_SETTLE_MS) + + val capturedDomain = slot() + val capturedAction = slot() + coVerify { + integrationRepository.callAction( + domain = capture(capturedDomain), + action = capture(capturedAction), + actionData = any(), + ) + } + assertEquals(MEDIA_PLAYER_DOMAIN, capturedDomain.captured) + assertEquals("media_play", capturedAction.captured) + + session.release() + } + + /** + * Verifies that triggering pause dispatches a `media_pause` action to the integration + * repository. + * + * Uses `replay=1` so the playing state is reliably received before `player.pause()` is called. + */ + @Test + fun `Given playing player when pause requested then media_pause action is called`() { + val stateFlow = MutableSharedFlow(replay = 1) + stateFlow.tryEmit(createState(playbackState = MediaPlaybackState.Playing)) + coEvery { mediaControlRepository.observeEntityState(config) } returns stateFlow + + val session = buildSession() + session.startObservingState() + drainDefaultDispatcherAndMainLooper() + + session.mediaSession.player.pause() + shadowOf(Looper.getMainLooper()).idle() + Thread.sleep(REAL_DISPATCHER_SETTLE_MS) + + val capturedAction = slot() + coVerify { + integrationRepository.callAction( + domain = any(), + action = capture(capturedAction), + actionData = any(), + ) + } + assertEquals("media_pause", capturedAction.captured) + + session.release() + } + + /** + * Verifies that calling `release()` cancels the internal coroutine scope, preventing + * any further observation or action dispatch. + * + * The scope is read via reflection because it is private — this is the only way to assert + * on cancellation without adding test-only surface to the production class. + */ + @Test + fun `Given observing session when release called then internal scope is cancelled`() { + val stateFlow = MutableSharedFlow(replay = 1) + stateFlow.tryEmit(createState(playbackState = MediaPlaybackState.Playing)) + coEvery { mediaControlRepository.observeEntityState(config) } returns stateFlow + + val session = buildSession() + session.startObservingState() + drainDefaultDispatcherAndMainLooper() + + val scopeField = HaMediaSession::class.java.getDeclaredField("scope") + scopeField.isAccessible = true + val scope = scopeField.get(session) as CoroutineScope + + session.release() + + org.junit.Assert.assertFalse(scope.isActive) + } + + private companion object { + /** + * Milliseconds to allow `HaMediaSession`'s `Dispatchers.Default` coroutines to + * complete before inspecting state or verifying mock calls. + * + * `HaMediaSession` uses a real `Dispatchers.Default` scope that is not controlled by + * the test. 1 second is used to provide a stable budget on slower CI machines. + */ + const val REAL_DISPATCHER_SETTLE_MS = 1000L + } +} diff --git a/app/src/test/kotlin/io/homeassistant/companion/android/mediacontrol/HaRemoteMediaPlayerTest.kt b/app/src/test/kotlin/io/homeassistant/companion/android/mediacontrol/HaRemoteMediaPlayerTest.kt index 85ab5ea20ac..10b475caa82 100644 --- a/app/src/test/kotlin/io/homeassistant/companion/android/mediacontrol/HaRemoteMediaPlayerTest.kt +++ b/app/src/test/kotlin/io/homeassistant/companion/android/mediacontrol/HaRemoteMediaPlayerTest.kt @@ -339,4 +339,63 @@ class HaRemoteMediaPlayerTest { verify { commandCallback.onDecreaseVolumeRequested() } } + + // -- setConnecting tests -- + + @Test + fun `Given prior state when setConnecting then playback state is buffering`() { + player.updateState(state = createState(playbackState = MediaPlaybackState.Playing), artworkPngBytes = null) + shadowOf(Looper.getMainLooper()).idle() + + player.setConnecting() + shadowOf(Looper.getMainLooper()).idle() + + assertEquals(Player.STATE_BUFFERING, player.playbackState) + } + + @Test + fun `Given prior state when setConnecting then all media commands are disabled`() { + player.updateState( + state = createState( + supportsPlay = true, + supportsPause = true, + supportsSeek = true, + supportsPreviousTrack = true, + supportsNextTrack = true, + supportsVolumeSet = true, + volumeLevel = 0.5f, + ), + artworkPngBytes = null, + ) + shadowOf(Looper.getMainLooper()).idle() + + player.setConnecting() + shadowOf(Looper.getMainLooper()).idle() + + assertFalse(player.availableCommands.contains(Player.COMMAND_PLAY_PAUSE)) + assertFalse(player.availableCommands.contains(Player.COMMAND_SEEK_IN_CURRENT_MEDIA_ITEM)) + assertFalse(player.availableCommands.contains(Player.COMMAND_SEEK_TO_NEXT)) + assertFalse(player.availableCommands.contains(Player.COMMAND_SEEK_TO_PREVIOUS)) + @Suppress("DEPRECATION") + assertFalse(player.availableCommands.contains(Player.COMMAND_SET_DEVICE_VOLUME)) + @Suppress("DEPRECATION") + assertFalse(player.availableCommands.contains(Player.COMMAND_ADJUST_DEVICE_VOLUME)) + } + + @Test + fun `Given prior metadata when setConnecting then metadata is retained in player state`() { + player.updateState( + state = createState(title = "Retained Title", artist = "Retained Artist", albumName = "Retained Album"), + artworkPngBytes = null, + ) + shadowOf(Looper.getMainLooper()).idle() + + player.setConnecting() + shadowOf(Looper.getMainLooper()).idle() + + val metadata = player.mediaMetadata + assertEquals("Retained Title", metadata.title?.toString()) + assertEquals("Retained Artist", metadata.artist?.toString()) + assertEquals("Retained Album", metadata.albumTitle?.toString()) + } } diff --git a/app/src/test/kotlin/io/homeassistant/companion/android/settings/mediacontrol/MediaControlSettingsViewModelTest.kt b/app/src/test/kotlin/io/homeassistant/companion/android/settings/mediacontrol/MediaControlSettingsViewModelTest.kt index b7bb3c3d829..7c10b14bfb9 100644 --- a/app/src/test/kotlin/io/homeassistant/companion/android/settings/mediacontrol/MediaControlSettingsViewModelTest.kt +++ b/app/src/test/kotlin/io/homeassistant/companion/android/settings/mediacontrol/MediaControlSettingsViewModelTest.kt @@ -1,6 +1,5 @@ package io.homeassistant.companion.android.settings.mediacontrol -import android.app.Application import androidx.compose.foundation.lazy.LazyListItemInfo import app.cash.turbine.test import io.homeassistant.companion.android.common.data.mediacontrol.MediaControlEntityConfig @@ -33,7 +32,6 @@ class MediaControlSettingsViewModelTest { private val testDispatcher = StandardTestDispatcher() private val serverManager: ServerManager = mockk(relaxed = true) private val mediaControlRepository: MediaControlRepository = mockk(relaxed = true) - private val application: Application = mockk(relaxed = true) private lateinit var viewModel: MediaControlSettingsViewModel @@ -56,7 +54,6 @@ class MediaControlSettingsViewModelTest { return MediaControlSettingsViewModel( serverManager = serverManager, mediaControlRepository = mediaControlRepository, - application = application, ) } @@ -137,6 +134,19 @@ class MediaControlSettingsViewModelTest { assertEquals(42, viewModel.uiState.value.selectedServerId) } + + @Test + fun `Given non-default server selected when addEntity called then entity config has that server's id`() = runTest(testDispatcher) { + val serverBId = 99 + viewModel = createViewModel() + + viewModel.selectServerId(serverBId) + viewModel.addEntity("media_player.bedroom") + + val addedEntity = viewModel.uiState.value.configuredEntities.first() + assertEquals(serverBId, addedEntity.serverId) + assertEquals("media_player.bedroom", addedEntity.entityId) + } } @Nested diff --git a/common/src/main/kotlin/io/homeassistant/companion/android/common/data/mediacontrol/MediaControlRepository.kt b/common/src/main/kotlin/io/homeassistant/companion/android/common/data/mediacontrol/MediaControlRepository.kt index f24ff2d4a60..cf1753d0cce 100644 --- a/common/src/main/kotlin/io/homeassistant/companion/android/common/data/mediacontrol/MediaControlRepository.kt +++ b/common/src/main/kotlin/io/homeassistant/companion/android/common/data/mediacontrol/MediaControlRepository.kt @@ -20,13 +20,6 @@ interface MediaControlRepository { */ fun observeEntityState(config: MediaControlEntityConfig): Flow - /** - * Emits the combined state of all configured entities. Each emission is a list of non-null - * states for entities that are currently reachable. Emits an empty list when nothing is - * configured. - */ - fun observeMediaControlStates(): Flow> - /** Returns the list of all configured media_player entities. */ suspend fun getConfiguredEntities(): List diff --git a/common/src/main/kotlin/io/homeassistant/companion/android/common/data/mediacontrol/MediaControlRepositoryImpl.kt b/common/src/main/kotlin/io/homeassistant/companion/android/common/data/mediacontrol/MediaControlRepositoryImpl.kt index 08a20df3e4d..7e62db732d8 100644 --- a/common/src/main/kotlin/io/homeassistant/companion/android/common/data/mediacontrol/MediaControlRepositoryImpl.kt +++ b/common/src/main/kotlin/io/homeassistant/companion/android/common/data/mediacontrol/MediaControlRepositoryImpl.kt @@ -20,13 +20,9 @@ import io.homeassistant.companion.android.database.mediacontrol.MediaControlConf import io.homeassistant.companion.android.database.mediacontrol.MediaControlDao import javax.inject.Inject import kotlinx.coroutines.CancellationException -import kotlinx.coroutines.ExperimentalCoroutinesApi import kotlinx.coroutines.flow.Flow -import kotlinx.coroutines.flow.combine import kotlinx.coroutines.flow.distinctUntilChanged -import kotlinx.coroutines.flow.flatMapLatest import kotlinx.coroutines.flow.flow -import kotlinx.coroutines.flow.flowOf import timber.log.Timber internal class MediaControlRepositoryImpl @Inject constructor( @@ -85,19 +81,6 @@ internal class MediaControlRepositoryImpl @Inject constructor( } }.distinctUntilChanged() - @OptIn(ExperimentalCoroutinesApi::class) - override fun observeMediaControlStates(): Flow> = dao.getAllFlow() - .flatMapLatest { entities -> - if (entities.isEmpty()) { - flowOf(emptyList()) - } else { - combine(entities.map { observeEntityState(it.toEntityConfig()) }) { states -> - states.filterNotNull() - } - } - } - .distinctUntilChanged() - override suspend fun getConfiguredEntities(): List = dao.getAll().map { it.toEntityConfig() } diff --git a/common/src/test/kotlin/io/homeassistant/companion/android/common/data/mediacontrol/MediaControlRepositoryImplTest.kt b/common/src/test/kotlin/io/homeassistant/companion/android/common/data/mediacontrol/MediaControlRepositoryImplTest.kt index a2f7ac054ab..8f31569ad79 100644 --- a/common/src/test/kotlin/io/homeassistant/companion/android/common/data/mediacontrol/MediaControlRepositoryImplTest.kt +++ b/common/src/test/kotlin/io/homeassistant/companion/android/common/data/mediacontrol/MediaControlRepositoryImplTest.kt @@ -108,58 +108,6 @@ class MediaControlRepositoryImplTest { } } - @Nested - inner class ObserveMediaControlStatesTest { - - @Test - fun `Given no configured entities when observing then emit empty list`() = runTest { - coEvery { dao.getAllFlow() } returns flowOf(emptyList()) - - repository.observeMediaControlStates().test { - assertEquals(emptyList(), awaitItem()) - cancelAndIgnoreRemainingEvents() - } - } - - @Test - fun `Given two configured entities when states arrive then emit combined list`() = runTest { - coEvery { dao.getAllFlow() } returns flowOf( - listOf( - MediaControlConfig(id = 1, serverId = 1, entityId = "media_player.living_room", position = 0), - MediaControlConfig(id = 2, serverId = 1, entityId = "media_player.bedroom", position = 1), - ), - ) - - val state1 = CompressedEntityState( - state = JsonPrimitive("playing"), - attributes = mapOf("media_title" to "Song A"), - lastChanged = 1000.0, - lastUpdated = 1000.0, - ) - val state2 = CompressedEntityState( - state = JsonPrimitive("paused"), - attributes = mapOf("media_title" to "Song B"), - lastChanged = 1000.0, - lastUpdated = 1000.0, - ) - coEvery { serverManager.webSocketRepository(1) } returns webSocketRepository - coEvery { - webSocketRepository.getCompressedStateAndChanges(listOf("media_player.living_room")) - } returns flowOf(CompressedStateChangedEvent(added = mapOf("media_player.living_room" to state1))) - coEvery { - webSocketRepository.getCompressedStateAndChanges(listOf("media_player.bedroom")) - } returns flowOf(CompressedStateChangedEvent(added = mapOf("media_player.bedroom" to state2))) - - repository.observeMediaControlStates().test { - val states = awaitItem() - assertEquals(2, states.size) - assertTrue(states.any { it.entityId == "media_player.living_room" && it.title == "Song A" }) - assertTrue(states.any { it.entityId == "media_player.bedroom" && it.title == "Song B" }) - cancelAndIgnoreRemainingEvents() - } - } - } - @Nested inner class PlaybackStateMappingTest { From f11db4c3fca0aa1f6621e595eb7532d99b2189a2 Mon Sep 17 00:00:00 2001 From: Fletcher Dostie Date: Fri, 27 Mar 2026 01:27:44 -0700 Subject: [PATCH 019/114] ktlint fixes --- .../android/mediacontrol/HaMediaSession.kt | 1 + .../android/mediacontrol/HaMediaSessionTest.kt | 15 +++++++-------- 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/app/src/main/kotlin/io/homeassistant/companion/android/mediacontrol/HaMediaSession.kt b/app/src/main/kotlin/io/homeassistant/companion/android/mediacontrol/HaMediaSession.kt index f61b1dad2d7..4a507660af3 100644 --- a/app/src/main/kotlin/io/homeassistant/companion/android/mediacontrol/HaMediaSession.kt +++ b/app/src/main/kotlin/io/homeassistant/companion/android/mediacontrol/HaMediaSession.kt @@ -61,6 +61,7 @@ class HaMediaSession @AssistedInject constructor( private val player: HaRemoteMediaPlayer private var observationJob: Job? = null + // Accessed only from loadArtworkAndUpdatePlayer, which is always called sequentially // within a single observationJob on the Default dispatcher. The observationJob is // cancelled before a new one starts, so there is no concurrent write risk. diff --git a/app/src/test/kotlin/io/homeassistant/companion/android/mediacontrol/HaMediaSessionTest.kt b/app/src/test/kotlin/io/homeassistant/companion/android/mediacontrol/HaMediaSessionTest.kt index d94d558af28..f05c1dd0367 100644 --- a/app/src/test/kotlin/io/homeassistant/companion/android/mediacontrol/HaMediaSessionTest.kt +++ b/app/src/test/kotlin/io/homeassistant/companion/android/mediacontrol/HaMediaSessionTest.kt @@ -16,10 +16,10 @@ import io.mockk.mockk import io.mockk.slot import java.util.concurrent.atomic.AtomicInteger import kotlinx.coroutines.CoroutineScope -import kotlinx.coroutines.isActive import kotlinx.coroutines.flow.MutableSharedFlow import kotlinx.coroutines.flow.emptyFlow import kotlinx.coroutines.flow.flowOf +import kotlinx.coroutines.isActive import org.junit.Assert.assertEquals import org.junit.Assert.assertNull import org.junit.Before @@ -82,13 +82,12 @@ class HaMediaSessionTest { entityFriendlyName = null, ) - private fun buildSession(): HaMediaSession = - HaMediaSession( - context = ApplicationProvider.getApplicationContext(), - config = config, - mediaControlRepository = mediaControlRepository, - serverManager = serverManager, - ) + private fun buildSession(): HaMediaSession = HaMediaSession( + context = ApplicationProvider.getApplicationContext(), + config = config, + mediaControlRepository = mediaControlRepository, + serverManager = serverManager, + ) /** * Waits for `HaMediaSession`'s internal `Dispatchers.Default` coroutines to settle, From 2b3209d1a2776a5bcd6340073733fd76b3517ddf Mon Sep 17 00:00:00 2001 From: Fletcher Dostie Date: Fri, 27 Mar 2026 20:29:17 -0700 Subject: [PATCH 020/114] Reactively manage sessions via observeConfiguredEntities() flow HaMediaSessionService now collects a Flow> backed by MediaControlDao.getAllFlow(), replacing one-shot fetches triggered by restart intents. Session reconciliation reacts to DB changes directly, removing the need for ACTION_RESTART_OBSERVATION, onServerRemoved(), and the MediaControlServiceEvent.Stop signal from the settings UI. --- .../mediacontrol/HaMediaSessionService.kt | 88 +++++++------------ .../MediaControlSettingsFragment.kt | 8 +- .../MediaControlSettingsViewModel.kt | 7 +- .../server/ServerSettingsPresenterImpl.kt | 2 - .../mediacontrol/HaMediaSessionServiceTest.kt | 42 +++------ .../MediaControlSettingsViewModelTest.kt | 4 +- .../mediacontrol/MediaControlRepository.kt | 3 + .../MediaControlRepositoryImpl.kt | 4 + 8 files changed, 58 insertions(+), 100 deletions(-) diff --git a/app/src/main/kotlin/io/homeassistant/companion/android/mediacontrol/HaMediaSessionService.kt b/app/src/main/kotlin/io/homeassistant/companion/android/mediacontrol/HaMediaSessionService.kt index 4584c65853f..3228a8a5e9a 100644 --- a/app/src/main/kotlin/io/homeassistant/companion/android/mediacontrol/HaMediaSessionService.kt +++ b/app/src/main/kotlin/io/homeassistant/companion/android/mediacontrol/HaMediaSessionService.kt @@ -12,7 +12,8 @@ import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.SupervisorJob import kotlinx.coroutines.cancel -import kotlinx.coroutines.launch +import kotlinx.coroutines.flow.launchIn +import kotlinx.coroutines.flow.onEach import timber.log.Timber /** @@ -39,16 +40,9 @@ class HaMediaSessionService : MediaSessionService() { override fun onCreate() { super.onCreate() Timber.d("HaMediaSessionService created") - reconcileSessions() - } - - override fun onStartCommand(intent: Intent?, flags: Int, startId: Int): Int { - val result = super.onStartCommand(intent, flags, startId) - if (intent?.action == ACTION_RESTART_OBSERVATION) { - Timber.d("Restarting observation due to config change") - reconcileSessions() - } - return result + mediaControlRepository.observeConfiguredEntities() + .onEach { entities -> reconcileSessions(entities) } + .launchIn(serviceScope) } override fun onGetSession(controllerInfo: MediaSession.ControllerInfo): MediaSession? = null @@ -68,49 +62,44 @@ class HaMediaSessionService : MediaSessionService() { super.onDestroy() } - internal fun reconcileSessions() { - serviceScope.launch { - val configuredEntities = mediaControlRepository.getConfiguredEntities() - if (configuredEntities.isEmpty()) { - Timber.d("No media control entities configured, stopping service") - stopSelf() - return@launch - } + internal fun reconcileSessions(configuredEntities: List) { + if (configuredEntities.isEmpty()) { + Timber.d("No media control entities configured, stopping service") + stopSelf() + return + } - val desiredKeys = configuredEntities.map { it.sessionKey() }.toSet() - val currentKeys = activeSessions.keys.toSet() + val desiredKeys = configuredEntities.map { it.sessionKey() }.toSet() + val currentKeys = activeSessions.keys.toSet() - // Remove sessions that are no longer configured - (currentKeys - desiredKeys).forEach { key -> - val session = activeSessions.remove(key) ?: return@forEach - removeSession(session.mediaSession) - session.release() - Timber.d("Removed media session for $key") - } + // Remove sessions that are no longer configured + (currentKeys - desiredKeys).forEach { key -> + val session = activeSessions.remove(key) ?: return@forEach + removeSession(session.mediaSession) + session.release() + Timber.d("Removed media session for $key") + } - // Add sessions for newly configured entities - (desiredKeys - currentKeys).forEach { key -> - val entityConfig = configuredEntities.first { it.sessionKey() == key } - val session = haMediaSessionFactory.create( - context = this@HaMediaSessionService, - config = entityConfig, - ) - addSession(session.mediaSession) - session.startObservingState() - activeSessions[key] = session - Timber.d("Added media session for $key") - } + // Add sessions for newly configured entities + (desiredKeys - currentKeys).forEach { key -> + val entityConfig = configuredEntities.first { it.sessionKey() == key } + val session = haMediaSessionFactory.create( + context = this@HaMediaSessionService, + config = entityConfig, + ) + addSession(session.mediaSession) + session.startObservingState() + activeSessions[key] = session + Timber.d("Added media session for $key") } } - internal companion object { - const val ACTION_RESTART_OBSERVATION = - "io.homeassistant.companion.android.mediacontrol.RESTART_OBSERVATION" - + companion object { /** * Starts the service if any media_player entities are configured. * Should be called from a foreground context (e.g. Activity) to avoid * Android 15+ restrictions on starting mediaPlayback foreground services from background. + * Once running, the service observes the database and reconciles sessions automatically. */ suspend fun startIfConfigured(context: Context, mediaControlRepository: MediaControlRepository) { if (mediaControlRepository.getConfiguredEntities().isNotEmpty()) { @@ -118,17 +107,6 @@ class HaMediaSessionService : MediaSessionService() { context.startService(Intent(context, HaMediaSessionService::class.java)) } } - - /** - * Should be called after a server is removed. The service will re-check its configuration, - * remove any sessions for the deleted server, and stop itself if none remain. - */ - fun onServerRemoved(context: Context) { - context.startService( - Intent(context, HaMediaSessionService::class.java) - .setAction(ACTION_RESTART_OBSERVATION), - ) - } } } diff --git a/app/src/main/kotlin/io/homeassistant/companion/android/settings/mediacontrol/MediaControlSettingsFragment.kt b/app/src/main/kotlin/io/homeassistant/companion/android/settings/mediacontrol/MediaControlSettingsFragment.kt index 17df5c59db3..a477f41b277 100644 --- a/app/src/main/kotlin/io/homeassistant/companion/android/settings/mediacontrol/MediaControlSettingsFragment.kt +++ b/app/src/main/kotlin/io/homeassistant/companion/android/settings/mediacontrol/MediaControlSettingsFragment.kt @@ -37,13 +37,7 @@ class MediaControlSettingsFragment : Fragment() { viewModel.serviceEvents.collect { event -> when (event) { MediaControlServiceEvent.Start -> { - requireContext().startService( - Intent(requireContext(), HaMediaSessionService::class.java) - .setAction(HaMediaSessionService.ACTION_RESTART_OBSERVATION), - ) - } - MediaControlServiceEvent.Stop -> { - requireContext().stopService(Intent(requireContext(), HaMediaSessionService::class.java)) + requireContext().startService(Intent(requireContext(), HaMediaSessionService::class.java)) } } } diff --git a/app/src/main/kotlin/io/homeassistant/companion/android/settings/mediacontrol/MediaControlSettingsViewModel.kt b/app/src/main/kotlin/io/homeassistant/companion/android/settings/mediacontrol/MediaControlSettingsViewModel.kt index cac8978cb05..cf59a351fde 100644 --- a/app/src/main/kotlin/io/homeassistant/companion/android/settings/mediacontrol/MediaControlSettingsViewModel.kt +++ b/app/src/main/kotlin/io/homeassistant/companion/android/settings/mediacontrol/MediaControlSettingsViewModel.kt @@ -32,7 +32,6 @@ import timber.log.Timber /** One-shot events emitted by [MediaControlSettingsViewModel] for the UI layer to act on. */ sealed interface MediaControlServiceEvent { data object Start : MediaControlServiceEvent - data object Stop : MediaControlServiceEvent } @Stable @@ -174,9 +173,9 @@ class MediaControlSettingsViewModel @Inject constructor( viewModelScope.launch { val entities = _uiState.value.configuredEntities mediaControlRepository.setConfiguredEntities(entities) - _serviceEvents.emit( - if (entities.isEmpty()) MediaControlServiceEvent.Stop else MediaControlServiceEvent.Start, - ) + if (entities.isNotEmpty()) { + _serviceEvents.emit(MediaControlServiceEvent.Start) + } } } diff --git a/app/src/main/kotlin/io/homeassistant/companion/android/settings/server/ServerSettingsPresenterImpl.kt b/app/src/main/kotlin/io/homeassistant/companion/android/settings/server/ServerSettingsPresenterImpl.kt index 84150011057..48b7d4d61a3 100644 --- a/app/src/main/kotlin/io/homeassistant/companion/android/settings/server/ServerSettingsPresenterImpl.kt +++ b/app/src/main/kotlin/io/homeassistant/companion/android/settings/server/ServerSettingsPresenterImpl.kt @@ -5,7 +5,6 @@ import androidx.preference.PreferenceDataStore import dagger.hilt.android.qualifiers.ApplicationContext import io.homeassistant.companion.android.common.data.network.WifiHelper import io.homeassistant.companion.android.common.data.servers.ServerManager -import io.homeassistant.companion.android.mediacontrol.HaMediaSessionService import javax.inject.Inject import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.Dispatchers @@ -119,7 +118,6 @@ class ServerSettingsPresenterImpl @Inject constructor( // Remove server anyway, the user wants to delete and we don't need the server for that } serverManager.removeServer(serverId) - HaMediaSessionService.onServerRemoved(context) view.onRemovedServer( success = true, hasAnyRemaining = serverManager.servers().any { it.id != serverId }, diff --git a/app/src/test/kotlin/io/homeassistant/companion/android/mediacontrol/HaMediaSessionServiceTest.kt b/app/src/test/kotlin/io/homeassistant/companion/android/mediacontrol/HaMediaSessionServiceTest.kt index 8f34680ea91..e4591974d7b 100644 --- a/app/src/test/kotlin/io/homeassistant/companion/android/mediacontrol/HaMediaSessionServiceTest.kt +++ b/app/src/test/kotlin/io/homeassistant/companion/android/mediacontrol/HaMediaSessionServiceTest.kt @@ -10,10 +10,7 @@ import io.mockk.coEvery import io.mockk.every import io.mockk.mockk import io.mockk.unmockkAll -import kotlinx.coroutines.ExperimentalCoroutinesApi import kotlinx.coroutines.flow.flowOf -import kotlinx.coroutines.test.advanceUntilIdle -import kotlinx.coroutines.test.runTest import org.junit.After import org.junit.Assert.assertEquals import org.junit.Assert.assertTrue @@ -33,7 +30,6 @@ import org.robolectric.annotation.Config * Reconciliation results are asserted via [HaMediaSessionService.activeSessions], which is * the service's source of truth for which sessions are currently active. */ -@OptIn(ExperimentalCoroutinesApi::class) @RunWith(RobolectricTestRunner::class) @Config(application = dagger.hilt.android.testing.HiltTestApplication::class) class HaMediaSessionServiceTest { @@ -75,25 +71,21 @@ class HaMediaSessionServiceTest { } @Test - fun `Given new entity in config when reconcileSessions then session is added`() = runTest(mainDispatcherRule.testDispatcher) { + fun `Given new entity in config when reconcileSessions then session is added`() { val config = MediaControlEntityConfig(serverId = 1, entityId = "media_player.living_room") - coEvery { mediaControlRepository.getConfiguredEntities() } returns listOf(config) - service.reconcileSessions() - advanceUntilIdle() + service.reconcileSessions(listOf(config)) assertEquals(1, service.activeSessions.size) assertTrue(service.activeSessions.containsKey("1:media_player.living_room")) } @Test - fun `Given two entities in config when reconcileSessions then sessions added for each`() = runTest(mainDispatcherRule.testDispatcher) { + fun `Given two entities in config when reconcileSessions then sessions added for each`() { val configA = MediaControlEntityConfig(serverId = 1, entityId = "media_player.living_room") val configB = MediaControlEntityConfig(serverId = 1, entityId = "media_player.bedroom") - coEvery { mediaControlRepository.getConfiguredEntities() } returns listOf(configA, configB) - service.reconcileSessions() - advanceUntilIdle() + service.reconcileSessions(listOf(configA, configB)) assertEquals(2, service.activeSessions.size) assertTrue(service.activeSessions.containsKey("1:media_player.living_room")) @@ -101,43 +93,33 @@ class HaMediaSessionServiceTest { } @Test - fun `Given active session when entity removed from config then session is removed`() = runTest(mainDispatcherRule.testDispatcher) { + fun `Given active session when entity removed from config then session is removed`() { val configA = MediaControlEntityConfig(serverId = 1, entityId = "media_player.living_room") val configB = MediaControlEntityConfig(serverId = 1, entityId = "media_player.bedroom") - coEvery { mediaControlRepository.getConfiguredEntities() } returns listOf(configA, configB) - service.reconcileSessions() - advanceUntilIdle() + service.reconcileSessions(listOf(configA, configB)) - coEvery { mediaControlRepository.getConfiguredEntities() } returns listOf(configB) - service.reconcileSessions() - advanceUntilIdle() + service.reconcileSessions(listOf(configB)) assertEquals(1, service.activeSessions.size) assertTrue(service.activeSessions.containsKey("1:media_player.bedroom")) } @Test - fun `Given existing session when entity remains in config then session is not recreated`() = runTest(mainDispatcherRule.testDispatcher) { + fun `Given existing session when entity remains in config then session is not recreated`() { val config = MediaControlEntityConfig(serverId = 1, entityId = "media_player.living_room") - coEvery { mediaControlRepository.getConfiguredEntities() } returns listOf(config) - service.reconcileSessions() - advanceUntilIdle() + service.reconcileSessions(listOf(config)) val sessionBefore = service.activeSessions["1:media_player.living_room"] - service.reconcileSessions() - advanceUntilIdle() + service.reconcileSessions(listOf(config)) assertEquals(1, service.activeSessions.size) assertTrue(service.activeSessions["1:media_player.living_room"] === sessionBefore) } @Test - fun `Given empty config when reconcileSessions then service stops itself`() = runTest(mainDispatcherRule.testDispatcher) { - coEvery { mediaControlRepository.getConfiguredEntities() } returns emptyList() - - service.reconcileSessions() - advanceUntilIdle() + fun `Given empty config when reconcileSessions then service stops itself`() { + service.reconcileSessions(emptyList()) assertTrue(Shadows.shadowOf(service).isStoppedBySelf) } diff --git a/app/src/test/kotlin/io/homeassistant/companion/android/settings/mediacontrol/MediaControlSettingsViewModelTest.kt b/app/src/test/kotlin/io/homeassistant/companion/android/settings/mediacontrol/MediaControlSettingsViewModelTest.kt index 7c10b14bfb9..3f498561309 100644 --- a/app/src/test/kotlin/io/homeassistant/companion/android/settings/mediacontrol/MediaControlSettingsViewModelTest.kt +++ b/app/src/test/kotlin/io/homeassistant/companion/android/settings/mediacontrol/MediaControlSettingsViewModelTest.kt @@ -202,7 +202,7 @@ class MediaControlSettingsViewModelTest { } @Test - fun `Given one entity when removeEntity called then repository cleared and stop event emitted`() = runTest(testDispatcher) { + fun `Given one entity when removeEntity called then repository cleared and no event emitted`() = runTest(testDispatcher) { viewModel = createViewModel() advanceUntilIdle() viewModel.addEntity("media_player.tv") @@ -216,7 +216,7 @@ class MediaControlSettingsViewModelTest { advanceUntilIdle() coVerify { mediaControlRepository.setConfiguredEntities(emptyList()) } - assertEquals(MediaControlServiceEvent.Stop, awaitItem()) + expectNoEvents() cancelAndIgnoreRemainingEvents() } } diff --git a/common/src/main/kotlin/io/homeassistant/companion/android/common/data/mediacontrol/MediaControlRepository.kt b/common/src/main/kotlin/io/homeassistant/companion/android/common/data/mediacontrol/MediaControlRepository.kt index cf1753d0cce..a535fbef7dd 100644 --- a/common/src/main/kotlin/io/homeassistant/companion/android/common/data/mediacontrol/MediaControlRepository.kt +++ b/common/src/main/kotlin/io/homeassistant/companion/android/common/data/mediacontrol/MediaControlRepository.kt @@ -23,6 +23,9 @@ interface MediaControlRepository { /** Returns the list of all configured media_player entities. */ suspend fun getConfiguredEntities(): List + /** Emits the list of configured entities whenever it changes in the database. */ + fun observeConfiguredEntities(): Flow> + /** Replaces the full list of configured media_player entities. */ suspend fun setConfiguredEntities(entities: List) } diff --git a/common/src/main/kotlin/io/homeassistant/companion/android/common/data/mediacontrol/MediaControlRepositoryImpl.kt b/common/src/main/kotlin/io/homeassistant/companion/android/common/data/mediacontrol/MediaControlRepositoryImpl.kt index 7e62db732d8..6b0e57a8567 100644 --- a/common/src/main/kotlin/io/homeassistant/companion/android/common/data/mediacontrol/MediaControlRepositoryImpl.kt +++ b/common/src/main/kotlin/io/homeassistant/companion/android/common/data/mediacontrol/MediaControlRepositoryImpl.kt @@ -23,6 +23,7 @@ import kotlinx.coroutines.CancellationException import kotlinx.coroutines.flow.Flow import kotlinx.coroutines.flow.distinctUntilChanged import kotlinx.coroutines.flow.flow +import kotlinx.coroutines.flow.map import timber.log.Timber internal class MediaControlRepositoryImpl @Inject constructor( @@ -84,6 +85,9 @@ internal class MediaControlRepositoryImpl @Inject constructor( override suspend fun getConfiguredEntities(): List = dao.getAll().map { it.toEntityConfig() } + override fun observeConfiguredEntities(): Flow> = + dao.getAllFlow().map { list -> list.map { it.toEntityConfig() } } + override suspend fun setConfiguredEntities(entities: List) { dao.replaceAll( entities.mapIndexed { index, config -> From 52ba3b70355f5aadfb406c16d797cc77a4a24d7f Mon Sep 17 00:00:00 2001 From: Fletcher Dostie Date: Sat, 28 Mar 2026 16:10:36 -0700 Subject: [PATCH 021/114] Fix media controls not appearing on cold start --- .../android/mediacontrol/HaMediaSession.kt | 10 ++++--- .../mediacontrol/HaMediaSessionTest.kt | 29 +++++++++++++++++++ 2 files changed, 35 insertions(+), 4 deletions(-) diff --git a/app/src/main/kotlin/io/homeassistant/companion/android/mediacontrol/HaMediaSession.kt b/app/src/main/kotlin/io/homeassistant/companion/android/mediacontrol/HaMediaSession.kt index 4a507660af3..eeabe99ac6c 100644 --- a/app/src/main/kotlin/io/homeassistant/companion/android/mediacontrol/HaMediaSession.kt +++ b/app/src/main/kotlin/io/homeassistant/companion/android/mediacontrol/HaMediaSession.kt @@ -124,14 +124,16 @@ class HaMediaSession @AssistedInject constructor( observationJob?.cancel() currentArtworkUrl = null observationJob = scope.launch { - mediaControlRepository.getEntityState(config)?.let { loadArtworkAndUpdatePlayer(it) } while (true) { ensureActive() + // Fetch initial state via REST before subscribing via WebSocket. Placed inside + // the retry loop so cold-start failures (connection not yet ready) are retried + // automatically on each reconnect attempt. + mediaControlRepository.getEntityState(config)?.let { loadArtworkAndUpdatePlayer(it) } mediaControlRepository.observeEntityState(config).collect { state -> if (state == null) { - withContext(Dispatchers.Main) { - player.updateState(state = null, artworkPngBytes = null) - } + // Entity not yet available or subscription not ready; keep the last + // known state visible. Flow completion triggers setConnecting() below. return@collect } loadArtworkAndUpdatePlayer(state) diff --git a/app/src/test/kotlin/io/homeassistant/companion/android/mediacontrol/HaMediaSessionTest.kt b/app/src/test/kotlin/io/homeassistant/companion/android/mediacontrol/HaMediaSessionTest.kt index f05c1dd0367..9767ea6a5c1 100644 --- a/app/src/test/kotlin/io/homeassistant/companion/android/mediacontrol/HaMediaSessionTest.kt +++ b/app/src/test/kotlin/io/homeassistant/companion/android/mediacontrol/HaMediaSessionTest.kt @@ -104,6 +104,35 @@ class HaMediaSessionTest { // -- State observation tests -- + /** + * Verifies the cold-start recovery path: when `getEntityState` returns state on the first + * attempt and `observeEntityState` emits null (subscription not ready) but stays open, + * the player retains the REST-fetched state and does not drop to idle. + * + * Uses a `MutableSharedFlow` with `replay=1` so the null emission is received by the + * Default dispatcher collector without racing, and the flow stays open so the observation + * loop does not call `setConnecting()` and overwrite the state. + */ + @Test + fun `Given getEntityState returns state and observeEntityState emits null when startObservingState then player retains state from REST`() { + val stateFlow = MutableSharedFlow(replay = 1) + stateFlow.tryEmit(null) + coEvery { mediaControlRepository.getEntityState(config) } returns createState( + playbackState = MediaPlaybackState.Playing, + ) + coEvery { mediaControlRepository.observeEntityState(config) } returns stateFlow + + val session = buildSession() + session.startObservingState() + drainDefaultDispatcherAndMainLooper() + + val player = session.mediaSession.player + assertEquals(Player.STATE_READY, player.playbackState) + assertEquals(true, player.playWhenReady) + + session.release() + } + /** * Verifies that when `observeEntityState` emits a playing state, the player transitions * to STATE_READY with `playWhenReady = true`. From b14c1e5525005537c93f8bb0543122e44ce61035 Mon Sep 17 00:00:00 2001 From: Fletcher Dostie Date: Sat, 28 Mar 2026 17:12:00 -0700 Subject: [PATCH 022/114] Fix media controls not appearing on cold start on V2 frontend --- .../android/frontend/FrontendViewModel.kt | 22 +++++++++++++++++++ .../frontend/navigation/FrontendNavigation.kt | 10 +++++++++ 2 files changed, 32 insertions(+) diff --git a/app/src/main/kotlin/io/homeassistant/companion/android/frontend/FrontendViewModel.kt b/app/src/main/kotlin/io/homeassistant/companion/android/frontend/FrontendViewModel.kt index a3f634ea306..4e91e275b7e 100644 --- a/app/src/main/kotlin/io/homeassistant/companion/android/frontend/FrontendViewModel.kt +++ b/app/src/main/kotlin/io/homeassistant/companion/android/frontend/FrontendViewModel.kt @@ -1,14 +1,18 @@ package io.homeassistant.companion.android.frontend +import android.content.Context import androidx.annotation.VisibleForTesting import androidx.lifecycle.SavedStateHandle import androidx.lifecycle.ViewModel import androidx.lifecycle.viewModelScope import androidx.navigation.toRoute import dagger.hilt.android.lifecycle.HiltViewModel +import dagger.hilt.android.qualifiers.ApplicationContext import io.homeassistant.companion.android.common.R as commonR import io.homeassistant.companion.android.common.data.connectivity.ConnectivityCheckRepository import io.homeassistant.companion.android.common.data.connectivity.ConnectivityCheckState +import io.homeassistant.companion.android.common.data.mediacontrol.MediaControlRepository +import io.homeassistant.companion.android.mediacontrol.HaMediaSessionService import io.homeassistant.companion.android.frontend.error.FrontendConnectionError import io.homeassistant.companion.android.frontend.error.FrontendConnectionErrorStateProvider import io.homeassistant.companion.android.frontend.externalbus.WebViewScript @@ -69,6 +73,8 @@ internal class FrontendViewModel @VisibleForTesting constructor( private val urlManager: FrontendUrlManager, private val connectivityCheckRepository: ConnectivityCheckRepository, private val permissionManager: PermissionManager, + private val appContext: Context, + private val mediaControlRepository: MediaControlRepository, ) : ViewModel(), FrontendConnectionErrorStateProvider { @@ -80,6 +86,8 @@ internal class FrontendViewModel @VisibleForTesting constructor( urlManager: FrontendUrlManager, connectivityCheckRepository: ConnectivityCheckRepository, permissionManager: PermissionManager, + @ApplicationContext appContext: Context, + mediaControlRepository: MediaControlRepository, ) : this( initialServerId = savedStateHandle.toRoute().serverId, initialPath = savedStateHandle.toRoute().path, @@ -88,8 +96,22 @@ internal class FrontendViewModel @VisibleForTesting constructor( urlManager = urlManager, connectivityCheckRepository = connectivityCheckRepository, permissionManager = permissionManager, + appContext = appContext, + mediaControlRepository = mediaControlRepository, ) + /** + * Starts [HaMediaSessionService] if any media_player entities are configured. Equivalent + * to the call in [WebViewActivity.onResume] for the legacy frontend path — should be called + * every time the frontend screen is resumed so the service recovers if it was killed while + * the app was in the background. + */ + fun startMediaSessionServiceIfConfigured() { + viewModelScope.launch { + HaMediaSessionService.startIfConfigured(appContext, mediaControlRepository) + } + } + /** * Manages the frontend view state with protection against transitions out of unrecoverable states. * diff --git a/app/src/main/kotlin/io/homeassistant/companion/android/frontend/navigation/FrontendNavigation.kt b/app/src/main/kotlin/io/homeassistant/companion/android/frontend/navigation/FrontendNavigation.kt index f1d711409b8..9e9175caaa2 100644 --- a/app/src/main/kotlin/io/homeassistant/companion/android/frontend/navigation/FrontendNavigation.kt +++ b/app/src/main/kotlin/io/homeassistant/companion/android/frontend/navigation/FrontendNavigation.kt @@ -5,6 +5,9 @@ import androidx.annotation.VisibleForTesting import androidx.compose.runtime.Composable import androidx.compose.runtime.LaunchedEffect import androidx.hilt.lifecycle.viewmodel.compose.hiltViewModel +import androidx.lifecycle.Lifecycle +import androidx.lifecycle.compose.LocalLifecycleOwner +import androidx.lifecycle.repeatOnLifecycle import androidx.navigation.NavController import androidx.navigation.NavGraphBuilder import androidx.navigation.NavOptions @@ -71,6 +74,13 @@ internal fun NavGraphBuilder.frontendScreen( composable { val viewModel: FrontendViewModel = hiltViewModel() + val lifecycle = LocalLifecycleOwner.current.lifecycle + LaunchedEffect(lifecycle) { + lifecycle.repeatOnLifecycle(Lifecycle.State.RESUMED) { + viewModel.startMediaSessionServiceIfConfigured() + } + } + FrontendNavigationHandler( navigationEvents = viewModel.navigationEvents, onNavigateToSettings = onNavigateToSettings, From 1ad0c4e46db768aa88200b11be09a830627cc301 Mon Sep 17 00:00:00 2001 From: Fletcher Dostie Date: Sat, 28 Mar 2026 18:32:43 -0700 Subject: [PATCH 023/114] Expose stop, mute, shuffle, and repeat functions to media controls --- .../android/frontend/FrontendViewModel.kt | 2 +- .../android/mediacontrol/HaMediaSession.kt | 35 ++++ .../mediacontrol/HaRemoteMediaPlayer.kt | 44 +++++ .../android/frontend/FrontendViewModelTest.kt | 6 + .../mediacontrol/HaMediaSessionTest.kt | 7 + .../mediacontrol/HaRemoteMediaPlayerTest.kt | 154 ++++++++++++++++++ .../android/common/data/integration/Entity.kt | 24 +++ .../MediaControlRepositoryImpl.kt | 17 ++ .../data/mediacontrol/MediaControlState.kt | 16 ++ .../MediaControlRepositoryImplTest.kt | 96 +++++++++++ 10 files changed, 400 insertions(+), 1 deletion(-) diff --git a/app/src/main/kotlin/io/homeassistant/companion/android/frontend/FrontendViewModel.kt b/app/src/main/kotlin/io/homeassistant/companion/android/frontend/FrontendViewModel.kt index 4e91e275b7e..6cbb7dead21 100644 --- a/app/src/main/kotlin/io/homeassistant/companion/android/frontend/FrontendViewModel.kt +++ b/app/src/main/kotlin/io/homeassistant/companion/android/frontend/FrontendViewModel.kt @@ -12,7 +12,6 @@ import io.homeassistant.companion.android.common.R as commonR import io.homeassistant.companion.android.common.data.connectivity.ConnectivityCheckRepository import io.homeassistant.companion.android.common.data.connectivity.ConnectivityCheckState import io.homeassistant.companion.android.common.data.mediacontrol.MediaControlRepository -import io.homeassistant.companion.android.mediacontrol.HaMediaSessionService import io.homeassistant.companion.android.frontend.error.FrontendConnectionError import io.homeassistant.companion.android.frontend.error.FrontendConnectionErrorStateProvider import io.homeassistant.companion.android.frontend.externalbus.WebViewScript @@ -23,6 +22,7 @@ import io.homeassistant.companion.android.frontend.navigation.FrontendRoute import io.homeassistant.companion.android.frontend.permissions.PermissionManager import io.homeassistant.companion.android.frontend.url.FrontendUrlManager import io.homeassistant.companion.android.frontend.url.UrlLoadResult +import io.homeassistant.companion.android.mediacontrol.HaMediaSessionService import io.homeassistant.companion.android.util.HAWebChromeClient import io.homeassistant.companion.android.util.HAWebViewClient import io.homeassistant.companion.android.util.HAWebViewClientFactory diff --git a/app/src/main/kotlin/io/homeassistant/companion/android/mediacontrol/HaMediaSession.kt b/app/src/main/kotlin/io/homeassistant/companion/android/mediacontrol/HaMediaSession.kt index eeabe99ac6c..6cca4e12c95 100644 --- a/app/src/main/kotlin/io/homeassistant/companion/android/mediacontrol/HaMediaSession.kt +++ b/app/src/main/kotlin/io/homeassistant/companion/android/mediacontrol/HaMediaSession.kt @@ -17,6 +17,7 @@ import io.homeassistant.companion.android.common.data.integration.IntegrationDom import io.homeassistant.companion.android.common.data.mediacontrol.MediaControlEntityConfig import io.homeassistant.companion.android.common.data.mediacontrol.MediaControlRepository import io.homeassistant.companion.android.common.data.mediacontrol.MediaControlState +import io.homeassistant.companion.android.common.data.mediacontrol.MediaRepeatMode import io.homeassistant.companion.android.common.data.servers.ServerManager import io.homeassistant.companion.android.common.data.servers.firstUrlOrNull import io.homeassistant.companion.android.util.sensitive @@ -107,6 +108,36 @@ class HaMediaSession @AssistedInject constructor( override fun onDecreaseVolumeRequested() { callMediaAction(ACTION_VOLUME_DOWN) } + + override fun onMuteRequested(muted: Boolean) { + callMediaAction( + action = ACTION_VOLUME_MUTE, + extraData = mapOf("is_volume_muted" to muted), + ) + } + + override fun onStopRequested() { + callMediaAction(ACTION_MEDIA_STOP) + } + + override fun onShuffleRequested(shuffle: Boolean) { + callMediaAction( + action = ACTION_SHUFFLE_SET, + extraData = mapOf("shuffle" to shuffle), + ) + } + + override fun onRepeatRequested(repeatMode: MediaRepeatMode) { + val haRepeatValue = when (repeatMode) { + is MediaRepeatMode.Off -> "off" + is MediaRepeatMode.One -> "one" + is MediaRepeatMode.All -> "all" + } + callMediaAction( + action = ACTION_REPEAT_SET, + extraData = mapOf("repeat" to haRepeatValue), + ) + } } player = HaRemoteMediaPlayer(Looper.getMainLooper(), commandCallback) @@ -263,12 +294,16 @@ class HaMediaSession @AssistedInject constructor( const val ACTION_MEDIA_PLAY = "media_play" const val ACTION_MEDIA_PAUSE = "media_pause" + const val ACTION_MEDIA_STOP = "media_stop" const val ACTION_MEDIA_SEEK = "media_seek" const val ACTION_MEDIA_NEXT_TRACK = "media_next_track" const val ACTION_MEDIA_PREVIOUS_TRACK = "media_previous_track" const val ACTION_VOLUME_SET = "volume_set" const val ACTION_VOLUME_UP = "volume_up" const val ACTION_VOLUME_DOWN = "volume_down" + const val ACTION_VOLUME_MUTE = "volume_mute" + const val ACTION_SHUFFLE_SET = "shuffle_set" + const val ACTION_REPEAT_SET = "repeat_set" } /** Creates [HaMediaSession] instances with runtime-provided [context] and [config]. */ diff --git a/app/src/main/kotlin/io/homeassistant/companion/android/mediacontrol/HaRemoteMediaPlayer.kt b/app/src/main/kotlin/io/homeassistant/companion/android/mediacontrol/HaRemoteMediaPlayer.kt index cee40b40dee..489bb8216be 100644 --- a/app/src/main/kotlin/io/homeassistant/companion/android/mediacontrol/HaRemoteMediaPlayer.kt +++ b/app/src/main/kotlin/io/homeassistant/companion/android/mediacontrol/HaRemoteMediaPlayer.kt @@ -13,6 +13,7 @@ import com.google.common.util.concurrent.Futures import com.google.common.util.concurrent.ListenableFuture import io.homeassistant.companion.android.common.data.mediacontrol.MediaControlState import io.homeassistant.companion.android.common.data.mediacontrol.MediaPlaybackState +import io.homeassistant.companion.android.common.data.mediacontrol.MediaRepeatMode import kotlin.time.Duration.Companion.seconds /** @@ -26,6 +27,7 @@ class HaRemoteMediaPlayer(looper: Looper, private val commandCallback: CommandCa interface CommandCallback { fun onPlayRequested() fun onPauseRequested() + fun onStopRequested() fun onSeekRequested(positionMs: Long) fun onNextRequested() fun onPreviousRequested() @@ -37,6 +39,10 @@ class HaRemoteMediaPlayer(looper: Looper, private val commandCallback: CommandCa fun onSetVolumeRequested(volume: Float) fun onIncreaseVolumeRequested() fun onDecreaseVolumeRequested() + fun onMuteRequested(muted: Boolean) + + fun onShuffleRequested(shuffle: Boolean) + fun onRepeatRequested(repeatMode: MediaRepeatMode) } private var mediaState: MediaControlState? = null @@ -115,6 +121,12 @@ class HaRemoteMediaPlayer(looper: Looper, private val commandCallback: CommandCa val bufferedPositionMs = if (durationUs != DURATION_UNSET_US) durationUs / 1000 else positionMs + val media3RepeatMode = when (state.repeatMode) { + is MediaRepeatMode.Off -> Player.REPEAT_MODE_OFF + is MediaRepeatMode.One -> Player.REPEAT_MODE_ONE + is MediaRepeatMode.All -> Player.REPEAT_MODE_ALL + } + return State.Builder() .setAvailableCommands(availableCommands) .setPlaybackState(playbackState) @@ -127,6 +139,8 @@ class HaRemoteMediaPlayer(looper: Looper, private val commandCallback: CommandCa .setDeviceInfo(REMOTE_DEVICE_INFO) .setDeviceVolume(deviceVolume) .setIsDeviceMuted(state.isVolumeMuted) + .setShuffleModeEnabled(state.shuffle) + .setRepeatMode(media3RepeatMode) .build() } @@ -173,6 +187,33 @@ class HaRemoteMediaPlayer(looper: Looper, private val commandCallback: CommandCa return Futures.immediateVoidFuture() } + override fun handleSetDeviceMuted(muted: Boolean, flags: Int): ListenableFuture<*> { + if (mediaState?.supportsMute == true) { + commandCallback.onMuteRequested(muted = muted) + } + return Futures.immediateVoidFuture() + } + + override fun handleStop(): ListenableFuture<*> { + commandCallback.onStopRequested() + return Futures.immediateVoidFuture() + } + + override fun handleSetShuffleModeEnabled(shuffleModeEnabled: Boolean): ListenableFuture<*> { + commandCallback.onShuffleRequested(shuffle = shuffleModeEnabled) + return Futures.immediateVoidFuture() + } + + override fun handleSetRepeatMode(repeatMode: Int): ListenableFuture<*> { + val haRepeatMode = when (repeatMode) { + Player.REPEAT_MODE_ONE -> MediaRepeatMode.One + Player.REPEAT_MODE_ALL -> MediaRepeatMode.All + else -> MediaRepeatMode.Off + } + commandCallback.onRepeatRequested(repeatMode = haRepeatMode) + return Futures.immediateVoidFuture() + } + private fun buildIdleState(): State = State.Builder() .setAvailableCommands(Player.Commands.EMPTY) .setPlaybackState(STATE_IDLE) @@ -212,6 +253,7 @@ class HaRemoteMediaPlayer(looper: Looper, private val commandCallback: CommandCa private fun buildAvailableCommands(state: MediaControlState): Player.Commands { val builder = Player.Commands.Builder() if (state.supportsPlay || state.supportsPause) builder.add(Player.COMMAND_PLAY_PAUSE) + if (state.supportsStop) builder.add(Player.COMMAND_STOP) if (state.supportsSeek) builder.add(Player.COMMAND_SEEK_IN_CURRENT_MEDIA_ITEM) builder.add(Player.COMMAND_GET_CURRENT_MEDIA_ITEM) if (state.supportsPreviousTrack) { @@ -235,6 +277,8 @@ class HaRemoteMediaPlayer(looper: Looper, private val commandCallback: CommandCa builder.add(Player.COMMAND_ADJUST_DEVICE_VOLUME) builder.add(Player.COMMAND_ADJUST_DEVICE_VOLUME_WITH_FLAGS) } + if (state.supportsShuffleSet) builder.add(Player.COMMAND_SET_SHUFFLE_MODE) + if (state.supportsRepeatSet) builder.add(Player.COMMAND_SET_REPEAT_MODE) builder.add(Player.COMMAND_GET_METADATA) builder.add(Player.COMMAND_GET_TIMELINE) return builder.build() diff --git a/app/src/test/kotlin/io/homeassistant/companion/android/frontend/FrontendViewModelTest.kt b/app/src/test/kotlin/io/homeassistant/companion/android/frontend/FrontendViewModelTest.kt index 8f94232c788..4e0887b841d 100644 --- a/app/src/test/kotlin/io/homeassistant/companion/android/frontend/FrontendViewModelTest.kt +++ b/app/src/test/kotlin/io/homeassistant/companion/android/frontend/FrontendViewModelTest.kt @@ -1,8 +1,10 @@ package io.homeassistant.companion.android.frontend +import android.content.Context import io.homeassistant.companion.android.common.data.connectivity.ConnectivityCheckRepository import io.homeassistant.companion.android.common.data.connectivity.ConnectivityCheckResult import io.homeassistant.companion.android.common.data.connectivity.ConnectivityCheckState +import io.homeassistant.companion.android.common.data.mediacontrol.MediaControlRepository import io.homeassistant.companion.android.frontend.error.FrontendConnectionError import io.homeassistant.companion.android.frontend.handler.FrontendHandlerEvent import io.homeassistant.companion.android.frontend.handler.FrontendMessageHandler @@ -53,6 +55,8 @@ class FrontendViewModelTest { private val urlManager: FrontendUrlManager = mockk(relaxed = true) private val connectivityCheckRepository: ConnectivityCheckRepository = mockk(relaxed = true) private val permissionManager: PermissionManager = mockk(relaxed = true) + private val appContext: Context = mockk(relaxed = true) + private val mediaControlRepository: MediaControlRepository = mockk(relaxed = true) private val serverId = 1 private val testUrlWithAuth = "https://example.com?external_auth=1" @@ -76,6 +80,8 @@ class FrontendViewModelTest { urlManager = urlManager, connectivityCheckRepository = connectivityCheckRepository, permissionManager = permissionManager, + appContext = appContext, + mediaControlRepository = mediaControlRepository, ) } diff --git a/app/src/test/kotlin/io/homeassistant/companion/android/mediacontrol/HaMediaSessionTest.kt b/app/src/test/kotlin/io/homeassistant/companion/android/mediacontrol/HaMediaSessionTest.kt index 9767ea6a5c1..40667baba83 100644 --- a/app/src/test/kotlin/io/homeassistant/companion/android/mediacontrol/HaMediaSessionTest.kt +++ b/app/src/test/kotlin/io/homeassistant/companion/android/mediacontrol/HaMediaSessionTest.kt @@ -9,6 +9,7 @@ import io.homeassistant.companion.android.common.data.mediacontrol.MediaControlE import io.homeassistant.companion.android.common.data.mediacontrol.MediaControlRepository import io.homeassistant.companion.android.common.data.mediacontrol.MediaControlState import io.homeassistant.companion.android.common.data.mediacontrol.MediaPlaybackState +import io.homeassistant.companion.android.common.data.mediacontrol.MediaRepeatMode import io.homeassistant.companion.android.common.data.servers.ServerManager import io.mockk.coEvery import io.mockk.coVerify @@ -77,8 +78,14 @@ class HaMediaSessionTest { supportsPreviousTrack = false, supportsNextTrack = false, supportsVolumeSet = false, + supportsStop = false, + supportsMute = false, + supportsShuffleSet = false, + supportsRepeatSet = false, volumeLevel = null, isVolumeMuted = false, + shuffle = false, + repeatMode = MediaRepeatMode.Off, entityFriendlyName = null, ) diff --git a/app/src/test/kotlin/io/homeassistant/companion/android/mediacontrol/HaRemoteMediaPlayerTest.kt b/app/src/test/kotlin/io/homeassistant/companion/android/mediacontrol/HaRemoteMediaPlayerTest.kt index 10b475caa82..a146cf5974b 100644 --- a/app/src/test/kotlin/io/homeassistant/companion/android/mediacontrol/HaRemoteMediaPlayerTest.kt +++ b/app/src/test/kotlin/io/homeassistant/companion/android/mediacontrol/HaRemoteMediaPlayerTest.kt @@ -4,6 +4,7 @@ import android.os.Looper import androidx.media3.common.Player import io.homeassistant.companion.android.common.data.mediacontrol.MediaControlState import io.homeassistant.companion.android.common.data.mediacontrol.MediaPlaybackState +import io.homeassistant.companion.android.common.data.mediacontrol.MediaRepeatMode import io.mockk.mockk import io.mockk.verify import org.junit.Assert.assertEquals @@ -42,8 +43,14 @@ class HaRemoteMediaPlayerTest { supportsPreviousTrack: Boolean = true, supportsNextTrack: Boolean = true, supportsVolumeSet: Boolean = false, + supportsStop: Boolean = false, + supportsMute: Boolean = false, + supportsShuffleSet: Boolean = false, + supportsRepeatSet: Boolean = false, volumeLevel: Float? = null, isVolumeMuted: Boolean = false, + shuffle: Boolean = false, + repeatMode: MediaRepeatMode = MediaRepeatMode.Off, entityFriendlyName: String? = null, ) = MediaControlState( entityId = "media_player.test", @@ -61,8 +68,14 @@ class HaRemoteMediaPlayerTest { supportsPreviousTrack = supportsPreviousTrack, supportsNextTrack = supportsNextTrack, supportsVolumeSet = supportsVolumeSet, + supportsStop = supportsStop, + supportsMute = supportsMute, + supportsShuffleSet = supportsShuffleSet, + supportsRepeatSet = supportsRepeatSet, volumeLevel = volumeLevel, isVolumeMuted = isVolumeMuted, + shuffle = shuffle, + repeatMode = repeatMode, entityFriendlyName = entityFriendlyName, ) @@ -340,6 +353,147 @@ class HaRemoteMediaPlayerTest { verify { commandCallback.onDecreaseVolumeRequested() } } + // -- Stop command tests -- + + @Test + fun `Given stop supported when getState then stop command available`() { + player.updateState(state = createState(supportsStop = true), artworkPngBytes = null) + shadowOf(Looper.getMainLooper()).idle() + + assertTrue(player.availableCommands.contains(Player.COMMAND_STOP)) + } + + @Test + fun `Given stop not supported when getState then stop command not available`() { + player.updateState(state = createState(supportsStop = false), artworkPngBytes = null) + shadowOf(Looper.getMainLooper()).idle() + + assertFalse(player.availableCommands.contains(Player.COMMAND_STOP)) + } + + @Test + fun `Given stop supported when stop requested then onStopRequested called`() { + player.updateState(state = createState(supportsStop = true), artworkPngBytes = null) + shadowOf(Looper.getMainLooper()).idle() + + player.stop() + shadowOf(Looper.getMainLooper()).idle() + + verify { commandCallback.onStopRequested() } + } + + // -- Mute command tests -- + + @Test + fun `Given mute supported when mute requested then onMuteRequested called with true`() { + player.updateState( + state = createState(supportsVolumeSet = true, supportsMute = true, isVolumeMuted = false), + artworkPngBytes = null, + ) + shadowOf(Looper.getMainLooper()).idle() + + player.setDeviceMuted(true, 0) + shadowOf(Looper.getMainLooper()).idle() + + verify { commandCallback.onMuteRequested(muted = true) } + } + + @Test + fun `Given mute not supported when mute requested then onMuteRequested not called`() { + player.updateState( + state = createState(supportsVolumeSet = true, supportsMute = false), + artworkPngBytes = null, + ) + shadowOf(Looper.getMainLooper()).idle() + + player.setDeviceMuted(true, 0) + shadowOf(Looper.getMainLooper()).idle() + + verify(exactly = 0) { commandCallback.onMuteRequested(any()) } + } + + // -- Shuffle command tests -- + + @Test + fun `Given shuffle supported when getState then shuffle command available`() { + player.updateState(state = createState(supportsShuffleSet = true), artworkPngBytes = null) + shadowOf(Looper.getMainLooper()).idle() + + assertTrue(player.availableCommands.contains(Player.COMMAND_SET_SHUFFLE_MODE)) + } + + @Test + fun `Given shuffle not supported when getState then shuffle command not available`() { + player.updateState(state = createState(supportsShuffleSet = false), artworkPngBytes = null) + shadowOf(Looper.getMainLooper()).idle() + + assertFalse(player.availableCommands.contains(Player.COMMAND_SET_SHUFFLE_MODE)) + } + + @Test + fun `Given shuffle enabled in state when getState then shuffleModeEnabled is true`() { + player.updateState(state = createState(shuffle = true), artworkPngBytes = null) + shadowOf(Looper.getMainLooper()).idle() + + assertTrue(player.shuffleModeEnabled) + } + + @Test + fun `Given shuffle supported when shuffle enabled then onShuffleRequested called with true`() { + player.updateState(state = createState(supportsShuffleSet = true, shuffle = false), artworkPngBytes = null) + shadowOf(Looper.getMainLooper()).idle() + + player.shuffleModeEnabled = true + shadowOf(Looper.getMainLooper()).idle() + + verify { commandCallback.onShuffleRequested(shuffle = true) } + } + + // -- Repeat command tests -- + + @Test + fun `Given repeat supported when getState then repeat command available`() { + player.updateState(state = createState(supportsRepeatSet = true), artworkPngBytes = null) + shadowOf(Looper.getMainLooper()).idle() + + assertTrue(player.availableCommands.contains(Player.COMMAND_SET_REPEAT_MODE)) + } + + @Test + fun `Given repeat not supported when getState then repeat command not available`() { + player.updateState(state = createState(supportsRepeatSet = false), artworkPngBytes = null) + shadowOf(Looper.getMainLooper()).idle() + + assertFalse(player.availableCommands.contains(Player.COMMAND_SET_REPEAT_MODE)) + } + + private fun assertRepeatModeRoundTrip(mediaRepeatMode: MediaRepeatMode, media3RepeatMode: Int) { + player.updateState(state = createState(supportsRepeatSet = true, repeatMode = mediaRepeatMode), artworkPngBytes = null) + shadowOf(Looper.getMainLooper()).idle() + + assertEquals(media3RepeatMode, player.repeatMode) + + player.repeatMode = media3RepeatMode + shadowOf(Looper.getMainLooper()).idle() + + verify { commandCallback.onRepeatRequested(repeatMode = mediaRepeatMode) } + } + + @Test + fun `Given repeat mode Off in state when getState then repeatMode is REPEAT_MODE_OFF`() { + assertRepeatModeRoundTrip(mediaRepeatMode = MediaRepeatMode.Off, media3RepeatMode = Player.REPEAT_MODE_OFF) + } + + @Test + fun `Given repeat mode One in state when getState then repeatMode is REPEAT_MODE_ONE`() { + assertRepeatModeRoundTrip(mediaRepeatMode = MediaRepeatMode.One, media3RepeatMode = Player.REPEAT_MODE_ONE) + } + + @Test + fun `Given repeat mode All in state when getState then repeatMode is REPEAT_MODE_ALL`() { + assertRepeatModeRoundTrip(mediaRepeatMode = MediaRepeatMode.All, media3RepeatMode = Player.REPEAT_MODE_ALL) + } + // -- setConnecting tests -- @Test diff --git a/common/src/main/kotlin/io/homeassistant/companion/android/common/data/integration/Entity.kt b/common/src/main/kotlin/io/homeassistant/companion/android/common/data/integration/Entity.kt index 89c8bf1da6e..dcff1f0c20d 100644 --- a/common/src/main/kotlin/io/homeassistant/companion/android/common/data/integration/Entity.kt +++ b/common/src/main/kotlin/io/homeassistant/companion/android/common/data/integration/Entity.kt @@ -143,9 +143,13 @@ object EntityExt { const val MEDIA_PLAYER_SUPPORT_PAUSE = 1 const val MEDIA_PLAYER_SUPPORT_SEEK = 2 const val MEDIA_PLAYER_SUPPORT_VOLUME_SET = 4 + const val MEDIA_PLAYER_SUPPORT_VOLUME_MUTE = 8 const val MEDIA_PLAYER_SUPPORT_PREVIOUS_TRACK = 16 const val MEDIA_PLAYER_SUPPORT_NEXT_TRACK = 32 + const val MEDIA_PLAYER_SUPPORT_STOP = 4096 const val MEDIA_PLAYER_SUPPORT_PLAY = 16384 + const val MEDIA_PLAYER_SUPPORT_SHUFFLE_SET = 32768 + const val MEDIA_PLAYER_SUPPORT_REPEAT_SET = 262144 val DOMAINS_PRESS = listOf("button", "input_button") val DOMAINS_TOGGLE = listOf( @@ -1340,3 +1344,23 @@ internal fun Entity.getMediaDuration(): Double? = /** Returns the entity_picture attribute URL, if available. */ internal fun Entity.getEntityPictureUrl(): String? = if (domain == MEDIA_PLAYER_DOMAIN) attributes["entity_picture"]?.toString() else null + +/** Whether this media_player entity supports stop. */ +internal fun Entity.supportsStop(): Boolean = domain == MEDIA_PLAYER_DOMAIN && + (supportedFeatures() and EntityExt.MEDIA_PLAYER_SUPPORT_STOP != 0) + +/** Whether this media_player entity supports explicit mute toggling via the volume_mute service. */ +internal fun Entity.supportsVolumeMute(): Boolean = domain == MEDIA_PLAYER_DOMAIN && + (supportedFeatures() and EntityExt.MEDIA_PLAYER_SUPPORT_VOLUME_MUTE != 0) + +/** Whether this media_player entity supports setting shuffle mode. */ +internal fun Entity.supportsShuffleSet(): Boolean = domain == MEDIA_PLAYER_DOMAIN && + (supportedFeatures() and EntityExt.MEDIA_PLAYER_SUPPORT_SHUFFLE_SET != 0) + +/** Whether this media_player entity supports setting repeat mode. */ +internal fun Entity.supportsRepeatSet(): Boolean = domain == MEDIA_PLAYER_DOMAIN && + (supportedFeatures() and EntityExt.MEDIA_PLAYER_SUPPORT_REPEAT_SET != 0) + +/** Returns whether shuffle mode is currently enabled. */ +internal fun Entity.getShuffle(): Boolean = + if (domain == MEDIA_PLAYER_DOMAIN) attributes["shuffle"] as? Boolean ?: false else false diff --git a/common/src/main/kotlin/io/homeassistant/companion/android/common/data/mediacontrol/MediaControlRepositoryImpl.kt b/common/src/main/kotlin/io/homeassistant/companion/android/common/data/mediacontrol/MediaControlRepositoryImpl.kt index 6b0e57a8567..5cdfdfe91c5 100644 --- a/common/src/main/kotlin/io/homeassistant/companion/android/common/data/mediacontrol/MediaControlRepositoryImpl.kt +++ b/common/src/main/kotlin/io/homeassistant/companion/android/common/data/mediacontrol/MediaControlRepositoryImpl.kt @@ -8,12 +8,17 @@ import io.homeassistant.companion.android.common.data.integration.getMediaArtist import io.homeassistant.companion.android.common.data.integration.getMediaDuration import io.homeassistant.companion.android.common.data.integration.getMediaPosition import io.homeassistant.companion.android.common.data.integration.getMediaTitle +import io.homeassistant.companion.android.common.data.integration.getShuffle import io.homeassistant.companion.android.common.data.integration.getVolumeMuted import io.homeassistant.companion.android.common.data.integration.supportsNextTrack import io.homeassistant.companion.android.common.data.integration.supportsPause import io.homeassistant.companion.android.common.data.integration.supportsPlay import io.homeassistant.companion.android.common.data.integration.supportsPreviousTrack +import io.homeassistant.companion.android.common.data.integration.supportsRepeatSet import io.homeassistant.companion.android.common.data.integration.supportsSeek +import io.homeassistant.companion.android.common.data.integration.supportsShuffleSet +import io.homeassistant.companion.android.common.data.integration.supportsStop +import io.homeassistant.companion.android.common.data.integration.supportsVolumeMute import io.homeassistant.companion.android.common.data.integration.supportsVolumeSet import io.homeassistant.companion.android.common.data.servers.ServerManager import io.homeassistant.companion.android.database.mediacontrol.MediaControlConfig @@ -115,6 +120,12 @@ private fun Entity.toMediaControlState(serverId: Int): MediaControlState { else -> MediaPlaybackState.Off } + val repeatMode = when (attributes["repeat"]?.toString()) { + "one" -> MediaRepeatMode.One + "all" -> MediaRepeatMode.All + else -> MediaRepeatMode.Off + } + return MediaControlState( entityId = entityId, serverId = serverId, @@ -131,8 +142,14 @@ private fun Entity.toMediaControlState(serverId: Int): MediaControlState { supportsPreviousTrack = supportsPreviousTrack(), supportsNextTrack = supportsNextTrack(), supportsVolumeSet = supportsVolumeSet(), + supportsStop = supportsStop(), + supportsMute = supportsVolumeMute(), + supportsShuffleSet = supportsShuffleSet(), + supportsRepeatSet = supportsRepeatSet(), volumeLevel = if (supportsVolumeSet()) (attributes["volume_level"] as? Number)?.toFloat() else null, isVolumeMuted = getVolumeMuted(), + shuffle = getShuffle(), + repeatMode = repeatMode, entityFriendlyName = attributes["friendly_name"] as? String, ) } diff --git a/common/src/main/kotlin/io/homeassistant/companion/android/common/data/mediacontrol/MediaControlState.kt b/common/src/main/kotlin/io/homeassistant/companion/android/common/data/mediacontrol/MediaControlState.kt index 0efa953bea6..e3fd3b75897 100644 --- a/common/src/main/kotlin/io/homeassistant/companion/android/common/data/mediacontrol/MediaControlState.kt +++ b/common/src/main/kotlin/io/homeassistant/companion/android/common/data/mediacontrol/MediaControlState.kt @@ -11,6 +11,16 @@ sealed interface MediaPlaybackState { data object Off : MediaPlaybackState } +/** + * Represents the repeat mode of a media player entity, matching Home Assistant's repeat attribute + * values: "off", "one", and "all". + */ +sealed interface MediaRepeatMode { + data object Off : MediaRepeatMode + data object One : MediaRepeatMode + data object All : MediaRepeatMode +} + /** * Captures all the information from a Home Assistant media_player entity that is needed * to populate an Android MediaSession. @@ -31,7 +41,13 @@ data class MediaControlState( val supportsPreviousTrack: Boolean, val supportsNextTrack: Boolean, val supportsVolumeSet: Boolean, + val supportsStop: Boolean, + val supportsMute: Boolean, + val supportsShuffleSet: Boolean, + val supportsRepeatSet: Boolean, val volumeLevel: Float?, val isVolumeMuted: Boolean, + val shuffle: Boolean, + val repeatMode: MediaRepeatMode, val entityFriendlyName: String?, ) diff --git a/common/src/test/kotlin/io/homeassistant/companion/android/common/data/mediacontrol/MediaControlRepositoryImplTest.kt b/common/src/test/kotlin/io/homeassistant/companion/android/common/data/mediacontrol/MediaControlRepositoryImplTest.kt index 8f31569ad79..f67fc693dba 100644 --- a/common/src/test/kotlin/io/homeassistant/companion/android/common/data/mediacontrol/MediaControlRepositoryImplTest.kt +++ b/common/src/test/kotlin/io/homeassistant/companion/android/common/data/mediacontrol/MediaControlRepositoryImplTest.kt @@ -327,6 +327,102 @@ class MediaControlRepositoryImplTest { awaitComplete() } } + + @Test + fun `Given entity with STOP support then supportsStop is true`() = runTest { + val entityState = entityWithVolumeAttributes( + mapOf("supported_features" to EntityExt.MEDIA_PLAYER_SUPPORT_STOP), + ) + coEvery { + webSocketRepository.getCompressedStateAndChanges(any()) + } returns flowOf(CompressedStateChangedEvent(added = mapOf("media_player.test" to entityState))) + + repository.observeEntityState(testConfig).test { + assertTrue(awaitItem()!!.supportsStop) + awaitComplete() + } + } + + @Test + fun `Given entity with VOLUME_MUTE support then supportsMute is true`() = runTest { + val entityState = entityWithVolumeAttributes( + mapOf("supported_features" to EntityExt.MEDIA_PLAYER_SUPPORT_VOLUME_MUTE), + ) + coEvery { + webSocketRepository.getCompressedStateAndChanges(any()) + } returns flowOf(CompressedStateChangedEvent(added = mapOf("media_player.test" to entityState))) + + repository.observeEntityState(testConfig).test { + assertTrue(awaitItem()!!.supportsMute) + awaitComplete() + } + } + + @Test + fun `Given entity with SHUFFLE_SET support and shuffle true then supportsShuffleSet and shuffle are true`() = runTest { + val entityState = entityWithVolumeAttributes( + mapOf( + "supported_features" to EntityExt.MEDIA_PLAYER_SUPPORT_SHUFFLE_SET, + "shuffle" to true, + ), + ) + coEvery { + webSocketRepository.getCompressedStateAndChanges(any()) + } returns flowOf(CompressedStateChangedEvent(added = mapOf("media_player.test" to entityState))) + + repository.observeEntityState(testConfig).test { + val state = awaitItem()!! + assertTrue(state.supportsShuffleSet) + assertTrue(state.shuffle) + awaitComplete() + } + } + + @Test + fun `Given entity with REPEAT_SET support and repeat all then supportsRepeatSet is true and repeatMode is All`() = runTest { + val entityState = entityWithVolumeAttributes( + mapOf( + "supported_features" to EntityExt.MEDIA_PLAYER_SUPPORT_REPEAT_SET, + "repeat" to "all", + ), + ) + coEvery { + webSocketRepository.getCompressedStateAndChanges(any()) + } returns flowOf(CompressedStateChangedEvent(added = mapOf("media_player.test" to entityState))) + + repository.observeEntityState(testConfig).test { + val state = awaitItem()!! + assertTrue(state.supportsRepeatSet) + assertEquals(MediaRepeatMode.All, state.repeatMode) + awaitComplete() + } + } + + @Test + fun `Given entity with repeat one then repeatMode is One`() = runTest { + val entityState = entityWithVolumeAttributes(mapOf("repeat" to "one")) + coEvery { + webSocketRepository.getCompressedStateAndChanges(any()) + } returns flowOf(CompressedStateChangedEvent(added = mapOf("media_player.test" to entityState))) + + repository.observeEntityState(testConfig).test { + assertEquals(MediaRepeatMode.One, awaitItem()!!.repeatMode) + awaitComplete() + } + } + + @Test + fun `Given entity with no repeat attribute then repeatMode is Off`() = runTest { + val entityState = entityWithVolumeAttributes(emptyMap()) + coEvery { + webSocketRepository.getCompressedStateAndChanges(any()) + } returns flowOf(CompressedStateChangedEvent(added = mapOf("media_player.test" to entityState))) + + repository.observeEntityState(testConfig).test { + assertEquals(MediaRepeatMode.Off, awaitItem()!!.repeatMode) + awaitComplete() + } + } } @Nested From 8375610bbe42f229aca6f30417d2dd02aa0d92da Mon Sep 17 00:00:00 2001 From: Fletcher Dostie Date: Sat, 28 Mar 2026 21:26:59 -0700 Subject: [PATCH 024/114] Expose more metadata fields from media player entity --- .../mediacontrol/HaRemoteMediaPlayer.kt | 24 ++++ .../mediacontrol/HaRemoteMediaPlayerTest.kt | 112 ++++++++++++++++++ .../android/common/data/integration/Entity.kt | 24 ++++ .../MediaControlRepositoryImpl.kt | 12 ++ .../data/mediacontrol/MediaControlState.kt | 6 + .../MediaControlRepositoryImplTest.kt | 93 +++++++++++++++ 6 files changed, 271 insertions(+) diff --git a/app/src/main/kotlin/io/homeassistant/companion/android/mediacontrol/HaRemoteMediaPlayer.kt b/app/src/main/kotlin/io/homeassistant/companion/android/mediacontrol/HaRemoteMediaPlayer.kt index 489bb8216be..853827f7350 100644 --- a/app/src/main/kotlin/io/homeassistant/companion/android/mediacontrol/HaRemoteMediaPlayer.kt +++ b/app/src/main/kotlin/io/homeassistant/companion/android/mediacontrol/HaRemoteMediaPlayer.kt @@ -91,6 +91,11 @@ class HaRemoteMediaPlayer(looper: Looper, private val commandCallback: CommandCa .setTitle(state.title) .setArtist(state.artist) .setAlbumTitle(state.albumName) + .setAlbumArtist(state.albumArtist) + .setTrackNumber(state.mediaTrack) + .setStation(state.mediaChannel) + .setSubtitle(state.mediaSeriesTitle ?: state.appName) + .setMediaType(state.mediaContentType?.toMedia3MediaType()) artworkBytes?.let { metadataBuilder.setArtworkData(it, MediaMetadata.PICTURE_TYPE_FRONT_COVER) } @@ -231,6 +236,11 @@ class HaRemoteMediaPlayer(looper: Looper, private val commandCallback: CommandCa .setTitle(state.title) .setArtist(state.artist) .setAlbumTitle(state.albumName) + .setAlbumArtist(state.albumArtist) + .setTrackNumber(state.mediaTrack) + .setStation(state.mediaChannel) + .setSubtitle(state.mediaSeriesTitle ?: state.appName) + .setMediaType(state.mediaContentType?.toMedia3MediaType()) artworkBytes?.let { metadataBuilder.setArtworkData(it, MediaMetadata.PICTURE_TYPE_FRONT_COVER) } val currentItem = MediaItemData.Builder(state.entityId) .setMediaMetadata(metadataBuilder.build()) @@ -284,6 +294,20 @@ class HaRemoteMediaPlayer(looper: Looper, private val commandCallback: CommandCa return builder.build() } + /** + * Maps a Home Assistant media_content_type string to the corresponding Media3 media type + * constant, or null if there is no suitable mapping. + */ + private fun String.toMedia3MediaType(): Int? = when (this) { + "music" -> MediaMetadata.MEDIA_TYPE_MUSIC + "tvshow", "episode" -> MediaMetadata.MEDIA_TYPE_TV_SHOW + "movie" -> MediaMetadata.MEDIA_TYPE_MOVIE + "video" -> MediaMetadata.MEDIA_TYPE_VIDEO + "channel" -> MediaMetadata.MEDIA_TYPE_TV_CHANNEL + "playlist" -> MediaMetadata.MEDIA_TYPE_PLAYLIST + else -> null + } + private companion object { const val DURATION_UNSET_US = androidx.media3.common.C.TIME_UNSET const val CURRENT_ITEM_INDEX = 1 diff --git a/app/src/test/kotlin/io/homeassistant/companion/android/mediacontrol/HaRemoteMediaPlayerTest.kt b/app/src/test/kotlin/io/homeassistant/companion/android/mediacontrol/HaRemoteMediaPlayerTest.kt index a146cf5974b..4b68efa34c3 100644 --- a/app/src/test/kotlin/io/homeassistant/companion/android/mediacontrol/HaRemoteMediaPlayerTest.kt +++ b/app/src/test/kotlin/io/homeassistant/companion/android/mediacontrol/HaRemoteMediaPlayerTest.kt @@ -9,6 +9,7 @@ import io.mockk.mockk import io.mockk.verify import org.junit.Assert.assertEquals import org.junit.Assert.assertFalse +import org.junit.Assert.assertNull import org.junit.Assert.assertTrue import org.junit.Before import org.junit.Test @@ -52,6 +53,12 @@ class HaRemoteMediaPlayerTest { shuffle: Boolean = false, repeatMode: MediaRepeatMode = MediaRepeatMode.Off, entityFriendlyName: String? = null, + albumArtist: String? = null, + mediaContentType: String? = null, + mediaTrack: Int? = null, + mediaChannel: String? = null, + mediaSeriesTitle: String? = null, + appName: String? = null, ) = MediaControlState( entityId = "media_player.test", serverId = 1, @@ -77,6 +84,12 @@ class HaRemoteMediaPlayerTest { shuffle = shuffle, repeatMode = repeatMode, entityFriendlyName = entityFriendlyName, + albumArtist = albumArtist, + mediaContentType = mediaContentType, + mediaTrack = mediaTrack, + mediaChannel = mediaChannel, + mediaSeriesTitle = mediaSeriesTitle, + appName = appName, ) // -- getState tests -- @@ -146,6 +159,105 @@ class HaRemoteMediaPlayerTest { assertEquals("My Album", metadata.albumTitle?.toString()) } + @Test + fun `Given state with album artist when getState then albumArtist is populated`() { + player.updateState( + state = createState(albumArtist = "Various Artists"), + artworkPngBytes = null, + ) + shadowOf(Looper.getMainLooper()).idle() + + assertEquals("Various Artists", player.mediaMetadata.albumArtist?.toString()) + } + + @Test + fun `Given state with track number when getState then trackNumber is populated`() { + player.updateState( + state = createState(mediaTrack = 5), + artworkPngBytes = null, + ) + shadowOf(Looper.getMainLooper()).idle() + + assertEquals(5, player.mediaMetadata.trackNumber) + } + + @Test + fun `Given state with channel when getState then station is populated`() { + player.updateState( + state = createState(mediaChannel = "BBC Radio 4"), + artworkPngBytes = null, + ) + shadowOf(Looper.getMainLooper()).idle() + + assertEquals("BBC Radio 4", player.mediaMetadata.station?.toString()) + } + + @Test + fun `Given state with series title when getState then subtitle is series title`() { + player.updateState( + state = createState(mediaSeriesTitle = "Breaking Bad", appName = "Plex"), + artworkPngBytes = null, + ) + shadowOf(Looper.getMainLooper()).idle() + + assertEquals("Breaking Bad", player.mediaMetadata.subtitle?.toString()) + } + + @Test + fun `Given state with app name but no series title when getState then subtitle is app name`() { + player.updateState( + state = createState(mediaSeriesTitle = null, appName = "Spotify"), + artworkPngBytes = null, + ) + shadowOf(Looper.getMainLooper()).idle() + + assertEquals("Spotify", player.mediaMetadata.subtitle?.toString()) + } + + @Test + fun `Given state with music content type when getState then mediaType is MEDIA_TYPE_MUSIC`() { + player.updateState( + state = createState(mediaContentType = "music"), + artworkPngBytes = null, + ) + shadowOf(Looper.getMainLooper()).idle() + + assertEquals(androidx.media3.common.MediaMetadata.MEDIA_TYPE_MUSIC, player.mediaMetadata.mediaType) + } + + @Test + fun `Given state with tvshow content type when getState then mediaType is MEDIA_TYPE_TV_SHOW`() { + player.updateState( + state = createState(mediaContentType = "tvshow"), + artworkPngBytes = null, + ) + shadowOf(Looper.getMainLooper()).idle() + + assertEquals(androidx.media3.common.MediaMetadata.MEDIA_TYPE_TV_SHOW, player.mediaMetadata.mediaType) + } + + @Test + fun `Given state with episode content type when getState then mediaType is MEDIA_TYPE_TV_SHOW`() { + player.updateState( + state = createState(mediaContentType = "episode"), + artworkPngBytes = null, + ) + shadowOf(Looper.getMainLooper()).idle() + + assertEquals(androidx.media3.common.MediaMetadata.MEDIA_TYPE_TV_SHOW, player.mediaMetadata.mediaType) + } + + @Test + fun `Given state with unknown content type when getState then mediaType is null`() { + player.updateState( + state = createState(mediaContentType = "game"), + artworkPngBytes = null, + ) + shadowOf(Looper.getMainLooper()).idle() + + assertNull(player.mediaMetadata.mediaType) + } + @Test fun `Given state with duration and position when getState then timeline has correct values`() { player.updateState( diff --git a/common/src/main/kotlin/io/homeassistant/companion/android/common/data/integration/Entity.kt b/common/src/main/kotlin/io/homeassistant/companion/android/common/data/integration/Entity.kt index dcff1f0c20d..91de5cc0141 100644 --- a/common/src/main/kotlin/io/homeassistant/companion/android/common/data/integration/Entity.kt +++ b/common/src/main/kotlin/io/homeassistant/companion/android/common/data/integration/Entity.kt @@ -1364,3 +1364,27 @@ internal fun Entity.supportsRepeatSet(): Boolean = domain == MEDIA_PLAYER_DOMAIN /** Returns whether shuffle mode is currently enabled. */ internal fun Entity.getShuffle(): Boolean = if (domain == MEDIA_PLAYER_DOMAIN) attributes["shuffle"] as? Boolean ?: false else false + +/** Returns the album artist attribute directly, without falling back to media_artist. */ +internal fun Entity.getMediaAlbumArtist(): String? = + if (domain == MEDIA_PLAYER_DOMAIN) attributes["media_album_artist"]?.toString() else null + +/** Returns the media content type (e.g. "music", "tvshow", "movie"), if available. */ +internal fun Entity.getMediaContentType(): String? = + if (domain == MEDIA_PLAYER_DOMAIN) attributes["media_content_type"]?.toString() else null + +/** Returns the track number within the album, if available. */ +internal fun Entity.getMediaTrack(): Int? = + if (domain == MEDIA_PLAYER_DOMAIN) attributes["media_track"]?.toString()?.toIntOrNull() else null + +/** Returns the TV or radio channel name, if available. */ +internal fun Entity.getMediaChannel(): String? = + if (domain == MEDIA_PLAYER_DOMAIN) attributes["media_channel"]?.toString() else null + +/** Returns the TV series title when playing an episode, if available. */ +internal fun Entity.getMediaSeriesTitle(): String? = + if (domain == MEDIA_PLAYER_DOMAIN) attributes["media_series_title"]?.toString() else null + +/** Returns the name of the app currently active on this media player, if available. */ +internal fun Entity.getAppName(): String? = + if (domain == MEDIA_PLAYER_DOMAIN) attributes["app_name"]?.toString() else null diff --git a/common/src/main/kotlin/io/homeassistant/companion/android/common/data/mediacontrol/MediaControlRepositoryImpl.kt b/common/src/main/kotlin/io/homeassistant/companion/android/common/data/mediacontrol/MediaControlRepositoryImpl.kt index 5cdfdfe91c5..d868a8a713e 100644 --- a/common/src/main/kotlin/io/homeassistant/companion/android/common/data/mediacontrol/MediaControlRepositoryImpl.kt +++ b/common/src/main/kotlin/io/homeassistant/companion/android/common/data/mediacontrol/MediaControlRepositoryImpl.kt @@ -2,12 +2,18 @@ package io.homeassistant.companion.android.common.data.mediacontrol import io.homeassistant.companion.android.common.data.integration.Entity import io.homeassistant.companion.android.common.data.integration.applyCompressedStateDiff +import io.homeassistant.companion.android.common.data.integration.getAppName import io.homeassistant.companion.android.common.data.integration.getEntityPictureUrl +import io.homeassistant.companion.android.common.data.integration.getMediaAlbumArtist import io.homeassistant.companion.android.common.data.integration.getMediaAlbumName import io.homeassistant.companion.android.common.data.integration.getMediaArtist +import io.homeassistant.companion.android.common.data.integration.getMediaChannel +import io.homeassistant.companion.android.common.data.integration.getMediaContentType import io.homeassistant.companion.android.common.data.integration.getMediaDuration import io.homeassistant.companion.android.common.data.integration.getMediaPosition +import io.homeassistant.companion.android.common.data.integration.getMediaSeriesTitle import io.homeassistant.companion.android.common.data.integration.getMediaTitle +import io.homeassistant.companion.android.common.data.integration.getMediaTrack import io.homeassistant.companion.android.common.data.integration.getShuffle import io.homeassistant.companion.android.common.data.integration.getVolumeMuted import io.homeassistant.companion.android.common.data.integration.supportsNextTrack @@ -151,5 +157,11 @@ private fun Entity.toMediaControlState(serverId: Int): MediaControlState { shuffle = getShuffle(), repeatMode = repeatMode, entityFriendlyName = attributes["friendly_name"] as? String, + albumArtist = getMediaAlbumArtist(), + mediaContentType = getMediaContentType(), + mediaTrack = getMediaTrack(), + mediaChannel = getMediaChannel(), + mediaSeriesTitle = getMediaSeriesTitle(), + appName = getAppName(), ) } diff --git a/common/src/main/kotlin/io/homeassistant/companion/android/common/data/mediacontrol/MediaControlState.kt b/common/src/main/kotlin/io/homeassistant/companion/android/common/data/mediacontrol/MediaControlState.kt index e3fd3b75897..c8b79999572 100644 --- a/common/src/main/kotlin/io/homeassistant/companion/android/common/data/mediacontrol/MediaControlState.kt +++ b/common/src/main/kotlin/io/homeassistant/companion/android/common/data/mediacontrol/MediaControlState.kt @@ -50,4 +50,10 @@ data class MediaControlState( val shuffle: Boolean, val repeatMode: MediaRepeatMode, val entityFriendlyName: String?, + val albumArtist: String? = null, + val mediaContentType: String? = null, + val mediaTrack: Int? = null, + val mediaChannel: String? = null, + val mediaSeriesTitle: String? = null, + val appName: String? = null, ) diff --git a/common/src/test/kotlin/io/homeassistant/companion/android/common/data/mediacontrol/MediaControlRepositoryImplTest.kt b/common/src/test/kotlin/io/homeassistant/companion/android/common/data/mediacontrol/MediaControlRepositoryImplTest.kt index f67fc693dba..96baad97a56 100644 --- a/common/src/test/kotlin/io/homeassistant/companion/android/common/data/mediacontrol/MediaControlRepositoryImplTest.kt +++ b/common/src/test/kotlin/io/homeassistant/companion/android/common/data/mediacontrol/MediaControlRepositoryImplTest.kt @@ -425,6 +425,99 @@ class MediaControlRepositoryImplTest { } } + @Nested + inner class MetadataMappingTest { + + private fun entityWithAttributes(attributes: Map) = CompressedEntityState( + state = JsonPrimitive("playing"), + attributes = attributes, + lastChanged = 1000.0, + lastUpdated = 1000.0, + ) + + private fun emitEntity(attributes: Map) { + coEvery { + webSocketRepository.getCompressedStateAndChanges(any()) + } returns flowOf(CompressedStateChangedEvent(added = mapOf("media_player.test" to entityWithAttributes(attributes)))) + } + + @Test + fun `Given entity with media_album_artist then albumArtist is set`() = runTest { + emitEntity(mapOf("media_album_artist" to "Various Artists")) + + repository.observeEntityState(testConfig).test { + assertEquals("Various Artists", awaitItem()?.albumArtist) + awaitComplete() + } + } + + @Test + fun `Given entity with media_content_type then mediaContentType is set`() = runTest { + emitEntity(mapOf("media_content_type" to "music")) + + repository.observeEntityState(testConfig).test { + assertEquals("music", awaitItem()?.mediaContentType) + awaitComplete() + } + } + + @Test + fun `Given entity with media_track then mediaTrack is set`() = runTest { + emitEntity(mapOf("media_track" to 3)) + + repository.observeEntityState(testConfig).test { + assertEquals(3, awaitItem()?.mediaTrack) + awaitComplete() + } + } + + @Test + fun `Given entity with media_channel then mediaChannel is set`() = runTest { + emitEntity(mapOf("media_channel" to "BBC Radio 4")) + + repository.observeEntityState(testConfig).test { + assertEquals("BBC Radio 4", awaitItem()?.mediaChannel) + awaitComplete() + } + } + + @Test + fun `Given entity with media_series_title then mediaSeriesTitle is set`() = runTest { + emitEntity(mapOf("media_series_title" to "Breaking Bad")) + + repository.observeEntityState(testConfig).test { + assertEquals("Breaking Bad", awaitItem()?.mediaSeriesTitle) + awaitComplete() + } + } + + @Test + fun `Given entity with app_name then appName is set`() = runTest { + emitEntity(mapOf("app_name" to "Netflix")) + + repository.observeEntityState(testConfig).test { + assertEquals("Netflix", awaitItem()?.appName) + awaitComplete() + } + } + + @Test + fun `Given entity without new metadata attributes then all new fields are null`() = runTest { + emitEntity(mapOf("media_title" to "Song")) + + repository.observeEntityState(testConfig).test { + val state = awaitItem()!! + assertNull(state.albumArtist) + assertNull(state.mediaContentType) + assertNull(state.mediaTrack) + assertNull(state.mediaChannel) + assertNull(state.mediaSeriesTitle) + assertNull(state.appName) + awaitComplete() + } + } + } + @Nested inner class DistinctUntilChangedTest { From 045ede18fc950ed96065f82f700cfb3d6f9e75fd Mon Sep 17 00:00:00 2001 From: Fletcher Dostie Date: Sat, 28 Mar 2026 23:40:17 -0700 Subject: [PATCH 025/114] Make media controls settings page more consistent with other settings --- .../MediaControlSettingsViewModel.kt | 25 ++++-- .../views/MediaControlSettingsView.kt | 89 ++++++++++++------- common/src/main/res/values/strings.xml | 6 +- 3 files changed, 81 insertions(+), 39 deletions(-) diff --git a/app/src/main/kotlin/io/homeassistant/companion/android/settings/mediacontrol/MediaControlSettingsViewModel.kt b/app/src/main/kotlin/io/homeassistant/companion/android/settings/mediacontrol/MediaControlSettingsViewModel.kt index cf59a351fde..e39e68b2a7b 100644 --- a/app/src/main/kotlin/io/homeassistant/companion/android/settings/mediacontrol/MediaControlSettingsViewModel.kt +++ b/app/src/main/kotlin/io/homeassistant/companion/android/settings/mediacontrol/MediaControlSettingsViewModel.kt @@ -46,6 +46,8 @@ data class MediaControlSettingsUiState( val configuredEntities: List = emptyList(), // Server selection for the entity picker val selectedServerId: Int = ServerManager.SERVER_ID_ACTIVE, + // True while entities and registries are being loaded from the server + val isLoading: Boolean = true, ) @HiltViewModel @@ -77,9 +79,11 @@ class MediaControlSettingsViewModel @Inject constructor( viewModelScope.launch { val loadedServers = serverManager.servers() val defaultServerId = serverManager.getServer()?.id ?: ServerManager.SERVER_ID_ACTIVE - _uiState.update { it.copy(servers = loadedServers, selectedServerId = defaultServerId) } - val results = loadedServers.map { server -> + // Load configured entities (local DB) and server registries (network) concurrently. + // Emit the configured list as soon as the DB read completes so the list appears immediately. + val configuredEntitiesDeferred = async { mediaControlRepository.getConfiguredEntities() } + val registryResults = loadedServers.map { server -> async { ServerRegistries( serverId = server.id, @@ -95,22 +99,31 @@ class MediaControlSettingsViewModel @Inject constructor( }, ) } - }.awaitAll() + } + + val configuredEntities = configuredEntitiesDeferred.await() + _uiState.update { + it.copy( + servers = loadedServers, + selectedServerId = defaultServerId, + configuredEntities = configuredEntities, + ) + } + + val results = registryResults.awaitAll() results.forEach { registries -> entitiesPerServer[registries.serverId] = registries.entities entityRegistriesPerServer[registries.serverId] = registries.entityRegistry deviceRegistriesPerServer[registries.serverId] = registries.deviceRegistry areaRegistriesPerServer[registries.serverId] = registries.areaRegistry } - - val configuredEntities = mediaControlRepository.getConfiguredEntities() _uiState.update { state -> state.copy( entitiesPerServer = entitiesPerServer.toMap(), entityRegistryPerServer = entityRegistriesPerServer.toMap(), deviceRegistryPerServer = deviceRegistriesPerServer.toMap(), areaRegistryPerServer = areaRegistriesPerServer.toMap(), - configuredEntities = configuredEntities, + isLoading = false, ) } } diff --git a/app/src/main/kotlin/io/homeassistant/companion/android/settings/mediacontrol/views/MediaControlSettingsView.kt b/app/src/main/kotlin/io/homeassistant/companion/android/settings/mediacontrol/views/MediaControlSettingsView.kt index b6b98de168c..1cc073449f8 100644 --- a/app/src/main/kotlin/io/homeassistant/companion/android/settings/mediacontrol/views/MediaControlSettingsView.kt +++ b/app/src/main/kotlin/io/homeassistant/companion/android/settings/mediacontrol/views/MediaControlSettingsView.kt @@ -1,6 +1,7 @@ package io.homeassistant.companion.android.settings.mediacontrol.views import androidx.compose.animation.core.animateDpAsState +import androidx.compose.foundation.layout.Box import androidx.compose.foundation.layout.Column import androidx.compose.foundation.layout.PaddingValues import androidx.compose.foundation.layout.Row @@ -11,11 +12,11 @@ import androidx.compose.foundation.layout.padding import androidx.compose.foundation.layout.size import androidx.compose.foundation.lazy.LazyColumn import androidx.compose.foundation.lazy.LazyListItemInfo -import androidx.compose.foundation.lazy.items import androidx.compose.foundation.lazy.itemsIndexed import androidx.compose.foundation.lazy.rememberLazyListState import androidx.compose.material.icons.Icons import androidx.compose.material.icons.filled.Clear +import androidx.compose.material3.CircularProgressIndicator import androidx.compose.material3.HorizontalDivider import androidx.compose.material3.Surface import androidx.compose.material3.Text @@ -25,6 +26,7 @@ import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier import androidx.compose.ui.graphics.ColorFilter import androidx.compose.ui.res.stringResource +import androidx.compose.ui.text.style.TextAlign import androidx.compose.ui.tooling.preview.Preview import androidx.compose.ui.unit.dp import androidx.lifecycle.compose.collectAsStateWithLifecycle @@ -91,7 +93,7 @@ internal fun MediaControlSettingsContent( LazyColumn( state = lazyListState, - contentPadding = PaddingValues(all = 16.dp) + safeBottomPaddingValues(applyHorizontal = false), + contentPadding = PaddingValues(vertical = 16.dp) + safeBottomPaddingValues(applyHorizontal = false), modifier = modifier, ) { item { @@ -99,37 +101,47 @@ internal fun MediaControlSettingsContent( text = stringResource(R.string.media_control_description), style = HATextStyle.Body, color = colorScheme.colorTextSecondary, + textAlign = TextAlign.Start, + modifier = Modifier.padding(horizontal = 16.dp), ) Spacer(modifier = Modifier.size(16.dp)) } - if (uiState.servers.size > 1) { + if (uiState.isLoading) { item { - ServerExposedDropdownMenu( - servers = uiState.servers, - current = uiState.selectedServerId, - onSelected = onServerSelected, - title = R.string.server, - modifier = Modifier.fillMaxWidth(), - ) - Spacer(modifier = Modifier.size(8.dp)) + Box( + modifier = Modifier.fillMaxWidth().padding(top = 16.dp), + contentAlignment = Alignment.Center, + ) { + CircularProgressIndicator() + } + } + } else { + if (uiState.servers.size > 1) { + item { + ServerExposedDropdownMenu( + servers = uiState.servers, + current = uiState.selectedServerId, + onSelected = onServerSelected, + title = R.string.server, + modifier = Modifier.fillMaxWidth().padding(horizontal = 16.dp), + ) + Spacer(modifier = Modifier.size(8.dp)) + } } - } - item { - EntityPicker( - entities = availableEntities, - selectedEntityId = null, - onEntitySelectedId = onEntitySelected, - onEntityCleared = {}, - addButtonText = stringResource(R.string.media_control_select_entity), - entityRegistry = uiState.entityRegistryPerServer[uiState.selectedServerId] ?: emptyList(), - deviceRegistry = uiState.deviceRegistryPerServer[uiState.selectedServerId] ?: emptyList(), - areaRegistry = uiState.areaRegistryPerServer[uiState.selectedServerId] ?: emptyList(), - ) - if (uiState.configuredEntities.isNotEmpty()) { - Spacer(modifier = Modifier.size(8.dp)) - HorizontalDivider() + item { + EntityPicker( + entities = availableEntities, + selectedEntityId = null, + onEntitySelectedId = onEntitySelected, + onEntityCleared = {}, + addButtonText = stringResource(R.string.media_control_select_entity), + entityRegistry = uiState.entityRegistryPerServer[uiState.selectedServerId] ?: emptyList(), + deviceRegistry = uiState.deviceRegistryPerServer[uiState.selectedServerId] ?: emptyList(), + areaRegistry = uiState.areaRegistryPerServer[uiState.selectedServerId] ?: emptyList(), + modifier = Modifier.padding(horizontal = 16.dp), + ) } } @@ -173,26 +185,28 @@ private fun ReorderableCollectionItemScope.ConfiguredEntityRow( val elevation = animateDpAsState(targetValue = if (isDragging) 8.dp else 0.dp) val displayName = entityName ?: config.entityId - Surface(shadowElevation = elevation.value) { + Surface(color = colorScheme.colorSurfaceLow, shadowElevation = elevation.value) { Row( verticalAlignment = Alignment.CenterVertically, modifier = Modifier .fillMaxWidth() - .heightIn(min = 56.dp) + .heightIn(min = 72.dp) .longPressDraggableHandle(onDragStopped = { onReorderComplete() }) .padding(vertical = 4.dp), ) { - Column(modifier = Modifier.weight(1f)) { + Column(modifier = Modifier.weight(1f).padding(start = 16.dp)) { Text( text = displayName, style = HATextStyle.Body, color = colorScheme.colorTextPrimary, + textAlign = TextAlign.Start, ) if (subtitle != null) { Text( text = subtitle, style = HATextStyle.BodyMedium, color = colorScheme.colorTextSecondary, + textAlign = TextAlign.Start, ) } } @@ -214,12 +228,27 @@ private fun ReorderableCollectionItemScope.ConfiguredEntityRow( } } +@Preview +@Composable +private fun MediaControlSettingsContentLoadingPreview() { + HAThemeForPreview { + MediaControlSettingsContent( + uiState = MediaControlSettingsUiState(isLoading = true), + onServerSelected = {}, + onEntitySelected = {}, + onRemoveEntity = {}, + onMove = { _, _ -> }, + onReorderComplete = {}, + ) + } +} + @Preview @Composable private fun MediaControlSettingsContentEmptyPreview() { HAThemeForPreview { MediaControlSettingsContent( - uiState = MediaControlSettingsUiState(), + uiState = MediaControlSettingsUiState(isLoading = false), onServerSelected = {}, onEntitySelected = {}, onRemoveEntity = {}, diff --git a/common/src/main/res/values/strings.xml b/common/src/main/res/values/strings.xml index d98f8fa2c3e..91a7b3636f4 100644 --- a/common/src/main/res/values/strings.xml +++ b/common/src/main/res/values/strings.xml @@ -452,9 +452,9 @@ What is your Home Assistant address? Unable to add Matter device? Media controls - Control a media player entity from the notification shade - Select one or more media_player entities to show as native media controls in the notification shade. You can control playback without opening the app. - Select media player entity + Control a media player from the notification shade + Select one or more media player entities to show as native media controls in the notification shade. You can control playback without opening the app. + Add media player Add entity Remove entity Clear all From 1290d3eff40c56b19834d5ce57709386511dd5ab Mon Sep 17 00:00:00 2001 From: Fletcher Dostie Date: Sat, 28 Mar 2026 23:56:03 -0700 Subject: [PATCH 026/114] Remove setContentBufferedPositionMs() call which is useless --- .../companion/android/mediacontrol/HaRemoteMediaPlayer.kt | 4 ---- 1 file changed, 4 deletions(-) diff --git a/app/src/main/kotlin/io/homeassistant/companion/android/mediacontrol/HaRemoteMediaPlayer.kt b/app/src/main/kotlin/io/homeassistant/companion/android/mediacontrol/HaRemoteMediaPlayer.kt index 853827f7350..472a976fefe 100644 --- a/app/src/main/kotlin/io/homeassistant/companion/android/mediacontrol/HaRemoteMediaPlayer.kt +++ b/app/src/main/kotlin/io/homeassistant/companion/android/mediacontrol/HaRemoteMediaPlayer.kt @@ -7,7 +7,6 @@ import androidx.media3.common.MediaMetadata import androidx.media3.common.PlaybackParameters import androidx.media3.common.Player import androidx.media3.common.SimpleBasePlayer -import androidx.media3.common.SimpleBasePlayer.PositionSupplier import androidx.media3.common.util.UnstableApi import com.google.common.util.concurrent.Futures import com.google.common.util.concurrent.ListenableFuture @@ -124,8 +123,6 @@ class HaRemoteMediaPlayer(looper: Looper, private val commandCallback: CommandCa val deviceVolume = state.volumeLevel?.let { (it * VOLUME_SCALE).toInt() } ?: 0 - val bufferedPositionMs = if (durationUs != DURATION_UNSET_US) durationUs / 1000 else positionMs - val media3RepeatMode = when (state.repeatMode) { is MediaRepeatMode.Off -> Player.REPEAT_MODE_OFF is MediaRepeatMode.One -> Player.REPEAT_MODE_ONE @@ -139,7 +136,6 @@ class HaRemoteMediaPlayer(looper: Looper, private val commandCallback: CommandCa .setPlaybackParameters(PlaybackParameters(PLAYBACK_SPEED)) .setCurrentMediaItemIndex(CURRENT_ITEM_INDEX) .setContentPositionMs(positionMs) - .setContentBufferedPositionMs(PositionSupplier.getConstant(bufferedPositionMs)) .setPlaylist(playlist) .setDeviceInfo(REMOTE_DEVICE_INFO) .setDeviceVolume(deviceVolume) From d36ba764d2a4a10249b86315b965b9559b70a19d Mon Sep 17 00:00:00 2001 From: Fletcher Dostie Date: Wed, 1 Apr 2026 00:08:45 -0700 Subject: [PATCH 027/114] Tapping media controls notification body opens the media player entity in the app --- .../android/mediacontrol/HaMediaSession.kt | 21 ++++++++++++++++++ .../android/webview/WebViewActivity.kt | 22 +++++++++++++------ 2 files changed, 36 insertions(+), 7 deletions(-) diff --git a/app/src/main/kotlin/io/homeassistant/companion/android/mediacontrol/HaMediaSession.kt b/app/src/main/kotlin/io/homeassistant/companion/android/mediacontrol/HaMediaSession.kt index 6cca4e12c95..5ea5f21e3f8 100644 --- a/app/src/main/kotlin/io/homeassistant/companion/android/mediacontrol/HaMediaSession.kt +++ b/app/src/main/kotlin/io/homeassistant/companion/android/mediacontrol/HaMediaSession.kt @@ -1,6 +1,8 @@ package io.homeassistant.companion.android.mediacontrol +import android.app.PendingIntent import android.content.Context +import android.content.Intent import android.graphics.Bitmap.CompressFormat import android.os.Looper import androidx.annotation.OptIn @@ -21,6 +23,7 @@ import io.homeassistant.companion.android.common.data.mediacontrol.MediaRepeatMo import io.homeassistant.companion.android.common.data.servers.ServerManager import io.homeassistant.companion.android.common.data.servers.firstUrlOrNull import io.homeassistant.companion.android.util.sensitive +import io.homeassistant.companion.android.webview.WebViewActivity import java.io.ByteArrayOutputStream import java.net.URL import kotlin.time.Duration.Companion.seconds @@ -146,6 +149,24 @@ class HaMediaSession @AssistedInject constructor( .setId("${config.serverId}_${config.entityId}") .setCallback(MediaSessionCallback()) .build() + + // FLAG_ACTIVITY_NEW_TASK is required when starting an activity from a service context + // (PendingIntents from notifications always fire in a non-Activity context). + // FLAG_ACTIVITY_SINGLE_TOP prevents stacking a redundant WebViewActivity if one is + // already at the top; onNewIntent delivers the path to the existing instance instead. + val tapIntent = WebViewActivity.newInstance( + context = context, + path = "entityId:${config.entityId}", + serverId = config.serverId, + ).apply { + flags = Intent.FLAG_ACTIVITY_NEW_TASK or Intent.FLAG_ACTIVITY_SINGLE_TOP + } + mediaSession.sessionActivity = PendingIntent.getActivity( + context, + "${config.serverId}:${config.entityId}".hashCode(), + tapIntent, + PendingIntent.FLAG_IMMUTABLE or PendingIntent.FLAG_UPDATE_CURRENT, + ) } /** diff --git a/app/src/main/kotlin/io/homeassistant/companion/android/webview/WebViewActivity.kt b/app/src/main/kotlin/io/homeassistant/companion/android/webview/WebViewActivity.kt index f94d1dfd076..d9d7da2efdc 100644 --- a/app/src/main/kotlin/io/homeassistant/companion/android/webview/WebViewActivity.kt +++ b/app/src/main/kotlin/io/homeassistant/companion/android/webview/WebViewActivity.kt @@ -1462,14 +1462,22 @@ class WebViewActivity : // https://github.com/home-assistant/core/blob/dev/homeassistant/core.py#L159 val pattern = "(?<=^entityId:)((?!.+__)(?!_)[\\da-z_]+(? Date: Thu, 2 Apr 2026 00:13:08 -0700 Subject: [PATCH 028/114] Address mechanical PR review comments from TimoPtr - Add try/catch in HaMediaSessionService.startIfConfigured() - Explain null return in onGetSession() with inline comment - Fix Timber log to include entity ID in callMediaAction - Add link comment for ARTWORK_SIZE_PX recommendation - Add @MainThread to HaRemoteMediaPlayer.updateState() and setConnecting() - Expand 3-item playlist comment explaining why it's needed - Fix VOLUME_SCALE comment to clarify Media3 range - Remove type param from flow<> builder in MediaControlRepositoryImpl - Add supportsMediaFeature() generic helper; refactor all supports*() as one-liner wrappers - Rename MediaControlSettingsView -> MediaControlSettingsScreen (file and composable) - Add TODO comment on ServerExposedDropdownMenu - Move MediaControlEntityConfig construction inside _uiState.update block - Add $serverId to Timber error in loadEntitiesForServer - Add HiltTestApplication @Config to HaMediaSession*Test classes - Replace LazyListItemInfo in ViewModel with plain keys (fromKey/toKey) - Add @RegisterExtension MainDispatcherJUnit5Extension to ViewModel test --- .../android/mediacontrol/HaMediaSession.kt | 5 +- .../mediacontrol/HaMediaSessionService.kt | 10 ++- .../mediacontrol/HaRemoteMediaPlayer.kt | 15 ++++- .../MediaControlSettingsFragment.kt | 4 +- .../MediaControlSettingsViewModel.kt | 19 +++--- ...sView.kt => MediaControlSettingsScreen.kt} | 8 +-- .../mediacontrol/HaMediaSessionServiceTest.kt | 3 +- .../mediacontrol/HaMediaSessionTest.kt | 3 +- .../MediaControlSettingsViewModelTest.kt | 36 ++++------ .../android/common/data/integration/Entity.kt | 32 ++++----- .../MediaControlRepositoryImpl.kt | 67 +++++++++---------- 11 files changed, 104 insertions(+), 98 deletions(-) rename app/src/main/kotlin/io/homeassistant/companion/android/settings/mediacontrol/views/{MediaControlSettingsView.kt => MediaControlSettingsScreen.kt} (97%) diff --git a/app/src/main/kotlin/io/homeassistant/companion/android/mediacontrol/HaMediaSession.kt b/app/src/main/kotlin/io/homeassistant/companion/android/mediacontrol/HaMediaSession.kt index 5ea5f21e3f8..7cf1cb03f58 100644 --- a/app/src/main/kotlin/io/homeassistant/companion/android/mediacontrol/HaMediaSession.kt +++ b/app/src/main/kotlin/io/homeassistant/companion/android/mediacontrol/HaMediaSession.kt @@ -219,7 +219,7 @@ class HaMediaSession @AssistedInject constructor( } catch (e: CancellationException) { throw e } catch (e: Exception) { - Timber.e(e, "Failed to call media action $action") + Timber.e(e, "Failed to call media action $action on ${config.entityId}") } } } @@ -311,6 +311,9 @@ class HaMediaSession @AssistedInject constructor( private companion object { val OBSERVATION_RETRY_DELAY = 5.seconds + + // 512px is the recommended size for MediaSession artwork per Android guidelines: + // https://developer.android.com/media/media3/session/now-playing#set-artwork const val ARTWORK_SIZE_PX = 512 const val ACTION_MEDIA_PLAY = "media_play" diff --git a/app/src/main/kotlin/io/homeassistant/companion/android/mediacontrol/HaMediaSessionService.kt b/app/src/main/kotlin/io/homeassistant/companion/android/mediacontrol/HaMediaSessionService.kt index 3228a8a5e9a..47fb6492279 100644 --- a/app/src/main/kotlin/io/homeassistant/companion/android/mediacontrol/HaMediaSessionService.kt +++ b/app/src/main/kotlin/io/homeassistant/companion/android/mediacontrol/HaMediaSessionService.kt @@ -45,6 +45,10 @@ class HaMediaSessionService : MediaSessionService() { .launchIn(serviceScope) } + // Returns null intentionally: Media3 routes each controller to the session whose ID matches + // the one it was constructed with. Returning a specific session here would cause all + // controllers (including the notification) to connect to that one session, breaking + // multi-session behavior where each entity has its own independent media control card. override fun onGetSession(controllerInfo: MediaSession.ControllerInfo): MediaSession? = null override fun onTaskRemoved(rootIntent: Intent?) { @@ -104,7 +108,11 @@ class HaMediaSessionService : MediaSessionService() { suspend fun startIfConfigured(context: Context, mediaControlRepository: MediaControlRepository) { if (mediaControlRepository.getConfiguredEntities().isNotEmpty()) { Timber.d("Media control entities configured, starting HaMediaSessionService") - context.startService(Intent(context, HaMediaSessionService::class.java)) + try { + context.startService(Intent(context, HaMediaSessionService::class.java)) + } catch (e: Exception) { + Timber.e(e, "Failed to start HaMediaSessionService") + } } } } diff --git a/app/src/main/kotlin/io/homeassistant/companion/android/mediacontrol/HaRemoteMediaPlayer.kt b/app/src/main/kotlin/io/homeassistant/companion/android/mediacontrol/HaRemoteMediaPlayer.kt index 472a976fefe..f2852e46fc3 100644 --- a/app/src/main/kotlin/io/homeassistant/companion/android/mediacontrol/HaRemoteMediaPlayer.kt +++ b/app/src/main/kotlin/io/homeassistant/companion/android/mediacontrol/HaRemoteMediaPlayer.kt @@ -50,8 +50,10 @@ class HaRemoteMediaPlayer(looper: Looper, private val commandCallback: CommandCa /** * Updates the internal state from a new [MediaControlState] and triggers a state refresh. + * Must be called on the main thread (the looper passed to [SimpleBasePlayer]). * @param artworkPngBytes Pre-compressed PNG bytes for album art (compress off main thread). */ + @androidx.annotation.MainThread fun updateState(state: MediaControlState?, artworkPngBytes: ByteArray?) { isConnecting = false mediaState = state @@ -64,7 +66,9 @@ class HaRemoteMediaPlayer(looper: Looper, private val commandCallback: CommandCa * Transitions to [STATE_BUFFERING] with the last known metadata visible but all * interactive commands disabled, so the notification stays visible without showing * stale controls. + * Must be called on the main thread (the looper passed to [SimpleBasePlayer]). */ + @androidx.annotation.MainThread fun setConnecting() { isConnecting = true invalidateState() @@ -113,8 +117,12 @@ class HaRemoteMediaPlayer(looper: Looper, private val commandCallback: CommandCa .setDurationUs(durationUs) .build() - // 3-item playlist with current at index 1 so SimpleBasePlayer's seekToNext/seekToPrevious - // find valid adjacent items instead of ignoring the seek on a single-item playlist. + // SimpleBasePlayer.seekToNext() / seekToPrevious() check hasNextMediaItem() / + // hasPreviousMediaItem() before calling handleSeek(). With a single-item playlist both + // return false, so the seek is silently dropped and handleSeek() is never invoked. + // Using a 3-item playlist with the real item at index 1 ensures valid adjacent items exist, + // so the seek reaches handleSeek() where seekCommand is used to dispatch to the + // correct HA action. val playlist = listOf( MediaItemData.Builder(PLACEHOLDER_PREVIOUS_ID).build(), currentItem, @@ -311,7 +319,8 @@ class HaRemoteMediaPlayer(looper: Looper, private val commandCallback: CommandCa const val PLACEHOLDER_PREVIOUS_ID = "__ha_previous__" const val PLACEHOLDER_NEXT_ID = "__ha_next__" - /** HA uses 0.0–1.0, Media3 uses integer 0–100. */ + // HA uses 0.0–1.0; we tell Media3 our volume range is 0–VOLUME_SCALE via + // REMOTE_DEVICE_INFO, so Media3 will call handleSetDeviceVolume with values in that range. const val VOLUME_SCALE = 100 val REMOTE_DEVICE_INFO: DeviceInfo = DeviceInfo.Builder(DeviceInfo.PLAYBACK_TYPE_REMOTE) diff --git a/app/src/main/kotlin/io/homeassistant/companion/android/settings/mediacontrol/MediaControlSettingsFragment.kt b/app/src/main/kotlin/io/homeassistant/companion/android/settings/mediacontrol/MediaControlSettingsFragment.kt index a477f41b277..c0d5cf8f2f3 100644 --- a/app/src/main/kotlin/io/homeassistant/companion/android/settings/mediacontrol/MediaControlSettingsFragment.kt +++ b/app/src/main/kotlin/io/homeassistant/companion/android/settings/mediacontrol/MediaControlSettingsFragment.kt @@ -15,7 +15,7 @@ import dagger.hilt.android.AndroidEntryPoint import io.homeassistant.companion.android.common.R as commonR import io.homeassistant.companion.android.mediacontrol.HaMediaSessionService import io.homeassistant.companion.android.settings.addHelpMenuProvider -import io.homeassistant.companion.android.settings.mediacontrol.views.MediaControlSettingsView +import io.homeassistant.companion.android.settings.mediacontrol.views.MediaControlSettingsScreen import kotlinx.coroutines.launch @AndroidEntryPoint @@ -25,7 +25,7 @@ class MediaControlSettingsFragment : Fragment() { override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View { return ComposeView(requireContext()).apply { setContent { - MediaControlSettingsView(viewModel = viewModel) + MediaControlSettingsScreen(viewModel = viewModel) } } } diff --git a/app/src/main/kotlin/io/homeassistant/companion/android/settings/mediacontrol/MediaControlSettingsViewModel.kt b/app/src/main/kotlin/io/homeassistant/companion/android/settings/mediacontrol/MediaControlSettingsViewModel.kt index e39e68b2a7b..1669d61f5e2 100644 --- a/app/src/main/kotlin/io/homeassistant/companion/android/settings/mediacontrol/MediaControlSettingsViewModel.kt +++ b/app/src/main/kotlin/io/homeassistant/companion/android/settings/mediacontrol/MediaControlSettingsViewModel.kt @@ -1,6 +1,5 @@ package io.homeassistant.companion.android.settings.mediacontrol -import androidx.compose.foundation.lazy.LazyListItemInfo import androidx.compose.runtime.Stable import androidx.lifecycle.ViewModel import androidx.lifecycle.viewModelScope @@ -139,11 +138,11 @@ class MediaControlSettingsViewModel @Inject constructor( * list, then persists the change immediately. Has no effect if the entity is already in the list. */ fun addEntity(entityId: String) { - val config = MediaControlEntityConfig( - serverId = _uiState.value.selectedServerId, - entityId = entityId, - ) _uiState.update { state -> + val config = MediaControlEntityConfig( + serverId = state.selectedServerId, + entityId = entityId, + ) if (state.configuredEntities.contains(config)) { state } else { @@ -164,12 +163,14 @@ class MediaControlSettingsViewModel @Inject constructor( /** * Moves a configured entity from one position to another in response to a drag gesture. * Does not persist — call [onReorderComplete] once the drag ends to save the final order. + * @param fromKey the list item key of the entity being dragged + * @param toKey the list item key of the target position */ - fun onMove(from: LazyListItemInfo, to: LazyListItemInfo) { + fun onMove(fromKey: Any, toKey: Any) { _uiState.update { state -> val list = state.configuredEntities.toMutableList() - val fromIndex = list.indexOfFirst { it == from.key } - val toIndex = list.indexOfFirst { it == to.key } + val fromIndex = list.indexOfFirst { it == fromKey } + val toIndex = list.indexOfFirst { it == toKey } if (fromIndex >= 0 && toIndex >= 0) { list.add(toIndex, list.removeAt(fromIndex)) } @@ -198,7 +199,7 @@ class MediaControlSettingsViewModel @Inject constructor( } catch (e: CancellationException) { throw e } catch (e: Exception) { - Timber.e(e, "Couldn't load media_player entities for server") + Timber.e(e, "Couldn't load media_player entities for server $serverId") emptyList() } diff --git a/app/src/main/kotlin/io/homeassistant/companion/android/settings/mediacontrol/views/MediaControlSettingsView.kt b/app/src/main/kotlin/io/homeassistant/companion/android/settings/mediacontrol/views/MediaControlSettingsScreen.kt similarity index 97% rename from app/src/main/kotlin/io/homeassistant/companion/android/settings/mediacontrol/views/MediaControlSettingsView.kt rename to app/src/main/kotlin/io/homeassistant/companion/android/settings/mediacontrol/views/MediaControlSettingsScreen.kt index 1cc073449f8..bbaa61e2063 100644 --- a/app/src/main/kotlin/io/homeassistant/companion/android/settings/mediacontrol/views/MediaControlSettingsView.kt +++ b/app/src/main/kotlin/io/homeassistant/companion/android/settings/mediacontrol/views/MediaControlSettingsScreen.kt @@ -11,7 +11,6 @@ import androidx.compose.foundation.layout.heightIn import androidx.compose.foundation.layout.padding import androidx.compose.foundation.layout.size import androidx.compose.foundation.lazy.LazyColumn -import androidx.compose.foundation.lazy.LazyListItemInfo import androidx.compose.foundation.lazy.itemsIndexed import androidx.compose.foundation.lazy.rememberLazyListState import androidx.compose.material.icons.Icons @@ -53,7 +52,7 @@ import sh.calvin.reorderable.rememberReorderableLazyListState /** Outer composable that extracts state from the ViewModel and delegates to the stateless content. */ @Composable -fun MediaControlSettingsView(viewModel: MediaControlSettingsViewModel, modifier: Modifier = Modifier) { +fun MediaControlSettingsScreen(viewModel: MediaControlSettingsViewModel, modifier: Modifier = Modifier) { val uiState by viewModel.uiState.collectAsStateWithLifecycle() HATheme { MediaControlSettingsContent( @@ -74,14 +73,14 @@ internal fun MediaControlSettingsContent( onServerSelected: (Int) -> Unit, onEntitySelected: (String) -> Unit, onRemoveEntity: (Int) -> Unit, - onMove: (LazyListItemInfo, LazyListItemInfo) -> Unit, + onMove: (Any, Any) -> Unit, onReorderComplete: () -> Unit, modifier: Modifier = Modifier, ) { val colorScheme = LocalHAColorScheme.current val lazyListState = rememberLazyListState() val reorderState = rememberReorderableLazyListState(lazyListState) { from, to -> - onMove(from, to) + onMove(from.key, to.key) } val availableEntities = uiState.entitiesPerServer[uiState.selectedServerId] @@ -119,6 +118,7 @@ internal fun MediaControlSettingsContent( } else { if (uiState.servers.size > 1) { item { + // TODO replace with Material3 composable https://github.com/home-assistant/android/issues/6664 ServerExposedDropdownMenu( servers = uiState.servers, current = uiState.selectedServerId, diff --git a/app/src/test/kotlin/io/homeassistant/companion/android/mediacontrol/HaMediaSessionServiceTest.kt b/app/src/test/kotlin/io/homeassistant/companion/android/mediacontrol/HaMediaSessionServiceTest.kt index e4591974d7b..8d6b42dcbaf 100644 --- a/app/src/test/kotlin/io/homeassistant/companion/android/mediacontrol/HaMediaSessionServiceTest.kt +++ b/app/src/test/kotlin/io/homeassistant/companion/android/mediacontrol/HaMediaSessionServiceTest.kt @@ -1,6 +1,7 @@ package io.homeassistant.companion.android.mediacontrol import android.content.Context +import dagger.hilt.android.testing.HiltTestApplication import io.homeassistant.companion.android.common.data.mediacontrol.MediaControlEntityConfig import io.homeassistant.companion.android.common.data.mediacontrol.MediaControlRepository import io.homeassistant.companion.android.common.data.servers.ServerManager @@ -31,7 +32,7 @@ import org.robolectric.annotation.Config * the service's source of truth for which sessions are currently active. */ @RunWith(RobolectricTestRunner::class) -@Config(application = dagger.hilt.android.testing.HiltTestApplication::class) +@Config(application = HiltTestApplication::class) class HaMediaSessionServiceTest { @get:Rule(order = 0) diff --git a/app/src/test/kotlin/io/homeassistant/companion/android/mediacontrol/HaMediaSessionTest.kt b/app/src/test/kotlin/io/homeassistant/companion/android/mediacontrol/HaMediaSessionTest.kt index 40667baba83..83f782de659 100644 --- a/app/src/test/kotlin/io/homeassistant/companion/android/mediacontrol/HaMediaSessionTest.kt +++ b/app/src/test/kotlin/io/homeassistant/companion/android/mediacontrol/HaMediaSessionTest.kt @@ -3,6 +3,7 @@ package io.homeassistant.companion.android.mediacontrol import android.os.Looper import androidx.media3.common.Player import androidx.test.core.app.ApplicationProvider +import dagger.hilt.android.testing.HiltTestApplication import io.homeassistant.companion.android.common.data.integration.IntegrationDomains.MEDIA_PLAYER_DOMAIN import io.homeassistant.companion.android.common.data.integration.IntegrationRepository import io.homeassistant.companion.android.common.data.mediacontrol.MediaControlEntityConfig @@ -36,7 +37,7 @@ private const val SERVER_ID = 1 private val sessionCounter = AtomicInteger(0) @RunWith(RobolectricTestRunner::class) -@Config(application = dagger.hilt.android.testing.HiltTestApplication::class) +@Config(application = HiltTestApplication::class) class HaMediaSessionTest { private lateinit var mediaControlRepository: MediaControlRepository diff --git a/app/src/test/kotlin/io/homeassistant/companion/android/settings/mediacontrol/MediaControlSettingsViewModelTest.kt b/app/src/test/kotlin/io/homeassistant/companion/android/settings/mediacontrol/MediaControlSettingsViewModelTest.kt index 3f498561309..c70f83a952f 100644 --- a/app/src/test/kotlin/io/homeassistant/companion/android/settings/mediacontrol/MediaControlSettingsViewModelTest.kt +++ b/app/src/test/kotlin/io/homeassistant/companion/android/settings/mediacontrol/MediaControlSettingsViewModelTest.kt @@ -1,35 +1,33 @@ package io.homeassistant.companion.android.settings.mediacontrol -import androidx.compose.foundation.lazy.LazyListItemInfo import app.cash.turbine.test import io.homeassistant.companion.android.common.data.mediacontrol.MediaControlEntityConfig import io.homeassistant.companion.android.common.data.mediacontrol.MediaControlRepository import io.homeassistant.companion.android.common.data.servers.ServerManager import io.homeassistant.companion.android.common.data.servers.ServerManager.Companion.SERVER_ID_ACTIVE import io.homeassistant.companion.android.testing.unit.ConsoleLogExtension +import io.homeassistant.companion.android.testing.unit.MainDispatcherJUnit5Extension import io.mockk.coEvery import io.mockk.coVerify -import io.mockk.every import io.mockk.mockk -import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.ExperimentalCoroutinesApi -import kotlinx.coroutines.test.StandardTestDispatcher import kotlinx.coroutines.test.advanceUntilIdle -import kotlinx.coroutines.test.resetMain import kotlinx.coroutines.test.runTest -import kotlinx.coroutines.test.setMain -import org.junit.jupiter.api.AfterEach import org.junit.jupiter.api.Assertions.assertEquals import org.junit.jupiter.api.BeforeEach import org.junit.jupiter.api.Nested import org.junit.jupiter.api.Test import org.junit.jupiter.api.extension.ExtendWith +import org.junit.jupiter.api.extension.RegisterExtension @OptIn(ExperimentalCoroutinesApi::class) @ExtendWith(ConsoleLogExtension::class) class MediaControlSettingsViewModelTest { - private val testDispatcher = StandardTestDispatcher() + @RegisterExtension + val mainDispatcherExtension = MainDispatcherJUnit5Extension() + + private val testDispatcher get() = mainDispatcherExtension.testDispatcher private val serverManager: ServerManager = mockk(relaxed = true) private val mediaControlRepository: MediaControlRepository = mockk(relaxed = true) @@ -37,7 +35,6 @@ class MediaControlSettingsViewModelTest { @BeforeEach fun setUp() { - Dispatchers.setMain(testDispatcher) coEvery { serverManager.servers() } returns emptyList() coEvery { serverManager.getServer(any()) } returns null coEvery { serverManager.integrationRepository(any()) } returns mockk(relaxed = true) @@ -45,11 +42,6 @@ class MediaControlSettingsViewModelTest { coEvery { mediaControlRepository.getConfiguredEntities() } returns emptyList() } - @AfterEach - fun tearDown() { - Dispatchers.resetMain() - } - private fun createViewModel(): MediaControlSettingsViewModel { return MediaControlSettingsViewModel( serverManager = serverManager, @@ -57,10 +49,6 @@ class MediaControlSettingsViewModelTest { ) } - private fun fakeLazyListItemInfo(key: Any): LazyListItemInfo = mockk { - every { this@mockk.key } returns key - } - @Nested inner class InitializationTest { @@ -161,8 +149,8 @@ class MediaControlSettingsViewModelTest { viewModel.addEntity(entityB.entityId) viewModel.onMove( - from = fakeLazyListItemInfo(key = entityA), - to = fakeLazyListItemInfo(key = entityB), + fromKey = entityA, + toKey = entityB, ) assertEquals( @@ -178,8 +166,8 @@ class MediaControlSettingsViewModelTest { viewModel.addEntity(entityA.entityId) viewModel.onMove( - from = fakeLazyListItemInfo(key = "unknown"), - to = fakeLazyListItemInfo(key = entityA), + fromKey = "unknown", + toKey = entityA, ) assertEquals(listOf(entityA), viewModel.uiState.value.configuredEntities) @@ -260,8 +248,8 @@ class MediaControlSettingsViewModelTest { viewModel.addEntity(entityA.entityId) viewModel.addEntity(entityB.entityId) viewModel.onMove( - from = fakeLazyListItemInfo(key = entityA), - to = fakeLazyListItemInfo(key = entityB), + fromKey = entityA, + toKey = entityB, ) viewModel.serviceEvents.test { diff --git a/common/src/main/kotlin/io/homeassistant/companion/android/common/data/integration/Entity.kt b/common/src/main/kotlin/io/homeassistant/companion/android/common/data/integration/Entity.kt index 91de5cc0141..d7afdf6af19 100644 --- a/common/src/main/kotlin/io/homeassistant/companion/android/common/data/integration/Entity.kt +++ b/common/src/main/kotlin/io/homeassistant/companion/android/common/data/integration/Entity.kt @@ -1298,25 +1298,25 @@ fun Entity.isActive() = when { /** Returns the bitmask of supported features for this entity, or 0 if unavailable. */ private fun Entity.supportedFeatures(): Int = (attributes["supported_features"] as? Number)?.toInt() ?: 0 +/** Whether this media_player entity supports the given feature flag from [EntityExt]. */ +internal fun Entity.supportsMediaFeature(feature: Int): Boolean = + domain == MEDIA_PLAYER_DOMAIN && (supportedFeatures() and feature != 0) + /** Whether this media_player entity supports pause. */ -internal fun Entity.supportsPause(): Boolean = domain == MEDIA_PLAYER_DOMAIN && - (supportedFeatures() and EntityExt.MEDIA_PLAYER_SUPPORT_PAUSE != 0) +internal fun Entity.supportsPause(): Boolean = supportsMediaFeature(EntityExt.MEDIA_PLAYER_SUPPORT_PAUSE) /** Whether this media_player entity supports seek. */ -internal fun Entity.supportsSeek(): Boolean = domain == MEDIA_PLAYER_DOMAIN && - (supportedFeatures() and EntityExt.MEDIA_PLAYER_SUPPORT_SEEK != 0) +internal fun Entity.supportsSeek(): Boolean = supportsMediaFeature(EntityExt.MEDIA_PLAYER_SUPPORT_SEEK) /** Whether this media_player entity supports previous track. */ -internal fun Entity.supportsPreviousTrack(): Boolean = domain == MEDIA_PLAYER_DOMAIN && - (supportedFeatures() and EntityExt.MEDIA_PLAYER_SUPPORT_PREVIOUS_TRACK != 0) +internal fun Entity.supportsPreviousTrack(): Boolean = + supportsMediaFeature(EntityExt.MEDIA_PLAYER_SUPPORT_PREVIOUS_TRACK) /** Whether this media_player entity supports next track. */ -internal fun Entity.supportsNextTrack(): Boolean = domain == MEDIA_PLAYER_DOMAIN && - (supportedFeatures() and EntityExt.MEDIA_PLAYER_SUPPORT_NEXT_TRACK != 0) +internal fun Entity.supportsNextTrack(): Boolean = supportsMediaFeature(EntityExt.MEDIA_PLAYER_SUPPORT_NEXT_TRACK) /** Whether this media_player entity supports play. */ -internal fun Entity.supportsPlay(): Boolean = domain == MEDIA_PLAYER_DOMAIN && - (supportedFeatures() and EntityExt.MEDIA_PLAYER_SUPPORT_PLAY != 0) +internal fun Entity.supportsPlay(): Boolean = supportsMediaFeature(EntityExt.MEDIA_PLAYER_SUPPORT_PLAY) /** Returns the media title, if available. */ internal fun Entity.getMediaTitle(): String? = @@ -1346,20 +1346,16 @@ internal fun Entity.getEntityPictureUrl(): String? = if (domain == MEDIA_PLAYER_DOMAIN) attributes["entity_picture"]?.toString() else null /** Whether this media_player entity supports stop. */ -internal fun Entity.supportsStop(): Boolean = domain == MEDIA_PLAYER_DOMAIN && - (supportedFeatures() and EntityExt.MEDIA_PLAYER_SUPPORT_STOP != 0) +internal fun Entity.supportsStop(): Boolean = supportsMediaFeature(EntityExt.MEDIA_PLAYER_SUPPORT_STOP) /** Whether this media_player entity supports explicit mute toggling via the volume_mute service. */ -internal fun Entity.supportsVolumeMute(): Boolean = domain == MEDIA_PLAYER_DOMAIN && - (supportedFeatures() and EntityExt.MEDIA_PLAYER_SUPPORT_VOLUME_MUTE != 0) +internal fun Entity.supportsVolumeMute(): Boolean = supportsMediaFeature(EntityExt.MEDIA_PLAYER_SUPPORT_VOLUME_MUTE) /** Whether this media_player entity supports setting shuffle mode. */ -internal fun Entity.supportsShuffleSet(): Boolean = domain == MEDIA_PLAYER_DOMAIN && - (supportedFeatures() and EntityExt.MEDIA_PLAYER_SUPPORT_SHUFFLE_SET != 0) +internal fun Entity.supportsShuffleSet(): Boolean = supportsMediaFeature(EntityExt.MEDIA_PLAYER_SUPPORT_SHUFFLE_SET) /** Whether this media_player entity supports setting repeat mode. */ -internal fun Entity.supportsRepeatSet(): Boolean = domain == MEDIA_PLAYER_DOMAIN && - (supportedFeatures() and EntityExt.MEDIA_PLAYER_SUPPORT_REPEAT_SET != 0) +internal fun Entity.supportsRepeatSet(): Boolean = supportsMediaFeature(EntityExt.MEDIA_PLAYER_SUPPORT_REPEAT_SET) /** Returns whether shuffle mode is currently enabled. */ internal fun Entity.getShuffle(): Boolean = diff --git a/common/src/main/kotlin/io/homeassistant/companion/android/common/data/mediacontrol/MediaControlRepositoryImpl.kt b/common/src/main/kotlin/io/homeassistant/companion/android/common/data/mediacontrol/MediaControlRepositoryImpl.kt index d868a8a713e..d40138787e1 100644 --- a/common/src/main/kotlin/io/homeassistant/companion/android/common/data/mediacontrol/MediaControlRepositoryImpl.kt +++ b/common/src/main/kotlin/io/homeassistant/companion/android/common/data/mediacontrol/MediaControlRepositoryImpl.kt @@ -53,45 +53,44 @@ internal class MediaControlRepositoryImpl @Inject constructor( null } - override fun observeEntityState(config: MediaControlEntityConfig): Flow = - flow { - try { - val stateFlow = serverManager.webSocketRepository(config.serverId) - .getCompressedStateAndChanges(listOf(config.entityId)) - if (stateFlow == null) { - Timber.w("WebSocket subscription returned null for entity ${config.entityId}") - emit(null) - return@flow - } + override fun observeEntityState(config: MediaControlEntityConfig): Flow = flow { + try { + val stateFlow = serverManager.webSocketRepository(config.serverId) + .getCompressedStateAndChanges(listOf(config.entityId)) + if (stateFlow == null) { + Timber.w("WebSocket subscription returned null for entity ${config.entityId}") + emit(null) + return@flow + } - var currentEntity: Entity? = null - stateFlow.collect { event -> - event.added?.get(config.entityId)?.let { - currentEntity = it.toEntity(config.entityId) - } - event.changed?.get(config.entityId)?.let { diff -> - currentEntity = currentEntity?.applyCompressedStateDiff(diff) - } - event.removed?.let { removed -> - if (config.entityId in removed) { - currentEntity = null - } + var currentEntity: Entity? = null + stateFlow.collect { event -> + event.added?.get(config.entityId)?.let { + currentEntity = it.toEntity(config.entityId) + } + event.changed?.get(config.entityId)?.let { diff -> + currentEntity = currentEntity?.applyCompressedStateDiff(diff) + } + event.removed?.let { removed -> + if (config.entityId in removed) { + currentEntity = null } + } - val entity = currentEntity - if (entity != null) { - emit(entity.toMediaControlState(serverId = config.serverId)) - } else { - emit(null) - } + val entity = currentEntity + if (entity != null) { + emit(entity.toMediaControlState(serverId = config.serverId)) + } else { + emit(null) } - } catch (e: CancellationException) { - throw e - } catch (e: Exception) { - Timber.e(e, "Failed to subscribe to media control entity ${config.entityId}") - emit(null) } - }.distinctUntilChanged() + } catch (e: CancellationException) { + throw e + } catch (e: Exception) { + Timber.e(e, "Failed to subscribe to media control entity ${config.entityId}") + emit(null) + } + }.distinctUntilChanged() override suspend fun getConfiguredEntities(): List = dao.getAll().map { it.toEntityConfig() } From c5089c0b2617432f9cfbc0470423698d075abed8 Mon Sep 17 00:00:00 2001 From: Fletcher Dostie Date: Thu, 2 Apr 2026 00:42:57 -0700 Subject: [PATCH 029/114] Address coroutine architecture PR review comments MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - [1] HaMediaSessionService: change serviceScope dispatcher from Main to Default; wrap reconcileSessions() call in onEach with withContext(Dispatchers.Main) so the Main-thread-required calls (addSession, removeSession, stopSelf) still run on Main. - [6/7/8] HaMediaSession: remove the internal CoroutineScope — the service now creates a per-session CoroutineScope and passes it in as an @Assisted parameter. startObservingState() is now a suspend fun (no longer wraps itself in scope.launch), and the service launches it with sessionScope.launch { session.startObservingState() }. This makes the session's coroutine lifecycle an explicit responsibility of the caller rather than a hidden internal detail. - [22] HaRemoteMediaPlayer: extract handleCommand { } inline helper that wraps each CommandCallback call in try/catch, returning Futures.immediateVoidFuture() on success and Futures.immediateFailedFuture() on exception. This captures any synchronous callback exception into the ListenableFuture instead of propagating it into SimpleBasePlayer. scope.future {} (the kotlinx-coroutines-guava API suggested in the review) was considered but skipped: the callbacks are fire-and-forget (they call scope.launch internally and never throw), so adding a new dependency for no practical runtime difference was not justified. --- .../android/mediacontrol/HaMediaSession.kt | 62 ++++++------- .../mediacontrol/HaMediaSessionService.kt | 10 ++- .../mediacontrol/HaRemoteMediaPlayer.kt | 86 +++++++++---------- .../mediacontrol/HaMediaSessionServiceTest.kt | 3 +- .../mediacontrol/HaMediaSessionTest.kt | 36 ++++---- 5 files changed, 96 insertions(+), 101 deletions(-) diff --git a/app/src/main/kotlin/io/homeassistant/companion/android/mediacontrol/HaMediaSession.kt b/app/src/main/kotlin/io/homeassistant/companion/android/mediacontrol/HaMediaSession.kt index 7cf1cb03f58..761c178a4be 100644 --- a/app/src/main/kotlin/io/homeassistant/companion/android/mediacontrol/HaMediaSession.kt +++ b/app/src/main/kotlin/io/homeassistant/companion/android/mediacontrol/HaMediaSession.kt @@ -30,11 +30,8 @@ import kotlin.time.Duration.Companion.seconds import kotlinx.coroutines.CancellationException import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.Dispatchers -import kotlinx.coroutines.Job -import kotlinx.coroutines.SupervisorJob import kotlinx.coroutines.cancel import kotlinx.coroutines.delay -import kotlinx.coroutines.ensureActive import kotlinx.coroutines.launch import kotlinx.coroutines.withContext import timber.log.Timber @@ -50,25 +47,23 @@ import timber.log.Timber * * @param context Used for Coil image loading and [MediaSession] construction. * @param config Identifies the media_player entity this session represents. + * @param scope The coroutine scope that owns this session's lifecycle. [release] cancels it. * @param mediaControlRepository Provides the per-entity state flow. * @param serverManager Used to resolve artwork base URLs and call HA integration actions. */ class HaMediaSession @AssistedInject constructor( @Assisted private val context: Context, @Assisted private val config: MediaControlEntityConfig, + @Assisted private val scope: CoroutineScope, private val mediaControlRepository: MediaControlRepository, private val serverManager: ServerManager, ) { val mediaSession: MediaSession - private val scope = CoroutineScope(SupervisorJob() + Dispatchers.Default) private val player: HaRemoteMediaPlayer - private var observationJob: Job? = null - // Accessed only from loadArtworkAndUpdatePlayer, which is always called sequentially - // within a single observationJob on the Default dispatcher. The observationJob is - // cancelled before a new one starts, so there is no concurrent write risk. + // within startObservingState on the Default dispatcher. private var currentArtworkUrl: String? = null private var currentArtworkBytes: ByteArray? = null @@ -170,34 +165,33 @@ class HaMediaSession @AssistedInject constructor( } /** - * Cancels any existing entity state observation and starts a new one for [config]. + * Observes entity state for [config] until the coroutine is cancelled. Suspends + * indefinitely, retrying after [OBSERVATION_RETRY_DELAY] whenever the WebSocket flow + * completes (e.g. on disconnection). Intended to be launched in the scope provided at + * construction time. */ - fun startObservingState() { - observationJob?.cancel() + suspend fun startObservingState() { currentArtworkUrl = null - observationJob = scope.launch { - while (true) { - ensureActive() - // Fetch initial state via REST before subscribing via WebSocket. Placed inside - // the retry loop so cold-start failures (connection not yet ready) are retried - // automatically on each reconnect attempt. - mediaControlRepository.getEntityState(config)?.let { loadArtworkAndUpdatePlayer(it) } - mediaControlRepository.observeEntityState(config).collect { state -> - if (state == null) { - // Entity not yet available or subscription not ready; keep the last - // known state visible. Flow completion triggers setConnecting() below. - return@collect - } - loadArtworkAndUpdatePlayer(state) + while (true) { + // Fetch initial state via REST before subscribing via WebSocket. Placed inside + // the retry loop so cold-start failures (connection not yet ready) are retried + // automatically on each reconnect attempt. + mediaControlRepository.getEntityState(config)?.let { loadArtworkAndUpdatePlayer(it) } + mediaControlRepository.observeEntityState(config).collect { state -> + if (state == null) { + // Entity not yet available or subscription not ready; keep the last + // known state visible. Flow completion triggers setConnecting() below. + return@collect } - // Flow completed (WebSocket not ready, connection lost, etc) — show buffering - // state so the notification stays visible but controls are disabled, then retry - withContext(Dispatchers.Main) { player.setConnecting() } - Timber.d( - "Media control observation completed for ${config.entityId}, retrying in $OBSERVATION_RETRY_DELAY", - ) - delay(OBSERVATION_RETRY_DELAY) + loadArtworkAndUpdatePlayer(state) } + // Flow completed (WebSocket not ready, connection lost, etc) — show buffering + // state so the notification stays visible but controls are disabled, then retry + withContext(Dispatchers.Main) { player.setConnecting() } + Timber.d( + "Media control observation completed for ${config.entityId}, retrying in $OBSERVATION_RETRY_DELAY", + ) + delay(OBSERVATION_RETRY_DELAY) } } @@ -330,9 +324,9 @@ class HaMediaSession @AssistedInject constructor( const val ACTION_REPEAT_SET = "repeat_set" } - /** Creates [HaMediaSession] instances with runtime-provided [context] and [config]. */ + /** Creates [HaMediaSession] instances with runtime-provided [context], [config], and [scope]. */ @AssistedFactory interface Factory { - fun create(context: Context, config: MediaControlEntityConfig): HaMediaSession + fun create(context: Context, config: MediaControlEntityConfig, scope: CoroutineScope): HaMediaSession } } diff --git a/app/src/main/kotlin/io/homeassistant/companion/android/mediacontrol/HaMediaSessionService.kt b/app/src/main/kotlin/io/homeassistant/companion/android/mediacontrol/HaMediaSessionService.kt index 47fb6492279..ae021054ac1 100644 --- a/app/src/main/kotlin/io/homeassistant/companion/android/mediacontrol/HaMediaSessionService.kt +++ b/app/src/main/kotlin/io/homeassistant/companion/android/mediacontrol/HaMediaSessionService.kt @@ -14,6 +14,8 @@ import kotlinx.coroutines.SupervisorJob import kotlinx.coroutines.cancel import kotlinx.coroutines.flow.launchIn import kotlinx.coroutines.flow.onEach +import kotlinx.coroutines.launch +import kotlinx.coroutines.withContext import timber.log.Timber /** @@ -35,13 +37,13 @@ class HaMediaSessionService : MediaSessionService() { // Keyed by "$serverId:$entityId" internal val activeSessions = mutableMapOf() - private val serviceScope = CoroutineScope(SupervisorJob() + Dispatchers.Main) + private val serviceScope = CoroutineScope(SupervisorJob() + Dispatchers.Default) override fun onCreate() { super.onCreate() Timber.d("HaMediaSessionService created") mediaControlRepository.observeConfiguredEntities() - .onEach { entities -> reconcileSessions(entities) } + .onEach { entities -> withContext(Dispatchers.Main) { reconcileSessions(entities) } } .launchIn(serviceScope) } @@ -87,12 +89,14 @@ class HaMediaSessionService : MediaSessionService() { // Add sessions for newly configured entities (desiredKeys - currentKeys).forEach { key -> val entityConfig = configuredEntities.first { it.sessionKey() == key } + val sessionScope = CoroutineScope(SupervisorJob() + Dispatchers.Default) val session = haMediaSessionFactory.create( context = this@HaMediaSessionService, config = entityConfig, + scope = sessionScope, ) addSession(session.mediaSession) - session.startObservingState() + sessionScope.launch { session.startObservingState() } activeSessions[key] = session Timber.d("Added media session for $key") } diff --git a/app/src/main/kotlin/io/homeassistant/companion/android/mediacontrol/HaRemoteMediaPlayer.kt b/app/src/main/kotlin/io/homeassistant/companion/android/mediacontrol/HaRemoteMediaPlayer.kt index f2852e46fc3..982005201d9 100644 --- a/app/src/main/kotlin/io/homeassistant/companion/android/mediacontrol/HaRemoteMediaPlayer.kt +++ b/app/src/main/kotlin/io/homeassistant/companion/android/mediacontrol/HaRemoteMediaPlayer.kt @@ -153,74 +153,68 @@ class HaRemoteMediaPlayer(looper: Looper, private val commandCallback: CommandCa .build() } - override fun handleSetPlayWhenReady(playWhenReady: Boolean): ListenableFuture<*> { - if (playWhenReady) { - commandCallback.onPlayRequested() - } else { - commandCallback.onPauseRequested() - } - return Futures.immediateVoidFuture() + override fun handleSetPlayWhenReady(playWhenReady: Boolean): ListenableFuture<*> = handleCommand { + if (playWhenReady) commandCallback.onPlayRequested() else commandCallback.onPauseRequested() } - override fun handleSeek(mediaItemIndex: Int, positionMs: Long, seekCommand: Int): ListenableFuture<*> { - when (seekCommand) { - Player.COMMAND_SEEK_TO_NEXT, - Player.COMMAND_SEEK_TO_NEXT_MEDIA_ITEM, - -> commandCallback.onNextRequested() - - Player.COMMAND_SEEK_TO_PREVIOUS, - Player.COMMAND_SEEK_TO_PREVIOUS_MEDIA_ITEM, - -> commandCallback.onPreviousRequested() - - else -> { - if (mediaState?.supportsSeek == true) { - commandCallback.onSeekRequested(positionMs) + override fun handleSeek(mediaItemIndex: Int, positionMs: Long, seekCommand: Int): ListenableFuture<*> = + handleCommand { + when (seekCommand) { + Player.COMMAND_SEEK_TO_NEXT, + Player.COMMAND_SEEK_TO_NEXT_MEDIA_ITEM, + -> commandCallback.onNextRequested() + + Player.COMMAND_SEEK_TO_PREVIOUS, + Player.COMMAND_SEEK_TO_PREVIOUS_MEDIA_ITEM, + -> commandCallback.onPreviousRequested() + + else -> { + if (mediaState?.supportsSeek == true) { + commandCallback.onSeekRequested(positionMs) + } } } } - return Futures.immediateVoidFuture() - } - override fun handleSetDeviceVolume(deviceVolume: Int, flags: Int): ListenableFuture<*> { - commandCallback.onSetVolumeRequested(volume = deviceVolume / VOLUME_SCALE.toFloat()) - return Futures.immediateVoidFuture() - } + override fun handleSetDeviceVolume(deviceVolume: Int, flags: Int): ListenableFuture<*> = + handleCommand { commandCallback.onSetVolumeRequested(volume = deviceVolume / VOLUME_SCALE.toFloat()) } - override fun handleIncreaseDeviceVolume(flags: Int): ListenableFuture<*> { - commandCallback.onIncreaseVolumeRequested() - return Futures.immediateVoidFuture() - } + override fun handleIncreaseDeviceVolume(flags: Int): ListenableFuture<*> = + handleCommand { commandCallback.onIncreaseVolumeRequested() } - override fun handleDecreaseDeviceVolume(flags: Int): ListenableFuture<*> { - commandCallback.onDecreaseVolumeRequested() - return Futures.immediateVoidFuture() - } + override fun handleDecreaseDeviceVolume(flags: Int): ListenableFuture<*> = + handleCommand { commandCallback.onDecreaseVolumeRequested() } - override fun handleSetDeviceMuted(muted: Boolean, flags: Int): ListenableFuture<*> { + override fun handleSetDeviceMuted(muted: Boolean, flags: Int): ListenableFuture<*> = handleCommand { if (mediaState?.supportsMute == true) { commandCallback.onMuteRequested(muted = muted) } - return Futures.immediateVoidFuture() } - override fun handleStop(): ListenableFuture<*> { - commandCallback.onStopRequested() - return Futures.immediateVoidFuture() - } + override fun handleStop(): ListenableFuture<*> = handleCommand { commandCallback.onStopRequested() } - override fun handleSetShuffleModeEnabled(shuffleModeEnabled: Boolean): ListenableFuture<*> { - commandCallback.onShuffleRequested(shuffle = shuffleModeEnabled) - return Futures.immediateVoidFuture() - } + override fun handleSetShuffleModeEnabled(shuffleModeEnabled: Boolean): ListenableFuture<*> = + handleCommand { commandCallback.onShuffleRequested(shuffle = shuffleModeEnabled) } - override fun handleSetRepeatMode(repeatMode: Int): ListenableFuture<*> { + override fun handleSetRepeatMode(repeatMode: Int): ListenableFuture<*> = handleCommand { val haRepeatMode = when (repeatMode) { Player.REPEAT_MODE_ONE -> MediaRepeatMode.One Player.REPEAT_MODE_ALL -> MediaRepeatMode.All else -> MediaRepeatMode.Off } commandCallback.onRepeatRequested(repeatMode = haRepeatMode) - return Futures.immediateVoidFuture() + } + + /** + * Executes [block] and returns an immediate void future on success, or an immediate + * failed future if [block] throws, so that any exception is captured in the + * [ListenableFuture] rather than propagating into [SimpleBasePlayer]. + */ + private inline fun handleCommand(block: () -> Unit): ListenableFuture<*> = try { + block() + Futures.immediateVoidFuture() + } catch (e: Exception) { + Futures.immediateFailedFuture(e) } private fun buildIdleState(): State = State.Builder() diff --git a/app/src/test/kotlin/io/homeassistant/companion/android/mediacontrol/HaMediaSessionServiceTest.kt b/app/src/test/kotlin/io/homeassistant/companion/android/mediacontrol/HaMediaSessionServiceTest.kt index 8d6b42dcbaf..6f286d3cb4e 100644 --- a/app/src/test/kotlin/io/homeassistant/companion/android/mediacontrol/HaMediaSessionServiceTest.kt +++ b/app/src/test/kotlin/io/homeassistant/companion/android/mediacontrol/HaMediaSessionServiceTest.kt @@ -51,10 +51,11 @@ class HaMediaSessionServiceTest { fun setUp() { coEvery { mediaControlRepository.observeEntityState(any()) } returns flowOf(null) coEvery { mediaControlRepository.getEntityState(any()) } returns null - every { haMediaSessionFactory.create(any(), any()) } answers { + every { haMediaSessionFactory.create(any(), any(), any()) } answers { HaMediaSession( context = firstArg(), config = secondArg(), + scope = thirdArg(), mediaControlRepository = mediaControlRepository, serverManager = serverManager, ) diff --git a/app/src/test/kotlin/io/homeassistant/companion/android/mediacontrol/HaMediaSessionTest.kt b/app/src/test/kotlin/io/homeassistant/companion/android/mediacontrol/HaMediaSessionTest.kt index 83f782de659..4816147efde 100644 --- a/app/src/test/kotlin/io/homeassistant/companion/android/mediacontrol/HaMediaSessionTest.kt +++ b/app/src/test/kotlin/io/homeassistant/companion/android/mediacontrol/HaMediaSessionTest.kt @@ -18,10 +18,13 @@ import io.mockk.mockk import io.mockk.slot import java.util.concurrent.atomic.AtomicInteger import kotlinx.coroutines.CoroutineScope +import kotlinx.coroutines.Dispatchers +import kotlinx.coroutines.SupervisorJob import kotlinx.coroutines.flow.MutableSharedFlow import kotlinx.coroutines.flow.emptyFlow import kotlinx.coroutines.flow.flowOf import kotlinx.coroutines.isActive +import kotlinx.coroutines.launch import org.junit.Assert.assertEquals import org.junit.Assert.assertNull import org.junit.Before @@ -40,6 +43,7 @@ private val sessionCounter = AtomicInteger(0) @Config(application = HiltTestApplication::class) class HaMediaSessionTest { + private lateinit var testScope: CoroutineScope private lateinit var mediaControlRepository: MediaControlRepository private lateinit var serverManager: ServerManager private lateinit var integrationRepository: IntegrationRepository @@ -47,6 +51,7 @@ class HaMediaSessionTest { @Before fun setUp() { + testScope = CoroutineScope(SupervisorJob() + Dispatchers.Default) mediaControlRepository = mockk() serverManager = mockk() integrationRepository = mockk(relaxed = true) @@ -93,17 +98,17 @@ class HaMediaSessionTest { private fun buildSession(): HaMediaSession = HaMediaSession( context = ApplicationProvider.getApplicationContext(), config = config, + scope = testScope, mediaControlRepository = mediaControlRepository, serverManager = serverManager, ) /** - * Waits for `HaMediaSession`'s internal `Dispatchers.Default` coroutines to settle, + * Waits for `Dispatchers.Default` coroutines (launched via `testScope`) to settle, * then drains the Robolectric main looper so that `player.updateState` calls take effect. * - * `HaMediaSession` uses its own `CoroutineScope(SupervisorJob() + Dispatchers.Default)`, - * which is not controlled by `runTest`'s fake scheduler. A short real-time wait is required - * before draining the main looper. + * `testScope` uses `Dispatchers.Default`, which is not controlled by `runTest`'s fake + * scheduler. A short real-time wait is required before draining the main looper. */ private fun drainDefaultDispatcherAndMainLooper() { Thread.sleep(REAL_DISPATCHER_SETTLE_MS) @@ -131,7 +136,7 @@ class HaMediaSessionTest { coEvery { mediaControlRepository.observeEntityState(config) } returns stateFlow val session = buildSession() - session.startObservingState() + testScope.launch { session.startObservingState() } drainDefaultDispatcherAndMainLooper() val player = session.mediaSession.player @@ -156,7 +161,7 @@ class HaMediaSessionTest { coEvery { mediaControlRepository.observeEntityState(config) } returns stateFlow val session = buildSession() - session.startObservingState() + testScope.launch { session.startObservingState() } drainDefaultDispatcherAndMainLooper() val player = session.mediaSession.player @@ -179,7 +184,7 @@ class HaMediaSessionTest { coEvery { mediaControlRepository.observeEntityState(config) } returns stateFlow val session = buildSession() - session.startObservingState() + testScope.launch { session.startObservingState() } drainDefaultDispatcherAndMainLooper() val player = session.mediaSession.player @@ -206,7 +211,7 @@ class HaMediaSessionTest { ) andThen emptyFlow() val session = buildSession() - session.startObservingState() + testScope.launch { session.startObservingState() } drainDefaultDispatcherAndMainLooper() drainDefaultDispatcherAndMainLooper() @@ -232,7 +237,7 @@ class HaMediaSessionTest { coEvery { mediaControlRepository.observeEntityState(config) } returns stateFlow val session = buildSession() - session.startObservingState() + testScope.launch { session.startObservingState() } drainDefaultDispatcherAndMainLooper() val player = session.mediaSession.player @@ -259,7 +264,7 @@ class HaMediaSessionTest { coEvery { mediaControlRepository.observeEntityState(config) } returns stateFlow val session = buildSession() - session.startObservingState() + testScope.launch { session.startObservingState() } drainDefaultDispatcherAndMainLooper() stateFlow.tryEmit(createState(entityPictureUrl = null, title = "Track 2")) @@ -289,7 +294,7 @@ class HaMediaSessionTest { coEvery { mediaControlRepository.observeEntityState(config) } returns stateFlow val session = buildSession() - session.startObservingState() + testScope.launch { session.startObservingState() } drainDefaultDispatcherAndMainLooper() session.mediaSession.player.play() @@ -324,7 +329,7 @@ class HaMediaSessionTest { coEvery { mediaControlRepository.observeEntityState(config) } returns stateFlow val session = buildSession() - session.startObservingState() + testScope.launch { session.startObservingState() } drainDefaultDispatcherAndMainLooper() session.mediaSession.player.pause() @@ -345,11 +350,8 @@ class HaMediaSessionTest { } /** - * Verifies that calling `release()` cancels the internal coroutine scope, preventing + * Verifies that calling `release()` cancels the coroutine scope, preventing * any further observation or action dispatch. - * - * The scope is read via reflection because it is private — this is the only way to assert - * on cancellation without adding test-only surface to the production class. */ @Test fun `Given observing session when release called then internal scope is cancelled`() { @@ -358,7 +360,7 @@ class HaMediaSessionTest { coEvery { mediaControlRepository.observeEntityState(config) } returns stateFlow val session = buildSession() - session.startObservingState() + testScope.launch { session.startObservingState() } drainDefaultDispatcherAndMainLooper() val scopeField = HaMediaSession::class.java.getDeclaredField("scope") From b65ddb08a0150b848c27376263744cd148e98570 Mon Sep 17 00:00:00 2001 From: Fletcher Dostie Date: Thu, 2 Apr 2026 00:47:46 -0700 Subject: [PATCH 030/114] Split up HaRemoteMediaPlayer.kt getState(); use entityFriendlyName in metadata --- .../mediacontrol/HaRemoteMediaPlayer.kt | 78 ++++++++----------- .../mediacontrol/HaRemoteMediaPlayerTest.kt | 11 +++ 2 files changed, 45 insertions(+), 44 deletions(-) diff --git a/app/src/main/kotlin/io/homeassistant/companion/android/mediacontrol/HaRemoteMediaPlayer.kt b/app/src/main/kotlin/io/homeassistant/companion/android/mediacontrol/HaRemoteMediaPlayer.kt index 982005201d9..3066f9d401e 100644 --- a/app/src/main/kotlin/io/homeassistant/companion/android/mediacontrol/HaRemoteMediaPlayer.kt +++ b/app/src/main/kotlin/io/homeassistant/companion/android/mediacontrol/HaRemoteMediaPlayer.kt @@ -77,7 +77,10 @@ class HaRemoteMediaPlayer(looper: Looper, private val commandCallback: CommandCa override fun getState(): State { if (isConnecting) return buildConnectingState() val state = mediaState ?: return buildIdleState() + return buildNormalState(state, artworkBytes) + } + private fun buildNormalState(state: MediaControlState, artwork: ByteArray?): State { val availableCommands = buildAvailableCommands(state) val playbackState = when (state.playbackState) { @@ -90,19 +93,6 @@ class HaRemoteMediaPlayer(looper: Looper, private val commandCallback: CommandCa val isPlaying = state.playbackState is MediaPlaybackState.Playing - val metadataBuilder = MediaMetadata.Builder() - .setTitle(state.title) - .setArtist(state.artist) - .setAlbumTitle(state.albumName) - .setAlbumArtist(state.albumArtist) - .setTrackNumber(state.mediaTrack) - .setStation(state.mediaChannel) - .setSubtitle(state.mediaSeriesTitle ?: state.appName) - .setMediaType(state.mediaContentType?.toMedia3MediaType()) - artworkBytes?.let { - metadataBuilder.setArtworkData(it, MediaMetadata.PICTURE_TYPE_FRONT_COVER) - } - val durationUs = state.mediaDurationSeconds ?.seconds ?.inWholeMicroseconds @@ -113,22 +103,10 @@ class HaRemoteMediaPlayer(looper: Looper, private val commandCallback: CommandCa ?: 0L val currentItem = MediaItemData.Builder(state.entityId) - .setMediaMetadata(metadataBuilder.build()) + .setMediaMetadata(buildMetadata(state, artwork)) .setDurationUs(durationUs) .build() - // SimpleBasePlayer.seekToNext() / seekToPrevious() check hasNextMediaItem() / - // hasPreviousMediaItem() before calling handleSeek(). With a single-item playlist both - // return false, so the seek is silently dropped and handleSeek() is never invoked. - // Using a 3-item playlist with the real item at index 1 ensures valid adjacent items exist, - // so the seek reaches handleSeek() where seekCommand is used to dispatch to the - // correct HA action. - val playlist = listOf( - MediaItemData.Builder(PLACEHOLDER_PREVIOUS_ID).build(), - currentItem, - MediaItemData.Builder(PLACEHOLDER_NEXT_ID).build(), - ) - val deviceVolume = state.volumeLevel?.let { (it * VOLUME_SCALE).toInt() } ?: 0 val media3RepeatMode = when (state.repeatMode) { @@ -144,7 +122,7 @@ class HaRemoteMediaPlayer(looper: Looper, private val commandCallback: CommandCa .setPlaybackParameters(PlaybackParameters(PLAYBACK_SPEED)) .setCurrentMediaItemIndex(CURRENT_ITEM_INDEX) .setContentPositionMs(positionMs) - .setPlaylist(playlist) + .setPlaylist(buildPlaylist(currentItem)) .setDeviceInfo(REMOTE_DEVICE_INFO) .setDeviceVolume(deviceVolume) .setIsDeviceMuted(state.isVolumeMuted) @@ -153,6 +131,33 @@ class HaRemoteMediaPlayer(looper: Looper, private val commandCallback: CommandCa .build() } + private fun buildMetadata(state: MediaControlState, artwork: ByteArray?): MediaMetadata { + val builder = MediaMetadata.Builder() + .setTitle(state.title) + .setDisplayTitle(state.entityFriendlyName) + .setArtist(state.artist) + .setAlbumTitle(state.albumName) + .setAlbumArtist(state.albumArtist) + .setTrackNumber(state.mediaTrack) + .setStation(state.mediaChannel) + .setSubtitle(state.mediaSeriesTitle ?: state.appName) + .setMediaType(state.mediaContentType?.toMedia3MediaType()) + artwork?.let { builder.setArtworkData(it, MediaMetadata.PICTURE_TYPE_FRONT_COVER) } + return builder.build() + } + + // SimpleBasePlayer.seekToNext() / seekToPrevious() check hasNextMediaItem() / + // hasPreviousMediaItem() before calling handleSeek(). With a single-item playlist both + // return false, so the seek is silently dropped and handleSeek() is never invoked. + // Using a 3-item playlist with the real item at index 1 ensures valid adjacent items exist, + // so the seek reaches handleSeek() where seekCommand is used to dispatch to the + // correct HA action. + private fun buildPlaylist(currentItem: MediaItemData): List = listOf( + MediaItemData.Builder(PLACEHOLDER_PREVIOUS_ID).build(), + currentItem, + MediaItemData.Builder(PLACEHOLDER_NEXT_ID).build(), + ) + override fun handleSetPlayWhenReady(playWhenReady: Boolean): ListenableFuture<*> = handleCommand { if (playWhenReady) commandCallback.onPlayRequested() else commandCallback.onPauseRequested() } @@ -230,30 +235,15 @@ class HaRemoteMediaPlayer(looper: Looper, private val commandCallback: CommandCa */ private fun buildConnectingState(): State { val state = mediaState ?: return buildIdleState() - val metadataBuilder = MediaMetadata.Builder() - .setTitle(state.title) - .setArtist(state.artist) - .setAlbumTitle(state.albumName) - .setAlbumArtist(state.albumArtist) - .setTrackNumber(state.mediaTrack) - .setStation(state.mediaChannel) - .setSubtitle(state.mediaSeriesTitle ?: state.appName) - .setMediaType(state.mediaContentType?.toMedia3MediaType()) - artworkBytes?.let { metadataBuilder.setArtworkData(it, MediaMetadata.PICTURE_TYPE_FRONT_COVER) } val currentItem = MediaItemData.Builder(state.entityId) - .setMediaMetadata(metadataBuilder.build()) + .setMediaMetadata(buildMetadata(state, artworkBytes)) .build() - val playlist = listOf( - MediaItemData.Builder(PLACEHOLDER_PREVIOUS_ID).build(), - currentItem, - MediaItemData.Builder(PLACEHOLDER_NEXT_ID).build(), - ) return State.Builder() .setAvailableCommands(Player.Commands.EMPTY) .setPlaybackState(STATE_BUFFERING) .setPlayWhenReady(false, PLAY_WHEN_READY_CHANGE_REASON_REMOTE) .setCurrentMediaItemIndex(CURRENT_ITEM_INDEX) - .setPlaylist(playlist) + .setPlaylist(buildPlaylist(currentItem)) .setDeviceInfo(REMOTE_DEVICE_INFO) .build() } diff --git a/app/src/test/kotlin/io/homeassistant/companion/android/mediacontrol/HaRemoteMediaPlayerTest.kt b/app/src/test/kotlin/io/homeassistant/companion/android/mediacontrol/HaRemoteMediaPlayerTest.kt index 4b68efa34c3..88989b0dcb9 100644 --- a/app/src/test/kotlin/io/homeassistant/companion/android/mediacontrol/HaRemoteMediaPlayerTest.kt +++ b/app/src/test/kotlin/io/homeassistant/companion/android/mediacontrol/HaRemoteMediaPlayerTest.kt @@ -159,6 +159,17 @@ class HaRemoteMediaPlayerTest { assertEquals("My Album", metadata.albumTitle?.toString()) } + @Test + fun `Given state with entity friendly name when getState then displayTitle is populated`() { + player.updateState( + state = createState(entityFriendlyName = "Living Room TV"), + artworkPngBytes = null, + ) + shadowOf(Looper.getMainLooper()).idle() + + assertEquals("Living Room TV", player.mediaMetadata.displayTitle?.toString()) + } + @Test fun `Given state with album artist when getState then albumArtist is populated`() { player.updateState( From 23c5d384dc665c78815633e1c2d4b366ef5cee8e Mon Sep 17 00:00:00 2001 From: Fletcher Dostie Date: Thu, 2 Apr 2026 01:06:50 -0700 Subject: [PATCH 031/114] =?UTF-8?q?=20=E2=86=92=20use=20;=20Remove=20the?= =?UTF-8?q?=20four=20=20fields.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../mediacontrol/HaRemoteMediaPlayer.kt | 11 ++-------- .../MediaControlSettingsViewModel.kt | 20 ++++--------------- .../mediacontrol/HaMediaSessionTest.kt | 5 +++-- .../mediacontrol/HaRemoteMediaPlayerTest.kt | 16 ++++++++------- .../android/common/data/integration/Entity.kt | 14 +++++++------ .../MediaControlRepositoryImpl.kt | 4 ++-- .../data/mediacontrol/MediaControlState.kt | 6 ++++-- .../MediaControlRepositoryImplTest.kt | 9 +++++---- 8 files changed, 37 insertions(+), 48 deletions(-) diff --git a/app/src/main/kotlin/io/homeassistant/companion/android/mediacontrol/HaRemoteMediaPlayer.kt b/app/src/main/kotlin/io/homeassistant/companion/android/mediacontrol/HaRemoteMediaPlayer.kt index 3066f9d401e..469c6aff0be 100644 --- a/app/src/main/kotlin/io/homeassistant/companion/android/mediacontrol/HaRemoteMediaPlayer.kt +++ b/app/src/main/kotlin/io/homeassistant/companion/android/mediacontrol/HaRemoteMediaPlayer.kt @@ -13,7 +13,6 @@ import com.google.common.util.concurrent.ListenableFuture import io.homeassistant.companion.android.common.data.mediacontrol.MediaControlState import io.homeassistant.companion.android.common.data.mediacontrol.MediaPlaybackState import io.homeassistant.companion.android.common.data.mediacontrol.MediaRepeatMode -import kotlin.time.Duration.Companion.seconds /** * A [SimpleBasePlayer] that acts as a remote control proxy for a Home Assistant media_player entity. @@ -93,14 +92,8 @@ class HaRemoteMediaPlayer(looper: Looper, private val commandCallback: CommandCa val isPlaying = state.playbackState is MediaPlaybackState.Playing - val durationUs = state.mediaDurationSeconds - ?.seconds - ?.inWholeMicroseconds - ?: DURATION_UNSET_US - val positionMs = state.mediaPositionSeconds - ?.seconds - ?.inWholeMilliseconds - ?: 0L + val durationUs = state.mediaDuration?.inWholeMicroseconds ?: DURATION_UNSET_US + val positionMs = state.mediaPosition?.inWholeMilliseconds ?: 0L val currentItem = MediaItemData.Builder(state.entityId) .setMediaMetadata(buildMetadata(state, artwork)) diff --git a/app/src/main/kotlin/io/homeassistant/companion/android/settings/mediacontrol/MediaControlSettingsViewModel.kt b/app/src/main/kotlin/io/homeassistant/companion/android/settings/mediacontrol/MediaControlSettingsViewModel.kt index 1669d61f5e2..167ed18573b 100644 --- a/app/src/main/kotlin/io/homeassistant/companion/android/settings/mediacontrol/MediaControlSettingsViewModel.kt +++ b/app/src/main/kotlin/io/homeassistant/companion/android/settings/mediacontrol/MediaControlSettingsViewModel.kt @@ -13,7 +13,6 @@ import io.homeassistant.companion.android.common.data.websocket.impl.entities.Ar import io.homeassistant.companion.android.common.data.websocket.impl.entities.DeviceRegistryResponse import io.homeassistant.companion.android.common.data.websocket.impl.entities.EntityRegistryResponse import io.homeassistant.companion.android.database.server.Server -import java.util.concurrent.ConcurrentHashMap import javax.inject.Inject import kotlinx.coroutines.CancellationException import kotlinx.coroutines.async @@ -61,11 +60,6 @@ class MediaControlSettingsViewModel @Inject constructor( private val _serviceEvents = MutableSharedFlow(extraBufferCapacity = 1) val serviceEvents: SharedFlow = _serviceEvents.asSharedFlow() - private val entitiesPerServer = ConcurrentHashMap>() - private val entityRegistriesPerServer = ConcurrentHashMap>() - private val deviceRegistriesPerServer = ConcurrentHashMap>() - private val areaRegistriesPerServer = ConcurrentHashMap>() - private data class ServerRegistries( val serverId: Int, val entities: List, @@ -110,18 +104,12 @@ class MediaControlSettingsViewModel @Inject constructor( } val results = registryResults.awaitAll() - results.forEach { registries -> - entitiesPerServer[registries.serverId] = registries.entities - entityRegistriesPerServer[registries.serverId] = registries.entityRegistry - deviceRegistriesPerServer[registries.serverId] = registries.deviceRegistry - areaRegistriesPerServer[registries.serverId] = registries.areaRegistry - } _uiState.update { state -> state.copy( - entitiesPerServer = entitiesPerServer.toMap(), - entityRegistryPerServer = entityRegistriesPerServer.toMap(), - deviceRegistryPerServer = deviceRegistriesPerServer.toMap(), - areaRegistryPerServer = areaRegistriesPerServer.toMap(), + entitiesPerServer = results.associate { it.serverId to it.entities }, + entityRegistryPerServer = results.associate { it.serverId to it.entityRegistry }, + deviceRegistryPerServer = results.associate { it.serverId to it.deviceRegistry }, + areaRegistryPerServer = results.associate { it.serverId to it.areaRegistry }, isLoading = false, ) } diff --git a/app/src/test/kotlin/io/homeassistant/companion/android/mediacontrol/HaMediaSessionTest.kt b/app/src/test/kotlin/io/homeassistant/companion/android/mediacontrol/HaMediaSessionTest.kt index 4816147efde..307392e25ae 100644 --- a/app/src/test/kotlin/io/homeassistant/companion/android/mediacontrol/HaMediaSessionTest.kt +++ b/app/src/test/kotlin/io/homeassistant/companion/android/mediacontrol/HaMediaSessionTest.kt @@ -17,6 +17,7 @@ import io.mockk.coVerify import io.mockk.mockk import io.mockk.slot import java.util.concurrent.atomic.AtomicInteger +import kotlin.time.Duration.Companion.seconds import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.SupervisorJob @@ -76,8 +77,8 @@ class HaMediaSessionTest { artist = null, albumName = null, entityPictureUrl = entityPictureUrl, - mediaDurationSeconds = 300.0, - mediaPositionSeconds = 60.0, + mediaDuration = 300.0.seconds, + mediaPosition = 60.0.seconds, supportsPause = true, supportsPlay = true, supportsSeek = false, diff --git a/app/src/test/kotlin/io/homeassistant/companion/android/mediacontrol/HaRemoteMediaPlayerTest.kt b/app/src/test/kotlin/io/homeassistant/companion/android/mediacontrol/HaRemoteMediaPlayerTest.kt index 88989b0dcb9..96578eeac31 100644 --- a/app/src/test/kotlin/io/homeassistant/companion/android/mediacontrol/HaRemoteMediaPlayerTest.kt +++ b/app/src/test/kotlin/io/homeassistant/companion/android/mediacontrol/HaRemoteMediaPlayerTest.kt @@ -7,6 +7,8 @@ import io.homeassistant.companion.android.common.data.mediacontrol.MediaPlayback import io.homeassistant.companion.android.common.data.mediacontrol.MediaRepeatMode import io.mockk.mockk import io.mockk.verify +import kotlin.time.Duration +import kotlin.time.Duration.Companion.seconds import org.junit.Assert.assertEquals import org.junit.Assert.assertFalse import org.junit.Assert.assertNull @@ -36,8 +38,8 @@ class HaRemoteMediaPlayerTest { artist: String? = "Test Artist", albumName: String? = "Test Album", entityPictureUrl: String? = null, - mediaDurationSeconds: Double? = 300.0, - mediaPositionSeconds: Double? = 120.0, + mediaDuration: Duration? = 300.0.seconds, + mediaPosition: Duration? = 120.0.seconds, supportsPause: Boolean = true, supportsPlay: Boolean = true, supportsSeek: Boolean = true, @@ -67,8 +69,8 @@ class HaRemoteMediaPlayerTest { artist = artist, albumName = albumName, entityPictureUrl = entityPictureUrl, - mediaDurationSeconds = mediaDurationSeconds, - mediaPositionSeconds = mediaPositionSeconds, + mediaDuration = mediaDuration, + mediaPosition = mediaPosition, supportsPause = supportsPause, supportsPlay = supportsPlay, supportsSeek = supportsSeek, @@ -272,7 +274,7 @@ class HaRemoteMediaPlayerTest { @Test fun `Given state with duration and position when getState then timeline has correct values`() { player.updateState( - state = createState(mediaDurationSeconds = 300.0, mediaPositionSeconds = 120.0), + state = createState(mediaDuration = 300.0.seconds, mediaPosition = 120.0.seconds), artworkPngBytes = null, ) shadowOf(Looper.getMainLooper()).idle() @@ -301,7 +303,7 @@ class HaRemoteMediaPlayerTest { @Test fun `Given any state when getState then GET_CURRENT_MEDIA_ITEM always available`() { - player.updateState(state = createState(supportsSeek = false, mediaDurationSeconds = null), artworkPngBytes = null) + player.updateState(state = createState(supportsSeek = false, mediaDuration = null), artworkPngBytes = null) shadowOf(Looper.getMainLooper()).idle() assertTrue(player.availableCommands.contains(Player.COMMAND_GET_CURRENT_MEDIA_ITEM)) @@ -309,7 +311,7 @@ class HaRemoteMediaPlayerTest { @Test fun `Given seek not supported when getState then seek command not available`() { - player.updateState(state = createState(supportsSeek = false, mediaDurationSeconds = 300.0), artworkPngBytes = null) + player.updateState(state = createState(supportsSeek = false, mediaDuration = 300.0.seconds), artworkPngBytes = null) shadowOf(Looper.getMainLooper()).idle() assertFalse(player.availableCommands.contains(Player.COMMAND_SEEK_IN_CURRENT_MEDIA_ITEM)) diff --git a/common/src/main/kotlin/io/homeassistant/companion/android/common/data/integration/Entity.kt b/common/src/main/kotlin/io/homeassistant/companion/android/common/data/integration/Entity.kt index d7afdf6af19..ad6f0bbe079 100644 --- a/common/src/main/kotlin/io/homeassistant/companion/android/common/data/integration/Entity.kt +++ b/common/src/main/kotlin/io/homeassistant/companion/android/common/data/integration/Entity.kt @@ -32,6 +32,8 @@ import kotlinx.serialization.encoding.Encoder import kotlinx.serialization.json.JsonElement import kotlinx.serialization.json.JsonNull import kotlinx.serialization.json.JsonPrimitive +import kotlin.time.Duration +import kotlin.time.Duration.Companion.seconds import timber.log.Timber /** @@ -1333,13 +1335,13 @@ internal fun Entity.getMediaArtist(): String? = if (domain == MEDIA_PLAYER_DOMAI internal fun Entity.getMediaAlbumName(): String? = if (domain == MEDIA_PLAYER_DOMAIN) attributes["media_album_name"]?.toString() else null -/** Returns the current media position in seconds, if available. */ -internal fun Entity.getMediaPosition(): Double? = - if (domain == MEDIA_PLAYER_DOMAIN) attributes["media_position"]?.toString()?.toDoubleOrNull() else null +/** Returns the current media position, if available. */ +internal fun Entity.getMediaPosition(): Duration? = + if (domain == MEDIA_PLAYER_DOMAIN) attributes["media_position"]?.toString()?.toDoubleOrNull()?.seconds else null -/** Returns the media duration in seconds, if available. */ -internal fun Entity.getMediaDuration(): Double? = - if (domain == MEDIA_PLAYER_DOMAIN) attributes["media_duration"]?.toString()?.toDoubleOrNull() else null +/** Returns the media duration, if available. */ +internal fun Entity.getMediaDuration(): Duration? = + if (domain == MEDIA_PLAYER_DOMAIN) attributes["media_duration"]?.toString()?.toDoubleOrNull()?.seconds else null /** Returns the entity_picture attribute URL, if available. */ internal fun Entity.getEntityPictureUrl(): String? = diff --git a/common/src/main/kotlin/io/homeassistant/companion/android/common/data/mediacontrol/MediaControlRepositoryImpl.kt b/common/src/main/kotlin/io/homeassistant/companion/android/common/data/mediacontrol/MediaControlRepositoryImpl.kt index d40138787e1..8ed19f05b23 100644 --- a/common/src/main/kotlin/io/homeassistant/companion/android/common/data/mediacontrol/MediaControlRepositoryImpl.kt +++ b/common/src/main/kotlin/io/homeassistant/companion/android/common/data/mediacontrol/MediaControlRepositoryImpl.kt @@ -139,8 +139,8 @@ private fun Entity.toMediaControlState(serverId: Int): MediaControlState { artist = getMediaArtist(), albumName = getMediaAlbumName(), entityPictureUrl = getEntityPictureUrl(), - mediaDurationSeconds = getMediaDuration(), - mediaPositionSeconds = getMediaPosition(), + mediaDuration = getMediaDuration(), + mediaPosition = getMediaPosition(), supportsPause = supportsPause(), supportsPlay = supportsPlay(), supportsSeek = supportsSeek(), diff --git a/common/src/main/kotlin/io/homeassistant/companion/android/common/data/mediacontrol/MediaControlState.kt b/common/src/main/kotlin/io/homeassistant/companion/android/common/data/mediacontrol/MediaControlState.kt index c8b79999572..4c1424d81fa 100644 --- a/common/src/main/kotlin/io/homeassistant/companion/android/common/data/mediacontrol/MediaControlState.kt +++ b/common/src/main/kotlin/io/homeassistant/companion/android/common/data/mediacontrol/MediaControlState.kt @@ -1,5 +1,7 @@ package io.homeassistant.companion.android.common.data.mediacontrol +import kotlin.time.Duration + /** * Represents the playback state of a media player entity used for native Android media controls. */ @@ -33,8 +35,8 @@ data class MediaControlState( val artist: String?, val albumName: String?, val entityPictureUrl: String?, - val mediaDurationSeconds: Double?, - val mediaPositionSeconds: Double?, + val mediaDuration: Duration?, + val mediaPosition: Duration?, val supportsPause: Boolean, val supportsPlay: Boolean, val supportsSeek: Boolean, diff --git a/common/src/test/kotlin/io/homeassistant/companion/android/common/data/mediacontrol/MediaControlRepositoryImplTest.kt b/common/src/test/kotlin/io/homeassistant/companion/android/common/data/mediacontrol/MediaControlRepositoryImplTest.kt index 96baad97a56..eca0b365574 100644 --- a/common/src/test/kotlin/io/homeassistant/companion/android/common/data/mediacontrol/MediaControlRepositoryImplTest.kt +++ b/common/src/test/kotlin/io/homeassistant/companion/android/common/data/mediacontrol/MediaControlRepositoryImplTest.kt @@ -12,6 +12,7 @@ import io.homeassistant.companion.android.testing.unit.ConsoleLogExtension import io.mockk.coEvery import io.mockk.coVerify import io.mockk.mockk +import kotlin.time.Duration.Companion.seconds import kotlinx.coroutines.flow.MutableSharedFlow import kotlinx.coroutines.flow.flowOf import kotlinx.coroutines.test.runTest @@ -197,8 +198,8 @@ class MediaControlRepositoryImplTest { assertNull(state.artist) assertNull(state.albumName) assertNull(state.entityPictureUrl) - assertNull(state.mediaDurationSeconds) - assertNull(state.mediaPositionSeconds) + assertNull(state.mediaDuration) + assertNull(state.mediaPosition) awaitComplete() } } @@ -233,8 +234,8 @@ class MediaControlRepositoryImplTest { assertEquals("Artist", state.artist) assertEquals("Album", state.albumName) assertEquals("/api/picture", state.entityPictureUrl) - assertEquals(300.0, state.mediaDurationSeconds) - assertEquals(120.5, state.mediaPositionSeconds) + assertEquals(300.0.seconds, state.mediaDuration) + assertEquals(120.5.seconds, state.mediaPosition) assertTrue(state.supportsPause) assertTrue(state.supportsPlay) assertTrue(state.supportsSeek) From 87020167cd1696137b97629ba917692f35cf7671 Mon Sep 17 00:00:00 2001 From: Fletcher Dostie Date: Thu, 2 Apr 2026 13:58:48 -0700 Subject: [PATCH 032/114] Address MediaControlSettings PR review comments - HaMediaSession: add @OptIn(UnstableApi::class) on class declaration - Fragment: use startIfConfigured() instead of raw startService() intent - UiState: add registry helpers to eliminate ?: emptyList() at callsites - UiState: precompute entityNamesByConfig map in ViewModel - ViewModel: extend AndroidViewModel; precompute entityIconsByConfig map - Screen: show entity icon in ConfiguredEntityRow using HALoading icon tint - Screen: replace CircularProgressIndicator with HALoading - ViewModel: move availableEntities filter to Dispatchers.Default; remove filter logic from composable - Screen: Replace `16.dp`, `8.dp`, `72.dp`, `4.dp` magic numbers with `HaDimens` constants --- .../android/mediacontrol/HaMediaSession.kt | 1 + .../MediaControlSettingsFragment.kt | 7 +- .../MediaControlSettingsViewModel.kt | 81 +++++++++++++++++-- .../views/MediaControlSettingsScreen.kt | 69 +++++++++------- .../MediaControlSettingsViewModelTest.kt | 2 + 5 files changed, 121 insertions(+), 39 deletions(-) diff --git a/app/src/main/kotlin/io/homeassistant/companion/android/mediacontrol/HaMediaSession.kt b/app/src/main/kotlin/io/homeassistant/companion/android/mediacontrol/HaMediaSession.kt index 761c178a4be..14eae9d0167 100644 --- a/app/src/main/kotlin/io/homeassistant/companion/android/mediacontrol/HaMediaSession.kt +++ b/app/src/main/kotlin/io/homeassistant/companion/android/mediacontrol/HaMediaSession.kt @@ -51,6 +51,7 @@ import timber.log.Timber * @param mediaControlRepository Provides the per-entity state flow. * @param serverManager Used to resolve artwork base URLs and call HA integration actions. */ +@OptIn(UnstableApi::class) class HaMediaSession @AssistedInject constructor( @Assisted private val context: Context, @Assisted private val config: MediaControlEntityConfig, diff --git a/app/src/main/kotlin/io/homeassistant/companion/android/settings/mediacontrol/MediaControlSettingsFragment.kt b/app/src/main/kotlin/io/homeassistant/companion/android/settings/mediacontrol/MediaControlSettingsFragment.kt index c0d5cf8f2f3..c887fdddff5 100644 --- a/app/src/main/kotlin/io/homeassistant/companion/android/settings/mediacontrol/MediaControlSettingsFragment.kt +++ b/app/src/main/kotlin/io/homeassistant/companion/android/settings/mediacontrol/MediaControlSettingsFragment.kt @@ -1,6 +1,5 @@ package io.homeassistant.companion.android.settings.mediacontrol -import android.content.Intent import android.os.Bundle import android.view.LayoutInflater import android.view.View @@ -13,15 +12,19 @@ import androidx.lifecycle.lifecycleScope import androidx.lifecycle.repeatOnLifecycle import dagger.hilt.android.AndroidEntryPoint import io.homeassistant.companion.android.common.R as commonR +import io.homeassistant.companion.android.common.data.mediacontrol.MediaControlRepository import io.homeassistant.companion.android.mediacontrol.HaMediaSessionService import io.homeassistant.companion.android.settings.addHelpMenuProvider import io.homeassistant.companion.android.settings.mediacontrol.views.MediaControlSettingsScreen +import javax.inject.Inject import kotlinx.coroutines.launch @AndroidEntryPoint class MediaControlSettingsFragment : Fragment() { private val viewModel: MediaControlSettingsViewModel by viewModels() + @Inject lateinit var mediaControlRepository: MediaControlRepository + override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View { return ComposeView(requireContext()).apply { setContent { @@ -37,7 +40,7 @@ class MediaControlSettingsFragment : Fragment() { viewModel.serviceEvents.collect { event -> when (event) { MediaControlServiceEvent.Start -> { - requireContext().startService(Intent(requireContext(), HaMediaSessionService::class.java)) + HaMediaSessionService.startIfConfigured(requireContext(), mediaControlRepository) } } } diff --git a/app/src/main/kotlin/io/homeassistant/companion/android/settings/mediacontrol/MediaControlSettingsViewModel.kt b/app/src/main/kotlin/io/homeassistant/companion/android/settings/mediacontrol/MediaControlSettingsViewModel.kt index 167ed18573b..11d4c3f47be 100644 --- a/app/src/main/kotlin/io/homeassistant/companion/android/settings/mediacontrol/MediaControlSettingsViewModel.kt +++ b/app/src/main/kotlin/io/homeassistant/companion/android/settings/mediacontrol/MediaControlSettingsViewModel.kt @@ -1,11 +1,15 @@ package io.homeassistant.companion.android.settings.mediacontrol +import android.app.Application import androidx.compose.runtime.Stable -import androidx.lifecycle.ViewModel +import androidx.lifecycle.AndroidViewModel import androidx.lifecycle.viewModelScope +import com.mikepenz.iconics.typeface.IIcon import dagger.hilt.android.lifecycle.HiltViewModel import io.homeassistant.companion.android.common.data.integration.Entity import io.homeassistant.companion.android.common.data.integration.IntegrationDomains.MEDIA_PLAYER_DOMAIN +import io.homeassistant.companion.android.common.data.integration.friendlyName +import io.homeassistant.companion.android.common.data.integration.getIcon import io.homeassistant.companion.android.common.data.mediacontrol.MediaControlEntityConfig import io.homeassistant.companion.android.common.data.mediacontrol.MediaControlRepository import io.homeassistant.companion.android.common.data.servers.ServerManager @@ -15,6 +19,7 @@ import io.homeassistant.companion.android.common.data.websocket.impl.entities.En import io.homeassistant.companion.android.database.server.Server import javax.inject.Inject import kotlinx.coroutines.CancellationException +import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.async import kotlinx.coroutines.awaitAll import kotlinx.coroutines.flow.MutableSharedFlow @@ -42,17 +47,28 @@ data class MediaControlSettingsUiState( val areaRegistryPerServer: Map> = emptyMap(), // The in-memory list of entities being configured val configuredEntities: List = emptyList(), + // Precomputed friendly names for each configured entity; absent means not yet loaded + val entityNamesByConfig: Map = emptyMap(), + // Precomputed icons for each configured entity; absent means not yet loaded + val entityIconsByConfig: Map = emptyMap(), + // Entities for the selected server that are not yet configured, ready for the picker + val availableEntities: List = emptyList(), // Server selection for the entity picker val selectedServerId: Int = ServerManager.SERVER_ID_ACTIVE, // True while entities and registries are being loaded from the server val isLoading: Boolean = true, -) +) { + fun entityRegistryForServer(serverId: Int): List = entityRegistryPerServer[serverId] ?: emptyList() + fun deviceRegistryForServer(serverId: Int): List = deviceRegistryPerServer[serverId] ?: emptyList() + fun areaRegistryForServer(serverId: Int): List = areaRegistryPerServer[serverId] ?: emptyList() +} @HiltViewModel class MediaControlSettingsViewModel @Inject constructor( + application: Application, private val serverManager: ServerManager, private val mediaControlRepository: MediaControlRepository, -) : ViewModel() { +) : AndroidViewModel(application) { private val _uiState = MutableStateFlow(MediaControlSettingsUiState()) val uiState: StateFlow = _uiState.asStateFlow() @@ -105,20 +121,25 @@ class MediaControlSettingsViewModel @Inject constructor( val results = registryResults.awaitAll() _uiState.update { state -> + val entitiesPerServer = results.associate { it.serverId to it.entities } state.copy( - entitiesPerServer = results.associate { it.serverId to it.entities }, + entitiesPerServer = entitiesPerServer, entityRegistryPerServer = results.associate { it.serverId to it.entityRegistry }, deviceRegistryPerServer = results.associate { it.serverId to it.deviceRegistry }, areaRegistryPerServer = results.associate { it.serverId to it.areaRegistry }, + entityNamesByConfig = buildEntityNamesByConfig(entitiesPerServer, state.configuredEntities), + entityIconsByConfig = buildEntityIconsByConfig(entitiesPerServer, state.configuredEntities), isLoading = false, ) } + updateAvailableEntities() } } /** Updates the selected server in the entity picker. */ fun selectServerId(serverId: Int) { _uiState.update { it.copy(selectedServerId = serverId) } + updateAvailableEntities() } /** @@ -134,17 +155,29 @@ class MediaControlSettingsViewModel @Inject constructor( if (state.configuredEntities.contains(config)) { state } else { - state.copy(configuredEntities = state.configuredEntities + config) + val newConfiguredEntities = state.configuredEntities + config + state.copy( + configuredEntities = newConfiguredEntities, + entityNamesByConfig = buildEntityNamesByConfig(state.entitiesPerServer, newConfiguredEntities), + entityIconsByConfig = buildEntityIconsByConfig(state.entitiesPerServer, newConfiguredEntities), + ) } } + updateAvailableEntities() persistAndNotifyService() } /** Removes the configured entity at [index] from the list, then persists the change immediately. */ fun removeEntity(index: Int) { _uiState.update { state -> - state.copy(configuredEntities = state.configuredEntities.toMutableList().also { it.removeAt(index) }) + val newConfiguredEntities = state.configuredEntities.toMutableList().also { it.removeAt(index) } + state.copy( + configuredEntities = newConfiguredEntities, + entityNamesByConfig = buildEntityNamesByConfig(state.entitiesPerServer, newConfiguredEntities), + entityIconsByConfig = buildEntityIconsByConfig(state.entitiesPerServer, newConfiguredEntities), + ) } + updateAvailableEntities() persistAndNotifyService() } @@ -181,6 +214,42 @@ class MediaControlSettingsViewModel @Inject constructor( } } + private fun updateAvailableEntities() { + viewModelScope.launch(Dispatchers.Default) { + _uiState.update { state -> + val configuredForServer = state.configuredEntities + .filter { it.serverId == state.selectedServerId } + .mapTo(HashSet()) { it.entityId } + state.copy( + availableEntities = (state.entitiesPerServer[state.selectedServerId] ?: emptyList()) + .filter { it.entityId !in configuredForServer }, + ) + } + } + } + + private fun buildEntityIconsByConfig( + entitiesPerServer: Map>, + configuredEntities: List, + ): Map = configuredEntities.mapNotNull { config -> + val icon = entitiesPerServer[config.serverId] + ?.firstOrNull { it.entityId == config.entityId } + ?.getIcon(getApplication()) + ?: return@mapNotNull null + config to icon + }.toMap() + + private fun buildEntityNamesByConfig( + entitiesPerServer: Map>, + configuredEntities: List, + ): Map = configuredEntities.mapNotNull { config -> + val name = entitiesPerServer[config.serverId] + ?.firstOrNull { it.entityId == config.entityId } + ?.friendlyName + ?: return@mapNotNull null + config to name + }.toMap() + private suspend fun loadMediaPlayerEntities(serverId: Int): List = try { serverManager.integrationRepository(serverId).getEntities().orEmpty() .filter { it.domain == MEDIA_PLAYER_DOMAIN } diff --git a/app/src/main/kotlin/io/homeassistant/companion/android/settings/mediacontrol/views/MediaControlSettingsScreen.kt b/app/src/main/kotlin/io/homeassistant/companion/android/settings/mediacontrol/views/MediaControlSettingsScreen.kt index bbaa61e2063..79eea5e94ed 100644 --- a/app/src/main/kotlin/io/homeassistant/companion/android/settings/mediacontrol/views/MediaControlSettingsScreen.kt +++ b/app/src/main/kotlin/io/homeassistant/companion/android/settings/mediacontrol/views/MediaControlSettingsScreen.kt @@ -15,7 +15,6 @@ import androidx.compose.foundation.lazy.itemsIndexed import androidx.compose.foundation.lazy.rememberLazyListState import androidx.compose.material.icons.Icons import androidx.compose.material.icons.filled.Clear -import androidx.compose.material3.CircularProgressIndicator import androidx.compose.material3.HorizontalDivider import androidx.compose.material3.Surface import androidx.compose.material3.Text @@ -27,18 +26,19 @@ import androidx.compose.ui.graphics.ColorFilter import androidx.compose.ui.res.stringResource import androidx.compose.ui.text.style.TextAlign import androidx.compose.ui.tooling.preview.Preview -import androidx.compose.ui.unit.dp +import io.homeassistant.companion.android.common.compose.theme.HADimens import androidx.lifecycle.compose.collectAsStateWithLifecycle import com.mikepenz.iconics.compose.Image +import com.mikepenz.iconics.typeface.IIcon import com.mikepenz.iconics.typeface.library.community.material.CommunityMaterial import io.homeassistant.companion.android.common.R import io.homeassistant.companion.android.common.compose.composable.ButtonVariant import io.homeassistant.companion.android.common.compose.composable.HAIconButton +import io.homeassistant.companion.android.common.compose.composable.HALoading import io.homeassistant.companion.android.common.compose.theme.HATextStyle import io.homeassistant.companion.android.common.compose.theme.HATheme import io.homeassistant.companion.android.common.compose.theme.HAThemeForPreview import io.homeassistant.companion.android.common.compose.theme.LocalHAColorScheme -import io.homeassistant.companion.android.common.data.integration.friendlyName import io.homeassistant.companion.android.common.data.mediacontrol.MediaControlEntityConfig import io.homeassistant.companion.android.settings.mediacontrol.MediaControlSettingsUiState import io.homeassistant.companion.android.settings.mediacontrol.MediaControlSettingsViewModel @@ -83,16 +83,9 @@ internal fun MediaControlSettingsContent( onMove(from.key, to.key) } - val availableEntities = uiState.entitiesPerServer[uiState.selectedServerId] - ?.filter { entity -> - uiState.configuredEntities.none { - it.serverId == uiState.selectedServerId && it.entityId == entity.entityId - } - } ?: emptyList() - LazyColumn( state = lazyListState, - contentPadding = PaddingValues(vertical = 16.dp) + safeBottomPaddingValues(applyHorizontal = false), + contentPadding = PaddingValues(vertical = HADimens.SPACE4) + safeBottomPaddingValues(applyHorizontal = false), modifier = modifier, ) { item { @@ -101,18 +94,18 @@ internal fun MediaControlSettingsContent( style = HATextStyle.Body, color = colorScheme.colorTextSecondary, textAlign = TextAlign.Start, - modifier = Modifier.padding(horizontal = 16.dp), + modifier = Modifier.padding(horizontal = HADimens.SPACE4), ) - Spacer(modifier = Modifier.size(16.dp)) + Spacer(modifier = Modifier.size(HADimens.SPACE4)) } if (uiState.isLoading) { item { Box( - modifier = Modifier.fillMaxWidth().padding(top = 16.dp), + modifier = Modifier.fillMaxWidth().padding(top = HADimens.SPACE4), contentAlignment = Alignment.Center, ) { - CircularProgressIndicator() + HALoading() } } } else { @@ -124,23 +117,23 @@ internal fun MediaControlSettingsContent( current = uiState.selectedServerId, onSelected = onServerSelected, title = R.string.server, - modifier = Modifier.fillMaxWidth().padding(horizontal = 16.dp), + modifier = Modifier.fillMaxWidth().padding(horizontal = HADimens.SPACE4), ) - Spacer(modifier = Modifier.size(8.dp)) + Spacer(modifier = Modifier.size(HADimens.SPACE2)) } } item { EntityPicker( - entities = availableEntities, + entities = uiState.availableEntities, selectedEntityId = null, onEntitySelectedId = onEntitySelected, onEntityCleared = {}, addButtonText = stringResource(R.string.media_control_select_entity), - entityRegistry = uiState.entityRegistryPerServer[uiState.selectedServerId] ?: emptyList(), - deviceRegistry = uiState.deviceRegistryPerServer[uiState.selectedServerId] ?: emptyList(), - areaRegistry = uiState.areaRegistryPerServer[uiState.selectedServerId] ?: emptyList(), - modifier = Modifier.padding(horizontal = 16.dp), + entityRegistry = uiState.entityRegistryForServer(uiState.selectedServerId), + deviceRegistry = uiState.deviceRegistryForServer(uiState.selectedServerId), + areaRegistry = uiState.areaRegistryForServer(uiState.selectedServerId), + modifier = Modifier.padding(horizontal = HADimens.SPACE4), ) } } @@ -157,9 +150,8 @@ internal fun MediaControlSettingsContent( } else { null }, - entityName = uiState.entitiesPerServer[config.serverId] - ?.firstOrNull { it.entityId == config.entityId } - ?.friendlyName, + entityName = uiState.entityNamesByConfig[config], + entityIcon = uiState.entityIconsByConfig[config], onRemove = { onRemoveEntity(index) }, onReorderComplete = onReorderComplete, isDragging = isDragging, @@ -177,12 +169,13 @@ private fun ReorderableCollectionItemScope.ConfiguredEntityRow( config: MediaControlEntityConfig, subtitle: String?, entityName: String?, + entityIcon: IIcon?, onRemove: () -> Unit, onReorderComplete: () -> Unit, isDragging: Boolean, ) { val colorScheme = LocalHAColorScheme.current - val elevation = animateDpAsState(targetValue = if (isDragging) 8.dp else 0.dp) + val elevation = animateDpAsState(targetValue = if (isDragging) HADimens.SPACE2 else HADimens.SPACE0) val displayName = entityName ?: config.entityId Surface(color = colorScheme.colorSurfaceLow, shadowElevation = elevation.value) { @@ -190,11 +183,25 @@ private fun ReorderableCollectionItemScope.ConfiguredEntityRow( verticalAlignment = Alignment.CenterVertically, modifier = Modifier .fillMaxWidth() - .heightIn(min = 72.dp) + .heightIn(min = HADimens.SPACE18) .longPressDraggableHandle(onDragStopped = { onReorderComplete() }) - .padding(vertical = 4.dp), + .padding(vertical = HADimens.SPACE1), ) { - Column(modifier = Modifier.weight(1f).padding(start = 16.dp)) { + if (entityIcon != null) { + Image( + asset = entityIcon, + colorFilter = ColorFilter.tint(colorScheme.colorTextSecondary), + contentDescription = null, + modifier = Modifier + .padding(start = HADimens.SPACE4) + .size(HADimens.SPACE6), + ) + } + Column( + modifier = Modifier + .weight(1f) + .padding(start = if (entityIcon != null) HADimens.SPACE2 else HADimens.SPACE4), + ) { Text( text = displayName, style = HATextStyle.Body, @@ -221,8 +228,8 @@ private fun ReorderableCollectionItemScope.ConfiguredEntityRow( contentDescription = stringResource(R.string.hold_to_reorder), colorFilter = ColorFilter.tint(colorScheme.colorTextSecondary), modifier = Modifier - .size(width = 40.dp, height = 24.dp) - .padding(end = 16.dp), + .size(width = HADimens.SPACE10, height = HADimens.SPACE6) + .padding(end = HADimens.SPACE4), ) } } diff --git a/app/src/test/kotlin/io/homeassistant/companion/android/settings/mediacontrol/MediaControlSettingsViewModelTest.kt b/app/src/test/kotlin/io/homeassistant/companion/android/settings/mediacontrol/MediaControlSettingsViewModelTest.kt index c70f83a952f..d4070cf25aa 100644 --- a/app/src/test/kotlin/io/homeassistant/companion/android/settings/mediacontrol/MediaControlSettingsViewModelTest.kt +++ b/app/src/test/kotlin/io/homeassistant/companion/android/settings/mediacontrol/MediaControlSettingsViewModelTest.kt @@ -7,6 +7,7 @@ import io.homeassistant.companion.android.common.data.servers.ServerManager import io.homeassistant.companion.android.common.data.servers.ServerManager.Companion.SERVER_ID_ACTIVE import io.homeassistant.companion.android.testing.unit.ConsoleLogExtension import io.homeassistant.companion.android.testing.unit.MainDispatcherJUnit5Extension +import android.app.Application import io.mockk.coEvery import io.mockk.coVerify import io.mockk.mockk @@ -44,6 +45,7 @@ class MediaControlSettingsViewModelTest { private fun createViewModel(): MediaControlSettingsViewModel { return MediaControlSettingsViewModel( + application = mockk(relaxed = true), serverManager = serverManager, mediaControlRepository = mediaControlRepository, ) From 70080baec927a46862d67ce5f02b6400a467b38e Mon Sep 17 00:00:00 2001 From: Fletcher Dostie Date: Thu, 2 Apr 2026 15:55:51 -0700 Subject: [PATCH 033/114] Fix showing entity name instead of track title; Add small app icon to media control pane --- .../android/mediacontrol/HaMediaSessionService.kt | 7 +++++++ .../android/mediacontrol/HaRemoteMediaPlayer.kt | 1 - .../mediacontrol/MediaControlSettingsViewModel.kt | 9 ++++++--- .../mediacontrol/views/MediaControlSettingsScreen.kt | 2 +- .../android/mediacontrol/HaRemoteMediaPlayerTest.kt | 11 ----------- .../mediacontrol/MediaControlSettingsViewModelTest.kt | 2 +- 6 files changed, 15 insertions(+), 17 deletions(-) diff --git a/app/src/main/kotlin/io/homeassistant/companion/android/mediacontrol/HaMediaSessionService.kt b/app/src/main/kotlin/io/homeassistant/companion/android/mediacontrol/HaMediaSessionService.kt index ae021054ac1..9d61c3cbb14 100644 --- a/app/src/main/kotlin/io/homeassistant/companion/android/mediacontrol/HaMediaSessionService.kt +++ b/app/src/main/kotlin/io/homeassistant/companion/android/mediacontrol/HaMediaSessionService.kt @@ -2,9 +2,12 @@ package io.homeassistant.companion.android.mediacontrol import android.content.Context import android.content.Intent +import androidx.media3.common.util.UnstableApi +import androidx.media3.session.DefaultMediaNotificationProvider import androidx.media3.session.MediaSession import androidx.media3.session.MediaSessionService import dagger.hilt.android.AndroidEntryPoint +import io.homeassistant.companion.android.common.R as commonR import io.homeassistant.companion.android.common.data.mediacontrol.MediaControlEntityConfig import io.homeassistant.companion.android.common.data.mediacontrol.MediaControlRepository import javax.inject.Inject @@ -39,8 +42,12 @@ class HaMediaSessionService : MediaSessionService() { internal val activeSessions = mutableMapOf() private val serviceScope = CoroutineScope(SupervisorJob() + Dispatchers.Default) + @androidx.annotation.OptIn(UnstableApi::class) override fun onCreate() { super.onCreate() + val notificationProvider = DefaultMediaNotificationProvider.Builder(this).build() + notificationProvider.setSmallIcon(commonR.drawable.ic_stat_ic_notification) + setMediaNotificationProvider(notificationProvider) Timber.d("HaMediaSessionService created") mediaControlRepository.observeConfiguredEntities() .onEach { entities -> withContext(Dispatchers.Main) { reconcileSessions(entities) } } diff --git a/app/src/main/kotlin/io/homeassistant/companion/android/mediacontrol/HaRemoteMediaPlayer.kt b/app/src/main/kotlin/io/homeassistant/companion/android/mediacontrol/HaRemoteMediaPlayer.kt index 469c6aff0be..0620ece7a08 100644 --- a/app/src/main/kotlin/io/homeassistant/companion/android/mediacontrol/HaRemoteMediaPlayer.kt +++ b/app/src/main/kotlin/io/homeassistant/companion/android/mediacontrol/HaRemoteMediaPlayer.kt @@ -127,7 +127,6 @@ class HaRemoteMediaPlayer(looper: Looper, private val commandCallback: CommandCa private fun buildMetadata(state: MediaControlState, artwork: ByteArray?): MediaMetadata { val builder = MediaMetadata.Builder() .setTitle(state.title) - .setDisplayTitle(state.entityFriendlyName) .setArtist(state.artist) .setAlbumTitle(state.albumName) .setAlbumArtist(state.albumArtist) diff --git a/app/src/main/kotlin/io/homeassistant/companion/android/settings/mediacontrol/MediaControlSettingsViewModel.kt b/app/src/main/kotlin/io/homeassistant/companion/android/settings/mediacontrol/MediaControlSettingsViewModel.kt index 11d4c3f47be..98086a766a4 100644 --- a/app/src/main/kotlin/io/homeassistant/companion/android/settings/mediacontrol/MediaControlSettingsViewModel.kt +++ b/app/src/main/kotlin/io/homeassistant/companion/android/settings/mediacontrol/MediaControlSettingsViewModel.kt @@ -58,9 +58,12 @@ data class MediaControlSettingsUiState( // True while entities and registries are being loaded from the server val isLoading: Boolean = true, ) { - fun entityRegistryForServer(serverId: Int): List = entityRegistryPerServer[serverId] ?: emptyList() - fun deviceRegistryForServer(serverId: Int): List = deviceRegistryPerServer[serverId] ?: emptyList() - fun areaRegistryForServer(serverId: Int): List = areaRegistryPerServer[serverId] ?: emptyList() + fun entityRegistryForServer(serverId: Int): List = + entityRegistryPerServer[serverId] ?: emptyList() + fun deviceRegistryForServer(serverId: Int): List = + deviceRegistryPerServer[serverId] ?: emptyList() + fun areaRegistryForServer(serverId: Int): List = + areaRegistryPerServer[serverId] ?: emptyList() } @HiltViewModel diff --git a/app/src/main/kotlin/io/homeassistant/companion/android/settings/mediacontrol/views/MediaControlSettingsScreen.kt b/app/src/main/kotlin/io/homeassistant/companion/android/settings/mediacontrol/views/MediaControlSettingsScreen.kt index 79eea5e94ed..3eaef4e8d81 100644 --- a/app/src/main/kotlin/io/homeassistant/companion/android/settings/mediacontrol/views/MediaControlSettingsScreen.kt +++ b/app/src/main/kotlin/io/homeassistant/companion/android/settings/mediacontrol/views/MediaControlSettingsScreen.kt @@ -26,7 +26,6 @@ import androidx.compose.ui.graphics.ColorFilter import androidx.compose.ui.res.stringResource import androidx.compose.ui.text.style.TextAlign import androidx.compose.ui.tooling.preview.Preview -import io.homeassistant.companion.android.common.compose.theme.HADimens import androidx.lifecycle.compose.collectAsStateWithLifecycle import com.mikepenz.iconics.compose.Image import com.mikepenz.iconics.typeface.IIcon @@ -35,6 +34,7 @@ import io.homeassistant.companion.android.common.R import io.homeassistant.companion.android.common.compose.composable.ButtonVariant import io.homeassistant.companion.android.common.compose.composable.HAIconButton import io.homeassistant.companion.android.common.compose.composable.HALoading +import io.homeassistant.companion.android.common.compose.theme.HADimens import io.homeassistant.companion.android.common.compose.theme.HATextStyle import io.homeassistant.companion.android.common.compose.theme.HATheme import io.homeassistant.companion.android.common.compose.theme.HAThemeForPreview diff --git a/app/src/test/kotlin/io/homeassistant/companion/android/mediacontrol/HaRemoteMediaPlayerTest.kt b/app/src/test/kotlin/io/homeassistant/companion/android/mediacontrol/HaRemoteMediaPlayerTest.kt index 96578eeac31..afd49b4d920 100644 --- a/app/src/test/kotlin/io/homeassistant/companion/android/mediacontrol/HaRemoteMediaPlayerTest.kt +++ b/app/src/test/kotlin/io/homeassistant/companion/android/mediacontrol/HaRemoteMediaPlayerTest.kt @@ -161,17 +161,6 @@ class HaRemoteMediaPlayerTest { assertEquals("My Album", metadata.albumTitle?.toString()) } - @Test - fun `Given state with entity friendly name when getState then displayTitle is populated`() { - player.updateState( - state = createState(entityFriendlyName = "Living Room TV"), - artworkPngBytes = null, - ) - shadowOf(Looper.getMainLooper()).idle() - - assertEquals("Living Room TV", player.mediaMetadata.displayTitle?.toString()) - } - @Test fun `Given state with album artist when getState then albumArtist is populated`() { player.updateState( diff --git a/app/src/test/kotlin/io/homeassistant/companion/android/settings/mediacontrol/MediaControlSettingsViewModelTest.kt b/app/src/test/kotlin/io/homeassistant/companion/android/settings/mediacontrol/MediaControlSettingsViewModelTest.kt index d4070cf25aa..5d10a184df3 100644 --- a/app/src/test/kotlin/io/homeassistant/companion/android/settings/mediacontrol/MediaControlSettingsViewModelTest.kt +++ b/app/src/test/kotlin/io/homeassistant/companion/android/settings/mediacontrol/MediaControlSettingsViewModelTest.kt @@ -1,5 +1,6 @@ package io.homeassistant.companion.android.settings.mediacontrol +import android.app.Application import app.cash.turbine.test import io.homeassistant.companion.android.common.data.mediacontrol.MediaControlEntityConfig import io.homeassistant.companion.android.common.data.mediacontrol.MediaControlRepository @@ -7,7 +8,6 @@ import io.homeassistant.companion.android.common.data.servers.ServerManager import io.homeassistant.companion.android.common.data.servers.ServerManager.Companion.SERVER_ID_ACTIVE import io.homeassistant.companion.android.testing.unit.ConsoleLogExtension import io.homeassistant.companion.android.testing.unit.MainDispatcherJUnit5Extension -import android.app.Application import io.mockk.coEvery import io.mockk.coVerify import io.mockk.mockk From 4a4f1136bccdbd47d01586f8efb2048ee596eecd Mon Sep 17 00:00:00 2001 From: Fletcher Dostie Date: Fri, 3 Apr 2026 13:16:04 -0700 Subject: [PATCH 034/114] When disconnected, retry only once when opening app instead of in a loop; Add small HA icon to media controls --- .../HaMediaNotificationProvider.kt | 37 +++++++++++++++++++ .../android/mediacontrol/HaMediaSession.kt | 15 +++++++- .../mediacontrol/HaMediaSessionService.kt | 9 ++++- .../mediacontrol/HaMediaSessionServiceTest.kt | 29 +++++++++++++++ .../mediacontrol/HaMediaSessionTest.kt | 28 ++++++++++++++ 5 files changed, 115 insertions(+), 3 deletions(-) create mode 100644 app/src/main/kotlin/io/homeassistant/companion/android/mediacontrol/HaMediaNotificationProvider.kt diff --git a/app/src/main/kotlin/io/homeassistant/companion/android/mediacontrol/HaMediaNotificationProvider.kt b/app/src/main/kotlin/io/homeassistant/companion/android/mediacontrol/HaMediaNotificationProvider.kt new file mode 100644 index 00000000000..a58345c133e --- /dev/null +++ b/app/src/main/kotlin/io/homeassistant/companion/android/mediacontrol/HaMediaNotificationProvider.kt @@ -0,0 +1,37 @@ +package io.homeassistant.companion.android.mediacontrol + +import android.content.Context +import androidx.core.app.NotificationCompat +import androidx.media3.common.util.UnstableApi +import androidx.media3.session.CommandButton +import androidx.media3.session.DefaultMediaNotificationProvider +import androidx.media3.session.MediaNotification +import androidx.media3.session.MediaSession +import com.google.common.collect.ImmutableList +import io.homeassistant.companion.android.common.R as commonR + +/** + * Extends [DefaultMediaNotificationProvider] to display the Home Assistant notification icon + * and the media player entity's friendly name as the notification sub-text. + * + * @param sessionEntityName Maps a session ID to the friendly name of its media_player entity. + * May return null if the entity name is not yet known. + */ +@UnstableApi +class HaMediaNotificationProvider(context: Context, private val sessionEntityName: (sessionId: String) -> String?) : + DefaultMediaNotificationProvider(context) { + + init { + setSmallIcon(commonR.drawable.ic_stat_ic_notification) + } + + override fun addNotificationActions( + mediaSession: MediaSession, + mediaButtons: ImmutableList, + builder: NotificationCompat.Builder, + actionFactory: MediaNotification.ActionFactory, + ): IntArray { + sessionEntityName(mediaSession.id)?.let { builder.setSubText(it) } + return super.addNotificationActions(mediaSession, mediaButtons, builder, actionFactory) + } +} diff --git a/app/src/main/kotlin/io/homeassistant/companion/android/mediacontrol/HaMediaSession.kt b/app/src/main/kotlin/io/homeassistant/companion/android/mediacontrol/HaMediaSession.kt index 14eae9d0167..a7445b9b6ad 100644 --- a/app/src/main/kotlin/io/homeassistant/companion/android/mediacontrol/HaMediaSession.kt +++ b/app/src/main/kotlin/io/homeassistant/companion/android/mediacontrol/HaMediaSession.kt @@ -30,6 +30,7 @@ import kotlin.time.Duration.Companion.seconds import kotlinx.coroutines.CancellationException import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.Dispatchers +import kotlinx.coroutines.Job import kotlinx.coroutines.cancel import kotlinx.coroutines.delay import kotlinx.coroutines.launch @@ -165,13 +166,25 @@ class HaMediaSession @AssistedInject constructor( ) } + private var observingJob: Job? = null + + /** + * Starts (or restarts) observation of entity state. Cancels any in-flight observation + * before launching a new one, making it safe to call when already observing (e.g. to + * recover a stuck WebSocket subscription after a network reconnect). + */ + internal fun reconnect() { + observingJob?.cancel() + observingJob = scope.launch { startObservingState() } + } + /** * Observes entity state for [config] until the coroutine is cancelled. Suspends * indefinitely, retrying after [OBSERVATION_RETRY_DELAY] whenever the WebSocket flow * completes (e.g. on disconnection). Intended to be launched in the scope provided at * construction time. */ - suspend fun startObservingState() { + internal suspend fun startObservingState() { currentArtworkUrl = null while (true) { // Fetch initial state via REST before subscribing via WebSocket. Placed inside diff --git a/app/src/main/kotlin/io/homeassistant/companion/android/mediacontrol/HaMediaSessionService.kt b/app/src/main/kotlin/io/homeassistant/companion/android/mediacontrol/HaMediaSessionService.kt index 9d61c3cbb14..7745e0272c9 100644 --- a/app/src/main/kotlin/io/homeassistant/companion/android/mediacontrol/HaMediaSessionService.kt +++ b/app/src/main/kotlin/io/homeassistant/companion/android/mediacontrol/HaMediaSessionService.kt @@ -17,7 +17,6 @@ import kotlinx.coroutines.SupervisorJob import kotlinx.coroutines.cancel import kotlinx.coroutines.flow.launchIn import kotlinx.coroutines.flow.onEach -import kotlinx.coroutines.launch import kotlinx.coroutines.withContext import timber.log.Timber @@ -60,6 +59,12 @@ class HaMediaSessionService : MediaSessionService() { // multi-session behavior where each entity has its own independent media control card. override fun onGetSession(controllerInfo: MediaSession.ControllerInfo): MediaSession? = null + override fun onStartCommand(intent: Intent?, flags: Int, startId: Int): Int { + Timber.d("HaMediaSessionService onStartCommand, reconnecting ${activeSessions.size} sessions") + activeSessions.values.forEach { it.reconnect() } + return super.onStartCommand(intent, flags, startId) + } + override fun onTaskRemoved(rootIntent: Intent?) { val anyPlaying = activeSessions.values.any { session -> session.mediaSession.player.playWhenReady && session.mediaSession.player.mediaItemCount > 0 @@ -103,7 +108,7 @@ class HaMediaSessionService : MediaSessionService() { scope = sessionScope, ) addSession(session.mediaSession) - sessionScope.launch { session.startObservingState() } + session.reconnect() activeSessions[key] = session Timber.d("Added media session for $key") } diff --git a/app/src/test/kotlin/io/homeassistant/companion/android/mediacontrol/HaMediaSessionServiceTest.kt b/app/src/test/kotlin/io/homeassistant/companion/android/mediacontrol/HaMediaSessionServiceTest.kt index 6f286d3cb4e..b49527e1ce3 100644 --- a/app/src/test/kotlin/io/homeassistant/companion/android/mediacontrol/HaMediaSessionServiceTest.kt +++ b/app/src/test/kotlin/io/homeassistant/companion/android/mediacontrol/HaMediaSessionServiceTest.kt @@ -11,6 +11,7 @@ import io.mockk.coEvery import io.mockk.every import io.mockk.mockk import io.mockk.unmockkAll +import kotlinx.coroutines.flow.MutableSharedFlow import kotlinx.coroutines.flow.flowOf import org.junit.After import org.junit.Assert.assertEquals @@ -125,4 +126,32 @@ class HaMediaSessionServiceTest { assertTrue(Shadows.shadowOf(service).isStoppedBySelf) } + + /** + * Verifies that `onStartCommand` reconnects active sessions by restarting their observation. + * This is the recovery path when the app is opened after a network disconnect left sessions + * stuck with a non-completing WebSocket subscription flow. + */ + @Test + fun `Given active sessions when onStartCommand then sessions are reconnected`() { + var observeCallCount = 0 + coEvery { mediaControlRepository.observeEntityState(any()) } answers { + observeCallCount++ + MutableSharedFlow() + } + val config = MediaControlEntityConfig(serverId = 1, entityId = "media_player.living_room") + + service.reconcileSessions(listOf(config)) + Thread.sleep(DISPATCHER_SETTLE_MS) + val countAfterReconcile = observeCallCount + + service.onStartCommand(intent = null, flags = 0, startId = 0) + Thread.sleep(DISPATCHER_SETTLE_MS) + + assertTrue(observeCallCount > countAfterReconcile) + } + + private companion object { + const val DISPATCHER_SETTLE_MS = 200L + } } diff --git a/app/src/test/kotlin/io/homeassistant/companion/android/mediacontrol/HaMediaSessionTest.kt b/app/src/test/kotlin/io/homeassistant/companion/android/mediacontrol/HaMediaSessionTest.kt index 307392e25ae..2ddf74c4a14 100644 --- a/app/src/test/kotlin/io/homeassistant/companion/android/mediacontrol/HaMediaSessionTest.kt +++ b/app/src/test/kotlin/io/homeassistant/companion/android/mediacontrol/HaMediaSessionTest.kt @@ -350,6 +350,34 @@ class HaMediaSessionTest { session.release() } + /** + * Verifies that calling `reconnect()` while an observation is already running cancels the + * previous observation job and starts a fresh one, re-calling `observeEntityState`. + * + * This is the recovery path for a stuck WebSocket subscription (flow never completes after + * network disconnect). The test simulates the stuck case with a `MutableSharedFlow` that + * never completes, then verifies that `reconnect()` triggers a second subscription call. + */ + @Test + fun `Given running observation when reconnect called then observation is restarted`() { + var observeCallCount = 0 + coEvery { mediaControlRepository.observeEntityState(config) } answers { + observeCallCount++ + MutableSharedFlow() + } + + val session = buildSession() + testScope.launch { session.startObservingState() } + drainDefaultDispatcherAndMainLooper() + assertEquals(1, observeCallCount) + + session.reconnect() + drainDefaultDispatcherAndMainLooper() + assertEquals(2, observeCallCount) + + session.release() + } + /** * Verifies that calling `release()` cancels the coroutine scope, preventing * any further observation or action dispatch. From ebe2801ae9a9b998f327fbca185918bba3c34c4a Mon Sep 17 00:00:00 2001 From: Fletcher Dostie Date: Fri, 3 Apr 2026 13:27:22 -0700 Subject: [PATCH 035/114] Simplify startObservingState by moving initial fetch into observeEntityState --- .../android/mediacontrol/HaMediaSession.kt | 4 --- .../mediacontrol/HaMediaSessionServiceTest.kt | 1 - .../mediacontrol/HaMediaSessionTest.kt | 27 ++++++++++--------- .../mediacontrol/MediaControlRepository.kt | 9 ++----- .../MediaControlRepositoryImpl.kt | 7 ++++- 5 files changed, 23 insertions(+), 25 deletions(-) diff --git a/app/src/main/kotlin/io/homeassistant/companion/android/mediacontrol/HaMediaSession.kt b/app/src/main/kotlin/io/homeassistant/companion/android/mediacontrol/HaMediaSession.kt index a7445b9b6ad..ca8abedb813 100644 --- a/app/src/main/kotlin/io/homeassistant/companion/android/mediacontrol/HaMediaSession.kt +++ b/app/src/main/kotlin/io/homeassistant/companion/android/mediacontrol/HaMediaSession.kt @@ -187,10 +187,6 @@ class HaMediaSession @AssistedInject constructor( internal suspend fun startObservingState() { currentArtworkUrl = null while (true) { - // Fetch initial state via REST before subscribing via WebSocket. Placed inside - // the retry loop so cold-start failures (connection not yet ready) are retried - // automatically on each reconnect attempt. - mediaControlRepository.getEntityState(config)?.let { loadArtworkAndUpdatePlayer(it) } mediaControlRepository.observeEntityState(config).collect { state -> if (state == null) { // Entity not yet available or subscription not ready; keep the last diff --git a/app/src/test/kotlin/io/homeassistant/companion/android/mediacontrol/HaMediaSessionServiceTest.kt b/app/src/test/kotlin/io/homeassistant/companion/android/mediacontrol/HaMediaSessionServiceTest.kt index b49527e1ce3..36fec43f10a 100644 --- a/app/src/test/kotlin/io/homeassistant/companion/android/mediacontrol/HaMediaSessionServiceTest.kt +++ b/app/src/test/kotlin/io/homeassistant/companion/android/mediacontrol/HaMediaSessionServiceTest.kt @@ -51,7 +51,6 @@ class HaMediaSessionServiceTest { @Before fun setUp() { coEvery { mediaControlRepository.observeEntityState(any()) } returns flowOf(null) - coEvery { mediaControlRepository.getEntityState(any()) } returns null every { haMediaSessionFactory.create(any(), any(), any()) } answers { HaMediaSession( context = firstArg(), diff --git a/app/src/test/kotlin/io/homeassistant/companion/android/mediacontrol/HaMediaSessionTest.kt b/app/src/test/kotlin/io/homeassistant/companion/android/mediacontrol/HaMediaSessionTest.kt index 2ddf74c4a14..11093b00abd 100644 --- a/app/src/test/kotlin/io/homeassistant/companion/android/mediacontrol/HaMediaSessionTest.kt +++ b/app/src/test/kotlin/io/homeassistant/companion/android/mediacontrol/HaMediaSessionTest.kt @@ -60,7 +60,6 @@ class HaMediaSessionTest { val uniqueEntityId = "media_player.test_${sessionCounter.incrementAndGet()}" config = MediaControlEntityConfig(serverId = SERVER_ID, entityId = uniqueEntityId) - coEvery { mediaControlRepository.getEntityState(config) } returns null coEvery { mediaControlRepository.observeEntityState(config) } returns flowOf() coEvery { serverManager.integrationRepository(SERVER_ID) } returns integrationRepository } @@ -119,21 +118,18 @@ class HaMediaSessionTest { // -- State observation tests -- /** - * Verifies the cold-start recovery path: when `getEntityState` returns state on the first - * attempt and `observeEntityState` emits null (subscription not ready) but stays open, - * the player retains the REST-fetched state and does not drop to idle. + * Verifies the cold-start recovery path: when `observeEntityState` emits the current state + * first (as a REST pre-fetch inside the repository) followed by null (WebSocket not ready) + * but stays open, the player retains the emitted state and does not drop to idle. * - * Uses a `MutableSharedFlow` with `replay=1` so the null emission is received by the - * Default dispatcher collector without racing, and the flow stays open so the observation - * loop does not call `setConnecting()` and overwrite the state. + * Uses a `MutableSharedFlow` with `replay=1` so emissions are received by the Default + * dispatcher collector without racing, and the flow stays open so the observation loop + * does not call `setConnecting()` and overwrite the state. */ @Test - fun `Given getEntityState returns state and observeEntityState emits null when startObservingState then player retains state from REST`() { + fun `Given observeEntityState emits state then null when startObservingState then player retains initial state`() { val stateFlow = MutableSharedFlow(replay = 1) - stateFlow.tryEmit(null) - coEvery { mediaControlRepository.getEntityState(config) } returns createState( - playbackState = MediaPlaybackState.Playing, - ) + stateFlow.tryEmit(createState(playbackState = MediaPlaybackState.Playing)) coEvery { mediaControlRepository.observeEntityState(config) } returns stateFlow val session = buildSession() @@ -144,6 +140,13 @@ class HaMediaSessionTest { assertEquals(Player.STATE_READY, player.playbackState) assertEquals(true, player.playWhenReady) + // Emitting null afterwards (simulating WebSocket-not-ready) should not clear state + stateFlow.tryEmit(null) + drainDefaultDispatcherAndMainLooper() + + assertEquals(Player.STATE_READY, player.playbackState) + assertEquals(true, player.playWhenReady) + session.release() } diff --git a/common/src/main/kotlin/io/homeassistant/companion/android/common/data/mediacontrol/MediaControlRepository.kt b/common/src/main/kotlin/io/homeassistant/companion/android/common/data/mediacontrol/MediaControlRepository.kt index a535fbef7dd..6bc8cb9f4cd 100644 --- a/common/src/main/kotlin/io/homeassistant/companion/android/common/data/mediacontrol/MediaControlRepository.kt +++ b/common/src/main/kotlin/io/homeassistant/companion/android/common/data/mediacontrol/MediaControlRepository.kt @@ -9,13 +9,8 @@ import kotlinx.coroutines.flow.Flow interface MediaControlRepository { /** - * Returns the current [MediaControlState] for a single entity via a one-shot REST fetch, - * or null if the entity is unavailable or the request fails. - */ - suspend fun getEntityState(config: MediaControlEntityConfig): MediaControlState? - - /** - * Emits the current [MediaControlState] for a single entity whenever its state changes. + * Emits the current [MediaControlState] for a single entity on subscription (via REST), + * then continues emitting whenever its state changes via WebSocket. * Emits null when the entity is unavailable or the WebSocket subscription fails. */ fun observeEntityState(config: MediaControlEntityConfig): Flow diff --git a/common/src/main/kotlin/io/homeassistant/companion/android/common/data/mediacontrol/MediaControlRepositoryImpl.kt b/common/src/main/kotlin/io/homeassistant/companion/android/common/data/mediacontrol/MediaControlRepositoryImpl.kt index 8ed19f05b23..630c03be6a5 100644 --- a/common/src/main/kotlin/io/homeassistant/companion/android/common/data/mediacontrol/MediaControlRepositoryImpl.kt +++ b/common/src/main/kotlin/io/homeassistant/companion/android/common/data/mediacontrol/MediaControlRepositoryImpl.kt @@ -42,7 +42,7 @@ internal class MediaControlRepositoryImpl @Inject constructor( private val serverManager: ServerManager, ) : MediaControlRepository { - override suspend fun getEntityState(config: MediaControlEntityConfig): MediaControlState? = try { + private suspend fun getEntityState(config: MediaControlEntityConfig): MediaControlState? = try { serverManager.integrationRepository(config.serverId) .getEntity(config.entityId) ?.toMediaControlState(serverId = config.serverId) @@ -54,6 +54,11 @@ internal class MediaControlRepositoryImpl @Inject constructor( } override fun observeEntityState(config: MediaControlEntityConfig): Flow = flow { + // Emit current state via REST so the caller has something to show immediately. + // The WebSocket added event delivers the same state again; distinctUntilChanged() + // at the end suppresses the duplicate. + getEntityState(config)?.let { emit(it) } + try { val stateFlow = serverManager.webSocketRepository(config.serverId) .getCompressedStateAndChanges(listOf(config.entityId)) From 9a2cec19ca95b1cb24894c29c221ad49f344103c Mon Sep 17 00:00:00 2001 From: Fletcher Dostie Date: Fri, 3 Apr 2026 13:37:12 -0700 Subject: [PATCH 036/114] FrontendViewModel.kt: Removed appContext: Context, mediaControlRepository: MediaControlRepository, and startMediaSessionServiceIfConfigured() --- .../android/frontend/FrontendViewModel.kt | 22 -------------- .../frontend/navigation/FrontendNavigation.kt | 6 +++- .../MediaControlStarterViewModel.kt | 30 +++++++++++++++++++ .../android/frontend/FrontendViewModelTest.kt | 6 ---- 4 files changed, 35 insertions(+), 29 deletions(-) create mode 100644 app/src/main/kotlin/io/homeassistant/companion/android/mediacontrol/MediaControlStarterViewModel.kt diff --git a/app/src/main/kotlin/io/homeassistant/companion/android/frontend/FrontendViewModel.kt b/app/src/main/kotlin/io/homeassistant/companion/android/frontend/FrontendViewModel.kt index 6cbb7dead21..a3f634ea306 100644 --- a/app/src/main/kotlin/io/homeassistant/companion/android/frontend/FrontendViewModel.kt +++ b/app/src/main/kotlin/io/homeassistant/companion/android/frontend/FrontendViewModel.kt @@ -1,17 +1,14 @@ package io.homeassistant.companion.android.frontend -import android.content.Context import androidx.annotation.VisibleForTesting import androidx.lifecycle.SavedStateHandle import androidx.lifecycle.ViewModel import androidx.lifecycle.viewModelScope import androidx.navigation.toRoute import dagger.hilt.android.lifecycle.HiltViewModel -import dagger.hilt.android.qualifiers.ApplicationContext import io.homeassistant.companion.android.common.R as commonR import io.homeassistant.companion.android.common.data.connectivity.ConnectivityCheckRepository import io.homeassistant.companion.android.common.data.connectivity.ConnectivityCheckState -import io.homeassistant.companion.android.common.data.mediacontrol.MediaControlRepository import io.homeassistant.companion.android.frontend.error.FrontendConnectionError import io.homeassistant.companion.android.frontend.error.FrontendConnectionErrorStateProvider import io.homeassistant.companion.android.frontend.externalbus.WebViewScript @@ -22,7 +19,6 @@ import io.homeassistant.companion.android.frontend.navigation.FrontendRoute import io.homeassistant.companion.android.frontend.permissions.PermissionManager import io.homeassistant.companion.android.frontend.url.FrontendUrlManager import io.homeassistant.companion.android.frontend.url.UrlLoadResult -import io.homeassistant.companion.android.mediacontrol.HaMediaSessionService import io.homeassistant.companion.android.util.HAWebChromeClient import io.homeassistant.companion.android.util.HAWebViewClient import io.homeassistant.companion.android.util.HAWebViewClientFactory @@ -73,8 +69,6 @@ internal class FrontendViewModel @VisibleForTesting constructor( private val urlManager: FrontendUrlManager, private val connectivityCheckRepository: ConnectivityCheckRepository, private val permissionManager: PermissionManager, - private val appContext: Context, - private val mediaControlRepository: MediaControlRepository, ) : ViewModel(), FrontendConnectionErrorStateProvider { @@ -86,8 +80,6 @@ internal class FrontendViewModel @VisibleForTesting constructor( urlManager: FrontendUrlManager, connectivityCheckRepository: ConnectivityCheckRepository, permissionManager: PermissionManager, - @ApplicationContext appContext: Context, - mediaControlRepository: MediaControlRepository, ) : this( initialServerId = savedStateHandle.toRoute().serverId, initialPath = savedStateHandle.toRoute().path, @@ -96,22 +88,8 @@ internal class FrontendViewModel @VisibleForTesting constructor( urlManager = urlManager, connectivityCheckRepository = connectivityCheckRepository, permissionManager = permissionManager, - appContext = appContext, - mediaControlRepository = mediaControlRepository, ) - /** - * Starts [HaMediaSessionService] if any media_player entities are configured. Equivalent - * to the call in [WebViewActivity.onResume] for the legacy frontend path — should be called - * every time the frontend screen is resumed so the service recovers if it was killed while - * the app was in the background. - */ - fun startMediaSessionServiceIfConfigured() { - viewModelScope.launch { - HaMediaSessionService.startIfConfigured(appContext, mediaControlRepository) - } - } - /** * Manages the frontend view state with protection against transitions out of unrecoverable states. * diff --git a/app/src/main/kotlin/io/homeassistant/companion/android/frontend/navigation/FrontendNavigation.kt b/app/src/main/kotlin/io/homeassistant/companion/android/frontend/navigation/FrontendNavigation.kt index 9e9175caaa2..a4c50c5768a 100644 --- a/app/src/main/kotlin/io/homeassistant/companion/android/frontend/navigation/FrontendNavigation.kt +++ b/app/src/main/kotlin/io/homeassistant/companion/android/frontend/navigation/FrontendNavigation.kt @@ -4,6 +4,7 @@ import android.net.Uri import androidx.annotation.VisibleForTesting import androidx.compose.runtime.Composable import androidx.compose.runtime.LaunchedEffect +import androidx.compose.ui.platform.LocalContext import androidx.hilt.lifecycle.viewmodel.compose.hiltViewModel import androidx.lifecycle.Lifecycle import androidx.lifecycle.compose.LocalLifecycleOwner @@ -21,6 +22,7 @@ import io.homeassistant.companion.android.frontend.FrontendScreen import io.homeassistant.companion.android.frontend.FrontendViewModel import io.homeassistant.companion.android.frontend.FrontendViewState import io.homeassistant.companion.android.launch.HAStartDestinationRoute +import io.homeassistant.companion.android.mediacontrol.MediaControlStarterViewModel import io.homeassistant.companion.android.settings.SettingsActivity import io.homeassistant.companion.android.util.getActivity import io.homeassistant.companion.android.webview.WebViewActivity @@ -73,11 +75,13 @@ internal fun NavGraphBuilder.frontendScreen( if (WIPFeature.USE_FRONTEND_V2) { composable { val viewModel: FrontendViewModel = hiltViewModel() + val mediaControlStarter: MediaControlStarterViewModel = hiltViewModel() + val context = LocalContext.current val lifecycle = LocalLifecycleOwner.current.lifecycle LaunchedEffect(lifecycle) { lifecycle.repeatOnLifecycle(Lifecycle.State.RESUMED) { - viewModel.startMediaSessionServiceIfConfigured() + mediaControlStarter.startIfConfigured(context) } } diff --git a/app/src/main/kotlin/io/homeassistant/companion/android/mediacontrol/MediaControlStarterViewModel.kt b/app/src/main/kotlin/io/homeassistant/companion/android/mediacontrol/MediaControlStarterViewModel.kt new file mode 100644 index 00000000000..c30c0081822 --- /dev/null +++ b/app/src/main/kotlin/io/homeassistant/companion/android/mediacontrol/MediaControlStarterViewModel.kt @@ -0,0 +1,30 @@ +package io.homeassistant.companion.android.mediacontrol + +import android.content.Context +import androidx.lifecycle.ViewModel +import dagger.hilt.android.lifecycle.HiltViewModel +import io.homeassistant.companion.android.common.data.mediacontrol.MediaControlRepository +import javax.inject.Inject + +/** + * Thin ViewModel whose sole purpose is to hold [MediaControlRepository] for DI injection into + * composables that need to call [HaMediaSessionService.startIfConfigured]. + * + * The [Context] is supplied by the call site (Activity/composable) rather than held here, keeping + * this ViewModel free of Android context references. + */ +@HiltViewModel +internal class MediaControlStarterViewModel @Inject constructor( + private val mediaControlRepository: MediaControlRepository, +) : ViewModel() { + + /** + * Starts [HaMediaSessionService] if any media_player entities are configured. + * + * @param context A foreground context (e.g. from [androidx.compose.ui.platform.LocalContext]) + * required by Android 15+ restrictions on starting mediaPlayback foreground services. + */ + suspend fun startIfConfigured(context: Context) { + HaMediaSessionService.startIfConfigured(context, mediaControlRepository) + } +} diff --git a/app/src/test/kotlin/io/homeassistant/companion/android/frontend/FrontendViewModelTest.kt b/app/src/test/kotlin/io/homeassistant/companion/android/frontend/FrontendViewModelTest.kt index 4e0887b841d..8f94232c788 100644 --- a/app/src/test/kotlin/io/homeassistant/companion/android/frontend/FrontendViewModelTest.kt +++ b/app/src/test/kotlin/io/homeassistant/companion/android/frontend/FrontendViewModelTest.kt @@ -1,10 +1,8 @@ package io.homeassistant.companion.android.frontend -import android.content.Context import io.homeassistant.companion.android.common.data.connectivity.ConnectivityCheckRepository import io.homeassistant.companion.android.common.data.connectivity.ConnectivityCheckResult import io.homeassistant.companion.android.common.data.connectivity.ConnectivityCheckState -import io.homeassistant.companion.android.common.data.mediacontrol.MediaControlRepository import io.homeassistant.companion.android.frontend.error.FrontendConnectionError import io.homeassistant.companion.android.frontend.handler.FrontendHandlerEvent import io.homeassistant.companion.android.frontend.handler.FrontendMessageHandler @@ -55,8 +53,6 @@ class FrontendViewModelTest { private val urlManager: FrontendUrlManager = mockk(relaxed = true) private val connectivityCheckRepository: ConnectivityCheckRepository = mockk(relaxed = true) private val permissionManager: PermissionManager = mockk(relaxed = true) - private val appContext: Context = mockk(relaxed = true) - private val mediaControlRepository: MediaControlRepository = mockk(relaxed = true) private val serverId = 1 private val testUrlWithAuth = "https://example.com?external_auth=1" @@ -80,8 +76,6 @@ class FrontendViewModelTest { urlManager = urlManager, connectivityCheckRepository = connectivityCheckRepository, permissionManager = permissionManager, - appContext = appContext, - mediaControlRepository = mediaControlRepository, ) } From 09ac27e628c44abbafcff3aa008f73c4a76674b0 Mon Sep 17 00:00:00 2001 From: Fletcher Dostie Date: Fri, 3 Apr 2026 13:39:12 -0700 Subject: [PATCH 037/114] ktlint fix --- .../companion/android/common/data/integration/Entity.kt | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/common/src/main/kotlin/io/homeassistant/companion/android/common/data/integration/Entity.kt b/common/src/main/kotlin/io/homeassistant/companion/android/common/data/integration/Entity.kt index ad6f0bbe079..9cd5d815971 100644 --- a/common/src/main/kotlin/io/homeassistant/companion/android/common/data/integration/Entity.kt +++ b/common/src/main/kotlin/io/homeassistant/companion/android/common/data/integration/Entity.kt @@ -24,6 +24,8 @@ import java.time.format.DateTimeFormatter import java.time.format.DateTimeParseException import java.util.Locale import kotlin.math.round +import kotlin.time.Duration +import kotlin.time.Duration.Companion.seconds import kotlinx.serialization.KSerializer import kotlinx.serialization.Polymorphic import kotlinx.serialization.Serializable @@ -32,8 +34,6 @@ import kotlinx.serialization.encoding.Encoder import kotlinx.serialization.json.JsonElement import kotlinx.serialization.json.JsonNull import kotlinx.serialization.json.JsonPrimitive -import kotlin.time.Duration -import kotlin.time.Duration.Companion.seconds import timber.log.Timber /** From 06172da4140f55a7fcf62635031063016212de88 Mon Sep 17 00:00:00 2001 From: Fletcher Dostie Date: Sun, 5 Apr 2026 11:07:15 -0700 Subject: [PATCH 038/114] loadArtworkAndUpdatePlayer now uses state.entityPictureUrl as the cache key --- .../android/mediacontrol/HaMediaSession.kt | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) diff --git a/app/src/main/kotlin/io/homeassistant/companion/android/mediacontrol/HaMediaSession.kt b/app/src/main/kotlin/io/homeassistant/companion/android/mediacontrol/HaMediaSession.kt index ca8abedb813..c9e6ff23552 100644 --- a/app/src/main/kotlin/io/homeassistant/companion/android/mediacontrol/HaMediaSession.kt +++ b/app/src/main/kotlin/io/homeassistant/companion/android/mediacontrol/HaMediaSession.kt @@ -66,6 +66,8 @@ class HaMediaSession @AssistedInject constructor( // Accessed only from loadArtworkAndUpdatePlayer, which is always called sequentially // within startObservingState on the Default dispatcher. + // currentArtworkUrl stores the raw HA entity_picture path (not the resolved URL) so the + // cache key stays stable across local/external URL switches for the same image. private var currentArtworkUrl: String? = null private var currentArtworkBytes: ByteArray? = null @@ -229,15 +231,16 @@ class HaMediaSession @AssistedInject constructor( } private suspend fun loadArtworkAndUpdatePlayer(state: MediaControlState) { - val artworkUrl = resolveArtworkUrl(state) - val pngBytes = if (artworkUrl != null && artworkUrl != currentArtworkUrl) { - val bytes = loadBitmapAsPng(artworkUrl) + val rawPictureUrl = state.entityPictureUrl + val pngBytes = if (rawPictureUrl != null && rawPictureUrl != currentArtworkUrl) { + val resolvedUrl = resolveArtworkUrl(state) + val bytes = resolvedUrl?.let { loadBitmapAsPng(it) } if (bytes != null) { - currentArtworkUrl = artworkUrl + currentArtworkUrl = rawPictureUrl currentArtworkBytes = bytes } bytes ?: currentArtworkBytes - } else if (artworkUrl == null) { + } else if (rawPictureUrl == null) { // The HA server temporarily removes entity_picture during track transitions // before sending the new URL. Keep the previous artwork visible to avoid a // blank flash; clearing currentArtworkUrl ensures the next URL triggers a fetch. From fb0612c683b8b859063e6a7d6b7033c93a925976 Mon Sep 17 00:00:00 2001 From: Fletcher Dostie Date: Wed, 8 Apr 2026 15:28:20 -0700 Subject: [PATCH 039/114] Don't include .size() when requesting artwork image --- .../companion/android/mediacontrol/HaMediaSession.kt | 5 ----- 1 file changed, 5 deletions(-) diff --git a/app/src/main/kotlin/io/homeassistant/companion/android/mediacontrol/HaMediaSession.kt b/app/src/main/kotlin/io/homeassistant/companion/android/mediacontrol/HaMediaSession.kt index c9e6ff23552..f4e0f5d0692 100644 --- a/app/src/main/kotlin/io/homeassistant/companion/android/mediacontrol/HaMediaSession.kt +++ b/app/src/main/kotlin/io/homeassistant/companion/android/mediacontrol/HaMediaSession.kt @@ -278,7 +278,6 @@ class HaMediaSession @AssistedInject constructor( try { val request = ImageRequest.Builder(context) .data(url) - .size(ARTWORK_SIZE_PX) .allowHardware(false) .build() val result = context.imageLoader.execute(request) @@ -319,10 +318,6 @@ class HaMediaSession @AssistedInject constructor( private companion object { val OBSERVATION_RETRY_DELAY = 5.seconds - // 512px is the recommended size for MediaSession artwork per Android guidelines: - // https://developer.android.com/media/media3/session/now-playing#set-artwork - const val ARTWORK_SIZE_PX = 512 - const val ACTION_MEDIA_PLAY = "media_play" const val ACTION_MEDIA_PAUSE = "media_pause" const val ACTION_MEDIA_STOP = "media_stop" From 612a1f8f19cc716a40a9417de2c32e4ab2f0efc0 Mon Sep 17 00:00:00 2001 From: Fletcher Dostie Date: Wed, 8 Apr 2026 15:46:32 -0700 Subject: [PATCH 040/114] Remove ServerRegistries in MediaControlSettingsViewModel.kt; Remove 'contex' from ServerSettingsPresenterImpl constructor --- .../MediaControlSettingsViewModel.kt | 52 +++++++++---------- .../server/ServerSettingsPresenterImpl.kt | 6 ++- 2 files changed, 30 insertions(+), 28 deletions(-) diff --git a/app/src/main/kotlin/io/homeassistant/companion/android/settings/mediacontrol/MediaControlSettingsViewModel.kt b/app/src/main/kotlin/io/homeassistant/companion/android/settings/mediacontrol/MediaControlSettingsViewModel.kt index 98086a766a4..7b321dbb37c 100644 --- a/app/src/main/kotlin/io/homeassistant/companion/android/settings/mediacontrol/MediaControlSettingsViewModel.kt +++ b/app/src/main/kotlin/io/homeassistant/companion/android/settings/mediacontrol/MediaControlSettingsViewModel.kt @@ -79,14 +79,6 @@ class MediaControlSettingsViewModel @Inject constructor( private val _serviceEvents = MutableSharedFlow(extraBufferCapacity = 1) val serviceEvents: SharedFlow = _serviceEvents.asSharedFlow() - private data class ServerRegistries( - val serverId: Int, - val entities: List, - val entityRegistry: List, - val deviceRegistry: List, - val areaRegistry: List, - ) - init { viewModelScope.launch { val loadedServers = serverManager.servers() @@ -95,21 +87,28 @@ class MediaControlSettingsViewModel @Inject constructor( // Load configured entities (local DB) and server registries (network) concurrently. // Emit the configured list as soon as the DB read completes so the list appears immediately. val configuredEntitiesDeferred = async { mediaControlRepository.getConfiguredEntities() } - val registryResults = loadedServers.map { server -> + val entitiesDeferred = loadedServers.map { server -> + async { server.id to loadMediaPlayerEntities(server.id) } + } + val entityRegistryDeferred = loadedServers.map { server -> + async { + server.id to loadRegistry(server.id, "entity registry") { + serverManager.webSocketRepository(it).getEntityRegistry() + } + } + } + val deviceRegistryDeferred = loadedServers.map { server -> + async { + server.id to loadRegistry(server.id, "device registry") { + serverManager.webSocketRepository(it).getDeviceRegistry() + } + } + } + val areaRegistryDeferred = loadedServers.map { server -> async { - ServerRegistries( - serverId = server.id, - entities = loadMediaPlayerEntities(server.id), - entityRegistry = loadRegistry(server.id, "entity registry") { - serverManager.webSocketRepository(it).getEntityRegistry() - }, - deviceRegistry = loadRegistry(server.id, "device registry") { - serverManager.webSocketRepository(it).getDeviceRegistry() - }, - areaRegistry = loadRegistry(server.id, "area registry") { - serverManager.webSocketRepository(it).getAreaRegistry() - }, - ) + server.id to loadRegistry(server.id, "area registry") { + serverManager.webSocketRepository(it).getAreaRegistry() + } } } @@ -122,14 +121,13 @@ class MediaControlSettingsViewModel @Inject constructor( ) } - val results = registryResults.awaitAll() + val entitiesPerServer = entitiesDeferred.awaitAll().toMap() _uiState.update { state -> - val entitiesPerServer = results.associate { it.serverId to it.entities } state.copy( entitiesPerServer = entitiesPerServer, - entityRegistryPerServer = results.associate { it.serverId to it.entityRegistry }, - deviceRegistryPerServer = results.associate { it.serverId to it.deviceRegistry }, - areaRegistryPerServer = results.associate { it.serverId to it.areaRegistry }, + entityRegistryPerServer = entityRegistryDeferred.awaitAll().toMap(), + deviceRegistryPerServer = deviceRegistryDeferred.awaitAll().toMap(), + areaRegistryPerServer = areaRegistryDeferred.awaitAll().toMap(), entityNamesByConfig = buildEntityNamesByConfig(entitiesPerServer, state.configuredEntities), entityIconsByConfig = buildEntityIconsByConfig(entitiesPerServer, state.configuredEntities), isLoading = false, diff --git a/app/src/main/kotlin/io/homeassistant/companion/android/settings/server/ServerSettingsPresenterImpl.kt b/app/src/main/kotlin/io/homeassistant/companion/android/settings/server/ServerSettingsPresenterImpl.kt index 48b7d4d61a3..65a7fdf5820 100644 --- a/app/src/main/kotlin/io/homeassistant/companion/android/settings/server/ServerSettingsPresenterImpl.kt +++ b/app/src/main/kotlin/io/homeassistant/companion/android/settings/server/ServerSettingsPresenterImpl.kt @@ -15,7 +15,6 @@ import kotlinx.coroutines.runBlocking import timber.log.Timber class ServerSettingsPresenterImpl @Inject constructor( - @ApplicationContext private val context: Context, private val serverManager: ServerManager, private val wifiHelper: WifiHelper, ) : PreferenceDataStore(), @@ -49,6 +48,7 @@ class ServerSettingsPresenterImpl @Inject constructor( "app_lock_home_bypass" -> serverManager.authenticationRepository( serverId, ).setLockHomeBypassEnabled(value) + else -> throw IllegalArgumentException("No boolean found by this key: $key") } } @@ -77,6 +77,7 @@ class ServerSettingsPresenterImpl @Inject constructor( } view.updateServerName(serverManager.getServer(serverId)?.friendlyName ?: "") } + "registration_name" -> { serverManager.getServer(serverId)?.let { serverManager.updateServer( @@ -86,6 +87,7 @@ class ServerSettingsPresenterImpl @Inject constructor( ) } } + "connection_internal" -> { serverManager.getServer(serverId)?.let { serverManager.updateServer( @@ -97,6 +99,7 @@ class ServerSettingsPresenterImpl @Inject constructor( ) } } + "session_timeout" -> { try { serverManager.integrationRepository(serverId).sessionTimeOut(value.toString().toInt()) @@ -104,6 +107,7 @@ class ServerSettingsPresenterImpl @Inject constructor( Timber.e(e, "Issue saving session timeout value") } } + else -> throw IllegalArgumentException("No string found by this key: $key") } } From 5867fe5437a49032c98128a709c93f2d94ac55af Mon Sep 17 00:00:00 2001 From: Fletcher Dostie Date: Wed, 8 Apr 2026 16:22:15 -0700 Subject: [PATCH 041/114] HaMediaSessionTest.kt: Remove Thread.sleep --- .../mediacontrol/HaMediaSessionTest.kt | 79 ++++++++----------- 1 file changed, 35 insertions(+), 44 deletions(-) diff --git a/app/src/test/kotlin/io/homeassistant/companion/android/mediacontrol/HaMediaSessionTest.kt b/app/src/test/kotlin/io/homeassistant/companion/android/mediacontrol/HaMediaSessionTest.kt index 11093b00abd..cc252d71613 100644 --- a/app/src/test/kotlin/io/homeassistant/companion/android/mediacontrol/HaMediaSessionTest.kt +++ b/app/src/test/kotlin/io/homeassistant/companion/android/mediacontrol/HaMediaSessionTest.kt @@ -19,13 +19,14 @@ import io.mockk.slot import java.util.concurrent.atomic.AtomicInteger import kotlin.time.Duration.Companion.seconds import kotlinx.coroutines.CoroutineScope -import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.SupervisorJob import kotlinx.coroutines.flow.MutableSharedFlow import kotlinx.coroutines.flow.emptyFlow import kotlinx.coroutines.flow.flowOf import kotlinx.coroutines.isActive import kotlinx.coroutines.launch +import kotlinx.coroutines.ExperimentalCoroutinesApi +import kotlinx.coroutines.test.UnconfinedTestDispatcher import org.junit.Assert.assertEquals import org.junit.Assert.assertNull import org.junit.Before @@ -52,7 +53,8 @@ class HaMediaSessionTest { @Before fun setUp() { - testScope = CoroutineScope(SupervisorJob() + Dispatchers.Default) + @OptIn(ExperimentalCoroutinesApi::class) + testScope = CoroutineScope(SupervisorJob() + UnconfinedTestDispatcher()) mediaControlRepository = mockk() serverManager = mockk() integrationRepository = mockk(relaxed = true) @@ -104,14 +106,14 @@ class HaMediaSessionTest { ) /** - * Waits for `Dispatchers.Default` coroutines (launched via `testScope`) to settle, - * then drains the Robolectric main looper so that `player.updateState` calls take effect. + * Drains the Robolectric main looper so that `player.updateState` and `player.setConnecting` + * calls dispatched via `withContext(Dispatchers.Main)` take effect. * - * `testScope` uses `Dispatchers.Default`, which is not controlled by `runTest`'s fake - * scheduler. A short real-time wait is required before draining the main looper. + * `testScope` uses [UnconfinedTestDispatcher], so coroutines run eagerly on the calling + * thread until they reach a `withContext(Dispatchers.Main)` suspension point. A single + * `idle()` is enough to flush those pending main-looper tasks and resume the coroutine. */ - private fun drainDefaultDispatcherAndMainLooper() { - Thread.sleep(REAL_DISPATCHER_SETTLE_MS) + private fun idleMainLooper() { shadowOf(Looper.getMainLooper()).idle() } @@ -134,7 +136,7 @@ class HaMediaSessionTest { val session = buildSession() testScope.launch { session.startObservingState() } - drainDefaultDispatcherAndMainLooper() + idleMainLooper() val player = session.mediaSession.player assertEquals(Player.STATE_READY, player.playbackState) @@ -142,7 +144,7 @@ class HaMediaSessionTest { // Emitting null afterwards (simulating WebSocket-not-ready) should not clear state stateFlow.tryEmit(null) - drainDefaultDispatcherAndMainLooper() + idleMainLooper() assertEquals(Player.STATE_READY, player.playbackState) assertEquals(true, player.playWhenReady) @@ -155,7 +157,7 @@ class HaMediaSessionTest { * to STATE_READY with `playWhenReady = true`. * * Uses `replay=1` so the emission is cached and replayed to the collector on - * `Dispatchers.Default` regardless of when it subscribes. The flow stays open so the + * [UnconfinedTestDispatcher] regardless of when it subscribes. The flow stays open so the * observation loop does not immediately call `setConnecting()` and overwrite the READY state. */ @Test @@ -166,7 +168,7 @@ class HaMediaSessionTest { val session = buildSession() testScope.launch { session.startObservingState() } - drainDefaultDispatcherAndMainLooper() + idleMainLooper() val player = session.mediaSession.player assertEquals(Player.STATE_READY, player.playbackState) @@ -189,7 +191,7 @@ class HaMediaSessionTest { val session = buildSession() testScope.launch { session.startObservingState() } - drainDefaultDispatcherAndMainLooper() + idleMainLooper() val player = session.mediaSession.player assertEquals(Player.STATE_READY, player.playbackState) @@ -204,9 +206,10 @@ class HaMediaSessionTest { * that the notification remains visible but controls are disabled. * * Both flows complete immediately so the observation loop calls `setConnecting()` right after - * the first iteration without needing the retry delay. Two settle cycles are used: the first - * allows the playing-state update to reach the Main looper, and the second allows the - * `setConnecting()` call (which follows on the Default dispatcher) to reach the Main looper. + * the first iteration without needing the retry delay. Two `idleMainLooper()` calls are used: + * the first allows the playing-state update to reach the Main looper, and the second allows + * the `setConnecting()` call (which posts a new Main looper task when the coroutine resumes) + * to take effect. */ @Test fun `Given observeEntityState flow completes when startObservingState then player enters connecting state`() { @@ -216,8 +219,8 @@ class HaMediaSessionTest { val session = buildSession() testScope.launch { session.startObservingState() } - drainDefaultDispatcherAndMainLooper() - drainDefaultDispatcherAndMainLooper() + idleMainLooper() + idleMainLooper() val player = session.mediaSession.player assertEquals(Player.STATE_BUFFERING, player.playbackState) @@ -232,7 +235,7 @@ class HaMediaSessionTest { * Verifies that when the emitted state has a null artwork URL, the player's media metadata * contains no artwork bytes. * - * Uses `replay=1` so the emission is available when the Default dispatcher starts collecting. + * Uses `replay=1` so the emission is available immediately when the collector starts. */ @Test fun `Given state with null artwork URL when startObservingState then player artwork is null`() { @@ -242,7 +245,7 @@ class HaMediaSessionTest { val session = buildSession() testScope.launch { session.startObservingState() } - drainDefaultDispatcherAndMainLooper() + idleMainLooper() val player = session.mediaSession.player assertNull(player.mediaMetadata.artworkData) @@ -258,8 +261,8 @@ class HaMediaSessionTest { * `currentArtworkUrl` is cleared and `currentArtworkBytes` is passed through (which is * null here because no real image was ever loaded in this test). * - * Uses `replay=1` for reliable delivery to the late-starting Default dispatcher collector. - * The second emission is made after the first is confirmed to be processed. + * Uses `replay=1` for reliable delivery to the collector. The second emission is made after + * the first is confirmed to be processed. */ @Test fun `Given two consecutive states where second has null artwork URL when startObservingState then artwork is null`() { @@ -269,10 +272,10 @@ class HaMediaSessionTest { val session = buildSession() testScope.launch { session.startObservingState() } - drainDefaultDispatcherAndMainLooper() + idleMainLooper() stateFlow.tryEmit(createState(entityPictureUrl = null, title = "Track 2")) - drainDefaultDispatcherAndMainLooper() + idleMainLooper() val player = session.mediaSession.player assertNull(player.mediaMetadata.artworkData) @@ -287,9 +290,9 @@ class HaMediaSessionTest { * Verifies that triggering play on the media session player causes `callMediaAction` to * dispatch a `media_play` action to the integration repository for the configured entity. * - * Uses `replay=1` so the paused state is reliably received by the Default dispatcher - * collector before `player.play()` is invoked. `callMediaAction` also runs on the Default - * dispatcher, so a real-time wait is required after triggering the player command. + * Uses `replay=1` so the paused state is reliably received by the collector before + * `player.play()` is invoked. `callMediaAction` launches on [UnconfinedTestDispatcher] and + * runs eagerly inside the main looper drain, so no additional wait is required. */ @Test fun `Given paused player when play requested then media_play action is called`() { @@ -299,11 +302,10 @@ class HaMediaSessionTest { val session = buildSession() testScope.launch { session.startObservingState() } - drainDefaultDispatcherAndMainLooper() + idleMainLooper() session.mediaSession.player.play() shadowOf(Looper.getMainLooper()).idle() - Thread.sleep(REAL_DISPATCHER_SETTLE_MS) val capturedDomain = slot() val capturedAction = slot() @@ -334,11 +336,10 @@ class HaMediaSessionTest { val session = buildSession() testScope.launch { session.startObservingState() } - drainDefaultDispatcherAndMainLooper() + idleMainLooper() session.mediaSession.player.pause() shadowOf(Looper.getMainLooper()).idle() - Thread.sleep(REAL_DISPATCHER_SETTLE_MS) val capturedAction = slot() coVerify { @@ -371,11 +372,11 @@ class HaMediaSessionTest { val session = buildSession() testScope.launch { session.startObservingState() } - drainDefaultDispatcherAndMainLooper() + idleMainLooper() assertEquals(1, observeCallCount) session.reconnect() - drainDefaultDispatcherAndMainLooper() + idleMainLooper() assertEquals(2, observeCallCount) session.release() @@ -393,7 +394,7 @@ class HaMediaSessionTest { val session = buildSession() testScope.launch { session.startObservingState() } - drainDefaultDispatcherAndMainLooper() + idleMainLooper() val scopeField = HaMediaSession::class.java.getDeclaredField("scope") scopeField.isAccessible = true @@ -404,14 +405,4 @@ class HaMediaSessionTest { org.junit.Assert.assertFalse(scope.isActive) } - private companion object { - /** - * Milliseconds to allow `HaMediaSession`'s `Dispatchers.Default` coroutines to - * complete before inspecting state or verifying mock calls. - * - * `HaMediaSession` uses a real `Dispatchers.Default` scope that is not controlled by - * the test. 1 second is used to provide a stable budget on slower CI machines. - */ - const val REAL_DISPATCHER_SETTLE_MS = 1000L - } } From b6af0495082a137fbde9969113eb7f068bc0d971 Mon Sep 17 00:00:00 2001 From: Fletcher Dostie Date: Wed, 8 Apr 2026 18:23:11 -0700 Subject: [PATCH 042/114] HaMediaSessionServiceTest.kt: Don't call reconcileSessions() directly; Add tests for the removal of the tasks and also the onDestroy properly canceling the jobs --- .../mediacontrol/HaMediaSessionService.kt | 11 +- .../mediacontrol/HaMediaSessionServiceTest.kt | 257 ++++++++++++++---- 2 files changed, 220 insertions(+), 48 deletions(-) diff --git a/app/src/main/kotlin/io/homeassistant/companion/android/mediacontrol/HaMediaSessionService.kt b/app/src/main/kotlin/io/homeassistant/companion/android/mediacontrol/HaMediaSessionService.kt index 7745e0272c9..3961f04f96e 100644 --- a/app/src/main/kotlin/io/homeassistant/companion/android/mediacontrol/HaMediaSessionService.kt +++ b/app/src/main/kotlin/io/homeassistant/companion/android/mediacontrol/HaMediaSessionService.kt @@ -48,9 +48,18 @@ class HaMediaSessionService : MediaSessionService() { notificationProvider.setSmallIcon(commonR.drawable.ic_stat_ic_notification) setMediaNotificationProvider(notificationProvider) Timber.d("HaMediaSessionService created") + startObservingEntities() + } + + /** + * Starts collecting [MediaControlRepository.observeConfiguredEntities] and reconciling + * sessions on each emission. Extracted to allow tests to supply a controlled [scope] without + * calling [onCreate], which would trigger Hilt injection and Media3 setup. + */ + internal fun startObservingEntities(scope: CoroutineScope = serviceScope) { mediaControlRepository.observeConfiguredEntities() .onEach { entities -> withContext(Dispatchers.Main) { reconcileSessions(entities) } } - .launchIn(serviceScope) + .launchIn(scope) } // Returns null intentionally: Media3 routes each controller to the session whose ID matches diff --git a/app/src/test/kotlin/io/homeassistant/companion/android/mediacontrol/HaMediaSessionServiceTest.kt b/app/src/test/kotlin/io/homeassistant/companion/android/mediacontrol/HaMediaSessionServiceTest.kt index 36fec43f10a..291269eca2d 100644 --- a/app/src/test/kotlin/io/homeassistant/companion/android/mediacontrol/HaMediaSessionServiceTest.kt +++ b/app/src/test/kotlin/io/homeassistant/companion/android/mediacontrol/HaMediaSessionServiceTest.kt @@ -1,20 +1,31 @@ package io.homeassistant.companion.android.mediacontrol import android.content.Context +import android.os.Looper import dagger.hilt.android.testing.HiltTestApplication import io.homeassistant.companion.android.common.data.mediacontrol.MediaControlEntityConfig import io.homeassistant.companion.android.common.data.mediacontrol.MediaControlRepository +import io.homeassistant.companion.android.common.data.mediacontrol.MediaControlState +import io.homeassistant.companion.android.common.data.mediacontrol.MediaPlaybackState +import io.homeassistant.companion.android.common.data.mediacontrol.MediaRepeatMode import io.homeassistant.companion.android.common.data.servers.ServerManager import io.homeassistant.companion.android.testing.unit.ConsoleLogRule -import io.homeassistant.companion.android.testing.unit.MainDispatcherJUnit4Rule import io.mockk.coEvery import io.mockk.every import io.mockk.mockk import io.mockk.unmockkAll +import java.util.concurrent.atomic.AtomicInteger +import kotlinx.coroutines.CoroutineScope +import kotlinx.coroutines.ExperimentalCoroutinesApi +import kotlinx.coroutines.SupervisorJob +import kotlinx.coroutines.cancel import kotlinx.coroutines.flow.MutableSharedFlow import kotlinx.coroutines.flow.flowOf +import kotlinx.coroutines.test.UnconfinedTestDispatcher import org.junit.After import org.junit.Assert.assertEquals +import org.junit.Assert.assertFalse +import org.junit.Assert.assertSame import org.junit.Assert.assertTrue import org.junit.Before import org.junit.Rule @@ -23,39 +34,64 @@ import org.junit.runner.RunWith import org.robolectric.Robolectric import org.robolectric.RobolectricTestRunner import org.robolectric.Shadows +import org.robolectric.Shadows.shadowOf import org.robolectric.annotation.Config +/** Module-level counter for unique MediaSession IDs across tests within the same JVM process. */ +private val sessionCounter = AtomicInteger(0) + /** - * Tests for [HaMediaSessionService] session reconciliation logic. + * Tests for [HaMediaSessionService] session reconciliation and lifecycle behavior. + * + * Session management is driven through [MediaControlRepository.observeConfiguredEntities] flow + * emissions via [HaMediaSessionService.startObservingEntities], rather than calling + * [HaMediaSessionService.reconcileSessions] directly. This exercises the full path from + * a DB change to session creation or removal. + * + * Each test pre-populates [configuredEntitiesFlow] (replay=1) before starting observation, so + * the subscriber receives the value immediately upon subscribing — matching the pattern used in + * [HaMediaSessionTest] where mock flows are set up before collecting. Subsequent emissions are + * delivered to the active subscriber. * - * Dependencies are injected directly into the service's lateinit fields, bypassing Hilt. - * Reconciliation results are asserted via [HaMediaSessionService.activeSessions], which is - * the service's source of truth for which sessions are currently active. + * [HaMediaSession] instances are created with [UnconfinedTestDispatcher] scopes so that + * [HaMediaSession.reconnect] and [HaMediaSession.startObservingState] run eagerly. Main-looper + * tasks (such as [HaRemoteMediaPlayer.updateState] dispatched by [HaMediaSession]) are flushed + * with [idleMainLooper]. + * + * Injected dependencies bypass Hilt by directly setting the service's lateinit fields. */ +@OptIn(ExperimentalCoroutinesApi::class) @RunWith(RobolectricTestRunner::class) @Config(application = HiltTestApplication::class) class HaMediaSessionServiceTest { - @get:Rule(order = 0) + @get:Rule val consoleLogRule = ConsoleLogRule() - @get:Rule(order = 1) - val mainDispatcherRule = MainDispatcherJUnit4Rule() - private val mediaControlRepository: MediaControlRepository = mockk(relaxed = true) private val serverManager: ServerManager = mockk(relaxed = true) private val haMediaSessionFactory: HaMediaSession.Factory = mockk() + // replay=1 ensures tryEmit always succeeds and the value is available to new subscribers. + private lateinit var configuredEntitiesFlow: MutableSharedFlow> + private lateinit var observationScope: CoroutineScope private lateinit var service: HaMediaSessionService @Before fun setUp() { + configuredEntitiesFlow = MutableSharedFlow(replay = 1) + observationScope = CoroutineScope(SupervisorJob() + UnconfinedTestDispatcher()) + + every { mediaControlRepository.observeConfiguredEntities() } returns configuredEntitiesFlow coEvery { mediaControlRepository.observeEntityState(any()) } returns flowOf(null) + + // Each session gets its own UnconfinedTestDispatcher scope so that reconnect() and + // startObservingState() run eagerly on the calling thread without Thread.sleep. every { haMediaSessionFactory.create(any(), any(), any()) } answers { HaMediaSession( context = firstArg(), config = secondArg(), - scope = thirdArg(), + scope = CoroutineScope(SupervisorJob() + UnconfinedTestDispatcher()), mediaControlRepository = mediaControlRepository, serverManager = serverManager, ) @@ -68,68 +104,142 @@ class HaMediaSessionServiceTest { @After fun tearDown() { + observationScope.cancel() + // Safe when onDestroy() was already called — activeSessions will already be empty. service.activeSessions.values.forEach { it.release() } unmockkAll() } - @Test - fun `Given new entity in config when reconcileSessions then session is added`() { - val config = MediaControlEntityConfig(serverId = 1, entityId = "media_player.living_room") + /** + * Starts [HaMediaSessionService.startObservingEntities] with the test scope. Because + * [configuredEntitiesFlow] uses replay=1 and [observationScope] uses [UnconfinedTestDispatcher], + * the subscriber receives any pre-emitted value immediately and runs the [onEach] block + * synchronously until it hits [withContext(Dispatchers.Main)]. Call [idleMainLooper] after + * this to flush the pending [HaMediaSessionService.reconcileSessions] task. + */ + private fun startObserving() { + service.startObservingEntities(observationScope) + } + + /** + * Drains the Robolectric main looper so that tasks posted via [withContext(Dispatchers.Main)] + * (e.g. [HaMediaSessionService.reconcileSessions] from the flow's [onEach] block, or + * [HaRemoteMediaPlayer.updateState] from [HaMediaSession.startObservingState]) take effect + * before assertions. + * + * Robolectric's [shadowOf(Looper.getMainLooper()).idle()] processes nested posts too, so a + * single call is sufficient even when multiple tasks are queued in sequence. + */ + private fun idleMainLooper() { + shadowOf(Looper.getMainLooper()).idle() + } + + private fun uniqueConfig(): MediaControlEntityConfig { + val id = sessionCounter.incrementAndGet() + return MediaControlEntityConfig(serverId = 1, entityId = "media_player.test_$id") + } + + private fun createPlayingState(entityId: String) = MediaControlState( + entityId = entityId, + serverId = 1, + playbackState = MediaPlaybackState.Playing, + title = "Test Track", + artist = null, + albumName = null, + entityPictureUrl = null, + mediaDuration = null, + mediaPosition = null, + supportsPause = true, + supportsPlay = true, + supportsSeek = false, + supportsPreviousTrack = false, + supportsNextTrack = false, + supportsVolumeSet = false, + supportsStop = false, + supportsMute = false, + supportsShuffleSet = false, + supportsRepeatSet = false, + volumeLevel = null, + isVolumeMuted = false, + shuffle = false, + repeatMode = MediaRepeatMode.Off, + entityFriendlyName = null, + ) - service.reconcileSessions(listOf(config)) + // -- Reconciliation via flow emissions -- + + @Test + fun `Given new entity in config when flow emits then session is added`() { + val config = uniqueConfig() + configuredEntitiesFlow.tryEmit(listOf(config)) + startObserving() + idleMainLooper() assertEquals(1, service.activeSessions.size) - assertTrue(service.activeSessions.containsKey("1:media_player.living_room")) + assertTrue(service.activeSessions.containsKey("1:${config.entityId}")) } @Test - fun `Given two entities in config when reconcileSessions then sessions added for each`() { - val configA = MediaControlEntityConfig(serverId = 1, entityId = "media_player.living_room") - val configB = MediaControlEntityConfig(serverId = 1, entityId = "media_player.bedroom") - - service.reconcileSessions(listOf(configA, configB)) + fun `Given two entities in config when flow emits then sessions are added for each`() { + val configA = uniqueConfig() + val configB = uniqueConfig() + configuredEntitiesFlow.tryEmit(listOf(configA, configB)) + startObserving() + idleMainLooper() assertEquals(2, service.activeSessions.size) - assertTrue(service.activeSessions.containsKey("1:media_player.living_room")) - assertTrue(service.activeSessions.containsKey("1:media_player.bedroom")) + assertTrue(service.activeSessions.containsKey("1:${configA.entityId}")) + assertTrue(service.activeSessions.containsKey("1:${configB.entityId}")) } @Test fun `Given active session when entity removed from config then session is removed`() { - val configA = MediaControlEntityConfig(serverId = 1, entityId = "media_player.living_room") - val configB = MediaControlEntityConfig(serverId = 1, entityId = "media_player.bedroom") - service.reconcileSessions(listOf(configA, configB)) + val configA = uniqueConfig() + val configB = uniqueConfig() + configuredEntitiesFlow.tryEmit(listOf(configA, configB)) + startObserving() + idleMainLooper() - service.reconcileSessions(listOf(configB)) + configuredEntitiesFlow.tryEmit(listOf(configB)) + idleMainLooper() assertEquals(1, service.activeSessions.size) - assertTrue(service.activeSessions.containsKey("1:media_player.bedroom")) + assertTrue(service.activeSessions.containsKey("1:${configB.entityId}")) } @Test fun `Given existing session when entity remains in config then session is not recreated`() { - val config = MediaControlEntityConfig(serverId = 1, entityId = "media_player.living_room") - service.reconcileSessions(listOf(config)) + val config = uniqueConfig() + configuredEntitiesFlow.tryEmit(listOf(config)) + startObserving() + idleMainLooper() + val sessionBefore = service.activeSessions["1:${config.entityId}"] - val sessionBefore = service.activeSessions["1:media_player.living_room"] - - service.reconcileSessions(listOf(config)) + configuredEntitiesFlow.tryEmit(listOf(config)) + idleMainLooper() assertEquals(1, service.activeSessions.size) - assertTrue(service.activeSessions["1:media_player.living_room"] === sessionBefore) + assertSame(sessionBefore, service.activeSessions["1:${config.entityId}"]) } @Test - fun `Given empty config when reconcileSessions then service stops itself`() { - service.reconcileSessions(emptyList()) + fun `Given empty config when flow emits then service stops itself`() { + configuredEntitiesFlow.tryEmit(emptyList()) + startObserving() + idleMainLooper() assertTrue(Shadows.shadowOf(service).isStoppedBySelf) } + // -- onStartCommand -- + /** - * Verifies that `onStartCommand` reconnects active sessions by restarting their observation. - * This is the recovery path when the app is opened after a network disconnect left sessions - * stuck with a non-completing WebSocket subscription flow. + * Verifies that [HaMediaSessionService.onStartCommand] reconnects active sessions by + * restarting their observation. This is the recovery path for sessions whose WebSocket + * subscription got stuck after a network disconnect. + * + * With [UnconfinedTestDispatcher] session scopes, [HaMediaSession.reconnect] runs eagerly + * and [MediaControlRepository.observeEntityState] is called synchronously — no sleep needed. */ @Test fun `Given active sessions when onStartCommand then sessions are reconnected`() { @@ -138,19 +248,72 @@ class HaMediaSessionServiceTest { observeCallCount++ MutableSharedFlow() } - val config = MediaControlEntityConfig(serverId = 1, entityId = "media_player.living_room") - - service.reconcileSessions(listOf(config)) - Thread.sleep(DISPATCHER_SETTLE_MS) - val countAfterReconcile = observeCallCount + val config = uniqueConfig() + configuredEntitiesFlow.tryEmit(listOf(config)) + startObserving() + idleMainLooper() + val countAfterSetup = observeCallCount service.onStartCommand(intent = null, flags = 0, startId = 0) - Thread.sleep(DISPATCHER_SETTLE_MS) - assertTrue(observeCallCount > countAfterReconcile) + assertTrue(observeCallCount > countAfterSetup) } - private companion object { - const val DISPATCHER_SETTLE_MS = 200L + // -- onTaskRemoved -- + + @Test + fun `Given no active sessions when onTaskRemoved then service stops`() { + service.onTaskRemoved(rootIntent = null) + + assertTrue(Shadows.shadowOf(service).isStoppedBySelf) + } + + @Test + fun `Given active session not playing when onTaskRemoved then service stops`() { + val config = uniqueConfig() + // Session starts in idle state: playWhenReady=false, mediaItemCount=0 + configuredEntitiesFlow.tryEmit(listOf(config)) + startObserving() + idleMainLooper() + + service.onTaskRemoved(rootIntent = null) + + assertTrue(Shadows.shadowOf(service).isStoppedBySelf) + } + + @Test + fun `Given active session playing when onTaskRemoved then service does not stop`() { + val config = uniqueConfig() + // Pre-load a Playing state with replay=1 so the session's startObservingState() receives + // it immediately when it subscribes, before idleMainLooper flushes player.updateState(). + val stateFlow = MutableSharedFlow(replay = 1) + stateFlow.tryEmit(createPlayingState(config.entityId)) + coEvery { mediaControlRepository.observeEntityState(any()) } returns stateFlow + + configuredEntitiesFlow.tryEmit(listOf(config)) + startObserving() + // idleMainLooper processes both reconcileSessions (from the entities flow) and + // player.updateState (posted back to Main by loadArtworkAndUpdatePlayer inside + // startObservingState). Robolectric's idle() drains all queued and nested tasks. + idleMainLooper() + + service.onTaskRemoved(rootIntent = null) + + assertFalse(Shadows.shadowOf(service).isStoppedBySelf) + } + + // -- onDestroy -- + + @Test + fun `Given active sessions when onDestroy then all sessions are released and map is cleared`() { + val config = uniqueConfig() + configuredEntitiesFlow.tryEmit(listOf(config)) + startObserving() + idleMainLooper() + assertEquals(1, service.activeSessions.size) + + service.onDestroy() + + assertTrue(service.activeSessions.isEmpty()) } } From 5c1251a9a0f0a536c89c3083252361f488a2ae16 Mon Sep 17 00:00:00 2001 From: Fletcher Dostie Date: Wed, 8 Apr 2026 18:24:24 -0700 Subject: [PATCH 043/114] Remove fake 3-item playlist from HaRemoteMediaPlayer --- .../android/mediacontrol/HaRemoteMediaPlayer.kt | 16 ++-------------- 1 file changed, 2 insertions(+), 14 deletions(-) diff --git a/app/src/main/kotlin/io/homeassistant/companion/android/mediacontrol/HaRemoteMediaPlayer.kt b/app/src/main/kotlin/io/homeassistant/companion/android/mediacontrol/HaRemoteMediaPlayer.kt index 0620ece7a08..fa4fb3e7577 100644 --- a/app/src/main/kotlin/io/homeassistant/companion/android/mediacontrol/HaRemoteMediaPlayer.kt +++ b/app/src/main/kotlin/io/homeassistant/companion/android/mediacontrol/HaRemoteMediaPlayer.kt @@ -138,17 +138,7 @@ class HaRemoteMediaPlayer(looper: Looper, private val commandCallback: CommandCa return builder.build() } - // SimpleBasePlayer.seekToNext() / seekToPrevious() check hasNextMediaItem() / - // hasPreviousMediaItem() before calling handleSeek(). With a single-item playlist both - // return false, so the seek is silently dropped and handleSeek() is never invoked. - // Using a 3-item playlist with the real item at index 1 ensures valid adjacent items exist, - // so the seek reaches handleSeek() where seekCommand is used to dispatch to the - // correct HA action. - private fun buildPlaylist(currentItem: MediaItemData): List = listOf( - MediaItemData.Builder(PLACEHOLDER_PREVIOUS_ID).build(), - currentItem, - MediaItemData.Builder(PLACEHOLDER_NEXT_ID).build(), - ) + private fun buildPlaylist(currentItem: MediaItemData): List = listOf(currentItem) override fun handleSetPlayWhenReady(playWhenReady: Boolean): ListenableFuture<*> = handleCommand { if (playWhenReady) commandCallback.onPlayRequested() else commandCallback.onPauseRequested() @@ -290,10 +280,8 @@ class HaRemoteMediaPlayer(looper: Looper, private val commandCallback: CommandCa private companion object { const val DURATION_UNSET_US = androidx.media3.common.C.TIME_UNSET - const val CURRENT_ITEM_INDEX = 1 + const val CURRENT_ITEM_INDEX = 0 const val PLAYBACK_SPEED = 1.0f - const val PLACEHOLDER_PREVIOUS_ID = "__ha_previous__" - const val PLACEHOLDER_NEXT_ID = "__ha_next__" // HA uses 0.0–1.0; we tell Media3 our volume range is 0–VOLUME_SCALE via // REMOTE_DEVICE_INFO, so Media3 will call handleSetDeviceVolume with values in that range. From 2a28179efc5a0c492c7bc874bbe791c98c3a3585 Mon Sep 17 00:00:00 2001 From: Fletcher Dostie Date: Wed, 8 Apr 2026 21:35:58 -0700 Subject: [PATCH 044/114] Remove automotive and Meya Quest support for media controls --- .../companion/android/settings/SettingsFragment.kt | 2 +- automotive/src/main/AndroidManifest.xml | 12 ------------ 2 files changed, 1 insertion(+), 13 deletions(-) diff --git a/app/src/main/kotlin/io/homeassistant/companion/android/settings/SettingsFragment.kt b/app/src/main/kotlin/io/homeassistant/companion/android/settings/SettingsFragment.kt index 6983b657eab..092f2c46be0 100644 --- a/app/src/main/kotlin/io/homeassistant/companion/android/settings/SettingsFragment.kt +++ b/app/src/main/kotlin/io/homeassistant/companion/android/settings/SettingsFragment.kt @@ -233,7 +233,7 @@ class SettingsFragment( } findPreference("media_controls")?.let { - it.isVisible = true + it.isVisible = !isAutomotive } findPreference("manage_media_controls")?.setOnPreferenceClickListener { parentFragmentManager.commit { diff --git a/automotive/src/main/AndroidManifest.xml b/automotive/src/main/AndroidManifest.xml index 2be3463db03..0d9ce7428f4 100644 --- a/automotive/src/main/AndroidManifest.xml +++ b/automotive/src/main/AndroidManifest.xml @@ -36,7 +36,6 @@ - - - - - - - Date: Thu, 9 Apr 2026 00:30:11 -0700 Subject: [PATCH 045/114] Remove Meta Quest support for media controls --- .../companion/android/settings/SettingsFragment.kt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/src/main/kotlin/io/homeassistant/companion/android/settings/SettingsFragment.kt b/app/src/main/kotlin/io/homeassistant/companion/android/settings/SettingsFragment.kt index 092f2c46be0..fb139b24606 100644 --- a/app/src/main/kotlin/io/homeassistant/companion/android/settings/SettingsFragment.kt +++ b/app/src/main/kotlin/io/homeassistant/companion/android/settings/SettingsFragment.kt @@ -233,7 +233,7 @@ class SettingsFragment( } findPreference("media_controls")?.let { - it.isVisible = !isAutomotive + it.isVisible = !isAutomotive && !QuestUtil.isQuest } findPreference("manage_media_controls")?.setOnPreferenceClickListener { parentFragmentManager.commit { From b7d9e0bb0796fb015fb2da3a1fd557310bab48c7 Mon Sep 17 00:00:00 2001 From: Fletcher Dostie Date: Thu, 9 Apr 2026 01:01:44 -0700 Subject: [PATCH 046/114] Add screenshot tests for MediaControlSettingsScreen --- ...ediaControlSettingsScreenScreenshotTest.kt | 97 ++++++++++++++++++ ...rol settings empty_foldable_c908f502_0.png | Bin 0 -> 31428 bytes ...ontrol settings empty_phone_e05166be_0.png | Bin 0 -> 31698 bytes ...tings empty_phone_landscape_9e00b29d_0.png | Bin 0 -> 30980 bytes ... settings empty_small_phone_66e7bbf2_0.png | Bin 0 -> 34496 bytes ...ntrol settings empty_tablet_2f22c4ea_0.png | Bin 0 -> 22328 bytes ...ings empty_tablet_landscape_62cae397_0.png | Bin 0 -> 19632 bytes ...ettings is loading_foldable_c908f502_0.png | Bin 0 -> 29312 bytes ...l settings is loading_phone_e05166be_0.png | Bin 0 -> 29545 bytes ... is loading_phone_landscape_9e00b29d_0.png | Bin 0 -> 28833 bytes ...ings is loading_small_phone_66e7bbf2_0.png | Bin 0 -> 31988 bytes ... settings is loading_tablet_2f22c4ea_0.png | Bin 0 -> 20744 bytes ...is loading_tablet_landscape_62cae397_0.png | Bin 0 -> 18717 bytes ...entities and icons_foldable_c908f502_0.png | Bin 0 -> 53803 bytes ...ed entities and icons_phone_e05166be_0.png | Bin 0 -> 50017 bytes ...s and icons_phone_landscape_9e00b29d_0.png | Bin 0 -> 53487 bytes ...ities and icons_small_phone_66e7bbf2_0.png | Bin 0 -> 58281 bytes ...d entities and icons_tablet_2f22c4ea_0.png | Bin 0 -> 36896 bytes ... and icons_tablet_landscape_62cae397_0.png | Bin 0 -> 36335 bytes ...onfigured entities_foldable_c908f502_0.png | Bin 0 -> 51237 bytes ...h configured entities_phone_e05166be_0.png | Bin 0 -> 48002 bytes ...ed entities_phone_landscape_9e00b29d_0.png | Bin 0 -> 50953 bytes ...igured entities_small_phone_66e7bbf2_0.png | Bin 0 -> 55476 bytes ... configured entities_tablet_2f22c4ea_0.png | Bin 0 -> 35158 bytes ...d entities_tablet_landscape_62cae397_0.png | Bin 0 -> 34462 bytes 25 files changed, 97 insertions(+) create mode 100644 app/src/screenshotTest/kotlin/io/homeassistant/companion/android/settings/mediacontrol/MediaControlSettingsScreenScreenshotTest.kt create mode 100644 app/src/screenshotTestFullDebug/reference/io/homeassistant/companion/android/settings/mediacontrol/MediaControlSettingsScreenScreenshotTest/Media control settings empty_foldable_c908f502_0.png create mode 100644 app/src/screenshotTestFullDebug/reference/io/homeassistant/companion/android/settings/mediacontrol/MediaControlSettingsScreenScreenshotTest/Media control settings empty_phone_e05166be_0.png create mode 100644 app/src/screenshotTestFullDebug/reference/io/homeassistant/companion/android/settings/mediacontrol/MediaControlSettingsScreenScreenshotTest/Media control settings empty_phone_landscape_9e00b29d_0.png create mode 100644 app/src/screenshotTestFullDebug/reference/io/homeassistant/companion/android/settings/mediacontrol/MediaControlSettingsScreenScreenshotTest/Media control settings empty_small_phone_66e7bbf2_0.png create mode 100644 app/src/screenshotTestFullDebug/reference/io/homeassistant/companion/android/settings/mediacontrol/MediaControlSettingsScreenScreenshotTest/Media control settings empty_tablet_2f22c4ea_0.png create mode 100644 app/src/screenshotTestFullDebug/reference/io/homeassistant/companion/android/settings/mediacontrol/MediaControlSettingsScreenScreenshotTest/Media control settings empty_tablet_landscape_62cae397_0.png create mode 100644 app/src/screenshotTestFullDebug/reference/io/homeassistant/companion/android/settings/mediacontrol/MediaControlSettingsScreenScreenshotTest/Media control settings is loading_foldable_c908f502_0.png create mode 100644 app/src/screenshotTestFullDebug/reference/io/homeassistant/companion/android/settings/mediacontrol/MediaControlSettingsScreenScreenshotTest/Media control settings is loading_phone_e05166be_0.png create mode 100644 app/src/screenshotTestFullDebug/reference/io/homeassistant/companion/android/settings/mediacontrol/MediaControlSettingsScreenScreenshotTest/Media control settings is loading_phone_landscape_9e00b29d_0.png create mode 100644 app/src/screenshotTestFullDebug/reference/io/homeassistant/companion/android/settings/mediacontrol/MediaControlSettingsScreenScreenshotTest/Media control settings is loading_small_phone_66e7bbf2_0.png create mode 100644 app/src/screenshotTestFullDebug/reference/io/homeassistant/companion/android/settings/mediacontrol/MediaControlSettingsScreenScreenshotTest/Media control settings is loading_tablet_2f22c4ea_0.png create mode 100644 app/src/screenshotTestFullDebug/reference/io/homeassistant/companion/android/settings/mediacontrol/MediaControlSettingsScreenScreenshotTest/Media control settings is loading_tablet_landscape_62cae397_0.png create mode 100644 app/src/screenshotTestFullDebug/reference/io/homeassistant/companion/android/settings/mediacontrol/MediaControlSettingsScreenScreenshotTest/Media control settings with configured entities and icons_foldable_c908f502_0.png create mode 100644 app/src/screenshotTestFullDebug/reference/io/homeassistant/companion/android/settings/mediacontrol/MediaControlSettingsScreenScreenshotTest/Media control settings with configured entities and icons_phone_e05166be_0.png create mode 100644 app/src/screenshotTestFullDebug/reference/io/homeassistant/companion/android/settings/mediacontrol/MediaControlSettingsScreenScreenshotTest/Media control settings with configured entities and icons_phone_landscape_9e00b29d_0.png create mode 100644 app/src/screenshotTestFullDebug/reference/io/homeassistant/companion/android/settings/mediacontrol/MediaControlSettingsScreenScreenshotTest/Media control settings with configured entities and icons_small_phone_66e7bbf2_0.png create mode 100644 app/src/screenshotTestFullDebug/reference/io/homeassistant/companion/android/settings/mediacontrol/MediaControlSettingsScreenScreenshotTest/Media control settings with configured entities and icons_tablet_2f22c4ea_0.png create mode 100644 app/src/screenshotTestFullDebug/reference/io/homeassistant/companion/android/settings/mediacontrol/MediaControlSettingsScreenScreenshotTest/Media control settings with configured entities and icons_tablet_landscape_62cae397_0.png create mode 100644 app/src/screenshotTestFullDebug/reference/io/homeassistant/companion/android/settings/mediacontrol/MediaControlSettingsScreenScreenshotTest/Media control settings with configured entities_foldable_c908f502_0.png create mode 100644 app/src/screenshotTestFullDebug/reference/io/homeassistant/companion/android/settings/mediacontrol/MediaControlSettingsScreenScreenshotTest/Media control settings with configured entities_phone_e05166be_0.png create mode 100644 app/src/screenshotTestFullDebug/reference/io/homeassistant/companion/android/settings/mediacontrol/MediaControlSettingsScreenScreenshotTest/Media control settings with configured entities_phone_landscape_9e00b29d_0.png create mode 100644 app/src/screenshotTestFullDebug/reference/io/homeassistant/companion/android/settings/mediacontrol/MediaControlSettingsScreenScreenshotTest/Media control settings with configured entities_small_phone_66e7bbf2_0.png create mode 100644 app/src/screenshotTestFullDebug/reference/io/homeassistant/companion/android/settings/mediacontrol/MediaControlSettingsScreenScreenshotTest/Media control settings with configured entities_tablet_2f22c4ea_0.png create mode 100644 app/src/screenshotTestFullDebug/reference/io/homeassistant/companion/android/settings/mediacontrol/MediaControlSettingsScreenScreenshotTest/Media control settings with configured entities_tablet_landscape_62cae397_0.png diff --git a/app/src/screenshotTest/kotlin/io/homeassistant/companion/android/settings/mediacontrol/MediaControlSettingsScreenScreenshotTest.kt b/app/src/screenshotTest/kotlin/io/homeassistant/companion/android/settings/mediacontrol/MediaControlSettingsScreenScreenshotTest.kt new file mode 100644 index 00000000000..259636f0f0c --- /dev/null +++ b/app/src/screenshotTest/kotlin/io/homeassistant/companion/android/settings/mediacontrol/MediaControlSettingsScreenScreenshotTest.kt @@ -0,0 +1,97 @@ +package io.homeassistant.companion.android.settings.mediacontrol + +import androidx.compose.runtime.Composable +import com.android.tools.screenshot.PreviewTest +import com.mikepenz.iconics.typeface.library.community.material.CommunityMaterial +import io.homeassistant.companion.android.common.compose.theme.HAThemeForPreview +import io.homeassistant.companion.android.common.data.mediacontrol.MediaControlEntityConfig +import io.homeassistant.companion.android.settings.mediacontrol.views.MediaControlSettingsContent +import io.homeassistant.companion.android.util.compose.HAPreviews + +class MediaControlSettingsScreenScreenshotTest { + + private val livingRoomConfig = MediaControlEntityConfig(serverId = 1, entityId = "media_player.living_room") + private val bedroomConfig = MediaControlEntityConfig(serverId = 1, entityId = "media_player.bedroom") + + @PreviewTest + @HAPreviews + @Composable + fun `Media control settings is loading`() { + HAThemeForPreview { + MediaControlSettingsContent( + uiState = MediaControlSettingsUiState(isLoading = true), + onServerSelected = {}, + onEntitySelected = {}, + onRemoveEntity = {}, + onMove = { _, _ -> }, + onReorderComplete = {}, + ) + } + } + + @PreviewTest + @HAPreviews + @Composable + fun `Media control settings empty`() { + HAThemeForPreview { + MediaControlSettingsContent( + uiState = MediaControlSettingsUiState(isLoading = false), + onServerSelected = {}, + onEntitySelected = {}, + onRemoveEntity = {}, + onMove = { _, _ -> }, + onReorderComplete = {}, + ) + } + } + + @PreviewTest + @HAPreviews + @Composable + fun `Media control settings with configured entities`() { + HAThemeForPreview { + MediaControlSettingsContent( + uiState = MediaControlSettingsUiState( + isLoading = false, + configuredEntities = listOf(livingRoomConfig, bedroomConfig), + entityNamesByConfig = mapOf( + livingRoomConfig to "Living Room TV", + bedroomConfig to "Bedroom Speaker", + ), + ), + onServerSelected = {}, + onEntitySelected = {}, + onRemoveEntity = {}, + onMove = { _, _ -> }, + onReorderComplete = {}, + ) + } + } + + @PreviewTest + @HAPreviews + @Composable + fun `Media control settings with configured entities and icons`() { + HAThemeForPreview { + MediaControlSettingsContent( + uiState = MediaControlSettingsUiState( + isLoading = false, + configuredEntities = listOf(livingRoomConfig, bedroomConfig), + entityNamesByConfig = mapOf( + livingRoomConfig to "Living Room TV", + bedroomConfig to "Bedroom Speaker", + ), + entityIconsByConfig = mapOf( + livingRoomConfig to CommunityMaterial.Icon.cmd_cast, + bedroomConfig to CommunityMaterial.Icon.cmd_cast, + ), + ), + onServerSelected = {}, + onEntitySelected = {}, + onRemoveEntity = {}, + onMove = { _, _ -> }, + onReorderComplete = {}, + ) + } + } +} diff --git a/app/src/screenshotTestFullDebug/reference/io/homeassistant/companion/android/settings/mediacontrol/MediaControlSettingsScreenScreenshotTest/Media control settings empty_foldable_c908f502_0.png b/app/src/screenshotTestFullDebug/reference/io/homeassistant/companion/android/settings/mediacontrol/MediaControlSettingsScreenScreenshotTest/Media control settings empty_foldable_c908f502_0.png new file mode 100644 index 0000000000000000000000000000000000000000..777123cc90472cfc82ce7d610a34fdced6ff7ed9 GIT binary patch literal 31428 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 literal 0 HcmV?d00001 diff --git a/app/src/screenshotTestFullDebug/reference/io/homeassistant/companion/android/settings/mediacontrol/MediaControlSettingsScreenScreenshotTest/Media control settings empty_phone_e05166be_0.png b/app/src/screenshotTestFullDebug/reference/io/homeassistant/companion/android/settings/mediacontrol/MediaControlSettingsScreenScreenshotTest/Media control settings empty_phone_e05166be_0.png new file mode 100644 index 0000000000000000000000000000000000000000..d346a4fe780af225b267181ee6fe16579a899ea5 GIT binary patch literal 31698 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 b5EWDz-oDdiwKoJ&H43%++Daw&9tHgmJ^5Ej literal 0 HcmV?d00001 diff --git a/app/src/screenshotTestFullDebug/reference/io/homeassistant/companion/android/settings/mediacontrol/MediaControlSettingsScreenScreenshotTest/Media control settings empty_phone_landscape_9e00b29d_0.png b/app/src/screenshotTestFullDebug/reference/io/homeassistant/companion/android/settings/mediacontrol/MediaControlSettingsScreenScreenshotTest/Media control settings empty_phone_landscape_9e00b29d_0.png new file mode 100644 index 0000000000000000000000000000000000000000..4422dd5e54631dff449c4456e823c8d558524bbb GIT binary patch literal 30980 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 Yju@(VOJd=wx#4o#z)Zj5mj}Q9FPMQ$NdN!< literal 0 HcmV?d00001 diff --git a/app/src/screenshotTestFullDebug/reference/io/homeassistant/companion/android/settings/mediacontrol/MediaControlSettingsScreenScreenshotTest/Media control settings is loading_foldable_c908f502_0.png b/app/src/screenshotTestFullDebug/reference/io/homeassistant/companion/android/settings/mediacontrol/MediaControlSettingsScreenScreenshotTest/Media control settings is loading_foldable_c908f502_0.png new file mode 100644 index 0000000000000000000000000000000000000000..cd790af860578cef228a7b10160557ba7872857a GIT binary patch literal 29312 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 C&5kJm literal 0 HcmV?d00001 diff --git a/app/src/screenshotTestFullDebug/reference/io/homeassistant/companion/android/settings/mediacontrol/MediaControlSettingsScreenScreenshotTest/Media control settings is loading_phone_e05166be_0.png b/app/src/screenshotTestFullDebug/reference/io/homeassistant/companion/android/settings/mediacontrol/MediaControlSettingsScreenScreenshotTest/Media control settings is loading_phone_e05166be_0.png new file mode 100644 index 0000000000000000000000000000000000000000..07c47397d11a5737e3bd4136d3e2acb8b6159862 GIT binary patch literal 29545 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 U^!=b}z$HjgPVJxU+Yg`rAJFl1mH+?% literal 0 HcmV?d00001 diff --git a/app/src/screenshotTestFullDebug/reference/io/homeassistant/companion/android/settings/mediacontrol/MediaControlSettingsScreenScreenshotTest/Media control settings is loading_phone_landscape_9e00b29d_0.png b/app/src/screenshotTestFullDebug/reference/io/homeassistant/companion/android/settings/mediacontrol/MediaControlSettingsScreenScreenshotTest/Media control settings is loading_phone_landscape_9e00b29d_0.png new file mode 100644 index 0000000000000000000000000000000000000000..2c5d8e4fc19e4322dd6e1a4a5718f5af473208ba GIT binary patch literal 28833 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 literal 0 HcmV?d00001 diff --git a/app/src/screenshotTestFullDebug/reference/io/homeassistant/companion/android/settings/mediacontrol/MediaControlSettingsScreenScreenshotTest/Media control settings is loading_small_phone_66e7bbf2_0.png b/app/src/screenshotTestFullDebug/reference/io/homeassistant/companion/android/settings/mediacontrol/MediaControlSettingsScreenScreenshotTest/Media control settings is loading_small_phone_66e7bbf2_0.png new file mode 100644 index 0000000000000000000000000000000000000000..efa25245b4b9c45fb92d62bb2065f42df630177b GIT binary patch literal 31988 zcmeFZc{~(s`#wyYQmBL?vo|||IFGXzdOGTCth}sDOiXMV zw{I9QF|mX&F)`Qg-v|E1okb*>iRp2p#*OPne%AA2EVwVN>uXC>i125&k&@`d!CO!T470 z%9?q73Ke}{Oi|OBg*>d~R z|Ni0s2IpT9`2SJnTznF|wVWA8-1s4jU}9=HZt2y36G0^B&z8JiI zC-1MVIh$?gTqY(c6Yb`;<8b_=Z1TZh=8~K(HbLv8Nt7~FheG_#+&_i=Q%OD|i>w=;u#krlRspOr=RrUiuQ@zLjg^fr~E#2ldspo405#d~D~dPhXN5CxxtS zl~XS5-zO$B%j}nJv*%fKwr;l)9fEHTLG|k}xt#I+oFZMrnsdjr(T98=hqUsE^Slxs z$<7oK3to8+*@%P+Zf!0G*Y)eE^6j#luwwUH0-dPh%9fII> zD_;{1n_7yH8ck<3DtuVFz)Z1dt_-S-c{@fBlLBK|S87r(lA zaklg-(_PE18DE`w6PF*>KZn97uTRG53aM=Unphd5r%aAD`FsA9?x%x*Pk!J~scw8I z8y<;7ZEsAe)Oh0R(wLbh4qxfJXOsG-Auz95rlCd&CzpIa;!K_@Gm}{J$P@NfvrgE4F^NTLItZ`m zK)v9;cOe_XndOJTYYuCQ5T>yb8Szc(1fHML#RtBE1THrSIqC87bev$&uXndnXSyJ$ zQdfu7*`c^a%=Y*#&#KpuhIrP!Oy$3hPk(edUw69vZ4<$FoNiHcdn$-=a=DM+U(T|5 zW(oq9tJ~;jKoNl1wBQPbLRK4ocrbgkahZ$=r_Ya6hOd)L@ z*VL^c^=wbtNMp^*<3!Dy@@pT!AqbK<6PP#8w3>_9^TF|LasT@It{7q<0aiCEoIdSj zWAPkDsQrA)WtEg@qXQA<|3F)vyWoODrt91$2GPmbU|isKBX4mIA0;VeIM%Id}|Q%}S< zb8LQ(x~PLCQ@Sr^W?;`JT3%M_P#5sOpMtDV{`K`~m)uD8_8Mke$$zC^ykWKk< z`Xa_=l<1HNhpy98-J9j=!8N~tv+^CA1Ro$n=5hRwfH3sSf@oxCoUXE5{pzqq0d8J5 zn1-DMAd&9oPN$NeK32P*jC`lK{Ik+#>WfoB!`GRDOk~;zV-qXsdip|R!NKA#_o?S6 zru%%lXOKU!x+l=f)UGV{D~D@M#h!${ zK7A;CxN6@!gGG#4xRygra2JlwfD(OP#Ihld`G!7UX_Kz_kDhza8_J`ymrY8)tiBUd z%Ug~m872l?BYW~)s7=q6i5?55j@?|4&u81r@mYzYY4BUj+kT{>VjBirWI z0Y}*@`=whKo0fabn_2gI-|vdfGjp{s2uBnyzu9?2Fv+-4h0n-s^xdv>6t9vDk_{j9D$!OPD{cBrv8fa% z=Zh~gv{T7F%u2iQRQ}M>D}75b!5g`?;@+1U`wjS>tP$4|bswii95F_CwMryd#F}SL1c*1hL0Pm>ATPfih2MKPgTz@o8%j)c#QM|uCm?xko zp!_vtx9B6OcRXsGLOv?6DdGCLB#CLBu>Om)4uutMGIFyR)rHGmA1gl#xHxADIW*+2 zIPv5KMWY?at0&|ywsj@1HQ}4ASWn*>Td4U}7=i*{gJ6jTjs}$BGOs zn_mEzxARJ`;+0WQ44nxuR(vMZsO{%Rj*2F%c?rF`vfHg{KcB2yb?S3lg_hZ01iK_I zcKPY7vFHwG3tPiaEq48eu8o|5uvy#JAEmFUqD7_9AKg$m6OjvQ-No&O#sq?Ye_+BfwL zD$NPDsKOS?=D!^_sp){=ClS*;xJbs`| zWmMR$1fNabo;uxKfLsj`8ti(s^)o_cM7V6l$Z>rQ;9708!K=oXGm%01{F^yJ;U_Iz zUzcn_Mw(Q-PRQRMeGns^ryHkWMW;IP6#e4>6@MS#D{z3OF$;uLW8J7~u0pkbmvi&Y zQCZc!zoQ%D1iAML8Nx^Ighs z`}>U|Jr}C6&Nd`2I^oR8N3BP&@Mk@SY-^NY4yC?q6D4V@-DC@=$Dj9A?ViWh|=h3QjI1 z@lJuY>7{!^wLNf>lG8lKj9WNe(H5JwYIEB6_aWA}XSScUqJvvl_K!pKsDpbZ(pz%) zhW7jn-lh}HpK4r3c`htRKS8c&b6V&XeIHyqGT&0#Eb?&FK5^)!K2gnapdhCku9br@ zqRNUsHtxiCSwu^g2~{l_#}eM!)6zG!dyFGAWgAuY@;Az#wbxWf58sBIhHZfSY&wdo zL|DnC`HuU?C0Yj*4II|n8e*;1%hjAwic$}HUbEk+>{j@`v=uaml7AMLH>!yeIdpVXvax#@$UO<7_oL!CG%aQ3vE2nPh=8xGDR0exUd~nIzVw?FA+_9Ciiqkde zn1u^;D?YS`c3eTgEUrCM`kDYC{A2P1c@94JVZ)}qq<56XYCJ|`K~d#KGPg^{RD7=0 z>w)GdahBG=;CfWz!g&h;#}=7t_|OzBD0QrvrZua;CUQOIziL zOjQRZvjLRMC~Luc?nZmLHfUSn0_$~bACHN~&ST}w`6=sDnS??vs>MxKR5PtOT87J_ z-~S|5miYJzEEX|Q{7!nV@l>|4EbpM(YlG}o1BZ7$BS!VYn}ovaS>ex=bc{{4Q$!oh z_*-$-fn`*_vILijSAw?Us^%_X4=wCUP_lC zr0C3#Z}#;)0!{_6GV_|^qbB~{><>*f4-yWW9QVjl*=gHrJCvU z;!X9UZ8!7Mm&}gU0bk?pC8=veQ1<8hOkl}`Ri`2(Ex*bk^<09wdEi*E^^7Y)l-CG` zmGUdix*$pz(FjR(Yv{Z+bKcj=^yf#LiY7{~UtZOUc;>l$fpT{RIlvuZ@u%n_vH9;F z#K;SAZ|2zaUyPiRterOAe&KLJRK(r_Tj4{-`sKU0X8IhN!;J*i&d?^i?o@b8qO*HH z=YC;HcsDH+(#E|aQ}`}t=%(mZJS#yW<1wWZPpug<8;q?ain%#|X@hzRbi7fmKdB2b zYUExquQA*zv#!s6Hx?VudOpFr;{KX+$u|Q%(mlR17_o`f*ry8G#B~g{p-}c3#yFJE z3S}43D+YY9OWEu{0pD=Q-COj{Hkh!wHhUGEhnQ=n7Vhp5KvFFoVydy6X+DBhn7E_7 z&mHkGtv)F$C!Tv)Zu;^l_%4)^)ghS?wk!t6R3XJ`szi-J*{PJ)+S48dW`*;~#;Ay% zb$}(A(K4i0Q-46fW#GMsCA^JXFJJofCm99C0^qvu`pL-vwz7X-hFz%2IAyr*o*C+%@^Ph*aZ_kqn>l_0c2U-=nSKe`uMKL$UP|ZdP9!5M z;P{)RHg=1neXE_xiMDL%YaVGkH|43m4pS7gPa0mAbFx}q7xf%^y_8RJ*r_0Wxba#! zO0K`vYkFpKBvN8cG7Q=`&82MR6i5xc;NG+p9xVfU%GS!T#tehV3h%jLd_^;81!VB? zW%Dbv1F1dQs_WTKrz}0DB9wn54+m@-B)Y#^wO44-E~x_%6gI;Ip`(YV-yghKx&cMG zI{)h^82ti!E&PlzP9c0VL5m>S4vvDB;n^eS;QM_2Wz6RAUwAIH3eFbT)X5z8!T4ZQ zK?G)dE07N+YUEJenf{<*4Mukz?sBGUO2E~N0d`$1vNtdFPc!WK$E~O&>ZjJ2H)kQ{ zsFn|uvbl2Iy!*n7GM0IQ&I2nP&L$XrbUS1>yW^*B0dFla+D(;Q0ADVy{Uv|k zOD3?i0?ym(#g?a?x^pOIfpCwhJX5tFXv?XDMsPLS94~~Bo^mKBArJLyJ0FbD>toH9 zfLv#_dAxKJ#s@={maC@Qp?7t&a=B?MzSQ8V9P4<=uORy9K?U)sew!czwe+kj=uYO| zgd1!@-osr4#{jnEvUywHdimhMQX0F?b4KaWavF;uGx=IM37hk~VsAl)8wTpGbz_Fk z>3_Uz_4MYa50!^-qi4xRR06!|*Y_yI)v6I%R++v4!AUdw$tz0G3U5~S$bqj(fvTz~ zMVI0TJN)6IhWzBs43zw1?dq$#Pmhp((YTGDt7jy}Ult#}oMx!i_$GFsdCrjCkK8*K zunI3eU8g)VKPL2o^lDgOEz?&XWz|@FR9E*v*vN#zrcbwcoza$drpo?`)l_cpi=jyG zY`;mAslfW9{gNQ+T?MLIN~fqrZ)*$it;&z`an~dKh9oPdc{cwF(pQYBxM|TVJXyNk z)ZG_fDNZs)V~2*YVxVbi zRTS%fn65OS!}*AWad~I#YF(L5y?J7~9QW4g5;A7+z}*@bSNV~5FIBbpz{QZlehpE| z&&N%K?Zc)tk50UrI-jQ%RdZ5pa!5Z|?h5T{QqF#$kFREJ{=>A<| z=)DT*b*`fZFK{b2Y}QxPX>M7~aZcUvRVB4~S;IOQ;X&@Fo45u&Mta9=Tz!`0m7q*A zJe@Can2ncEmoBBW7Zv74l`hogylV~eJ5U_N`{Xpw=N|z5t+xFWvjO;bRRk3L3;AV8 zw3W^~6+aMb4H-L_6U8OTY^i7eW^vbyg+EpLEGPj;Tz_?i;9iq=hr5;c=DMFUljKV8 zkhFrY4k0ioi#jA_?KF^TBo;Q=AFAD-uFaB@oTO`o$;5z>(ok8tb1Rp@8F_1?_KO)jVVXLvLbe7WKxO_8*&_5;s5Nh0ZJ9_R&wP*0eo{Z*|?)M$7baU?dFnVJ2!exW%069p6eYs z=%QCN87pDS&)>dwTn~vs>#1gH1 z%*2D7_e&?(iOR>=HGoSE2{uuaO$606-1-D`T%EYD3|fMp7;?EF7SpBkcWe`~cQ@@6 z%5t#}-qhO)Y?|@g0?VIKp;Ol)C{ysYFaalV>_zy|%dLCL$HLJv zVM#JKZX>0tp6=5|JyD)5%oSb2b5HqC`fG?_ZN)#xwN>9?{Vl`dwwjQMj`}WG2REhgpG=BYd@H}0=5^2UlgzVlgk_sN2~hYD|_ zXI^AyPZl3M?+YsBE5X!Bt*PIME9^>aMjypEUDkWrN%BjTfmQ1JESK8Z_Fbf%_+2l@ zS2KN2q!`rZohU0(wY?D1z49s$9psz|rxuNUVZGS&Gjy{vUi2WJtn{;H zt7C?MNyaso7;G^VVC!{ytbu6!acT{F-Iz~m^neC#VzqF-707Vr`PB<{C*)fg1YVM( z`!a)nG=2>|C>o5JEiMraUVLwtrRHzEu7gUf#w_yEe4N$hCt;tI^vj=WHT0_5;t$)` zV?QY`<=nOLf9pBb(?wkM;YLF%{+Xhw43`yki42Igi4vdvV4) zsIY>#0@4-Z|E3DQnPX*Ic7RABcB9CT$u&69;Hs$LjDXpq>pcz$U%c;~cGwB6c#PM} z&PJ$~lHPta`P>SxBc0};q(p4p>8bmBr+M0zk6WxD8OV$5;Ck&*IzEH1(`~%H>N2mC z>H()s=9yZdte$uLM&7%--ZEwYH70w6r)T2yvMqz`hxD$qDMRvemahsma!5CLY82_& zrh!2R0$yF#1hX@#ggk4$`Bi`P1sbZhCl!!yL-VzYL;PRu8}>ydMcAJ}R;lCD;nYzC zW{yv}!h^$WnowC{ffR*7t%~RsMvnA26W%ts=?|`&K93^ zB0t*xd^X(%0GX!Z5Zu04HWD*>!OuGeF?U+&JT(6WLZTz~eTjrv_bZI8|76Eyl-Gix zGMDY_lgspTjd*E$`85hr7byE(#4`UO$*MmoOKq6^JHUTRTa9jJt?Q9lK(zk>x8gS8 z`)dKC*vr|%OjS6>n$7wV2~{9hWAk;77Ch@ypVNl{3CKtZB4u>baQ2`7lN!vIWUi#7o651s#}E6o*kU%RsToleXN!U! z>j?m^_n#lQ8)!3Q;dxpTwtq?M3asj+O*)xE?Y%njR~OM+0;Wi58mV6N+-xup_l$H( zJZ6CRtssT$kOS#;AYJF{-oh8es(xeWo+`S-7t+y$b806p|4G+{I0|3w%4pvA@qS2p zH$l(3t}Cu75C~zDU^+(FtfNdZQ;EUb!wp3oy$zS{f84=ZZbfXp?z++QB9^ZC5^b_e zmOFZNxQob;f*CQ!Novp6WZA5EX4y!kc8uisZcdqnYif=rFp`*;PyoB!OOvK%XxA&l zDF&tfBs6mBhyKFu?$85Yndn{D!}^@_8MBO|>bet?hj-9Gyl|DDWXZq*HK}0|7!n}) z-9c9`!{%w^^PSN+g515QpdK~CYz?%U=l-S%-{b?|q{CTSES zRqS$2C`B3NQ(0LBeBpyT0hN1`U(>NEi}I?Sf}Ttr$lX}Xew-sE-r)}-nZNCp$?fbS zyFxPK>3N-ku^n|uIIHsS7?x6O_l8kivSJh|AIG+lxTRU_eHeGqOOYyEXi$Ielc0Xr z+9s#j-Zwvy+w*cHF}3smE?qv~tT654RU)_oU7&ZPnsBRM6uaPe&Hl38Wx6|*`U4m7 z#c%|d^NhEm_DO;JsXyV|%!q@MNeqfR^7fIPy&zTkzSRr?N+LVnw12K{e?egV^zh|8 zZ^2s6W1CN99ZB+QRZY4?{z>8AjCKi3 z19f-|;$s&3)HwK86dZO4!S~ZLJ1Lu2CEm?Y-e)k0EH9<6bLXsx7EExNSW0gCD)^VK z2n;CBzCT{E4oOfCI=1)+2$)@#e|$y|xj>`e+`TTTr3CA~k;82olrEmU|6i7xMxGVRwWj92&*190>eNdv?CT&$llT7ep zrM>*wXUpIO26?9ATgApDLg3<{qh+20X3!2)Wy8@3>nr&~cPk|7Ctr8@q(I>T|8Lnl z2Bsu7qd|!UJf)Vq`Kg_!!_0JJ6GnGp{6>d~P>^}ds~La-2=C}{nFRzRV!a!-d=tBl z_%C9R@Vqhm}t!)PwbihQOP$%cuA2Z8E#{8)udz03#%=IpG2>Xmv9N0qot~oB6}v1 zfDE3CS8h1;DPi<|^UQHW00Y^q_X)Ky8FPs7IShSlQIznDK-_wet3A5h3o06D6u9KK zZfY|at>Y1ee=vlDq`VQ_ITG)*9}sFGOH`ov@#P`V?P_dZw`cb}EWDEIa^xsBJV`yp z>F%e5^9^JAyUqO@`Qf;1isetrYuo9Y3oJ~^R3A0O<&0vq6tE88e$8a#!&jXPi z7GDXQw)>pSNZp%dHg*eUCup=!Kr7-FSq$sh(Tds}g+kO2*O&O~O=-=sV+p)k2^o47 zx~y}nhrx`sEE=y_@&XUl4C^U-fs;)48qh$%ORXA*Z#liuv}Ws}EE4@D*nm6$>YF`= z{Y`^y{ALj6?p(2BM0t|#aM~Jy!pE^?t$t0T70(F zP7k{G)6q?!e;nRA_Yu-dn27!d?fv%=yh*GRT#nS>xAA`z7TV)349AXEX&?OnDMJHl zmRAKIsIZKf5x0hUEymk)IP$=WfObp+AMT!{+0i4o2K^~_;&>hJ94>h+2SRM&Zv*Rxl%Yjq|r(e^WB(OXFtfXUG9yCor|%(A*ugHi6o3UyIlwSd22d1W|%bt*dNAkxvYSJhn9^)-aDN#odYk5 zrdubH1VAyxD@#2Z4||!n(RlXd)trifDioXHe(CA(pFoHnrsla*y|SgMh>`ozGEIQU zaqYAk8gt5^)e!qliZ6CES`E6ma+pNsJ-vE&lX}P@>AvincV*lXpV+dU8}SKwAG@31 zXP4=9Tyaz%7Q>;m5*uA>@jL99KP$7#UREhm9y^1q@9!0lU`Aa- z_Jv=*zWX?}E*riwB%7{8I49XOfS+Ta$|CRy)Dq8lIjNL^?vvVh#*5$auW!aY0VI^E z^*W#%2Y+imV$tVE4^(?NYUaj%`TrK@wmI@7i7Q9`igwcut%HlH0qQKq zf7dL5K|cJ<7}UAQRb{D_(}mtwl8^#zntKbn3rGaubJdGa+2sq5nml#a-pz`C*)u93 z1X2AYopD}@xwOHpJ3(B=IZPf&<>WGV8l&P{l4M$&2DIokC2LW7k2&8$ViYsY0X13i zjD#iL{!=v#;kI^YH>Zdf)F_L%G1X-O`t(`%BQ zK$vsh-7mT^bbQcP!N|Wva&3#gsGDh887&_MY!C1UH2iyW`j@wlCcJ8rk(r|XwVGGL zMK}6b)!~hrx~5Ku`W_A4NSBuH!1jU4d-5JsR(Dyed&?HcF637Ref<0U0C{xu_e*A+ z-^?#HT^UEg;=m!lAkf9-+atEN4_rvoi?VnIPH_@gJ&M{)`nGCjt-Oc8XHepgKOoKo ziAch|`g}BnNg~vGs`Q1mw?y;y7JX*Bm>>95cm}_Vexm6>T^X3>^H~}<7=+5&;Dq>Q z2<8Cc>EqO3fz=r}0kHRL?>u(~L)ZCC?8`IK^lWbHUM$>#t}ijnD>5+rv6HRF{)*Mj zJ4Xv-zn!C9uk4m6fvM?kRg2#hbqta4I;6eUaTs9R-y@=C*(}~x?Cw(~GIYL!)(oO<)%rJ2Uj{sV5ULv=;P+1wK{n z`=p<(bj3+jhl&`Pd9eWxj9a;0{757+b~%X^RL_C?C^WTrv-VD3*GDia>T;{R6}^vc z!H4G!s4)6TSd8^z(~L4><5?=5XJzotoC0sb?m^}RMjIL*kw|9nczLhv9!m?o#{{S2 zV7e3RlIjX$<&9^!Zy?+G#$9R^9dBG5ZJrFBR|Fm&AFOl*AVqm*(?edYvuSIueot1- z2R&yA5;FwG+>Ldd-VG+Jar>yUlGk@Xlv~kuSaOV8d8JT>UIab7r{gK;)EGjDZ+Xl!QyFsf znG8dsj|P!ymFaP;lu3l#<$l*wtcY zo~J5S_M?%Cci}VH6D}HmdfNCf511gVjF6S1vUI|&)i@1Lf6A?dbf*i_Ok1lLKFA1z z>T3xc1D6&Rn?5l-JWiLs0@!i?q;7sQsPlZ{{8oF+W-YOAH-8wznpWeP<2A@SoTIGo zFxcKN6Mi^_iJQ$@n2bk82l2((7~l_&JNW=R3pA+2?UxSxsxrNWeQQbLvx~>9&>R$P^64Tq@|M*imt1OHG`9FQ&U?SGkhGSPH3%!9husi8<=h4lFiqV7mRD*L+JWh z!tt(-Hr7CK+Q9ZU5RqZkr71!o2WR&?XWc}7GJ+RSBWI1heSW-ye3odK&e3c*Wc6dR zXL7O zOkh9ZVe6iULqOP)k^}x?h?BwNgKWQle@#&+gqexyBp4CoxxYkUC%$<0*69B+hTpim z>p1XGAK`3K0VcvlA%+*_P1t)-^zY~XdE@6TjGcp!T!cLH25{hN$+(VO8U@vLa=xlJ zV;*#8HJ!vLiH46`fA$ovo%{WMWs?W)DtxnGj{r*0B=A6&tNhtcIQ-(kUGVnm5bs^T zIs}7DwQ1Z85j8Gd!55$T=W|Uz`Td-_@qoF>G|!$<{)J|`8=rmkd@Jfb$PA&(AX-s0 zV^IVAWL?;K$FC27=otrG2c8rlZ|N%2=daKmem{fh#ZHX=JP3KU^R53pV!9Q&^Im@* z9zU@2Vt*dpJ@>zVc=zu>F){sjaBjteBlvLt|(D9Wz2=c8h1w2=m;e2mAaMx**bTPPS zauu_+ijwJy^yt6IV>~eN+vU&Ha(e@KHcM;P6NZv{@=8=TXLPIY1(d@ucO>dtZ#_91 zsPwUeDdC9y2_~kW?R$Q*E&;c!4x@{jnVbjCPnYd4v;FFV={xDmTvc0s@58>v6JD_% z>9HLAHKHH`?vjpU-^_s5h6shwD_|-@A#;j!acV$p%oDGSwM#*_%)p&%l4Ne$)dVgM z;=q^Om-5BSoDD$dvdnvemsSLP#K$n{G)eySMR{jqi2W{8Qj$19M}aKGC!Vs;lwI*> zOP5bDoj}w9%M9Big-n-x?NX%pvGrbUdmgIPk~{W1MEGLbtT`x>vF&t$_Fmy`a0_LH zLQFy!e*S@vM!)F9ZMWPZ$D5ARokRxLr%b7A`!|dM^SB)i!+T6_b|B z>A>_@LH?Rz#ARl&3mJa4J)&BxS)b}F&CSE zy}vc4ty?}Lt;+DwZ(<`a#mqh1m@YIfdvo9`W1#P2BLMyg-Tn3=X2YY>d8oLHy0Yno z;Acv>qnVD;YL{}7&-a{(Jn%Khl@N2_Yq9cXLi}Yc2*#td`09?UtMw5}Rq^x}l>l@6 z>~{HSINA=$^lh)Af=3;%Q&*LNi+l1Dj_&B8w$w$(zUcrCZO7c4R=WH<7Df!Dn8iTh zenf5_uB)WI1-iHkp<%I^?kdG}=Tu&gjnID{gfTGvYbHCPSk|xVXyWbCXkR}3GV9vB z@plfKGvH0m!O6{O$n1p&dvKTCt)>TpIk&6S@p0S%WyaU822uu&cFTP|4ba5t>AjMo zCS;dY&|vpEa^x`DlU3iK`+`F-wu?|M=c-q%PBcF`7_1 zp~5aAdf$h?zoHE2xNvWjfLJDDUeYH6j6fQEY%Q-%MZC9?gtR-nB&;Nvzr?`klFVrm zd7r9rPamJWaGuO;l=nq9-X2s0KF*dqXYyW+MhFFxx2jc-k(*GQkNfmX%wKS}(5UMG zTn*(G8S@zms0ky5*9C(&9+5@98|uil-P&D#1FD&>lCOc4Ouu8I#k6Ke2-0FIxFd3f zyn0HoLqj8w$yj8K^I!RN+vz@a2@EHOsRg*iob)yCP!7hGd9=$^#(mtf5hM8c=XE~u z+y3oa33Z}O-LSmD_5VDfhJR-Viyp#5MLz+QJa@)o2N=5e1b?{kPPu}%7`z=w>*@hc zET>9f=ASv&4w`#Kf3TJ#1Ww=WyqgV8h*7Do){|=qLV#ziPlg_pNMb*}vtF>t7-<3d zXA!+-O|oQwo%z{iP^3#*{pZT+<{#v*Oq$DOyay%N=*9AoiH-5r7LcrmsB56!4%JqH z1%@u4m3WKwML5>DqY2o1oEpk(FhMCVQ|=Gc1cDnBhe*m! zfOS9c9`wlA*7Nt~CSe$cbr0}4b+DTBw_qYF1k!G85^(E6#Tj`pS*B#~`;O49!GNo+ zgBk*}R^?6K)DG?^UFi&k!efC&!0+oP_Xp%J^`4c0su~6PF17Ix9Iuex*1=BXGe;x6 z#%n*NAh?SX^4x?iYAJ>u1;A3?3uesY7e&0Am7q15tX*~%wXVrvJ3<=kB?rP%04ta9 zc;m95VVKHIs?D1f$omH9gn~B5Sd6@&m0F&+R`PkZv~E4pjdem)w&$YilzZJhqE^2Q zbLmD-+il>_Buc@-!1(}nUqSMq zN4Gr`*Lh$aL{gM~NZfR8!2LueNc|60;u3OQ&{Snf(rBqn(wL7Xp5weaZ@{picKAGY zWVr&ve>u~)KB8MOM*N1oO(CjyZ-aaWke7mdElE!)70#}w+G5wRP2H8Jm*)<9R3CA* z{%j`Uw{Vatgt6M=%4f){7{~CHd-TXn4e~n46h1N*2#Lz>+U!wSOk?qF)&bJe`w<1(FvMFn3gZmB64lZ=;%Uc$& z`*Kt|_N?>W@rNJS;y?r&Yd`DtT{E>fJ3^PQIU&!H@OgPWGW&_9Lf`0)jsI&1^tsY@ zPHw{TMnq4E_Tah+OSfBZIFKgq<3|zk0IDWtUGe0IP-?Eu&olk+cLk=UoO8EZjxwL6J@MpFd4A#_1? z|JTH^@X#%^c8?do?Lc*OS)KIAgdtg^JSbJ zfElG$YP~zN0B?n@&TVkCfA^9Q$zAe>GUm+RJwseL;sW&xue8r@e#SU8$8plsYD zRZX(!p?&D;FQ{05Jnf@pmKgZ<)AC4H^(oShkkT72?J}%IcS>m;&Z(ym8{&zu@TN>x z`2d8y9K|Iv4YsG(VuHNxn`wD(r)Q((KrWKiarUz*5R#+Z z9c=>F-TX)sFv$*46(C+GTx+IKFU@ zx0i_iQ~ZrZ_5GV3pd>+G>d$O}xh0{{P~Im{2WRD*9z86)hK6;QpJow^sQk-YEm>TJ zyJF`k>;HL_oO%JfK5RAr-gy`i_if16O7XeJ(z`Ml)uqwcTbt!xU80qew^%FL?AhpH` zE5s)qiG~)Wc|=AZT>)0c!Iz8)Z*6~Qbqr-uHM4Pgz`fJ#!4J2nI}4RV`Mt5QOO0fS zY!R~Iq>h?JGpSUi%VX8aRavls-*A{DAhE1i8!8kmUExxP<@VZKZI7T}tO928e6aez z&oAD-p5kItPuQP93Y}_ZVw!dtOhGU`VJn{8-A><2$FQvUuPw+N0gAaeqL{^_h{uUncUsysiCl2O}MVOS1M= zzgz}Qr~Aok1Lu-6;;WlbhPRQ5rZO>skZ|%O;sX%;71t*Ow@m}R-Q^r>9`XflY4%!9 zWkOKq=Fx(@g<|iIsGpS7uIqD#^Q*688nu`rGSb9DUz*VeYAS;b`_L%nkef$DFB*r3 zO>c>I7_y+cSC7O55)$sIu`9FRGn)&)Y!M`8zAjRaHB+Sg&--aCPar0!VbL?MknjuI zjg?OwvcojwdGdk@A=$HKW+=S{PYJp17kzc4M)qCGK*O#fhA-SqZSEpceT!399vmCv z(O%cU%u#6H(q`;QVvHLJ;8|t}NJmzL28vk|>7Ds@3zcFHLF5m)(O>_Cxk}8I>_8t zAVw34+e{D5`2GuwTSOljC(kwVo7X&;a5=vv#+y}+nUn7mAiPcNtM@*!GINEw^nxs4 z$yr0v<>|_KPX}=ACKDs=;*NUl$`u6G;|Wm5fj)0Bj~Wwroohkj4+Pscb|53Oy@FAnMt846JO zEV~?PJq_8bz;9r&zW+ISc)@z9MJUxVPaj8`tS};IWAw))!#Yh zbI`KRYIB!?#Tw*O%GXGx#4n_0J#Fo5N^N{O0TmkxN<+K@3C+d3SG0R5{*KqyJ1=A& zVpoLN)OMy@+t+tX1jfkJsCnsRd+LpoDSPaAe6E@4MtwfYdl&b0S&TYV1SU6tty|jv z=p!|njLwekyQ4u@ZW<^rd(79c75fDkbsq}^as&#bPID?yePQq+Jvqx~wNi^`NkJ5? zjxX!d2_}5+sw{tg;bCHemjS~ITUw1j5Z#?I{gGH1nospchLE<-=;r7J zr?U844_qg#Rnu!va<&j3FKd%E_OMBPqBW~Kp0~rcM#{&_Ah*h*_qn>->2NA)KfSTH zcWyG7MQO3jl*VoDPfz*8rc|Vte_f4m!eAWs-FwU0-*}AzhW4Tuec&5)x&v8yBzXRmY)_iq zhoa zWU-1OP0D)R(suD)ubp8EULJYJ2C&nzcP|F?*3-{`Q_)n9+2HLiiM~4lnH1$wT-(cZ z%_cXKDWk@@I?E5NiWy&qt-x3sQD*5Wp}bZ;eYV4EX`myjhz>l!cJh<6nCASR@=YYd zdUas6srqQ;h6Vb&$!^LEf+7+sQy z(Zg`S>r%{DyZW8`B@orYkL1`I;9Du4mgtuir{{XlU0-X=i22 z2+QzeKLDRv3FmVw@ArvP;)(G%<0bAu%I)*t27NxS7R%_6C{~W%Vo)O|Y;h(O!oHd2!>JFN47@i#s zg;wGxDp9JUe(4x>>!DKxRc=<4@$Vlzm1UNbuO83$B<)CfFzASqDSDT?6 z^}s&#Lh&5-TEIvLi?fBfi9_9GiNhph+}8m&P+s>A_TTdYZ(2#kEEd*RM%Mn((U((Q{V z27BNpQ>fLcOweV1=< z?&Jp@DLh5NxNCC~@lpWbkviY? z{~33?eY*$mLbjpbfYwz9@`4{}hWb@Ln7p&l3Kj#}5-V69x&`x2!rcSem3^dZ8}8|M18`v{y-HgjRVXu@-PkeN z^o2~s&VM!2GQU0Tl$qa@Mz`#;?K(hLvSHgV+i!bD{J3xjZY?MEO}=}fZr|!m!f`8X zckcYrz?g&!hu!K)33$oE-Ycz4{&Aokgi;F%#ME5Zv*;fL0R1^(yBMRgz1}O+?Op3H$TDMYK{Y?9IdW=5#+RWM}BbKBfI5TT0V(* zk+SFEORtqKR7OMXk=7E+!#f$x!`XuAb5Ve`5e7f@J6CxqmYs1o=O1ei>Mep*O6??b zV&C1~KF$_KD|LPWFrs_8pWb-&w`v|q*(XJl-`-e;boh;V<3@$KtZ|(R906k%aMzLY z>{@u4Isd?!%;0Pnkj9VXGN3E%Kll|M;-#23z$%~7cTilcqx~CRqI zMY5|t{a~nJ4NaE&H8M0Z8-7z>=Lc)sG1H>7tpE01MqW@pX?t!#(QQ*^r;8K6;)iATD&c7Ay^{ z`-TA*Tr6=Q?vvaxkizWcq|)MS}nVK%k+A0$8EZmQDviJGZ9_QUvrk2n$i zH-!Jx`7lT+bJ_ehRIv1MDr_f-8N!;TBKq`M>StEFbf$%rm)7e;hB%o}Kg7ZB^%t3# zXtuk4@np9fVL2^oJxhli;m@Ff(&#h4V+;V}E`9S8C;+3v67k#(TMT8y{?hI1s7{EW zorRiV)8Cofmo)||q%-|0FyIMsfd4ST>nmg^CvE$%|4DN1vl(r=6?7bZoJUiFOs&n*5DmtXYM!Q+!;hf!_6 zQ34xWLJh&0ePMiM@WDs$e>j-GD7fA)qxJ?>2Eq5_eLg%x()W3RR$q;FQ(7+#KyNGt znA59zm8(<)zko4=09>py71CU1p)pZWk~(Ttv1GwZ^mLRb*K9eeJjx z!4Kv8=yb3OS%dSY^gOj*gWB-MRuOH*Ly@TF-777-IriAR8fcWJCH&#%|M_&+A-=`PvEXuW@===|DH4bil=XBJC@#d)as zzsWTT(njP)pQ2{G)R+hzyM*Ki0BiH4rtm9gF_0Rj?1JfO-9izTx>}=%B>g ztfPy?CCEzs2eY76e&HKvS(Hr<^jdziC`_;$1H;JBr^c|RMOg2<4rDu2)-O@e3K;r* zgQz-le_QZV+F zopv}-$(Hg6M;U8$U3Goxt(0#x?sWCW`f%RX&snVB3%I|Gl#zUr|!crAqu6`Ytw-n?mLE>n@ndxFO;2jv|R&=+Cp{c3Xobe znr+2aG%GImF88LJAY@2>w03AIlCy;>Ab7@+7*)Ixa5F65%W2|w{jy*FT!~}LAgLev zj~u0@OOc(QzpG;Gdsjw-B7_$fuk<5`j_*-gx?Sa zNCp+D{!baJ-J5Qh7-S%-EtR-d;$o5SCARf|es|U|9u<}GMgkk!La9}=ziy_5$-9KQ zT;;O9U{xDX`_5oMIo$XEY41DZno5_(ajmGh3L-956pagtg{E{-KoEk85Nc2m=^!X2 zR9Bk90xBTAiGUa(BApbFrgWr*5FtpB5?Uys1$dux(7n6&zW=Z9hyU;9lXB)fWoDjf z&&(X&eK$z1*-G}M5?6LD*vQXfgqea&S!rs^M7{w9`38#Q<5)fFQ~xGUP5E?RU5ap# zm%Gre_hvBDZ_i%`y&HL@=AoyB^#b1E>=acpU3{NIq@QPH8Vg?(l<8rLn3f-P zb>bKU&0*pcn{KCga0EiW@;afC&Qh3t>m!wbKEU1J)|hZYc2ZY1E6J^A-sEN_$TV_r z&p#UuQpM|+Ylk8q|D~;f&vERfx~$iT)pP+edrmjJ6LeqDimyFvKGT?K)h-rd(Ncp= zJZX&|rdg*MVT7y_oz;e?Wm61;u9_+Qq1RU%$b+^{*TTGpbd|IY_oWp6yvRMfc~c$b z%7x#Ur51-CT>T1iFx?ip=QT%W87G@^W<{n!8q~#QaEt7=k;AfO0PD!_dnv@hbD|RX zm(zVe4Fp)ACNvqRK_b;6;`n#(vhP1wn7L3xCxebG_dZz8YbLNU>v4JVJ-Y_<#Gk;y znNaqAvxg2^b^Eza&Vs}RGLtf2*7_IoPA;_3hh5%B>e)UFl6@w8jzgPKhU~+%qOm56 z`r>AOYrwqZLC1dA$vIj0DLobOM*?iw7K&+2wjVR?9<+~V>tX}u0aM`~s0r|*QIq{6 zOew1l6#5P?#dFI?Gg(h8Bg9~=dLc_8S6c_J8B3B3ldA5IOL}Ns-;y^npocuD2OVW2=0_a(lJ7z1}34y+UJKP`I=>k&h8_@`qn!t(&(l8Q6`P?4j&n|>Td z+0Rwcw^%gNZ-KJF^2ygnDE^xT#VcpSYxm@%1o8ZPLKp~?eo~7IxyaMv@~TmB*lRFM z2Dz~YU9hmc$WNn%+sNX{dwkrEzVXaB!B0)Ay@o${WK}Z1`*MTOg^4TyBUj$qZE2CiW@6XZ~ty1R3*m|e3Dky zA%ynfjqpZ4AqEq}n|#On!Mz$_MWZpU3iPs65Q^^-p?*694ojTd!V1j|`yB`!D^W%P zuZhm#+MAaP2uVc<#-`)Th-K^QSGhR#SK|N6>fDE@(bDrjYaugc6{1Ibx9B4ms?@u5!i?-t4+mXfj93+Ec*_fo_2HKumCr|K}JrVGpu(fyf zS6}`T{BMWc;)M3k2MQ z-xNi3*M<|n8=W>`0wsi6CjpC8e_ipK)(=~>U@Vc|7m~rs{1|z(n&7FUbE$i0Fkaa!|FnU zWBjtdEv!V?pGu360zm?;c;<6ik3+npw|E1q6GN>o-pEunWcCo|+pa~klRB{|8B$^O zhcQ06{f-C|ZnvqgHtD4qKzMS8v`0BIHB`4JU85H7)lCA;cB0oPb{+a|3ZMa3VTsY* z>#X7vQTQjobUKvXxHsd*Np$mv&Sc$YI7Bl81+{C2_KX?%d4RBX@{@}x*L#A0>LhJu zPYK9FeiGJYo1w$zHB3H?cG$)c<*9~mB5JnHoGFve+|9)EdP-><`%^w}Wq4W|7^|kV zeg4zoYv`wK?-QZK{v~iTS$Kmt`@x$ai{-@{_tM>N%2(3pZ@oDjDa}^E;{PiuW1ZoR z!JorPbXAyO&gxwvAE_Q>Da?%E@rV-g8Ae($e#FUutqPi5 zG`_YGa+}c_>53i~?-U!R6%)tLem9YCU~l;TE3vJZMT1&~tZ5ueAla@Gz;%hV(X-ho zpS3yXPXbopP(i+yCGHY++hc8uz(m~r4!e|wRZ-ejaGRM5I{Qf*EK9XA6LP>^Xz`lH zb^CHv;9u27O(*|URhY~);-X6@Bp7hszz%*tk~fAgA1-;j70=Xj)wVY)1aW96aCuc7 z$KtKZ59|LoRmF`4H3LR0kQqU>zGReVSFTj%yXMK4Q%Rb-CM;=ifD_oVIQD*!BUMtA z0@7uh)%KLFuh7NH|P*bD4-E7@}n51nr@PhmjhK>hha3{ z+D)@9w1>F;yWVP!OrWt7u~Q9u!?!?ZLsU|mtsy-^(I^z>RV)U?^sDOv8=3U{lR@!p zOhWPHNMX-1+d~}Qqh;MRHvv|xr4}qxP*V>N{fO20*5`#-l?By51yLG_?VSRq0m+FT zqiMnR1-<6YHTj9}Cv@Yb8|xD+)8_SjIwjL?X3AUoQ6=-n;?RPYF+_FhiT&}UonPl| zp5Kyln|PDtcOaKAtI0>a*IVXVNaIekQxK#&JqK>rx#3kpLzjue`>2A5;kcl*+0&@C zZ(p()^&^~6te6V5?+c|3^HJiL3O;4G>iaG}cTu7YHoyUzAgg}`j3LP!TYF2m1Jgyf z=|L|q07tV+pJB(nf=KZ;PuI6j;JtcsBX>;isy-Ak<|qIWO zcylA+j@FxB;naK`?9PN8Pou=+`P&!q6HM-V9B)0$5IFf!A1Bw0xsD1`40R{}{fZ%Q z7hQNmtl-5$0qF9@LQ-u8oY#{vdaG@^Ag|an(5-#kcCv+p#O`tc^Ch7X)_xB<^-$WR z!n5;(jwGc}3?WLu8z;663f$Y@EAN zl@9u)v{*pVWqLbGudj?XJHFT$dKSwH2Z=9j|S?ekKwh9N;8nLqBFqbE^lux;eB270_6czaIB+}u{jwX6$Eb}Y=#2ev6Ey@axcdaU=kiu92D z>8=ogBZu5tH7@z%p@fah;2m)f->q!O?%*qi==|!#Wolu0d%4Y7eX-01BEt1{L5~4# z*G5?1;+6?lr-qCew9#r3GsipAg$^z~lQZ*nNc#ekkOy8~ zruJLB%j@7k538GjOFY8toP1lE6BLKqj(ZpuCpmdc(nEh6akq~D-M3Ys@CB3^jC+We z^glK-2{fcV4pZR4xf~sex693TxO~a=;h#nGde;SV5w@LbZMrDi25OC~>h+aEh8FHC zbZqfjN31KzQ~p;(^l&w1Rji#4SlN zqebWRKqmp;;J0?&z^SEK-hJyINDnJ(KK= ztKR)?y?+>F80NAP^pCd;V3Mkj{n|X(7vc=e8#40%m*i+`EuBT2d%MF#MSxzEx>Qsp zXZMRi!CNIsMxRt7FgL>%{nri^JZ}3!ea2NW;Ox`@!bJSu(f#lC^IngYS~_gE*VP}j z{QRhuERX!Z5N;_r2HC9*eZec=-}!8}j+p^|Z;v*)Iyn?|@c^f7s8}^gzgw_;d_r*y zyML?4}iMuPN4f;eNW@VxE{nXg_D=8#dgj_I~v< zbOCC2qgI}ctsxkAO7k{a+yxV~&6ME1?pdBHYo@x*Z&cL3FBpouKBQ3IbisDVnH54~ggHwQ%-+m0T~pmQ5xqi#mDe zQY4$FW%N|SEBg;R&suoBC+yR#9bOC|vB2C76tlA{itY@@t6=5B1 zv10SaK5ePks0Ve1NXb%=HZN9AwmM}_nLmv__r{GlHJs_hA!c1+fHRt^k|4T3+9fPb zx%GD8TBBO{^p+IhSK*6sD@!2!QvfW}CKE*x7^FqbCc4duAugd??_Q@@^b!Lo^?Gf; zOGesh8aOG!mltj1=P)1?hOzI0RE3SK%&^d~m4F!|$q2Mwq@pI@wya6EJmi-x&;0yP zg(CqvCab3DIn*qAN*+!NY5-wlIqPGZtF5+IU0=*6=}zLVWjV!-x=MLYwt({LEZVj& znyyLtXhgIo`IX0u8(8**jfLI0X-#xl%+N>Gtmz$NWuhDQeFV(PxQdU`HCjn1rt(f7 zVfO7C-897G!rgjYWAUS%6;6%HT6=x=sOt!iJ>{OneaY>Q?+_+N`z5S1Rw_ z8-gdN;-J37M&Yi8+lKD!b*(!8Ij(to1Z% z{YNWi<`iOnt=k1OaShTmD~zij!?IpEJ=h2QZE$s2dG=67<3xSB{erE3lh|Z1vPv~u zDQK$wh?bAu!f=C6C%8tmi(j{7@?lq`ose^7DJw>=S@A#eEU@o6AvsfJ4wVnERhTsL z${T0TOJ*gnh_$KG+P1N=LRPj4d!GN0c*ey$SRl0F=Y{^}=L~L(AC}+K9(i>5;TK(5 zwnt_+{3_boXNPNacbh7$1~|jE0CdZ|`9*`+Jv&;)=Z(sti;@@O-Xk1rZ{H}@URy{d zQFB|kYM=yOF^meWUT}qb+`#^4CQs;QR{w*K{f0?slp!(_w09+|ZF$5Uv0_1hF1f~} zdO=$t1g?C&Z0*4_QjSscue(ubOh#DH^Et>E`R4+B7l4VU4JD-VRfPNevYSo+m+=Va zo;(Zn9KnwE3aD`CMixk2r`Lf-bGGG%g|?kT;GQfZEc`!43yqfdVE#ubh2q%Vo$t?- zjUHW-t&X++De^6aj$eKl)Pz`rIk0#mV;m13e;o03@|0K|Qt$Wk385s=?i6K~jBB z)9vkyf5TQN@IhRmWXFkpkY^Qk-qvl#=ngRX_uk%Gu~&?^ZlG}s;Rpn<3%GehD#hKe z*s@croB_AJZw8%A#@Z{rr+EhcxvNJPDUjF$8M}!DfaOTg9Jg^Dr1yj05#IlP2jl+FX=EJ-?dkcN{DSk`vX%H zeR^b7p@ZNa2%U$D9B$-bZcYxjuCA`eYk}_pk(F31R+Wf8lbf46V8#Ui9Xa5&86Qt9 z;rQa-n&s`4bl+z_T|FYi-`{@;wG*rxg@jI7zy1XUh0`x%VvPTg3ePQet@H}0S`DsR z=m3M<=Yx+a;bxdxy6Y?HaICvSrPT#R#c(A-@N{o9ycV$o=3|wWDx5c`S8icDyYQjl zIQQ$p`#JpfzNt%&{V9xKx}U)H*?fG;VD-S*`}b4N$i;#M&3 z+3T>R*~$>rSqtJS{${0vL>_8yZ?F0K)kKU$dP_qjH#IdaIfDf%o54Gq*SoM_jO~0e zdhrQ+noM{I|CwRDNFzz~VXdv{lT4tH%Z;uIDu&Dx@OT{wxO= z%yFOW)BAR1W?;a4w$xLAd%!i5D%DhKcFvPjrBx z)MJ}4?9U~_qlt}x4$hvQytwi?z^6v!3$*#Qif=R_0f8DA_%sZh8+hBReX%#lZ)2z~ z(!0iagHg%j7@Ra2vSPDv?6 zKA7Iv(Q%7T0Si@@fiY9|;r;t()pc~OlG)OC!VerAPGbbgakhoLIPf*EM?9R68X7%G zXqOIuL5|DF$mqg5H=Hu@5>Sev1F|9soM2{77qv%d|U?PW(` z#G*B4`SEdpePJ*d>UCyTR%Cy7le`!66k2sBv6gvXg%6Bj4sTw_<^KI=)wPcIEG>_t zRbwinn;CNx_bT1D0|+4zcw@rE#B~87p)>JK_Xr{4f$k@Qtqv=Zkz6E5Xf7RriMP1m zxkB!2ks;Ibab!9}6g<(?f>^HKXKrpzcB`2Q%)lYx^`RBo=dlG1{A7ys>q0UDdcXA&K1BhdeWF z-bbN4C4*_MtHAhBEi}@8Y@WsFqkN=Lsn?R-vkVOkp8N|yxh@dvU&USNeBE9K5Q@RO zGCDr~_RTHPx(Cye;M8qyT@Bj$$x?K#Ute!;7`fHT&dv@3pi-#}NN{NW0GJV{T@Wcs z`10jTSN5G9^!a&73^VDTo0~KmV)Qzge#d1L6_W$1-R71UgC5(ro`;UZ2J!(0^BWF2 zl2;)9dc-NGsEGWhzGu%K4P|>7po$o~cf8Zb9;aQ#$0a0$q97a{g>a<&6pVCy zOJ1+X#`Fx3Z~!8U9T5x`a}ohDL+a~Fy=LbN6Owp5p25509U6y#Ag0|Q36uyg_k|~O z!jN;HT+{M0h7h!ce!OFPa!U#wgPUlL$8Ev`3z{(O}HiufPB zfYqm_=srTy_obx^=#S4N6Pmi*XCyY}XO~vJRgUcQ1G)B(TwtN4IXWXs0f%^DlNE!q~^qwluvetU+kao`4k7R){Q( zAqN>D%p_Wj7XV#XgsINH!1)N{DmW={;(2i|Ym~mY%?sMv=9*6??hD)Mg#Ycg-=3n* zUinp;8Tpy&=)2Oi%GeE7s|h;*C)4OV`p-g#vFe$34pZbQVe&hdlfo02vtUuI%pOSp zW3Ym11JpDjNEl;r?-&F`E}wV&J05Mlz2(8*?^#(P04iCXRT(0)MF}(?YIHA{%FYxtb;`1lP5@j#F}n16X`S2#;7B)nLtp{2 zxkrso`hv)eTfAEO0o1GzY7o`ny&rgltqEW;n^b_g=Jtyqy%0!0$%!$gKuhLA_5qtv8f3#$}^>< zuDhHb)TRi6?-_VmKLr*LQCIqq4+-wL2`~OGtX++!7s8G? zWn}}+!@Dx1gmQaPLbXv`|1P&F|E@yvFSQ$x2W&9A(?mx8Wcf1F0Gf?<>*b~*dIl>Q zXJ_Z<(D3Kax0NZzuN(Pvog__f{{!%Q>&O&$R!oxz#5>1fz1aGppdbotGoLWgVN<@= zNB#t@Q*lA4eRI}Li)$F1cXmQ=Bk(r}A%Z^ct};*YN#DI_2{pv3&B0)HogpnRFGI+H z44AZ?F-_P3M4vYT5(DIQOA%OoJ%xo2VYktNh7Z(`X291u0B z)i6R7@7mgmf|pOQ5`ewv!ENekqV&7stP!ufT$9fFp#SE~h#%@b`4_aI;ZxL?46~J4 zYfg83+?f`+wLNTX6~XX~BH*Bbtu+CA--BDg8{@0Mj_+;6d5_&8K!+Qi5V#b_o`Syu z1?=qWD~KCB-rU?AlCs9~7nyR4zi;}`)k_Aw6F|dC_KZF-e!z%YIyyX%JWv-QNMP(; zM4=HnS;ozTIXVFwmz02dlcA1HK_HGUTDyWa_9037ZpMwD@!>PB45Qd z2S>*f0GQI<{e;ZeNLC`tki6E|SWXYb7*GQYkCaWYK)VpDd-nj7Ov+RIvuMc{|-pT2c*fpTf#W0HHjEtQcqds3) zGk`nzb_O#v!8=R)VT&kSr8=x?*!4uB=V^RrXXj99z;f4GaE%VpS&5w_lo&y9!!1<~ z-Ta#!DiCNF3~b^^4@{Dwq2cet3pGvm@_~bSHTl!d5$dmkhssxKc+~raR#&}hP+|`l zM$nFg;mLA=3gEG@u+Sg?+xZDUGpYtyROh6mqUD2Qny4GAj*MV4udJn-;wc^w5?!q^ z^Q9-5ySRMdeh!eA$_Eq0)J~FD##88i?EdEw;o$?F6rd5$hysIh87GmRo}S}=7P3i- zVT9x!4`{k@3+=9QrLVjD^Q`75AdI=Q^SR|lV&lh;mk5wQ*#m2ak|N;giRd%WfAbtl zL~d2`VoubO?<%Drbdsz8=29fT%gsIUs2HPP(ueZD-mM0;zif`Mp6ORpDF{3ET{{!_7<4*4$9=3% z|64C%O`fspy$J>%&HmaIfj_Ds`>@a`=M4}Y5njhD>xL#LCjn;8FPl2ae#@Vln5b5Q zJcV3sScaT&b9aw?Pr(737)dK90vh+* z4SuFf$EBn=5&f2CX3nm2JD&0my8j9TY`o>twdAp}u>lrKejO4ksa7x@e7KQK`;H|m zrU0wZ{LY;;ZU=}QW+Q=>tAW4+HbR6{6*gbHb}i>H-?ZQmz*}wkA@KHB*p#kNmiJ{{ zc$!=lzdx|5v!08Ks|NT@VpoINH{=LTGV7~Vpi;|oKOzP!^T?)C9}6M~X(sGGs7!rq zAyNnsxgr%-FMDt0Q|wLM`9HOu*Uq^4JCn&APzO)hd|awbyy00-3`2K?i;|v;WTifYiVg6G&VNwV?bgm2e#+#(*qW_ z0j}w)>$yM23m@ zz@F%@X9hn-7?ag?baaY+QtmJ1*VWaTySWv;>9oypUk)mn@BtOhY+o&5Ivd(aCqQ8+ zG0xx(LP^P!4M>>Yz03x574-XWs1!!S|4-p&hM#SNYTRdKH4SKM8mh=Exhl6G{||Qa Bq}u=h literal 0 HcmV?d00001 diff --git a/app/src/screenshotTestFullDebug/reference/io/homeassistant/companion/android/settings/mediacontrol/MediaControlSettingsScreenScreenshotTest/Media control settings is loading_tablet_2f22c4ea_0.png b/app/src/screenshotTestFullDebug/reference/io/homeassistant/companion/android/settings/mediacontrol/MediaControlSettingsScreenScreenshotTest/Media control settings is loading_tablet_2f22c4ea_0.png new file mode 100644 index 0000000000000000000000000000000000000000..bc547624d3cd9890e3f3868fbbb95c1aca9bc6f5 GIT binary patch literal 20744 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 literal 0 HcmV?d00001 diff --git a/app/src/screenshotTestFullDebug/reference/io/homeassistant/companion/android/settings/mediacontrol/MediaControlSettingsScreenScreenshotTest/Media control settings is loading_tablet_landscape_62cae397_0.png b/app/src/screenshotTestFullDebug/reference/io/homeassistant/companion/android/settings/mediacontrol/MediaControlSettingsScreenScreenshotTest/Media control settings is loading_tablet_landscape_62cae397_0.png new file mode 100644 index 0000000000000000000000000000000000000000..65b80980ab1b039e309fde157314a06671d184d2 GIT binary patch literal 18717 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 literal 0 HcmV?d00001 diff --git a/app/src/screenshotTestFullDebug/reference/io/homeassistant/companion/android/settings/mediacontrol/MediaControlSettingsScreenScreenshotTest/Media control settings with configured entities and icons_foldable_c908f502_0.png b/app/src/screenshotTestFullDebug/reference/io/homeassistant/companion/android/settings/mediacontrol/MediaControlSettingsScreenScreenshotTest/Media control settings with configured entities and icons_foldable_c908f502_0.png new file mode 100644 index 0000000000000000000000000000000000000000..25d6cb4eac3e73a8f47d446cbe2da72398fb0886 GIT binary patch literal 53803 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 literal 0 HcmV?d00001 diff --git a/app/src/screenshotTestFullDebug/reference/io/homeassistant/companion/android/settings/mediacontrol/MediaControlSettingsScreenScreenshotTest/Media control settings with configured entities and icons_phone_e05166be_0.png b/app/src/screenshotTestFullDebug/reference/io/homeassistant/companion/android/settings/mediacontrol/MediaControlSettingsScreenScreenshotTest/Media control settings with configured entities and icons_phone_e05166be_0.png new file mode 100644 index 0000000000000000000000000000000000000000..5d009cdfb7e9b28e253b4f2918c58052f3dba070 GIT binary patch literal 50017 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 Yw1{S_=}TSwid>fq+6L#cv~C6c2f`&BF8}}l literal 0 HcmV?d00001 diff --git a/app/src/screenshotTestFullDebug/reference/io/homeassistant/companion/android/settings/mediacontrol/MediaControlSettingsScreenScreenshotTest/Media control settings with configured entities and icons_phone_landscape_9e00b29d_0.png b/app/src/screenshotTestFullDebug/reference/io/homeassistant/companion/android/settings/mediacontrol/MediaControlSettingsScreenScreenshotTest/Media control settings with configured entities and icons_phone_landscape_9e00b29d_0.png new file mode 100644 index 0000000000000000000000000000000000000000..848943fe550027db2ad3c4b02b5aab532988821b GIT binary patch literal 53487 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 E2Mjv>tN;K2 literal 0 HcmV?d00001 diff --git a/app/src/screenshotTestFullDebug/reference/io/homeassistant/companion/android/settings/mediacontrol/MediaControlSettingsScreenScreenshotTest/Media control settings with configured entities and icons_small_phone_66e7bbf2_0.png b/app/src/screenshotTestFullDebug/reference/io/homeassistant/companion/android/settings/mediacontrol/MediaControlSettingsScreenScreenshotTest/Media control settings with configured entities and icons_small_phone_66e7bbf2_0.png new file mode 100644 index 0000000000000000000000000000000000000000..050235b6ecf59a45ea4015fabfe80817e492ddb2 GIT binary patch literal 58281 zcmeFZc{~(s`#wyYQmBL?vo|||IFGXzdOGTCth}sDOiXMV zw{I9QF|mX&G40mhzYqM&u9z$vCZ-T3jT_gE{H*84Sa4rj*VmS&5aG{kBPG#^hc&0$ zn2$c~&FCx9mX#d4d+6C~JuUbAXW#c6O`a+5T^Ij&JMorz^es;^a$#{QRqjBugYm7L znb%vyJ>b><{9Iz)?%mq`_ai2zyK<7uhyMNW?7Kae{{85$J)AB7est-m7Sq4~vgP)r z|NX=N4bHzJ@c*OCx%eb_YdIs1xbZ_4!Nk;Z+|sN6CW1!Z-dfytJ$5dWjhQKmd@*?a zPTpTzb2i(~IZRAYCfdzw$Km)#S>%Ji%q2NnY=YKFlQ!El++-V%O{yYoIw!7iu{n_P z^(lu=y5IK~od+*AU0Pqk>XLQ2_i^zv-7U3ckvFnY+4%V(t{@{QfI_Y#;#EFmvOSTc zNU$`mMIgeiU%I=b&(X4b^UNt%F}V4{XhuJE@8jrzUB99(HYd5_tDQV1U#Sm^vhq|&glSMV;V(a)d8Ohx6Hm`anLy!0i)eJj_-0~cQg4(h9GH*e8g_}I=@pS~nBP6}Du zDyLl9zfVkNmf0`MX3w+eEZuG;It1Swg6h{{ayjGsIa#`fHT#ZfqYwE$4r%2R=XoVO zlAS3e7QFHtvJnXt+}d0WuItxR<=bU9Va4vZ$N}Madbh@?0&1?543V$?4jifz@zko1A2(t%b%#p$L8-)4ap$WcOeN|L-p@ z2&rtY#6??Y9k{2xXM4dHQ?jx3^8-gl&>g?@cD?>pgh3V)6SvK$YY~o13EZ9{kHKf8 z_FjT|@a>9%)WCTxK#bkInsAE z-;!o7^_?QTpK7KrRP~#Oi6Rsh-hQ~{$t9nUIFqN!%p}%4@`SzBtP{3hOk$Cm2Er>k zP%pUeUC4%TM)@J|n!}nRglViqdVG^Qf#;`m@qw=(fy)g-PI`Pi9VZy{>)oxCnJx&b z)YV~ib|`KUvps&xv+6aZA)a+FQ~9ss(;r>V*PSkZ+eGjkr&|==o(f`|T+ZY7mosgi znSy}j=r;NpPy}E$Ex1CVkky7C9?TwXTqYyJY4al$Ind|mrFK4<Eu(pdBII8pPa{MrX_2!bTe1m?{%t>z;3d~keQ+`qoQD~1?IfYpr(r%gNA zSUiUjYCqp{StTXf=s<+|KhRd^F1X;3X*#!wL3A=U7#FzR$XlGvM@dSa4(zn3b4&Z; zHxZ46TRwcZ7kg_?TXsy!e`Bemfav754DJ(oOCa>Up{|m#!dizwVCm7RvbyogloRpI z9Gl;xF6v;(lDcp$mY0<})CK(SCnGDAe|>%0B{x#Ny@uIV@?Ys!FPN!y8*6Y< z|N0}vJ$+$u%$Hc!O71?Z(n`5K7o)P}w?iVizdCGDfScD1 zreP-mNTj*B)2ZaAkJawKLB3O5{#j`=^~I^6;peLC`v+*dS4BD~4^G)T2?)i3J-MC22Ux3ED*!73|#YF8HfmBY2BVo$iT+5**xC=*TK#4vtV%ZSKd_$kFv`JU|N6)?I4dqc;%O<5?R^N%K zaIKH25v%Z9mdbv5klLD_yHP{a#b632qBc<<;r}z?Ned{^IlJ&Kj7VC&Xh+UJkIaHm#JbgK1TTyN* z)zgQC>#~*OLxZpg@jYtS_a?E{m>EDCPIlaP5){2ern>e?H;@u6c==oyMSv_@_5KNq zfTQe{{nD+AP0Kyz&8&O9?{`J#nYr2*gd+-MwiL*?-@t+7s2D#0E1y=0kRZ8ryrIQRKt)#S%zwM3^1 z#U7_=pUzlvqXYxS@sn?@?L`l|z8N^CqqI7B{Xz#g$I4XL>tpo;`0?PjQzLq7HgP9s z9uJ#27zY&`h>`FTBQ@OW7+h60JYhLrfOk~mt(0($g9Nu#u0NWlWp?(>DBfQm%oETP zQ2rXSTlA6CJ03MoAs-dklyLoAlEgGmSpUUYhr)_B8M#@E>cVBOkCmSVT%0q692)Xh zoOtqrqR|fI)f4g;+q&MYHQ}4^NyiFtHf%>{Yt3Mhp&~V?~CR z%`bq<+j*r|@yaMDhRy^SD?S5i)b{fuM@19Xyo6p|+3i-fpHJ4UI_0^oLd)zgf?X09 zyZm(KSoDd!UV!8lQCM!NU)*-!)@DzBvv2CD$Lf>_b12N0<7M!n@~>t$5ZmG%*CGb$ zx?79c07L{28s4@VWiN!*%@*x%+^#JLwNcAtZ|^`I+pDvmUn*Qp@)|?VFN| zN_B!Qs<4H!`EQ3!YC0hJNyJo-E)f~cK2R_82*mD-7}uP=PJ$%jj7DwNWZ^+Ij~^&g z85MRb!Do}Vr%rblAXh_#2D=_@{ftl<5iVOXa$H{nxK*AH+!K>BcEo(Wy>6MgKTJ#oq_`3LKzm%mN|BSU0Mgt5B`q<=lL8 zRAx9)aQjzB=Q|cbOL|JEP%+uXql*Uhl8Y(I#GM@>a$nc|k@~3p1Qs@m5h=AsHw^3X zRjSV1iPlm0Xt{^Ks%Pfo*_hJJvi$+k&-WD*M!IySU=aDT_Q8;F{!15G%DBli{Mnd| z!!80&FbtR5Q>apYIsezbV)MK@WPMNnR@wdrsvvwt|KVyb?=Y`k`L;E?C`Y4dzDxOS zf4@RQ-g_UFX-!_xO zn%Or*qb_`YP{C=#YBl~NPrh%+qa$l>H^fAq!%W$`j78O5!O5j0 z-YKv)t#ogwwg*m9a+=4OaSNv_+G0~zZBG0CKExXLjP|oubZ`sH{&9#Nb#Tu_dP_Fn z(4L>c+jOG&Q;q8=&xPgaC&(3TP7A%F?}KYc=37deMIMgYCl0;TC#pFP6l8b9wXzXL zR9Vr-#+~>si)hI*p{gb0Si)O-TH2;|k8y;iY@^Cv{zmz;_L}PG;oFeYunmx(O-FH+ z2rIc%-*NxAMC*W}fx~)RL#)+$Ihr#{QR+d@YxX;p-3s5Ax`O6V^3UY*Mm13)$8H=W zFiV8;a%L^2P1Cu|$qyzV@d{zizow7FCT^i_>v!~RL7k-Myl;1Vv2lxYTqJn+r1`9k z`Pz_Wo#*F7PNs0n3n(y~v#YUtIWqld<s&eCXC0ASY)%lHI6!=`@afZYP7aX`s z5EPz7+S&GBEY7w$)@$e5pR>i;d)dgKtG3pTj4xQy#EmGE&kUm~)?5jzouK-Vx&qZQ zQq)1oYyc%Q%3AQAyU|{*4cbTLKEWu^sm7uM-s<}(pLkqhSlpf13&@z=ti;0ybGt$4OzU<1`+2^CgqU%@& zDLV7xn|*zcfKvgi%)F-fsEL0!`$JRBgM`B-$2~ID__g?Kwuf(_GAnmWn#1Mi@U7(p zlfIG#JTk9P&DNwD!bV8Rh42KT4pU44;Z8x5y493ivD6Xhli)dOB-Psb=`R z$gN(q?Pgy3lF_j`;A`ByBz0{F%Km(x3G5AF)u{+c%dc`sIhUYr9yk_kJ>yCc3-c1XIv~jP<6u!$Ix+!`U&q|O;e@yAbQ)|Y|24gFUVs6e~+Mr$n9l5IYCv_o4 zjod5dHHKSd*7aHM#$w}H&nH+{++UL}`DUO;y2n=rBQ~)b`&2=jxQ?MV6v|%17>Dv% zq3j}h#effXDU1Cl;2RD(dyBr=1`}4-X0L+t5Ob~6!reUrNUEhnOf{A>)kn|@6L*yN zxg$QN)hBu7#B&eJO9Tx*CHbg^6R|B}_xF00m^ts+q5|l5r&lgKK9yR!&g@0*@)2EO zmax~R0#0P_ZU4MwDwzOTdZ2_Tac9L(h`!I)PH|mfrE88Ly=TPg=iY~^Z$*+2f^Cqr zJooi;lB?IIVHc{>PZ_SeXN0;Ze_SbK+!PwuX11SzU6l1|hF?O~YlGUbm(uyV6K{|e zaQw|u8@t8PzSYh*iMDKMYaXdPH|43m4pS7gPa0mAeX?3!7xf%^y_8RJ*r_0Gxba#! zO0K`vYkFpKBvN8cG7Q=`&82MR6i5xc;NG+p9xVfU%GS!T#&my!*n7GM0IQ&I2nP&L$XrbUS1>yW^*B0dFla+D(-l0ADVy{Uv|k zOD3?i0?ym(#g?a?vU4bAfpCwhJX5tFXv?XDMsPLS94~~Bo^mKBArJLyJ0FbD>toH5 zfLv#_dAxKJ#s@={maC@Op?7t&a=B?MzSQ8V9P4<=uORy9K?U)sew!czwe+kj=uYO| zgd1!@-osr4#{jlBW%IVY_42`ir8IV(=Zw;$&6V7 z)Bkwc>gml-A1V*wM$eLss04V^ukTTat5qYk%rboef|F*}lUJ0W72eFOkpo|o0##K} ziY~D92nT86JY%Br#UsIKmTu#pLaO`mS@I-@P^43+&At0~;x7ekTW zS$>l!Q-SqI`z1lty9!jblul8L-qsf2Ta_Q>Y6O3YuDH7SgV@h&<8ehd5gu*#6Z*3 zswmd|FimMdhw~8$uJR-AUaD&Gfr}x9{TiZ_ zpO2de+lNhV9-VkKbv{oks^-wtF|33L0DfBhZfp8-gEi=(3;E-qMZFdoUR1X@(EYo_ z(0diq>Rd++Uf@=4*sQOn(cChdo;Q=AFAD-uFaB@oTO`o$;5z>(jX~{L1Rp@8F_1?_KO#~=VXLvL?sKxb8a zq>be7WKfC@8*&_5;s5Nh0ZJ9_)|<+M0{G@PWaEz3Y@3xUw3|zc?cC@&mBq_ad9HWl zpo?D7WUPcOLo>*?%ux0h8E&Fj<2;vz*Phr{WDA9K8)X%S^!bviSzEaUZaSJj5=*r5 zF%u7R-Y=bCCn_If*8naxB-lhvHW5_QaO)G$adqOpGH3~YV#wu!SWK7B-?2@|+TFBM zD9gn@cvEjHuxZ9`3oL&|g-%_IpiIHn#$@@ml;_Jo2nEhpsKWxavlih;FSqU~9}7pz zgeA$`xQ&#mdb&>=^+b8LFh_I=&pqWo>8~MzwH5y$*H(Rp^|uU*+iF54I_kS%9o)P! zW}|O$DE_?m6X96DqT#S8qaj$2#ZPRdsLK-$n5Xcp+_=BK$Qvu}_|9kD-6s?39xA+z zo_Ud#HCcS{yf3JfuLM&jwWfY2uCOby8GRJvbXo6dC&@2G23D!>vs`Lt+jo(6;&;6q zU(N76k!(<#ce2E{fjWbgF#kVC)%HS2_sXk4bdYlfoLV&Yh4o_7&(O`zc+rD=veM6* zt&SN2CK=aUVz9+ffUVc*u?C{?$Eh{!bz?p$(E}Q|iPggSRv^Qf=T|S-ose%~5O_(B z?#m4R(fBp=plC2=wzxzzc=5emrkcO;x(+I_8neht^Kn+2pM-r<(l39i)zGVIi$82% zkNu>)lzrF6|E=d#PZx33hZ_y8_-C^A)oksb`2)6GM!q8j9;)|%@{SGA;REM>_(9vlWTCI!BtVg=>fAv*LxfizIfj|?XVMC@ffd{ zosCc}CB6M<^0^gWM>@?xNr~9H(^L2NPV=-aAGcURGLRS9!S&jsbbJP1r`vdY)n#5O z#RE>8%rmt@Sv~Lgjl6evy=BY*YE1SBPtU~ZWmyK<59wWJQ-o3p7-1PYNL4hURM(hxotRH|&c_im*R{tWw9P!KtGN z%p9L`g$IY%G@-J@1cltxxef^)8a3o~UTw6tGTx)$C_8v9;*ccs<8@M^NiCqP=6v>| z`E2?>HLsw5l%KST+iM>nnzgZ(udxvNf5QPY-ckeqFQl0?P_g}J4d}kPRfE-?oGm`- zM1HjW`D~gE05VO*A-H|9Y$Rs%f}eK`V(zrkd1(F%ghWT|`w|JU?pGLF|H+QaD6a)W zWiH#QNnh-Lmml2w0FmfA4+cYyztwi?}xTGu19fN1{%ZpCfF z_tyeOv6r)jnW}J%HH-Bl5~@J1#^&oDEqKtNM+hd#dOTUr0j}&Z(Wa{3l%(;wXHzE2DYe$NM2^ z-2^@Bx~{mUKp=!og6SAxvyL*wOeF?y4>uHX^fp|&|8WOvxfQYXy6Z;Ii&(nmOSH)@ zneOP-;VvRW3TDI@C#gMOlWDW!nQ0@H(lL_lyE$bRuBkbiz(`_VLILb@FHM@7u3fJT zrx=v_lhDYiANmWsyF(9rWukXo59@QzXUsB=s_RZn9^OF%@xoPpk|hHN)TD+&4gs}xYlaD`5 z<>ip>JFTY0M9}dyv^t3mKin&Ybzvu0a2;HjpA2ax8VPK0EPY&lZIIvg-|_TbTE*Gu zs@Ub2P>Ryar!q4O_`(Nw0xFlAU(>NEi}I?Sf}Ttn$k|xTdYmmK-r)}-nZNCp!R_oK zyFxPK>3N-uu^n|uIIHsS7?x6O_l8kiGGi1eAIG+lxTRU_eHeGqOOYyEXi$Ielc0Xr z+9s#j-rS$a?RhzpnA-V&moA@gR+#qjDiK_PF3`JCO}N!Bie2!#W`Ei4GTj|Y{eg@4 zVmN}!e#To-`=r4A)Sqx}rpH0aBnHJDdHcxDUXUt%-)e>cC6OI(+CNvfzaX%FdiZjl zw_vU3F;RtNKkt7qfr2)D68xm+CrOzuEuTxag-_VMPm=4(Y@x1r7scO5P-;?*sC(3_ zv^FAaC<%M+pZf;hwbst(p1MV6Oc~eLB%ZPg_*)wQ3A6j5jwJcDswQ0`|D^D5M!N*2 zfjT?}@iB{iY8?D43JyDj;QMKros`Y167Oax?=zT0mY34kxwBV93nsWsEG0L675qzA z1O^mm-yg47ha{*69b5bZ1k5hWKRzRfT%gf!?%p0JHHJo+cZ|4P$4pOM!#K(Smb*yn zEjc8f8xIrdm`y`U!tu=>IF#gCY3_fL0?Eh&cjbPz?1sqJS{KB<4@z{~q^-(mk_ld{ zw3k2oY#E%uAkTDstJt_i2wWU=w9IqB4BCOJY&aTWeIa*|0ze}FRnNSw5l)Z{GkKouF1!C_n9Bk-&!-vsE@r_X7`^r-Z-2as7 zt2($OWmshDs>>%O$baYQgIy!dLD`G5XZ4v~O*+QBu-Y>CN%Y!y373#LTBh4EET$N_ts&334h`VxP=DXlqnEP+=mAziOR zmvwISFqpBHMdLL~Uf`jcVLfFpaFS_W0~!c;sa50fEvH;fYqlQBBGGSx4aftazS(0q z9{&0kQ3q{L;5|ViE>?61MDL~uAkzFu5vJX*hv6eV{bzha?9IR!1n6{cd#s&&8Pg(a z7To7eDJN{L`~!Q*Mi4*_g%+Tdy=oY#_jD+`A`if07ZV? z4nzpSm8hVb7~ynK&m1x2AJqhFQ~r{bBr;%L*8HXxTXAz0)bvIq;%r zx^*H+02EWavecvTu$Orojb~q8&8`@zLa`a{m!1y)354ijYMwjQD@&@17`Y!U(*%ed z*G{XUF{cb#4YA*(_+mGs)u4+jhe>4I)2nwksfQer?#sG)SH>;zi7nf?5ucFvvAg+w zc9~ws6-V`9F&s)OvC*{_zr&vKvofpfWtAf3u`|f}{$7zX zuLHVq@VDk87JYv7K(&XXW=`yv|8H?_`=h`0YcWN!@&?)gm%|ozUl=s#Q}(V8$hU@l z#Uvro($!fJdP)hh!I|<|mN+ua<$QAXS0vF9@e0~!3R+~plW{^{Y9fo9;9QZ~VMs^P z1bCXI0F1@GOB>v}6U1el!{m`vPA+q&F)F?#Nv5@FK#N{evKFQHnDZ?pMlr)2P?HtU zNLb?SKUH(#;@av!y<UrvJX7R>L`>^6krawMP}xQgkF3@45zOVn+D8u zY4}Z1$5@|)zBm`wfXK5fe{iQO#(Ku`wn&EU+>_Wl7tz(VYvl>^z=s0wm?~L%`r7mNmrB>TK#hQhpEr#OR$KdvU7k zH^XP35>{1YL4Sc+_yxx7b`!dtf9r)%J_dBsGcNn818$(=hGipRkGZa$mgKTJy(ZZS zggNKk{h}K~#|M2CjQmR^*S6@3x*4XG(eh!y_5goC!@oDDe|h_8!mH*DGDEb#R`W`@ z=tdu_I=oR+*VGA7-=m=$>C*BY*gjBsPu_#d>Mm<_Z`lIbh5X8(kAI&ZAdimzes37( zH}gwPSH@AWIB>`>2y}7z_K2DqAZ?)Q=9}=kD@k{zO9;BEAJuj8I<_r4~R2C zB9d^gJ|9hHk_fe)Dt%$?Ez!KaMW5L&<_A6%p26>;pJ+NzR|cl}e3r%y2B9)HI3d32 zg4sZL`ZzUMV08vg0POwRJI|fL&~-i&`||WuJ)7IQ7Ynzb>q`vtiVO^Y>}0F4zhZUs z&d~zdZ|7*&E4w91U~0Ns)#7(W9YZ9%4r#A-90u6-_lSsrZG!~@<*K^5B42>3MrKwE z%->B{qKf}Co5kCT-F>P=hR%1;nnBd9TL0$h%Ydg(qDOXwk(;s&2k!QZ)`H%!z^AHx zpY*ept~iP6P!S_DFE-$TaVyu0ABjZ9E+?^q>N#*9g{Bs7*52vs`UplvU2c`PqW94) z`0%^|6-GY^i?Lp8no(wKJWHkXtPI|nUEnR)J;-0|o@`6owpq zCf$(eqd}xvWq4d`TDwq>G`S8LY)q&pWzG>+Pui|(PpK}*XxPYM19p_@5~4#L&$7|y zS{OkTGj!v{Y;mgM-1}5O)|IBdtoL6@qbKN!tX><9mK`@84S#u_VfcXr9s-s37Dm{5 zq2gwz)%NJhXRC0{og^*$GJ`MBg+v+sX@T593l!6YTia=Y^rL-tz0G7EBDgh*|N0dq z=Xl8&6$t%s3&nCftH5+6xumurcD0z<_$8Q3RjZ(8Ecy{_aIFMZHMBu~Sw;RWGNY$} z=c$U7{b;1(UHDA)gp0Z8-D!d})7I*R4>H1_ z`dR|Vz@O7w~zttYISxfBO%^$|Frqy_6dkwMaS}`LBV8!jJ_yLI-Z1Ww4 z~(3~iz$6Q0S#NrvnyqbXzUeGj?8<+4+g>G8U1gS%~G)`88bTtA@Gti$U%rjQ}=)pu|ote?gB zBeLKOUJrW>u`;ApM;ZJM{)O`w+bBJOMLWY6?*3^Y@>S!t!$NtDMK^#_ep!5E75yS9 zvH${a)Fo2;W*?As*$RP;#D_Nf#DD3k5bO?W65rrGw_vYYjA}_WYacS~2E zaHi=tz}XWPTan)oJ!c#L3|CLAKw&zosY@!py{U5{wA)++QNF6JI=gYxMsZ!*AT( zbsTu8k8rlA02AS&5W|a-8}=R){rfq8-uQV7W9J|w2O-bA0UWqmGOi<+MnQF*oUiIl zp9kGpO(!u*qT%D#pFM?Z=YGFm+2nz{3g0Z)BY+Y#2|Uo{Du1>U4!<~X7rebX#CzAT z4#D73Z5lU2M2$;R@Wp5R`CQXaem|#fJYa4z)w5@mf1#P~#%EtW-->z|4?Rq#+Mk4o+XOa5N(ym9==e$<1o_sM0-meOaK1Mlxa+h@x)@wE zxr*6ZMagtUdi3AqF&>!s?eb@8xxE2Ao251D2}4Oec_k{FGrHCH0?J{SI}-J+x1O90 zRQlM#lyJoU1QXNG_B}sYmw;PVhtWmNOwI%6r_1)2*?x7ww4L;2uBt7+_hDb-39nd> zv{(-Q8c~n|cS*;wxijFkAwnVa3Ydye$ebcwoEi`t^TaEC?NZP!GjQjcB$=CbHGzwR zIPfLsrF`)+X9Li=Ec2e=r4<1m@i9y~O_D!-QQp}YV!z9jlq62jQ6Nk4i6`$fWmo*! z(&ZCOClGbOGQ;*rA=4#ayJRVTY`s_8o`)*6WL5x$rFkg?i{IvL<1E~wyL%*Ezk z?{AH1>z2<*t1>+Fo7l)pF>}v0rVEYBau0lE4D@|$1i&AmyWd{KYl!FZG!U)^zawLW60DxUtL5@3#> z-7Y^3N82HpzU@_1@TlW;>Z&quaZi52(H%Y1mb&QJ+z#N-cFf6crOUr#VZ=a+Sqv2J zN95+=x=Pwxpo_Z@8Wx-Bu2M{QPUZF32>s_l7z5M4<{Kvz%lcIvO}t$y?aPN>W?h>% z{?37O2E1>wadLASGJD~{9^7SjtLcGY&h097d>nT`nenx&fs}!x-Ev<~1vGJbdatCY z3E5>8G}wKeVDG~rXP4=&BJZur|H?UAy10maK3ZUM;;M*K%u*!!KfZUa)MffFMiWXW zRMt`~_zVjk*rN z)lhDcF`uD;nlMs$T`+j#5n1HBp^jYJt=;7}pqgna`5IWsv^yqROlx+8AT6eXJ0e%e ztEU7zG&BO4j78Qs|CLX-o$gbYz;I%iT7XN;PFwR1|@P`}klq+b9!P|kft{&jT za;gMo{+V;_pt)D{2WvS(;Pljj&Pkrt4D z7SU_gBufU^nV($-MY^Qbf3B=<{z3lAq`6%Bdr*RnUMvrp*cfkZ0m*uZx(4d)P;C`h zVCeE$iMLo^gkz06nt;8>siDjU6O{Zi`TjsnAhEM3SmBvsgJQi34{Jws2e?b0H?^y|`s!@>dQX3D!@e1i}9qdFtb2QRx zy!KNvg1aao&rR5(mSX5p04(LbV8%RtQN+7h30jlE+GS@^>-q+4M@VD6ru}+A}@?2D%a<98b)asXE zF5Sp(yAAxAL@78J7{8xEXKhr1r4gr1gmdA_tnJ6j?%K@;Ad4#-ABi7^JLG4xh)4 zELULoFK77HM|3O3h~KccDMS_TZIDj~@=}nmCFv=p!rApyTkIOPsk`#@^4wvM>Lae! zpUouv77j9nFjjk9`3!j#;~2hjj~=`APsf=<|L&j%5**2rg zZLVNlFezM8M~+Y!?tX3@yJ}&D?S$8X9pzcU`F6tgR)oq%7G=$BaKFLX!G(@}dCTH; zUye%0o^`%E{_q1^9Ef0J?PtBdYo-=wN9gi3C*(O2J}-|)W2~W42h!wy{3s$GK-I*oE1nz?O3l&vd8YsUuE5mfbMAJ_G1hze zvERD=-3gbqb|11T`rxuAc%|i}-RNxi<-kpznvM7`Gh%Yfz!+V-b|#HHl>%Z}kP)p==$87qLWzFAmt3~bZ z!Z4QYVDaWOZdekTP^bG+ezp)VIr0!_$E&=Gg7Rqmq;TWB5*`#*&WE$~kxgard>Lm4 zU`DBxTJI0*dgg(j`_f2-7zrTO{K2gv2&d7+<+`!@k zRg)}wXdk-z3o6zhPy1+@B?i9zv^>&PeTuXrr1XYMy9{g5oswIJv+F6uhIk?@yeY#~ zJ^*1aM{$Wvh3)C}c;^Y$gIABTMRNGs9P`=6XbPsr{%q!o{g3Rxky&W+0UjxNRD!M zvd7nTXoRx1{^sw+68rEHYnnf_8@-J_-H{vSX z6+1^+|Ief3)C<`4VXOJ~&clefZ$rLTvd=x1-j&IyE{(?C+D!NA60PLC#rjFn3p?8i zkF7e8MvEiv-E&SSy7N)#O<453m>Tgy*XagF9gjSd+sMl9@ti85!&2*k?I#=tsWnbm zAwKCyG_)YqBQpBv3a~N`zGO^zYx_g1VGI&UBU{MS22peSo4 z{{2@eAJ4i3Lqe_L$C9re-#JB<#RGTI9_?<8`va1%&x{QIGLi4)ZS9Xc80ipPlDV(? zp1HyE6Mdv$^og7C~a>>mv17Geye(yr0JM1Y&|37CrL{3BRD- zSozc;D@;S4Coh-~k~LdqhSFQ`l#uIw(N{-mWZ$I>H0&B;_`=PU<}M=Dw>V|x!LczO z?R5>z9EJ8Rb;h0~#<-CHo@IuBbYw+{uwG9RHNwqy7MZO$8_^qg<{KsbO80|#0*;p6 z!JKz^^9F#gfPIN}M!tvgx%i9Ruw5f(*Z{`~L&1)V^xSZb-$xoagf;;sI8Te^swxbh+9G5TY>hB!$ zIcQmDwYkf{Vh!>s`D>(7;uq4hp0;*2r8d6ofQk(Tr6Jydgy!PiE80C2f5&UcHw~1RJ?3lJiv0qNx{n0{IRXVzra2X;zA*TZo}A^gTB*geq#%k` z$Cq{K1QWh@RhB=$@GvpK%Yfm9Ew#oUi0;mq{z$A0%_n}-ErHjb*VH*jLr7a^baV8A zQ(6422d)#=s%f<+Ia`R2m$k_nd)TBt(VEpA&)Z>JBjw{|kXvQZ`&?b^bT}2YpWfKp zJ2&};MQO3jl*VoDPfz~Drc|Vte_f4m!eAWs-FwU0-*}AzhW4Tuec&5)x&v8yBzXRmY)_iq zhoa zWU-1OP0D)R(suD)ubp8sULJYJ2C&nzcP|F?*3-^_Q_)n9+2HLiiM~4lnH1$wT-(cZ z%_b*l!cJh<6nCASR@=YYd zdUas6srqQ;h6Vb&$!^MyfCFDoha-=OD1sRA)Pb2qTeg0QZ&A zjOG72faTI|>LEf+7+sQy z(Zg`S>r%{DyZW8`B@orYS8~`I;9Du4maruir{@XlU0-Zf9jn z4@>uBKLDRv3FmVw@ArvP;)(G%<0bAu%IWjp27NyqwcYk;^o7rA|thL6X56^DBVZfmxHzy`?BcqUu}kR z)C2p_3&nHTYw2sX=ma?y!A4$-v9HEKtrSg%-i`UR;hkOpJzU=Ht8_4ZhF3G?^ys^) zqyW{G%?8Ti>SS0m|M8FF(OOSdng z80^7k*Sq|vP^4O-EWC9FODqWd*WsN+1i0cr_v>brb< zD~GDs5?)g)6tR5??s9V+G0M><%84U^BXc8OhiXy9b0rEdg}pc6@8!C7DZKrtWMKxK=}{ zDW_&Hv1_nlDO3mVPiSPEufR$}9c`Mv=iy&BmA6%KO~rwq1Y(-Ec|MH$YV-4J$Kv5N z==RU7Y<|VA=I5vyXZF(XzkUx&s9P}aB-}laUD-#vw&9+BHvkuQ(yP?_kF=Ip9^T1l9?lj_pNj&ljWGDJ-?_>|vFwbyIsaIDP;U{eQfeoe z6Z`J=_Hni_TB-93fDzrx`IPI`->P{ed7l(betTmX(&0DejT;r_vc`2Pa0HB5z+Fem zvufdG=KKR^GJ>;QKpH=iONXws|KL}6h?ipC0IPgP-$8M)j`nYOk@nTyf~>$Xdund= z70Isp^n;;>H8ff7*T~SwZ1_!a6~%#31(m=8Z_Ts}hI!HXLfEnJczM74#g@^DgWA&? z3!WlTA{V6I!eUBhu!ne$S3e@)r;BDv0xWcMEm#^@ z_YDIsxY{N0%W4&LE5-)TWn=54eD`~^DQ{$Yh1t~Ne~|ouyQxawCu*kd*bn0eKH^05 z-w^&&=ffbS%w_Z2P{Gp2sj!_SW(aGVis;j4sh?Tx(wG*KUs|sZ8RBF@{SXJg*I#5} zqS@~H#go-;gypoT^(-B7gg=7@N~6#Gjxhj?yY$UZpa6^tOT=?GY%!D(`%Aa4qdFmi zb{1-eO@C)@U*;I7kk0h0zOWu}`Yf=y~>5KSHYzLxfa4Nz@cns}H$;*C|e z?_%Z9xQR9idfRm;pZyBH9VS^M(ms^vPQ2jZZp?W-mF3DqHIR0R$B!*%0M&K*Q;NyUaqH-7a8oxQJ{WYK>>ft4O!(``U3Y zf*;EF(dl3nvIgf(>3M3s2DRahts>frhayqUyH{FvbL_EsHQ3hFqoQujpRM)@Lo9!=jB5c_ghR)C#yFPl-v&woYr5{hES4Y)_oZ|+gRaO1NpIXSaQ`aP)YH!{gh zzk~Epop05^0>>$6ur(Ex#E07RwKG;~U@Y3N;KH6}vGZeiC6esViJLyKuU+r>_EeojwnW>j74gQO6W>vvgG*;WAtU=ye!Hy>xc)vWiE~`j*)-IkG1Sr4Ma_C$D)6073>2lU|xTsZ+QL~IwF(t)EL&Z2sef{m@V*4q>>QjPwmJU-j;IoP+#P%ogQo!;D%tofancX$Hi`yk7$aL(ELg3& zQx69!*-{?iC}WMTtFBMImGX_oovz+kAI{tQIg9n1TvnY|n)i0~Q8BT66c&9s4xJAH zZ4?AUMN~zfvL=Q8mZFlFwr=9u<9A&Dzjrp|D@v-lREa-hf753$C+tQE8@>e=L)Z9s z(+bWEgMV6FD3sUP;3sHbGmy%ICB>0QX2s>+<=!+Cgbc}#)($O2a<)(f1kX4Uqlz~IZieN1IZgboU-rwND{*Y;B=tl8 zk)zZ!DYEnPcU6pi@5*RUgz&s#M@6OQN?=1tZD;l-x&-jhx_uf|3B=#cT|(<+CKU+%)rb@acm$(>?k0J^ghZcDosUtRm9MH zkd_3;5flbc5s)q_AT`ngh7ugwNTdit2myj1LI^FC1V}qi5N3aSf4{TNKWCkP&d!>( zX3ZqL?^Eyly4!VMZG;yZc)wNo?Z;IQ-KDTY^aFHlbyD|ir47;SHP4feW(^t5|A#zv zl(cwpHZf3FN3+lJ^+Y~u$3GW+(CoL?;BZ&>)jFTk^WeB9)y-qQ(no!gP~m^&vg$C= z`Js-o3%b*AKVb?Whe^}#bjb-7zR$CjIrV>0S$a!F2(=8SU-sfdK4cu%p0m&{$O;)+ zak%yu$Tae~Q+YZ8q>6W}w|zp!-M%ocmu!SnK!extue!#w9lHMkMbMZqy ztWQ4HwY#-A^MrfdB-uUJE=&fN8E|28K|9Ab`l7SmUCYt7`(jS+FHOQ;@pP5C`QEcR zQsqfIewKLdtAjiA+WC1++#cpI$iWO@>|MD$wM0A7S-Ny|0i;1`t%E3X2)C5wNdxEz z_4O_91TV{})TJzpZUcl(ftt~2pUV@eu8GIKMqC z-Ju`HEfpVZI%nd38gmZzF?qjp_lYHtxImy2SFk<*9NxLrUg~7vnam%W>@iEOLoP3HQJI1WyDr$Yk}fCqHF z+n^>Of=tT3m*_}j`VgrC5&FvOhx1tv+!EzCS2e=yEzi_8->ezSQjJ$@8B5CwcJJse zpBlF`+oKQa)P`t#%^Qe6>6`wRBDpkg~b1TSStc1+Ah~)E_JDI_*#VN*s%wWZW|0POlkSjX_<8G zSUTyja9tA6=8p`c;=c=4mK{U zCjag^9b(DC@A1T)yPHNCn5i*WYu92)-Ht^4|3FX@Ivx^U58kOXoOx3p4;-cK7t&(2 z#JU4te9)han26UfFSn460*l(77ET4SsnRObmI+CGiuSaq@ z=^@jsBOG&rjQu3zgpf##bb8Pb(~!`KoEZagHEzMr0-*zwqg6>bn2WbvGpwr5!pPFT8NRe<(7@O^t@(cv|5IAZf~}{Qs(w3^pL=o} zo@UQN>3@;@a6T_h!!mK!PQ2icJnhpjeFty<34|twAN|IQpeX618vP8SH`d_EJFcHN zE`fa@9Xadi4Zml!{xRl1F1hP*Q|3i!-AZ#Mx#uRn8yNGO^$r-gAE0X}r0`1V z%w!Glq#ql?hqji}-Tk|>a~E`;BmO=VW0Et_)vEtf*$@1HB8I;eSKSa&qpSSllG>`; z?5(q@OGp2YOK5?wDO-)P1{@(dV!)Sxc8!=!w)PA#G)L9g{@*X*Ppu;upN#l{%fhF1 zo-Kitn$G`ex`JToYfR!`TSCKEyHgHypoFYBjR28aarBK%wyLQ@M$1z)4_|PJgT&x=&*Iy2SmK%s80V)%^3e^r8Bd zUgPAS8vBc_H5#j1DkzdVJAGvx_J+(4d%S#`2ZZO|*uJN}^h@V|$TB9?2w7wSvYli$ z(d&~{h#nx|s;;%Wb%j-P{At|-0G;*~eh|vLdcvuzqCeZBYtu!u$a8A9e%V2>Lxlpj zcJ>3UoGU{y+d9dVK2!_xkRQYkc;=Zy5t9UQC!gHYgppW(Rn@84wd68qOcWU~6IL}AeDXxDW{>z%hhhy40mF1099 z*q7J^1Bm}0uZ(+MWLTXtT4kWgA?&o}S;E1V36|dSj4dq7@?iwvNV{|3;(#2I+0mT; zlS^JX#xbGT+K1}#LOlGh{O&&fQLyU!x+Cn-k_zp5z>^Hp&cgL9LFKk1zRtGox<=?z z8N{R+jJD+`16UQ1U3_@uArrD_GBuDqqu4J$Nv>&_IsMf^7ylFft7t=S4U5d93}Ih7 zlF{hNtOwx|b-PDPPZ8|pfOcsZxKun_%ME>&^!@LquJ<$1{-3;Z@Ju-}KZs^N2h4uz zHtT9V^o&vv3$0;ay5fyH5A3V9rwiHJswyl$w}BDZ&l3#jNPvUiOqEmWaFew~{B?9o zxT&{uHSk089G4f3&@74O%J{MWP*r=KK+S+13uH!++|SyTd*KYQNOrhn>0gcW#)njG ze%S@EEc&N0kRw%#$pPuIT^Dv>IU7`YoX+@zBc4-xwG$QjB_*UP;&0#Q0R<=7Zr$lH zzt+JimxK8%(-%^rV##RqP|@mI-*7% zi0Kzsq`CRj$`jG)5WT*}FzHY@)^ne5^EM_ig!VkR9c*Fl=*GumJ$?q{RyObxH_4ok? zpEpmd5+~E5bC*t8vp;_&k@}wj&eXXj!u*V9?cpPXzoWO57Xrf{N zav1X@^Ru?=hdzZ3P(6m6)>na{IbcQe+Pfi}6M6Hcm3xN7#S`2ziseNsp2t|Y3V4h+ z=3}yl6u1|JJ26#+%UX3e?GAnFxi-9+nr~h#m?7}+sbacRAER!TzW26pQK+*lT6Y@Z z2hUsn)Z`dO5|r|9`T}Cn)mP=Ko~%{@mM@kW$zwc#lO1Ns?6m-S#o_lu`er=mx*N@k zfAj(G%W{%+M+Nm;TAMbmf0dMMI5$-T&h7#yKHIMMd1_wd8;`zxirObH<<(o)XMdhL zBn0y3ofw!7c-;#-^9MDEBnq$;GW2iUN;J>)`Q~I!TzZKfrZ_BiY+HI>@8lf~llB+_ z-{wh2kaWqL`@2*&rzl(1OCI-a_p1DuPd$H$_51G5-pkHEOy1+MH>qzt#c+YG`3YHh zyEC0~3-$mO9`@9cejrQj?ji_Sf10r{{aGW=x+p)~ChiFAC%uPxysDj+$hRXLY` z&zs+jG{j5wPcBWcj91J~=I&v6ucE zlmd+qfph4;uW5e%V|RYBNOdAFIbtaHO)5#0HWD8x~5%u^}PM858&FT7lJ- zmHWNFW~K15hKAfl;75lV?@{5r4Nm$J(sSwTy*ggPMt+PyT5!n*S6e``hPTfzDhx^0 zxIUc6X)F2s)dpF(OVyAK`NwO-8xzIN5;t)tU-<*~!=O7+Sc`8K?uXAyb+Th-(Mu!q z1F0bBnVnxQppFDvLKsgmB#pV2lz$R-nly3-LA?5wYN*xs z4L_UTyH(T-3SU5(!Az)P?bz>j4)<-zzsKu|p#u+pN%tx%^f5dO5B?LgVtGZnOxCmi zLa&9jC!W*_KYwMTnr4C?=3U!5lY{O}gn2_hv-fAoan;P;q$Hnv?LP=}NL3c@p0N8X zl$yVFJ3b69jTC$D1;GUJ=5CWZYI3Qf??(z~AEq`%<->jbe=Pl$)99JHq+>;9zE_bB znj+W$9km%Ok2~{~53=K*kh#4FaR$c8F)kC)*0rn?tG(egX2a`zMz$ zN?vL{ArIkWEhsQGOUhukB4Qo91-oB7>x}8@PyHn^w8eD)wcu_CC_LPXAC1}gT7vk&J#`V-y+fvimh3od ztzUL|#>uxdS`8k+&CKdkius7P^?mX%qT9m9vfV$@@B9pmB3yimLKSq4Ie+=y6rEve ze)ImyT+N4iP!f8h=DZ(ab@>uQ@W1mRyeDK=#g6)V1 zTP$_1xDmLgcS!_yXz?jrPVAXsVV?Kr*xk^Lvr-#kecTr;6@K$qes#JZ;ABV}iM&4r zm;2InPkruN0z#qn=Rrj0&)TWBl-V%e6;KTwQX5&>kS)DwDVWDva6BG$-Xj29PXb0q z-u-^yYktQcOOGG$%nST8S2pSxqrve?_9trJ947sDr>l9%<8(4iSf5@#3%@slG--Tr z%HSH{nK(Dk(oL+Ix1Rzq0B|0<%9^?Y4U~7kQA2}DNjyC5voHMj>Nx$W@vCO4!2KZEq zSynq(H=T|VYshC3&s6%YXV-b33ax&(k&lQS_Hf77WUd<7mg&dC^b;Fm^b$)=cBIse z%3!nYq+AW`KUK35J~EK$M%rIH(1_5gZ=sn}9nSa|JJJrXjzi{t4aCFh<$#OnJ zjbbUr2|taUD~qTz@yNF>AkFPNn*@csCC_KP@UAd_)GZM?>y<{04%>ujQ|HQ9y6CET z3$Q_6Ne+}DSg+~@_eGQIm||bgV)+$&MDO$Br$O&+%~aolw0U_P0j6-1xN^!#`E^Lc z{A9kLu)KSd4cczLS*0P6r(NRHe(iCoW`DSlu)voC?5esN^u`)+|5O2F+UcO*2p-aX z!6UiXkEW<%(Q)U!B_<^d?9?mv&cM9fQ)F;c4jD2$beF?`D=f@=fTt=vv^6GWCSlUf zv@AP7y-2d2E9z#eb_Yvo=-lO$l8#Ct+2FB#txUj!&jMgs|y|&1e{k{5U%iWap>Ha3a55JlSA$Ay_bqMKJ#?5PaqH@V6Z2_2UShihxb62}ZV17f&-|U%^+O_S*24+j zSnW+20>Zy1s!D*fay_v(1e6W-)fe9F30qWj6}>iSGhTh(NGj{z-O5Ygl@B{d?l`cqcgDthJCi5wTULM2yD{4= zCu>`?BtY*}yI4ve0wrH}uDWnN2B?7YO-UHNf10?`GE1BJJ zom~-jFrJ(Bei!tnf|{5- z4w724cpTf++7%~3HF(GpNU9&|boqhyAFCAyY!Emv*>P5cXIaIc@eEnCy8$4-kPCm4 zkbDEj=F)XpUm$=3LFCQMAkDvtPtXKM+oZkk0!${9zP}~X z3jFKnw|@$c?}v=H|Krj%(=$-Y);E`)yh^_XDg5)xOKR^Sn}2@!#PbQ?n}2?JwErl- z%fEhEbV;D;U%&kC3;(;MTc_dw>Chm&CoWzsAuVykK36}!xfgAR1D3>uZU5p(ve|q1z0`4=$b$84aP_q^;))!vvc4 zwziLYIl~KKP<~mcjHwpS}%$I#phD=kkK6K{B-*-%>|nBoI(*t znTwK8K32?GTZHfO1MTX<`qe3 zy35#p)M#7OB%x1gK?$OzeWDe7QKKy~7Tb$++}gqys`s6^Nas_BPOH-z<+g{SYg)+X zKU~?PhvIV?Z(+_9|Iat6x(PI)ea^6ch(g-bpRez}ymiDdNQ;|Leb}v6HXD~Ych#WN z%HxQTz6Xc4g_X}-ehU=ZAKgh5?1!3KVj1>Zuj?HsrSp%aY9!o}xxx>ze_5#8dg7~6 z>r%m{fRmRQ>>r}uJ!Ckh{=U7Io8J^WZtRBy6h~3pQ?)M`5{c6A4y3@KLA!yvJylzq z;*;#D1s&MG|71$z6O_0xB-B=MYN45i+&+#H-qlhNuKptt2fe9oWtMOKna7)cUubsL z8G0r)&K|VgmaM9So*Iyob#o;OHBrE@zD(e2x>box`bR1YR}2Y9rK0f$kq1I3V+2S% z>PGoZcK%AK-PXK5wR@^Tqi+h4Fm814q8B98bUF+kw2^RXYe8nLt0f@x=o>9&&s&k+ zcWA!TQ1j8zob6fOD^%wn>pXI#^+l{`7WJSsO9B!dID~Vsl3HwfvTxaG_*toB;#sMC zbY1R*O2nL3D*>Ymb2I98cwFi_6U&%-{0rl|?R7kRJ%eviUXmKNKJ`chDI6t8Md>h8 zi9y`KWi*W1=DM@}d4p3nw=T!gI+8YjzSY@@`&+=`J>xhnuVRAfF@|oPegtPUkaC2m zosWS_3U4bokDdLuq56vaRFnwCCGVu8wGlbHygqb6Ey#}LJs(8GB4^w*HLdPx3e3To zEHW+-L92u54OYyLSnH*iW_SukQ7+V*Z|lbm=Tibr0k-c~?tRt1Bq(o6!D4M|Th*uZ zG7)5y{#?1Yj{#gqN@{b`SOmvBv*C=r*i9(CEbB6OP&EG6?OWth)Cz?*ALk#_#=5*) zCNiXuL2;B~^;=YC9_jN~sL;506=7}}wUjx-w|LMwG3hbi>5*85*VevVLlw6|YwLuW z2;OR0rT4<&%MWw9yBnwS(Ry!=+LM(=L!_u?_|~-LYVGklD9?}_@QJkk&%I2E377h zhvEJGOLz}kW+f(q$py-6qlX!kp#g-12R%kKIcRJR2o*V*nX<6T)nw$3*O>XSIRreLac&KpD9dL-%C(LmItsx6B5$j z)@#BzL9Hv6k`>hr>3>h5=69fB-IS`<21fzyMgs3ZJFI+Kj-OhPDNyoZ;lva|8$-Xm zB~+~L{>+IboQqWIM7Ia+fqjx;{vA6$CYY+8{ZcZu@#$Pa7EL5dc3kUi7`|JTeZY^j zRCm-dHP*F&bl*2Y=NB}oD5tYT4Go~aXxV7b8iO8x${=-3gW*r{YL*+V*}lYVuW7-i zZX8C7>HpTZ_uXX+Y?&hcEi8cE;8gRab^K|&l^a(tI-Eiud2n}fYCg1RElZ^U#uOqs zt5yc&5Nt?u{-@O*xCRFfDy6zH>w`a|qwByG|5%$CxUstA8h17_3`Ndps2H68Yd>)) zpJ5tNqAX-AVNZ7cp>;$Vulcj@!oHaKX;GZ_rrnkIpzUQjD>Z!TPkn zsPQ@PQQC}LZy7i4YOhi3f&n)0+(LkKGkZl-Ljh4pd!~ z7Ra6PMcl+w^+w1x*M;|^D#t^!T4eZMF@0v>&@g)Hi@BUrF>T?Xqcz5`b*FBb`lGTP z?9dS_ws#TdVD3r9q^x;Yfb%e0DzFeG%!WeOv8?7v>?J`6NM7x=Y18G3h2^rnenO!r zbq$%F?fWAs$f5NQK07MrnsGW_;WUFXM18*ML4+O1)U1t;fEG0|OrC+3c_rz4dE_35R;Y$T^xAUaE+$rAQwTf>dw1I7<3VT>A^on{8=TtL?R6o?!n8?f| zS4@(fBK-nH7uHaH2%(Hn@)m$Nx{A(~ft1vt12roFey7OUk8>Iror25wnl{^53br;l z7^_&_?r07p!Lh1d5Adb=q(6#2k3CQLSX#ulh~i8!Pu2wWtmF~ZKi8|nkkQ5a8XlGU zjn-(viGQ&o;wv9amH2QQtc3p_uYLj!Dv}c+4RO&K%b(qbW3(Izsy?(h;)Z6ksw1Je zXll_MjVzgvF>_cA<^%~7tTPcLJXA~Weh*MfC`LcJi-KJo^;$A;dcd3D#yYmtPE2HU z$xqqQ{y%k?nSo8VNw4UNY%y9U^uc-ixBB+hYH#B3zZ6if1^5jG*Tv;{8Vq_D zVI6$>{r#`BPh0gvYm%ZN2jsH2UxvIhYK=Uxipjpqen@pa``tx~l!(8Mbl;|S+(si# z)m;w~TJMGDlDko8{xQvFO+}*pfQP#{KXGO0T|ip|w#*tFTK)qzPfCqj5vaboMyqm1 zCH^s_fvmx^O1TIHR2X|V5v#dFU(a5XZV$iUXRs-N%oz4%JGKD}_Y5@ua>bDSUJfyA zZ|H#3L^uR^d=7TBscl7R*T7xGQmyBLJwEOCa_XeZFg9j`Z@XJKa5P6So|>8uTvuLr zLb^je3)o}p#1vGB>1ucGEXrK*j%2Uep$3@05FNX&-)A85U`pOmA72|=0rghd1Gc|o1wFMqn4$gVq9aDC> zW)n1sx$cMB8;tvW#?QQ^V6SUGLWi>gxP8H$7%|<86qq}8q2%|(&R*a zzH3R9OtnccmTB)kiBvRIE-^{`=sQR(Ef?93YMh<)t}DVTCEkH_KXzXlzNhVo@(fI) zWcg*MmcHeo$HomdR+`#<``O#?w+)Te8gLux1Q*x9pnJx5p>a8xXE!qJS%It3-aZ!n z2pBg94}($DyRsP$;6VNcyzKxo3I_b?WP;)Ici7NyR5@^`)P_*OJqy4)m`>j7iCH2l z;_HgH%u9;u>};D&%%3!=SESZO6-N!AwQ$)Z!%8RuN%$|ed`{-^YCPDRxM%=v9p`jO4Uvk{WTdh_Ah zB$RlIzyHqm>DF745ckW&equVUHiYIc6vdq~UC)bd7D@de7lIA&rLCVz4A4#0nQse? z{xd)w8CLgD91?{yA{u zRrB5a;E~hep`FF8xYui=Z8HX$Y!_v2Yvk$c@O|V0U&I-EYo4`mFyUj|dvz#*S)A|1 z!M9f02_PDtH5RSz`g|{xC#G^VnM7|kFj5>GFsE?@?>-!PNy4mVzt5mnIyhj=fS;z% z>d7kinAWVvpg8xUG@aIQ)(CUc?Y;X?T|-ynAG;B)F+2Dp8iIX`ePn+tZsuVMDFH@oVKP|qiu=&YCfsgKHMI5jlA zJZkuUNOVbyNM{Y4UEramNk&z-URi{z8EraEzG6-vXn1eO8ve1f2C_^tPLni$&mL*;ihIh5 zLBagruFs7mzQs3K-}iAu#tIrm|5cfBKXP%P3n9P!&cflEw&JO*vUofu-^)BA5{@bJ z{=6@syDzwIOBsQU6xp;SM;@!Bz^FrMmb9Q#RK_wH53NNXTMt@?z0^&m4JGEn0jzEA zGAoMy)A=oW+3OJNeR5F6oLP9V8>WoJxA;6K$v!7ci=ZhKh>8q`)Pm(<;v+?e$O zYsCS`#=4Y!2WE<{H-bMn8$A3{edKts%Ixeb&%ebP_ymLJ7YXX@wTCR&DyhKW$_J;6 zob{nODAY?=)(__$g7G1`bB~|vw58lH6NHn**IFPs zc6Qh6TGWDjk-&)n4@$6O|KdqjqL+-)yaVSle&`1!AGw6I>KDpiE)in3cR&+LxI0Rc zo9AQN7t|QMT*APdPI9J9myr$X^VD!cES!k#S(w6kasgCQeqN#-q=pm-m|YqQb<)4n zZUJnZFduaLP=DS?bRD3;mDEXL-10&<*bz zPiQZ|=q^z7{0trJ*a@*W0;WSCDFJroFmRwuF2wAF2^LUE6ap1915+8o_1(bG)d;9< zUk}ncj&BhgzuGA3zqM7kdJb)txryB2BSlyvSf<{yvN&VDg-|%sxzDVq>w1}lh{%%o z$g>juG5^Uvr9E8QEK8`*muJyyb8>$*$l*yCWpQaL!**Y{HFm)X*c=h7JOEgvv3dp? zl>nL(ra7X2-BGSF30d!3j8uQg){(ybAAS%&31#TOaZz+wb%6Sf4YtFZv2|~snuLt% z!z5=1Pt43H+T45HPx;SF1nc!S;C<>I&32CFfs|?2KX0EAjWQfYVLbiGW)4MKT_ST| zN73wXo(PT!HREYgw`e{oCUO{MO5>s z;u+$tC_(hIEB) z?y#8pzA1yZ80DTn7nGwP00&n}X@>ht;r$c6EvX8Tjhe`T%GP(Hp#KA-#=ruBBR^Ds zFm-f(ceWFJjKmYfZAH##680g(;~zv@+zEv)|9!Fi^*H~O_C-Mrfu>)TE=WRzk`7TNZ-*E=*KyJ}lGMh}*)f*cLecz{y;Xv|x9AXZCG2`MuB@ zx6%DJy&*(dkAVbqziD5jVgcP`c_4iGEdZ5v}GDyCUxYHqGV5FNcW2cIn9Ur%rv`J&(g z9Pi_Z?P#Uynx_twkR1UJqTf}8dYow-`K?7B((Vuc7A$a}y#rs#7&{R^g>sYs^*}u+ zVZbl=q&p=36a+f{8K;*Olh1#J<)!$8FvQ-sQ1efyfb>*+Q>F5PE7$p<-A6`Y6Kt!k zudCo0yZFc4`@p$bNoMhTK`xQwY_(C?_Bz?)PO5+jkae#ql&y_PK;jvp&hZTE?Gy3E z{jzY>OW}+Q6{3K#r2HYn@}F-!I>0xnPUK8PlrXe%eAImVkx9k8u#3=LK9|{ljXsbU zrum4CR}>V68e$pd|2)PUM0Z}UN*cws?v?T7hf4P~%x2@Z2CquYSOUAa+Igh40=_Od z0yUvqn78Vkw*xQ7?+7$;hrd1saXSIV4+2r2(ycYbF8uS?Qu`s<2G+*cwquHYqPWd? zl_7(P3Ce{PS%tu%8X78VP%ho!=Ym5sbpxVI~oN z&Bv3Rw?-~8AQV+M4R9fEXfa=)D`GT#v4uO^yYjgUs*M@&lQ?Nra>v6RnmIB`7-ySq zeS1AoD5|~3D`Vt{c+_W1IG$-!pR@JYCo{=>i<;ovT-B|a ziGVe=l>CfXykcER?L3wm3#xRBLqSnfWwmR$`^OjKfS*#aOPg9U4k#lOcvNoVpwdHL z5pdeKmG`X{hDw2sboK$Qd#(2n9D+;(0RPlJbN%&On6eI#cW4dRUisrE0Hfq&Yn4Zz z1j+mpL!AgP(dL>r?b&14Gm&V}2-1G_Vo_@`sOjkkM-ony;W!(h2XitJshy_gWfk!0 zsu94T(tyRb6_oyF`Jh1cz#dS_ zA`5CKQ|v3|Vv<1weDh;+NcpthSQLN7S$7S^sGpVv9qU^yhhh2 zQ$p45b~zcHF1obOV#W~2<&%V+Eg-kQ0Y*jvsCg4px&7e;642LbnC-`Xj+T^A+Gvdv zgL!?EJuY4(&{3uGGYow}$5s8S8%2HO!J*mMz4Eb?z5$k^BWC9 zlKf-JvD6%y@abIQju#3}&tchNwr<>ia4Y-=t^L!910cMc!&Y(+c{E zCbaDJoe&~}!X!0&`+dum!Q45;cTz!^C1tBJ2V2%!yFu50C9gS@B#fcI{6VF4X%Zh7 zb0GXRjob^jG}ETMy4jVfh0~vZa?DsF@rb}6W#|#opt%jIHKv^#0_U+(>{oQJB*^68 zeZb3?ix-fLI%0YSC=%BqE8LB~LQlbWMgI%C>2E1(U;Co2Y>v8Eug6FyPVP1&f( z;j9!8L);9Q#O?~8UbW4K8%YKHMsM~T0;e+0H9;$16A*DqDm4NA;Dh!S1C;RT&G$h) z=96#x4@AsfEwQVXvrp1q=`pNKv*uOIR8;dgGl04NQz~UBpU3xXPu>G#=TkFyt*pEe zeS}7OwKqbp>)a?P=CH#U6L?#z$n#l?ne+i7{l}%E0TN;LuX|TNKffo^G4O4MCU9O$ z6<)WzeSp&Q9KHH%7+@Hcgxzm*y@az81ET>glmX??<+?CihiENF(!9{v=4s0qa#Yvu z5-}sBv_4FwsGE+AX0HkwtewS&PzW*ce2XW>l@1JzFz(Q2iNuWxkkPt_%%Rs*&i&Pm z;w*dXeOun^d-(~?B042&Uo~*HnaB-_z1xpc&1B6G-RMvSxb%0aFe{B=e?$7J9FKiQ zec@+iBVz)l?$t8jAxSUwNe9;xqdyGJJJr_w{ z0lO(9A*55J#u@aXZ%dv3Vrj9)qsMSeoYTg>iBCMF7$IeiFeQl8Eq#!iU&uf&W1N2T zVFV{6JRpDk(|WK>Zl4FQw9hdUBZErb1+yz~mU;Dl#b$F9E`!&FQG$BkE9R_cYz)*i zTGk!%4|D3DgVsRB_lMh#rj#Kw*yMr8#dobhQf2$79H1zt^9Z%QeUfVf{R$RfgW}Mg zovA1@=M$fe3^uM}FiD{SdCVUH-IOaP`n~d!0R3*+ASmIC17+NA2jK)qNsXt8_}@xw$`6w?nirCCShwgB z(=mWu{B1yeL3X$ta|j&O$9iSuc5htHIx|FhQ)-?Ev=m*@Wo`lHW5F2@_oXVBCED*x zR35qgEP2Y3Ee^#1*7_6n*86I%Hh>pa%(WdJxs$|qIxU1Cfdi_bqB^VPjTh+f`kt;b zWLg|!+J6Nt!#@T@w7O208o?pyUn6!?7+uNN*b7GD2|8X5&58@5&x%Gh11f~krD`7x zG2aFo>_H!FJB%b0w9_Lt<;iFdWtNnW%=&3~uH4lTJ9k>XyLdwl65-uX3}zNc@b{Sg zaltrKfu>u4LNt5!elI>Q&l`{kb<%@+FUh)5qiy@I_+8;2tF;co`tCg5=eqy6B|4e* zKm|Po6oGWi=PEUUCfb5Jd*cT&hevvt@W%DiW z*_GBEcPL=_fv56>n3hbvk zVdsl7=DafqGU(MJa{thzsyOPTqmiq{L?n+=)qCW$WcQWCLbt+vox(=TtYEH4M^cA>F4b zO3tHedIxYX|Pemv6j3YWp{`vexU!-!N~EJ^-ajqpWjKgz=n8byv{was___| z%#+clm|1 zz@iIJvxFzZlKI~7EndNbUIUdfp${r6d#ek@1zwSOUG0civzt8`^WaX?PYjefW|W$C zW@@RB)Q5raAr6)L9F7UkQn1I&f;KWfmz4^!;j1&=rW*X*im4owKFLU`u0B7b{Th## zpr$0ADVT~ofYU{T#s_Vy3!>W7&u;>vU!_JadqIOU?V^x+z`S*J#Sc&>jX$+8J1GJv zv&QkxoIu)~AF7TPl&+5m$9tX029!?T1CDk|R%<>%>Vl-q=^DWkg zEmsh3>snK=A6vK=SrZ1Fi4^uM;6x^Fc64}N`A~CrZN}$?>sre-g}Om!AdtaunHO-~ zab!d>x`qPQH}ui`5#+~L)FN?c$`?z?pVg!&rHGF5UhHO`j`s*xq=3gT=d|x4bUwuKD?5PVw4A zLa;RNpq<9jGJhKGT)ZQfwNAR8t+gMLghcbiQ}PWKdpaRaDZnUC#3)M{6D)1ZZ=QF3 zlj@5D7KFFYUj8wM8bgBk_sN9FjlP_&f#6-Rwv-w&DC?)yUKHHdvwX=b)~HqM)+v3)+m6a> zeeZ^D>G5kuPg5E%MEKrp0)`jKjdY(;KcyFMyxPVf&##jKey%(4Re0Qn0)@s%hx|=n z1_gmQTDY;2vBN%evUs+2!-1Po>_T&d9CN`f;5}=leARwKJL>_Tzb;w%&8YW2(aF54WXzYknBz^9tPYyM7nb5WkRy0 zqrUe1TzVN5q)8C)J*$Q?8&~kykI37my!K4^5M?2|YEMf{S!(;PUOs=KQ^cGl4?~{v zQx7m04COD9IM}uyOW{}q9Cyb$I#e(KANGfNHA(IP&^84JkoGNU2(^@y<4x=ai0h-b zscmEqrQA?Rq)#Qrb*DJ$4Gkzzd3zaHXg7d*a3w zPIJtf;U8-wsg3lBCzCN!ffq48y7aT;-L(MjEXMmqzI4OU972NBLtbMQ!W^#YJ8p{G zKTRX)St3FBacaPAzYTJq8U4rB*#PR1r6fYhG${q;`0xt8-#UVZX>`;FY z&(s7BvtuXmsW4z6(1&JAKG%u?(4Z>N^wuf5j7LU=$NDPqBWBCnG2R5wYVbeqUN1Df`N+rmY;L)G7ZcGxy?B>eV&%mIc-e}1%11n(>4xXeM&t!%K0tbT_AUnSt02rIp zx@v`-S>s}rh}MHg6&X^nH7kUkqKZEtLfXe89+==7MDL-L7quw82zGu4)vjvJACJ50RFtv<4-2$b#cIPDsLS*r$Qxbgm05eE0{QBh6*w#KIMVP#AGY*Rju>Edj;UF8GC!1Gry8a68hAvb)2Uzq)Ng=qMU>)x-tH zY0T9PinTS`Se4_sebmvOmkIe@23(eRM*hP!A+-@0aG%G6L=li#6W%ZlpH9zys5RvF z+%@XD6AHi$H?QY!cSLV!Vn(&(NRQe2M5l75~xZ|SVbueFJ(TszMdwcm74cL7KZeBwV zRr34V!-2SWqYh~Sjxu`;dw5DewUknT6p1S4bhhd}?t{Bgx?l9Ak$6YCX$>B6{EZ6A zJ{e{fP}j6VwQLI)@PB}o3Hk32CHVTW^PQBX@266;*rx3KXgfm_QQ~n#qqw7kF-}sb`~C zdYPkE?6dE9!_IXDQRLbw|1eSy<;+lF?JGnWDG@R2N=!%2OhKA042w}NFd|b*J?t>v zw&k7bq^gocJg4B>wmj^cvu!HR@0(&+n1+1~=Gg$w=n9v2zk56Ns}8|dUi!$?*qRa; zhew<(3ig|)@h$H3ydyg1+uB(;f!=lV%}&&zYw$$!$IQs3_rd{&RNx?aKFD)usWqGi zhqTKbS2ghjGr2ma$S;liv4g75`Ya0b>HwR#8-(2OmIc&vnJ4X?7#gT$4PyF7p=PkP z_oSK!e0_JJHszY6;Y6^hM%ml1=_%}%CM7)%nDg;IC=_@Oy9QP)z*dVn_@Bjd?f~F} zL7Dv0Ji0Wr)*J`qp87YuYw{;>7z`hmrej=xWJNE1pm;em?SO{@pQ_aT)zUO*s;hIr z`r+HlSf9QRX)2YgBbOQdw;%^sAV~u}#@61&h=;bg*-xNFQxt5k@oa16BZJ0$i~$qI zZo{rY{eku!EZ}33qmxnG6gB0=23nhBWjiKtvZKw`Rr!yHJ`=qS0V=a!C(_k@>_X~Y zpyBY$kH{PCwqv|S!G{9{P+bzIkq~TZi%xU{b}Fw!mYbs#$jwWCuMcsijSPlDD=#rd z%XEE`as$0Mx$R02F++)Dce1uUN&Fg|AE4a#r1@ z(+Jx)mxeoOIOcq5$_x-e`C#%dV;#|?m^CSl5q(}`700Yg4#!5Uc~`Gm5~`_-^i8f6 z^P_r0=<|BLv1Ui<9o9=bRLycGgXrS1FYQsMpV>&1%vSx%hw!h-CMfv2k* zHUer;0-$9fw5Cl_z zct94lr`o)O*5W73SHQXDPM?rD!a?MD6>$*sa59W{)1K=zWUptO`M&JHGbhlLi-`S{ z8*?DtM{GQ3=2?6mwYUWf*c)U?Mw+0f7ud;*jK0mCoaY+`DMpmuJfd699im(6IQXlM zft1!f16Th?2Wm18HBx{{(4D+qC+t zflUD}i@LB<)(DyHh*w_->yD6seJlVxVB@=U+=(Gom35?t22vMgA~x!7J!=11pvg}P z2LM9ogp$k=#kow*-k~&DHnHM3XY3ZR&OmoG2)b|wwDq`UI8w1zuk{MZv84Gsa$u`W z1J2nFOQ1(4pLOdj)B^ztFhH>;;BSrt{W<3d)>t3egvY+*V9-nLR=cz*HW3sWNk}g2 zZ&Eh7R1=?Tge|*V|EAZ+P{^^j+7jr~1`)@MUOXi~^=?9?D&9FU0-w*kxV2-rrjzJ6 zjmqFo_u~^F-*Wo!NExZp3%7V*smhztuz*mq?~4cS+*`owCWEU^*eeu8)c;INOp239Bd@%F+x68u|54bt9Doh9wZZ}Ou)42q&;PIXzWcAqtot_NprhDDED*4KMFas6C3If9 zQU{SDp(qF_Bw!?=Lr@15kf5U!4P}(30>MxMggR29D4;}y7$8UnFbTy-?{`1oeD8h# zhCBSoM?;?ToOAZtYpuOEzw%}8g8cGwB3HS>F#hP;aK00}m!vRRy)yqu+GFrQK{9%P zI}Y4W^XCkN3XjJd!UR7LFXqOC45i_IBvW9x|Fg;3c+H(r3lDxXG@pt+5jL8pP!uxg zsxV{6SmbUG`c))NQN2Z`-JaqLGtdAJ=aWjB@@HABse)vKL&MC<%gulY%I5_v7e zyE`Tx#VpK2TAAKk#WEWG-{)d$o-XFNQ)%7x#|&gpE*7 z&!KCW?ZjXi zpVsfiZK1^JkSYqyoaxl2PC!d8++$}n5_!KU6Y_XOZsevJv)Hz?%+UXbFq#_a_dsYZ zeW0~`-)kV$P1jSW;vh6L(+{Y_cs&2m2ZgzBr^$0|4LC zq2~y;E9}tP@Kl&^<^sKxd^q#b&a*BIT8?n4>_>x20V%oGU}XzG1yLNBN9C6;Y5)+; z`Xle-T?b+J#CfckxE_r>4C>DcF}$AZiq|}#m*W+}*NCk$Mi42Zp}no)Owc}1kghm< zJmei21Y44E1+%k@yf6ov%wV6wU^*8Q`XZ_`VbHD)PF(gJL9e z7DxaE_1*=&`O_xA;=#{{GVhg)ijX0pY4=}x$lW|;_w6w6;w%(IYeSF2g2iC-I9GJa z!9}~%_M6{M%o;_P=WQ`?CBG=i8K(koj8iaUXIV5eu4VyJdb8~NT1?0NT%>W zizXcY8U(6)yr~?-`*?9qC%r|-8aZ-_@H%6rO2oFud;;HL0jw`*+^2DOu)qxrM_vwf zXLP;Fxr(mc$hSnjsp}sQb6jphD`7P{j`>Bbn^w)kAgHX zgP?0)2nErHnuI2>%+P_haeRv+zaj)!hTB1%fLrZ*q1{!}_{N@`HuL4Ra69cq=ZyQJ zh5-z-MBMW34LlQOs&xo5&s1;NR+uhgejK{qLYnTiJn|{}-8z=D|2^wg1B+lZ)20+!T7zS~MEWR` z@z6=(-OiQOyH*4eELwkG7iEg-Oxaa zgoKH@tX&!K79>(fD*|sfxW=d#V^(0r; z-THWiSl9+Q=g;Tmu@>ZMHlW|pX*)(e{ECxdy?j_1$cs?^{9odZgoPQPFj#y2`7NEj zp>-8ET)#h|sbYZ>S=72?(;mi#{Jp0RL9d}PnY^XFeQO(vbzwx{D?>i`fc6sx0vGqJ zY1RxFDkFqZ$EnHm2onYNija7$9Hg0rA-uTP=>mWkZZkTFhDoZ)@qCVPf^)*UpIsii zZ8FR26kFuVv0vW(3Q_yvg{gGS_F+6`RuLEi7=LYd0C+CCAsS^nccA{Iu;>sJjg&xf zYQY>y?^jU8R?3p^eH;p0rSa+BOhD|!JZ(-le%W_f*6?`0p*&%I|7h&GCb%DQOSeYy zWQaDJ8Naq?r1+zJjZS~kL;Uez>wTvv?$C~Fkr}R6J%A9&F7vZfoG<|eo`Vn+G~FXb z@aZPv_YJOit5Im&cB~5NB3q{(CXViDF;Q1-g0Y`b z^xS(-R5g_$D0&2<^y4+t7YzY_%4+;VIqDVoUH9X}EZVHq;09l#&ef!?#VKj@QB!UG z9-0#~Wa`I&b|GYwQLsl0f}ch}mn3~G7HOi^#8^uzo7EiKG*Q~+$Hik;R3np~m*f?c zqH*A_`p-dK?bW=omdtWT2o48aIg+}#)J1LK(4V`bIwB_D-5iaOL39)b=o8Tghxm`Z z*?*tQTXU=<`!KD54Ab!3oJD`n@D{?}efI|#=d}hru*kxo4nA<{-Z8=N+)=~J)b{J} zZ~yL(gEXSF$HaO1oR+L?9%zv|dNQrx;@hxL&E9%}6E-tw8!}PG!>zk! z%&HvNHoGv`IhE&7m#p=DA~sRs{)VXEHXJ)Ez40hYWB0Fzcm1+g>HRMcPHtbnP49sG za`T;+!vFK$#n1KN?f0+p{<@@jvEXs&krmV<%lM`T{nofAzcspciWk=UH_=)>Yq+9w zT$L;@NPBxt^hv-CW#Xp2GeXUvg^@3t%Fu z5N3s4#ew9Pi?yupc~@wgjRh}(pW5}+-M4LW>>fB?-i$Q%E4FdV9H}`Uz5adSo0!(> z3Y%0PPJTvFM*TXyfe(cDi0#62ZhDLpu()*LFBqVSdJc7zUSP?{9I(3|vo8z4*rRHQ z{cqG5nTTuPbN&R;Xh4{2#p`-bu?2OXo8ijH1`ZfQl{%$rLsfSw*H$4>+u`%G zK{e8+ZeIL|i=W_9j3;@2MHt2Umb1(BkNN`@Q@uL?=$BUTWxO<_YPqp$v<)CPX+?l= zTzLh2a@LnumyT;KCIYBx?GSL0IQsWF7GAN`iZ@@~eKu|$6w6NjFl>V^~{`(LAU7mk8#o`M5dlddX z3jZDjWCbqj6(d*yB3iaQC@4ZOyBr?_dg45cJ|~XV%lce)-PZ%aGaIpo38zJQc}R%& z{OhJ9bUb&oR&`_+l7@&O%JM9TeKw#*IJV}yy?Y4=GCv3`GX;ds5a`j}3WM0&br-+^ zb^#i1hUW6Kg#O&m|3s#XdeVEp!88}U#wSOzrxAZqC1TF?ocht*3PC+Ta5@l%b7mue zf~rmeQ=tt=L(cj9)PSByAvBF{sxNj75!bZ>|M(ES6|4~FI|KMJtpl8b0=^Jv(j?)> z(+Z80RGM`4(o27Zj(kmoKzw22ms-RmVQ)rl;+W;^Hjf?d2N7e?E>2d3#MY>&Efw}t zS}Siw@jfN#_}XXx$>zB-Em0ON$Oy9B3k8`7(P3{=Z<}NHk@*dSYrh|}WZ)0a9fYa0 zO%2VL*4k^xhF%CV-E8?f3=)f0m?4s%x^@%x1gq4iV(jyPN6i^>g5VUO75c&ywBSr} z+(07SKxpIK-d=(D=l4C5p8Wa5SlOK+L=?k?Sb<|DjP!cdzRL@t_YpGD+B9n+)J`yb zs8cEYjx^?>Axxgmm%4O+2{kQ!NWJPHT~P=;-@Cqbkc}8?G1Qn0pqPpoA?9R;>KSq> z@-=>kVR2@{V-5g7wDv9i$9q;^E=2&{oMm6;H@MZ+|XM5L^fS&%Ni0i4GVr2<3Ezj5Mk@%>Ya*mOm}s zE@;0$Z^(|3D0y0PpQ1NZG9aT7E)*t$jy0g+O9fuyPHsd|T zjga9Zu0j&q3{#|5jp%-^!s)>~i@q)tD((DmF62ViFqY~xC-D>VI!I1mk$k1z2}zMl zHb|+l>G*vq0WMmVsy1_(d@lGmD7X+VlC|MNlx=n?08xi#Wi0;H<%ET<(VJJxM6|Me z@vis>tdnt+^@u>MCBOK17lS9ju5AsOisP8k!iW*4xxN={m1J!8F+M%rNabWjF%ufZ z=BN6zv(=;ViEMg>4a%qe)h=1?XD{wIJ9H8yH##Cgpn*5@X%3p|P4JgXm=A#sx_$#M z;2Vj@YjY+W$U0Ae>GM1yxBEE+AYAd!O~uVta%cunDg+yl(aVMDyoE2yd#^pJA`Atr z5!)H7-Vi0Xg25a9`UqGRE{EFQl~+Y`y-fP!RBYW{xyURGTu1<%#(X-7uB&a3iHFV2 zne=Y4t`#(A$x41lRa7>9@apwZ_TFva+xLE8(wletPX{{wFQeHSqmW(m-Dg-RF2i~L zM*@17k64+&Lk~X}U4*?p+!B*+B{DyZKE~R>m1oiN1nmM^*M+*dPm0b_BH&Y?HJci5wWfXLm_0&~Iai{O+A zVUR#WpXv>X#7wx^K26`|AWokFgNF#2k1bnO%a9f5n;I0p{!ZD6UqH8M}xWBB6 zuM-4{dNeXwrXFLJp3;)nN)Y25fkcpPMOb@1@7*n>Tvu1V8CMx9P6?vZasEM+b*YeujpnG<%D%=TQ-|UIa0gK+Pfy7I5 z;Lv;5=k4`Hus^(b5B;QX(9_?cJ+_Lh-WlnY0(}DcE3t$4ITtlQ)lBZ1zBb@4?y1Yg zgyu||#d<~e95!esrlT@bkwef1A#pvqeOjs!ZuOT7^TP|?bIW#2%*FhH@!Rl?VKxd9 zjT1;AeMn5~wFuuub&zrCI_+fqHcX_$)W+Wcw6 z8vJr*xTAzv@!gnEX%liFtFDLySQ)` zm!-Zjk+}vz;MI6(qE?!&3*Lh4#Y|LDIaD9N`r;wFvU%V*NHFl|q+RqngL6rRd{KB#%E7XJ-s&(AA8V3N5D1e19>=WoCSEiP?E;UL*ySCxm zv>b1;9+Nq@GFKwesjn%SOTdSSu)LRskm=((cEWM-(d*+Nd;#>CJ|N4g{rN6JPSH1M z*Lx4Ekh#LpI0?ID`l|S@^3pMhEW_FFH8`9nV%(^^4jR5Ye>yVQKhyVjM6j2oMp0d} zKv)`nMCtqj8@3Xtxcoqu=x?xbo}n@m+G(X>_$1Qj3!FqnO;f#)pFVbp zajE7u?0ejo!WZ^nVJr#|_k7lBMYgL`GKBTqxK0AT)t0c%3bg>Hnj9y9QtGp?`R98) z#BMi%yQ|QJvJ&hJe_^)YC=a~(bR5OIr)C1gbWek>65e$=1#Uhl?~L_I|m)p$|!B@99JfOBOzVjQy1Gb@jmk~wgt zacimq;nwtM;)_3^ten0G$PE-bLR&|-h{Tkh_wTka$dSXd?T*uqlI)85ONCI3qT#V zDc|KMURvE~tTZtg_nCO40{Dwuzp;W@NGTzEm(>HlRNJO(vZM;tr^<`4M z8=Caq8~k2eETL`lZV(D%(7uONI}x5Txk}ZTn>sh((TboicOxlFW(Ib3mP>|1@u952 z)OkUweg7F-;%y~e(E@q)=^stJ_;^!+fs0kNjA}#Quk_c~03S5e-$Be4V`U-WZWt-5@lS^MrNe<#|{(R!{n4b z3?91IS-VA|gqyIVN9SIDzVp)^Z6P6V_a;|SEvt-NgZWO-7ILA7WQ5d>sTPZ3FMas@ zw;;H{d6``5R@gB_zZB5%)Mc@lhW`DbvzzB|2n`*c>z25*N`%E#+F`wH7Lp=&{%r$~ z&8xeUBud^*diPWo3d8_YL$zo$?)XQ7LLuGdF;5TZm!maCQ69s${C*2&V1 zSZ-#WOAg8ap;AX`4UVw`MbF+_#75@c@BxNDM>~r3Fdj#$k*+3LK1)HkW~6N5^T?)& zt1-c*S-!PXY}eyClhHp447E~HC(j+rxoOH`K`mRU6<-&2Q}M~|GQOF4e?e%onSl?4kI#qZvP=#)wGz<{MGJ7vb=0;sPgbCxd|t;s+}8L^!iH{ymZ5qN6WPM zq`UnzLqob$v%JSnz5?tx^}z4U?hd(^DCPL9VA#! z+hua(j{+^Se({`5S?qM6u>#qVy>$56Wop+wxcV5o)hITuLO`})rH^=92$QYYhy2JH7CtrSKhf*sh;c4CySqvVu8AlkG&sj%?m4X9XPrY{V0y|!frcN zM)%Tg$!j_K_#bBJ0q7ojYivww=`F+Rw7av2#+{6z%@7AZYugq}Od_Jb&Ap7CBWD0M zv0ecb8%Sg-NwWE0Cf+A2)7Sb1Q8q+);f^X`B`n+o9l0pV;H#B$PL{g$%Is+ZA#|c_ zVL-bpRV*1!#O2K>6xTWb+R}dsWDilWLB?>Sx8$|=RPQ3Wo~khwGE1zV5nGij@Q^|- za-7POoL`1Kf}N(gHp59P=BQ!Z6RW%JLXLPeCE-HuVn2<|__H&mt4jx&C_|9>vAxDd zbVm=|$Dol$j4fj3Ho-MNY1*>aGG{}~mdegBdF~nnrsuX=i>q8omxE~DJ-3vSRZJ5k zv{Rxd(vPw1=_ei&_^)Hh)j#qj5Jg2x9a1aav@ zil7g<^yRTt=#?!K?r>kaQreV~HEC5x^ElcmS)<}RmkhDUqFuzc{GC$WiOT~V-Kv+B zxj-{|AfcUep+HfVr*%cc0#0m)pCyVVEFG0h9m+IWroYkBeNDmGH$)Vs@Mq$(Unup8 zSoNW9?6`Qk8;&W|uo=nl9ow9Dfz3*cKTK~VR#`{BC|u(iw7!>txJJ;dJFs3lvX~*? z49RO%x!zXdx|mV@8fj-RI}U1VF(%AdrV)0zz*y*c#2(p_{n0i08&Y%oG2wsC!38%Q zG@v+i9BX7~vz`n!F`SZvaE;&1z3d{`oBP9AuF9*sOSXFE^hLLRy2Y?vr=gh42Y}vGKelP_S$OGCQ|*5*(kC;$ zKL93x=a)|FfQLknGHg4PzSpdSrG;jjbPOL3%^}QX0lIu03}s8-64SU9*{nd?eVJ+m zwH5#cz)`@keGMO1^K0l;x|; z*gakQ1SN!WqkSr?`O~v=jARQQbxcCr@4y*y8zRA$6%#T1ASAL6h!%+t?z2pl8@aQC z=ZBM~Rqwr^ep}tW!6>#NPQZIM zdhvWx&L~qCaD4&tMhhHKJiu3+k&P2s^WbF3*I{mN8+l|ne`(2^(JphuQBuzJ_MCt5 zAF!!Q*1AuRcz@1wP93wxo5|FS>KV$c$mHL7(A1WRQnSkoMq##KvM4@#YeUuevb#Hn z#Cm6Pl%>Eg+|C?B_`Lcxu1x7_#GI-{Q?sGfMX`|TEZw!k9_2KbtnOCI6SC@s^?+<4ITa;(AO$Uq9rFF9$Lv4h z8zm+Y!CK4x{Im11svr5f9f*U9m!`&ur3}*8I_Dm$hSz{B-=cB4IIe&Xt%f&}mvw-E zDLO)i0&Bh6&@9o&gi1Icdu5DHj|u3|)0ykgg}U`@Na>99Dia6>77wSE!ZY4-mg_vK zb(O=7-ZVKZOlBh-)LGVsc1FFK96vf+6PnXuJj~r@6ivQt(I5GTCM8x(xWNPHk^4H&P;oV{#KLvD-DPhl zOjEL#w3eFzUb&EQ4sS$j_dH_YtdxN=M^xF|xb!g{q?BxY_CJ(ha%O*04)BxyNqZU= zrkmL_VOknA32no45o=tfU^;R=XEg9^@!zm=ugC3CZ6`J4GkSr>=GyOlGH;GY@V_6f z^SpGmKu$2Dc#l8FF$>A8FRtrJ`2;gQ|6}uEoIR{-&ZCOm?w2eObXl;M?-@q{G+Ur#@Hk{gw3w6xGG{nR_(O+ob(%UtVp19$MLm%ubu8`r6SZi%STxwh(TL+E5t^Yxy`g$ z0yvsz{QmwVU-NP8725#@sH_yR)IjH!WuNGHV-V`pG8h53!k?%iX&{aN1V`QBZT7Fv@s;o%r^c3)Tm!0G*Zv=@+eg!Q~TAP`sF69J%DIN`MD zT56YBQ}zRs@yn1?q9JS#PRaR!z9;fqdwAceT{7zRXsAEn$X$B-$6n5)VoTr`>1s(4 zX?=I5}x_hX{SJ5UZ zvxe6QI&khq7@V8KG(qf8#;+e43I*3%^dAkFaZEYq=(Wcl^t5%(Lb z{e^NkKSb_2+1Rp>LOI*tnUY>%h3#lK?Du$}2o1rX zmxN~fLD}Saq-YPB+ZRe_ntGWupwCPlX-@ zF$ETAn3coWGxW&s?Yl$0l2w$#XQJZ-g5h?NrZ)tcQQerCubHlJ`K=L8XP#W_nDM!I zvS(U2&iNScWV?BPxIY(Pj5|rZd$W{R%B>$m!rJaUJtVH<%*<@&>ziF24&2{fcye^S ze3SNI@;R}7ChPYSNgiUx5?k$$`a3f_^7yPCPWLobqU7Sk{o$^%&7&nB2IVsTYu&iOk3K#;2DDAx|ZR66+*TwzFn5Yt5y`Mow(+7&Q5%Grg_#mE?CQ zbnR82KX5j+Z3Fp+Y5&=n|Ju9uPdY|0Ve*hjxCbA&u`;d%(W*cjfP#*Mm{d=s(!#GR ztc4HErX=;f%m?~QH3Kzo^JI!>-%#D-rj6J${wk&CxL(VEPPP@l&6zd3 zu&RS6>r-wCRWbP72xG+69@fbX0?F+y1TzO<89Dld%_86-wX7w-LrRg{$QGp}T0T$DmInl|K+BGp zi9Ga*Cu~LPcldHhzk}>%qXm80HnU>(07PE1YN(*W>UdH+lAYfGS%?BA%2yadB;OGyF)(dHERd4b(2)L(xgjp_jCtg zZbJF5;7HZSYzd7a3vTwB0UL8I$BIt;*f4;+2Qgl6mVdDJE{QhUcgN1xWOeDgqF z&sy?Yv3gkTR=FTY|Fp2ht^CjPMM`MRJ8G#yk8|3r*%8(Fxax-!pnh0GeRl(sZnsnC zK^vt{x;nJ>+}P+dIrj_)$480+ho=JLBEiK&lGh$>72nvwEzb0n17VUg$(-Df0{vn9 zI^ZK57p2NcrjlQk7>audrX8$tM3AaKX-S3{>(+nQ=weXZr1B;1t$-+ju3NlqqC8sQ?_^A?DJIQKtzTt)k-`+vY&j%af+J1DL@}N>N#7b z%*ysC0-eEvYq%i#knwY(!{!RcLp4E78g`jn_QxJBx?=WS)hrlKi^D>4R+~4+!2ogB zB1E5JvB+4k@nv7;7GAZ=ejXK&PPC-UeoDyxPGYwtC3K{L@(G?%EPjGki zD+8+Qv?1SClHz}f!c+Lnmx$zR-)3wte`imuet!Sf&Bux*N(T2CO`XmD=2#ULD&k%c zlU=igpxqnF%J!`PPMrS)OGhuduB%lWe9&gO5%3a-`f5+UB(jNbYkaJ^k6NV~>a$Kc z{P-iGK*t=KH{l$%jUma-Kg*{C%eRmD1LL;$`!`48$CDS-WqQJD1a_J65+$*d8_udX z*gcJ-cNBGZQwwcfc(HGQG*pLL+_uy!O1Nj z*jJyWGIPoibw?>GY_dkdJvJ-S(U0SHahKkZZ=3__4hUg3&QM^R&(g_JGAPSEm}?@{ z9gvs7C140hy|(Yfp@s>MSvU2$mZP=smjV+~FtDH+5*olbxTFqzoB|lmc z4k_1FZ5T&5^IBUb%*~=-Dn3IEIoK_^yDP6IBthA-As1SIyF4w>2aekq<0<=%_1Ri z4mXvshHpwr*<-()5B^h!<8z^uGrR+=8;7wjL{kC6ZAO3BX2?ZE*qIs zI-e@D2BB}6UYH?GqC}NJiBXpu4JzMd+*o2us*-pSX_>5|T5EhDocrvaV|f691j4RI zY?+#IZTpZ;WzM1ZTdhEN6!TnruQ{|;bRn6coZfriwnimhDtu83#>-+gr?N?@Qz1@u zlamt1bQSx~^sj{^9ccGwIP>EB!z80_#)~k7c-WGAN>K=9<4KNxt!5z6He~gYUIp=Xk6;Xc!qewT+ExB{G zBLOqiEIYAkZf=;&`{IdVTrgvqpLm2pu%XwH%kLHP1Q1nkD{Ha#+w2BweL?P)&j|6H z{cCi8+S$OvIfRt#%P=aJ0JDByelE`F*%2MwfME28%%-3%)p)TPLn%-Jw0R-Ok>1Ig zPGv8qZ=T}9!xNH=YdplH6#+H`j4byZ(jg7405xzGxC7PC z*D5dBcgD>N z-EtyiT&SOjI1K%qihHC&?VTK~Ez}hF$XFstFtG4a|WG!`+g?sV-TJFJiYucy+}3dp)Yc6NXBL zkq8`X#shW4Pw# zH&QXSEID7(&qWbqqBak{ARQ%tE=07``*5-oZti`OP5~1_N9R5{S$;0RHljI)u-SxokR$dlRY{pTVB}ymhe*W~tXJ4v%!yut7CbG3v7a zuVuV+T9{oRp`FhEmi~_)oS_39H5wauuL%5l+yU~E`V82bp+n%dBE^LW6&BMw{EsaT z74aKtsed0z`q)rqLbMAz6^?&_hcf^Th y2mb3f=g$25Phdg*T^D3m{JR+z&ql=G3n(!(3b}@HI*D8&XHS}+pdGt-^Zx+7HNLn2 literal 0 HcmV?d00001 diff --git a/app/src/screenshotTestFullDebug/reference/io/homeassistant/companion/android/settings/mediacontrol/MediaControlSettingsScreenScreenshotTest/Media control settings with configured entities and icons_tablet_2f22c4ea_0.png b/app/src/screenshotTestFullDebug/reference/io/homeassistant/companion/android/settings/mediacontrol/MediaControlSettingsScreenScreenshotTest/Media control settings with configured entities and icons_tablet_2f22c4ea_0.png new file mode 100644 index 0000000000000000000000000000000000000000..ed637582cfa240a242c0efb3099560302198994d GIT binary patch literal 36896 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
mRa?@?A7(GcJAM8{|Wl7`pfq169zU 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 li8VlC9`F4ky!`h2fyKw1z`q^vu{}&`X{+a*) literal 0 HcmV?d00001 diff --git a/app/src/screenshotTestFullDebug/reference/io/homeassistant/companion/android/settings/mediacontrol/MediaControlSettingsScreenScreenshotTest/Media control settings with configured entities and icons_tablet_landscape_62cae397_0.png b/app/src/screenshotTestFullDebug/reference/io/homeassistant/companion/android/settings/mediacontrol/MediaControlSettingsScreenScreenshotTest/Media control settings with configured entities and icons_tablet_landscape_62cae397_0.png new file mode 100644 index 0000000000000000000000000000000000000000..d571cafc0db99091f2bdb6d32a3ad873465736e0 GIT binary patch literal 36335 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 literal 0 HcmV?d00001 diff --git a/app/src/screenshotTestFullDebug/reference/io/homeassistant/companion/android/settings/mediacontrol/MediaControlSettingsScreenScreenshotTest/Media control settings with configured entities_foldable_c908f502_0.png b/app/src/screenshotTestFullDebug/reference/io/homeassistant/companion/android/settings/mediacontrol/MediaControlSettingsScreenScreenshotTest/Media control settings with configured entities_foldable_c908f502_0.png new file mode 100644 index 0000000000000000000000000000000000000000..298a03a48a869dab92e67bbfc6375207f112433a GIT binary patch literal 51237 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 literal 0 HcmV?d00001 diff --git a/app/src/screenshotTestFullDebug/reference/io/homeassistant/companion/android/settings/mediacontrol/MediaControlSettingsScreenScreenshotTest/Media control settings with configured entities_small_phone_66e7bbf2_0.png b/app/src/screenshotTestFullDebug/reference/io/homeassistant/companion/android/settings/mediacontrol/MediaControlSettingsScreenScreenshotTest/Media control settings with configured entities_small_phone_66e7bbf2_0.png new file mode 100644 index 0000000000000000000000000000000000000000..229918c7dbd71aa993f1258c63bf412f4c55113f GIT binary patch literal 55476 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 literal 0 HcmV?d00001 diff --git a/app/src/screenshotTestFullDebug/reference/io/homeassistant/companion/android/settings/mediacontrol/MediaControlSettingsScreenScreenshotTest/Media control settings with configured entities_tablet_2f22c4ea_0.png b/app/src/screenshotTestFullDebug/reference/io/homeassistant/companion/android/settings/mediacontrol/MediaControlSettingsScreenScreenshotTest/Media control settings with configured entities_tablet_2f22c4ea_0.png new file mode 100644 index 0000000000000000000000000000000000000000..8b68a85a385f6902701ced842e60e8ac1f31e2e3 GIT binary patch literal 35158 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
mRa?@?A7(GcJAM8{|Wl7`pfq169zU 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 literal 0 HcmV?d00001 From c3641e65f2abe83f98a489a107a8e2b76e461513 Mon Sep 17 00:00:00 2001 From: Fletcher Dostie Date: Mon, 13 Apr 2026 22:55:54 -0700 Subject: [PATCH 047/114] Remove the reconnect() call from onStartCommand so we don't cancel WebSocket subscription when we shouldn't Remove unused HaMediaNotificationProvider.kt Move commandCallback out of init block Rename reconnect() to observe() --- .../HaMediaNotificationProvider.kt | 37 ---- .../android/mediacontrol/HaMediaSession.kt | 181 +++++++++--------- .../mediacontrol/HaMediaSessionService.kt | 5 +- .../mediacontrol/HaMediaSessionServiceTest.kt | 32 +--- .../mediacontrol/HaMediaSessionTest.kt | 8 +- 5 files changed, 98 insertions(+), 165 deletions(-) delete mode 100644 app/src/main/kotlin/io/homeassistant/companion/android/mediacontrol/HaMediaNotificationProvider.kt diff --git a/app/src/main/kotlin/io/homeassistant/companion/android/mediacontrol/HaMediaNotificationProvider.kt b/app/src/main/kotlin/io/homeassistant/companion/android/mediacontrol/HaMediaNotificationProvider.kt deleted file mode 100644 index a58345c133e..00000000000 --- a/app/src/main/kotlin/io/homeassistant/companion/android/mediacontrol/HaMediaNotificationProvider.kt +++ /dev/null @@ -1,37 +0,0 @@ -package io.homeassistant.companion.android.mediacontrol - -import android.content.Context -import androidx.core.app.NotificationCompat -import androidx.media3.common.util.UnstableApi -import androidx.media3.session.CommandButton -import androidx.media3.session.DefaultMediaNotificationProvider -import androidx.media3.session.MediaNotification -import androidx.media3.session.MediaSession -import com.google.common.collect.ImmutableList -import io.homeassistant.companion.android.common.R as commonR - -/** - * Extends [DefaultMediaNotificationProvider] to display the Home Assistant notification icon - * and the media player entity's friendly name as the notification sub-text. - * - * @param sessionEntityName Maps a session ID to the friendly name of its media_player entity. - * May return null if the entity name is not yet known. - */ -@UnstableApi -class HaMediaNotificationProvider(context: Context, private val sessionEntityName: (sessionId: String) -> String?) : - DefaultMediaNotificationProvider(context) { - - init { - setSmallIcon(commonR.drawable.ic_stat_ic_notification) - } - - override fun addNotificationActions( - mediaSession: MediaSession, - mediaButtons: ImmutableList, - builder: NotificationCompat.Builder, - actionFactory: MediaNotification.ActionFactory, - ): IntArray { - sessionEntityName(mediaSession.id)?.let { builder.setSubText(it) } - return super.addNotificationActions(mediaSession, mediaButtons, builder, actionFactory) - } -} diff --git a/app/src/main/kotlin/io/homeassistant/companion/android/mediacontrol/HaMediaSession.kt b/app/src/main/kotlin/io/homeassistant/companion/android/mediacontrol/HaMediaSession.kt index f4e0f5d0692..131c59e9735 100644 --- a/app/src/main/kotlin/io/homeassistant/companion/android/mediacontrol/HaMediaSession.kt +++ b/app/src/main/kotlin/io/homeassistant/companion/android/mediacontrol/HaMediaSession.kt @@ -60,114 +60,113 @@ class HaMediaSession @AssistedInject constructor( private val mediaControlRepository: MediaControlRepository, private val serverManager: ServerManager, ) { - val mediaSession: MediaSession + private val commandCallback = object : HaRemoteMediaPlayer.CommandCallback { + override fun onPlayRequested() { + callMediaAction(ACTION_MEDIA_PLAY) + } - private val player: HaRemoteMediaPlayer + override fun onPauseRequested() { + callMediaAction(ACTION_MEDIA_PAUSE) + } - // Accessed only from loadArtworkAndUpdatePlayer, which is always called sequentially - // within startObservingState on the Default dispatcher. - // currentArtworkUrl stores the raw HA entity_picture path (not the resolved URL) so the - // cache key stays stable across local/external URL switches for the same image. - private var currentArtworkUrl: String? = null - private var currentArtworkBytes: ByteArray? = null + override fun onSeekRequested(positionMs: Long) { + callMediaAction( + action = ACTION_MEDIA_SEEK, + extraData = mapOf("seek_position" to positionMs / 1000.0), + ) + } - init { - val commandCallback = object : HaRemoteMediaPlayer.CommandCallback { - override fun onPlayRequested() { - callMediaAction(ACTION_MEDIA_PLAY) - } + override fun onNextRequested() { + callMediaAction(ACTION_MEDIA_NEXT_TRACK) + } - override fun onPauseRequested() { - callMediaAction(ACTION_MEDIA_PAUSE) - } + override fun onPreviousRequested() { + callMediaAction(ACTION_MEDIA_PREVIOUS_TRACK) + } - override fun onSeekRequested(positionMs: Long) { - callMediaAction( - action = ACTION_MEDIA_SEEK, - extraData = mapOf("seek_position" to positionMs / 1000.0), - ) - } + override fun onSetVolumeRequested(volume: Float) { + callMediaAction( + action = ACTION_VOLUME_SET, + extraData = mapOf("volume_level" to volume), + ) + } - override fun onNextRequested() { - callMediaAction(ACTION_MEDIA_NEXT_TRACK) - } + override fun onIncreaseVolumeRequested() { + callMediaAction(ACTION_VOLUME_UP) + } - override fun onPreviousRequested() { - callMediaAction(ACTION_MEDIA_PREVIOUS_TRACK) - } + override fun onDecreaseVolumeRequested() { + callMediaAction(ACTION_VOLUME_DOWN) + } - override fun onSetVolumeRequested(volume: Float) { - callMediaAction( - action = ACTION_VOLUME_SET, - extraData = mapOf("volume_level" to volume), - ) - } + override fun onMuteRequested(muted: Boolean) { + callMediaAction( + action = ACTION_VOLUME_MUTE, + extraData = mapOf("is_volume_muted" to muted), + ) + } - override fun onIncreaseVolumeRequested() { - callMediaAction(ACTION_VOLUME_UP) - } + override fun onStopRequested() { + callMediaAction(ACTION_MEDIA_STOP) + } - override fun onDecreaseVolumeRequested() { - callMediaAction(ACTION_VOLUME_DOWN) - } + override fun onShuffleRequested(shuffle: Boolean) { + callMediaAction( + action = ACTION_SHUFFLE_SET, + extraData = mapOf("shuffle" to shuffle), + ) + } - override fun onMuteRequested(muted: Boolean) { - callMediaAction( - action = ACTION_VOLUME_MUTE, - extraData = mapOf("is_volume_muted" to muted), - ) + override fun onRepeatRequested(repeatMode: MediaRepeatMode) { + val haRepeatValue = when (repeatMode) { + is MediaRepeatMode.Off -> "off" + is MediaRepeatMode.One -> "one" + is MediaRepeatMode.All -> "all" } + callMediaAction( + action = ACTION_REPEAT_SET, + extraData = mapOf("repeat" to haRepeatValue), + ) + } + } - override fun onStopRequested() { - callMediaAction(ACTION_MEDIA_STOP) - } + private val player = HaRemoteMediaPlayer(Looper.getMainLooper(), commandCallback) - override fun onShuffleRequested(shuffle: Boolean) { - callMediaAction( - action = ACTION_SHUFFLE_SET, - extraData = mapOf("shuffle" to shuffle), - ) - } + /** + * Accessed only from loadArtworkAndUpdatePlayer, which is always called sequentially + * within startObservingState on the Default dispatcher. + * currentArtworkUrl stores the raw HA entity_picture path (not the resolved URL) so the + * cache key stays stable across local/external URL switches for the same image. + */ + private var currentArtworkUrl: String? = null + private var currentArtworkBytes: ByteArray? = null - override fun onRepeatRequested(repeatMode: MediaRepeatMode) { - val haRepeatValue = when (repeatMode) { - is MediaRepeatMode.Off -> "off" - is MediaRepeatMode.One -> "one" - is MediaRepeatMode.All -> "all" - } - callMediaAction( - action = ACTION_REPEAT_SET, - extraData = mapOf("repeat" to haRepeatValue), - ) + val mediaSession: MediaSession = MediaSession.Builder(context, player) + .setId("${config.serverId}_${config.entityId}") + .setCallback(MediaSessionCallback()) + .build() + .also { session -> + /** + * FLAG_ACTIVITY_NEW_TASK is required when starting an activity from a service context + * (PendingIntents from notifications always fire in a non-Activity context). + * FLAG_ACTIVITY_SINGLE_TOP prevents stacking a redundant WebViewActivity if one is + * already at the top; onNewIntent delivers the path to the existing instance instead. + */ + val tapIntent = WebViewActivity.newInstance( + context = context, + path = "entityId:${config.entityId}", + serverId = config.serverId, + ).apply { + flags = Intent.FLAG_ACTIVITY_NEW_TASK or Intent.FLAG_ACTIVITY_SINGLE_TOP } + session.sessionActivity = PendingIntent.getActivity( + context, + "${config.serverId}:${config.entityId}".hashCode(), + tapIntent, + PendingIntent.FLAG_IMMUTABLE or PendingIntent.FLAG_UPDATE_CURRENT, + ) } - player = HaRemoteMediaPlayer(Looper.getMainLooper(), commandCallback) - - mediaSession = MediaSession.Builder(context, player) - .setId("${config.serverId}_${config.entityId}") - .setCallback(MediaSessionCallback()) - .build() - - // FLAG_ACTIVITY_NEW_TASK is required when starting an activity from a service context - // (PendingIntents from notifications always fire in a non-Activity context). - // FLAG_ACTIVITY_SINGLE_TOP prevents stacking a redundant WebViewActivity if one is - // already at the top; onNewIntent delivers the path to the existing instance instead. - val tapIntent = WebViewActivity.newInstance( - context = context, - path = "entityId:${config.entityId}", - serverId = config.serverId, - ).apply { - flags = Intent.FLAG_ACTIVITY_NEW_TASK or Intent.FLAG_ACTIVITY_SINGLE_TOP - } - mediaSession.sessionActivity = PendingIntent.getActivity( - context, - "${config.serverId}:${config.entityId}".hashCode(), - tapIntent, - PendingIntent.FLAG_IMMUTABLE or PendingIntent.FLAG_UPDATE_CURRENT, - ) - } - private var observingJob: Job? = null /** @@ -175,7 +174,7 @@ class HaMediaSession @AssistedInject constructor( * before launching a new one, making it safe to call when already observing (e.g. to * recover a stuck WebSocket subscription after a network reconnect). */ - internal fun reconnect() { + internal fun observe() { observingJob?.cancel() observingJob = scope.launch { startObservingState() } } diff --git a/app/src/main/kotlin/io/homeassistant/companion/android/mediacontrol/HaMediaSessionService.kt b/app/src/main/kotlin/io/homeassistant/companion/android/mediacontrol/HaMediaSessionService.kt index 3961f04f96e..c24dc17d939 100644 --- a/app/src/main/kotlin/io/homeassistant/companion/android/mediacontrol/HaMediaSessionService.kt +++ b/app/src/main/kotlin/io/homeassistant/companion/android/mediacontrol/HaMediaSessionService.kt @@ -69,8 +69,7 @@ class HaMediaSessionService : MediaSessionService() { override fun onGetSession(controllerInfo: MediaSession.ControllerInfo): MediaSession? = null override fun onStartCommand(intent: Intent?, flags: Int, startId: Int): Int { - Timber.d("HaMediaSessionService onStartCommand, reconnecting ${activeSessions.size} sessions") - activeSessions.values.forEach { it.reconnect() } + Timber.d("HaMediaSessionService onStartCommand, ${activeSessions.size} active sessions") return super.onStartCommand(intent, flags, startId) } @@ -117,7 +116,7 @@ class HaMediaSessionService : MediaSessionService() { scope = sessionScope, ) addSession(session.mediaSession) - session.reconnect() + session.observe() activeSessions[key] = session Timber.d("Added media session for $key") } diff --git a/app/src/test/kotlin/io/homeassistant/companion/android/mediacontrol/HaMediaSessionServiceTest.kt b/app/src/test/kotlin/io/homeassistant/companion/android/mediacontrol/HaMediaSessionServiceTest.kt index 291269eca2d..d775d0e7be0 100644 --- a/app/src/test/kotlin/io/homeassistant/companion/android/mediacontrol/HaMediaSessionServiceTest.kt +++ b/app/src/test/kotlin/io/homeassistant/companion/android/mediacontrol/HaMediaSessionServiceTest.kt @@ -54,7 +54,7 @@ private val sessionCounter = AtomicInteger(0) * delivered to the active subscriber. * * [HaMediaSession] instances are created with [UnconfinedTestDispatcher] scopes so that - * [HaMediaSession.reconnect] and [HaMediaSession.startObservingState] run eagerly. Main-looper + * [HaMediaSession.observe] and [HaMediaSession.startObservingState] run eagerly. Main-looper * tasks (such as [HaRemoteMediaPlayer.updateState] dispatched by [HaMediaSession]) are flushed * with [idleMainLooper]. * @@ -85,7 +85,7 @@ class HaMediaSessionServiceTest { every { mediaControlRepository.observeConfiguredEntities() } returns configuredEntitiesFlow coEvery { mediaControlRepository.observeEntityState(any()) } returns flowOf(null) - // Each session gets its own UnconfinedTestDispatcher scope so that reconnect() and + // Each session gets its own UnconfinedTestDispatcher scope so that observe() and // startObservingState() run eagerly on the calling thread without Thread.sleep. every { haMediaSessionFactory.create(any(), any(), any()) } answers { HaMediaSession( @@ -231,34 +231,6 @@ class HaMediaSessionServiceTest { assertTrue(Shadows.shadowOf(service).isStoppedBySelf) } - // -- onStartCommand -- - - /** - * Verifies that [HaMediaSessionService.onStartCommand] reconnects active sessions by - * restarting their observation. This is the recovery path for sessions whose WebSocket - * subscription got stuck after a network disconnect. - * - * With [UnconfinedTestDispatcher] session scopes, [HaMediaSession.reconnect] runs eagerly - * and [MediaControlRepository.observeEntityState] is called synchronously — no sleep needed. - */ - @Test - fun `Given active sessions when onStartCommand then sessions are reconnected`() { - var observeCallCount = 0 - coEvery { mediaControlRepository.observeEntityState(any()) } answers { - observeCallCount++ - MutableSharedFlow() - } - val config = uniqueConfig() - configuredEntitiesFlow.tryEmit(listOf(config)) - startObserving() - idleMainLooper() - val countAfterSetup = observeCallCount - - service.onStartCommand(intent = null, flags = 0, startId = 0) - - assertTrue(observeCallCount > countAfterSetup) - } - // -- onTaskRemoved -- @Test diff --git a/app/src/test/kotlin/io/homeassistant/companion/android/mediacontrol/HaMediaSessionTest.kt b/app/src/test/kotlin/io/homeassistant/companion/android/mediacontrol/HaMediaSessionTest.kt index cc252d71613..44bb058737e 100644 --- a/app/src/test/kotlin/io/homeassistant/companion/android/mediacontrol/HaMediaSessionTest.kt +++ b/app/src/test/kotlin/io/homeassistant/companion/android/mediacontrol/HaMediaSessionTest.kt @@ -355,15 +355,15 @@ class HaMediaSessionTest { } /** - * Verifies that calling `reconnect()` while an observation is already running cancels the + * Verifies that calling `observe()` while an observation is already running cancels the * previous observation job and starts a fresh one, re-calling `observeEntityState`. * * This is the recovery path for a stuck WebSocket subscription (flow never completes after * network disconnect). The test simulates the stuck case with a `MutableSharedFlow` that - * never completes, then verifies that `reconnect()` triggers a second subscription call. + * never completes, then verifies that `observe()` triggers a second subscription call. */ @Test - fun `Given running observation when reconnect called then observation is restarted`() { + fun `Given running observation when observe called then observation is restarted`() { var observeCallCount = 0 coEvery { mediaControlRepository.observeEntityState(config) } answers { observeCallCount++ @@ -375,7 +375,7 @@ class HaMediaSessionTest { idleMainLooper() assertEquals(1, observeCallCount) - session.reconnect() + session.observe() idleMainLooper() assertEquals(2, observeCallCount) From 08b8d6ff5819cd99f54bd1af0a6df591cbc0fe4d Mon Sep 17 00:00:00 2001 From: Fletcher Dostie Date: Mon, 13 Apr 2026 23:17:23 -0700 Subject: [PATCH 048/114] Remove retry loop from startObservingState() --- .../android/mediacontrol/HaMediaSession.kt | 33 ++++++------------- .../mediacontrol/HaMediaSessionTest.kt | 30 ++++++----------- 2 files changed, 20 insertions(+), 43 deletions(-) diff --git a/app/src/main/kotlin/io/homeassistant/companion/android/mediacontrol/HaMediaSession.kt b/app/src/main/kotlin/io/homeassistant/companion/android/mediacontrol/HaMediaSession.kt index 131c59e9735..d63f6bb46ff 100644 --- a/app/src/main/kotlin/io/homeassistant/companion/android/mediacontrol/HaMediaSession.kt +++ b/app/src/main/kotlin/io/homeassistant/companion/android/mediacontrol/HaMediaSession.kt @@ -26,13 +26,11 @@ import io.homeassistant.companion.android.util.sensitive import io.homeassistant.companion.android.webview.WebViewActivity import java.io.ByteArrayOutputStream import java.net.URL -import kotlin.time.Duration.Companion.seconds import kotlinx.coroutines.CancellationException import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.Job import kotlinx.coroutines.cancel -import kotlinx.coroutines.delay import kotlinx.coroutines.launch import kotlinx.coroutines.withContext import timber.log.Timber @@ -180,30 +178,21 @@ class HaMediaSession @AssistedInject constructor( } /** - * Observes entity state for [config] until the coroutine is cancelled. Suspends - * indefinitely, retrying after [OBSERVATION_RETRY_DELAY] whenever the WebSocket flow - * completes (e.g. on disconnection). Intended to be launched in the scope provided at - * construction time. + * Observes entity state for [config] until the flow completes or the coroutine is cancelled. + * The flow completes when the WebSocket subscription returns null (not yet connected), and + * is cancelled when the WebSocket disconnects (the backing SharedFlow's scope is cancelled). + * In both cases the session is not restarted here; reconnection happens when the user opens + * the app, which recreates active sessions via [HaMediaSessionService]. */ internal suspend fun startObservingState() { currentArtworkUrl = null - while (true) { - mediaControlRepository.observeEntityState(config).collect { state -> - if (state == null) { - // Entity not yet available or subscription not ready; keep the last - // known state visible. Flow completion triggers setConnecting() below. - return@collect - } - loadArtworkAndUpdatePlayer(state) + mediaControlRepository.observeEntityState(config).collect { state -> + if (state == null) { + return@collect } - // Flow completed (WebSocket not ready, connection lost, etc) — show buffering - // state so the notification stays visible but controls are disabled, then retry - withContext(Dispatchers.Main) { player.setConnecting() } - Timber.d( - "Media control observation completed for ${config.entityId}, retrying in $OBSERVATION_RETRY_DELAY", - ) - delay(OBSERVATION_RETRY_DELAY) + loadArtworkAndUpdatePlayer(state) } + Timber.d("Media control observation completed for ${config.entityId}") } /** Releases Media3 resources and cancels all coroutines. */ @@ -315,8 +304,6 @@ class HaMediaSession @AssistedInject constructor( } private companion object { - val OBSERVATION_RETRY_DELAY = 5.seconds - const val ACTION_MEDIA_PLAY = "media_play" const val ACTION_MEDIA_PAUSE = "media_pause" const val ACTION_MEDIA_STOP = "media_stop" diff --git a/app/src/test/kotlin/io/homeassistant/companion/android/mediacontrol/HaMediaSessionTest.kt b/app/src/test/kotlin/io/homeassistant/companion/android/mediacontrol/HaMediaSessionTest.kt index 44bb058737e..a71688f56d8 100644 --- a/app/src/test/kotlin/io/homeassistant/companion/android/mediacontrol/HaMediaSessionTest.kt +++ b/app/src/test/kotlin/io/homeassistant/companion/android/mediacontrol/HaMediaSessionTest.kt @@ -106,8 +106,8 @@ class HaMediaSessionTest { ) /** - * Drains the Robolectric main looper so that `player.updateState` and `player.setConnecting` - * calls dispatched via `withContext(Dispatchers.Main)` take effect. + * Drains the Robolectric main looper so that `player.updateState` calls dispatched via + * `withContext(Dispatchers.Main)` take effect. * * `testScope` uses [UnconfinedTestDispatcher], so coroutines run eagerly on the calling * thread until they reach a `withContext(Dispatchers.Main)` suspension point. A single @@ -125,8 +125,7 @@ class HaMediaSessionTest { * but stays open, the player retains the emitted state and does not drop to idle. * * Uses a `MutableSharedFlow` with `replay=1` so emissions are received by the Default - * dispatcher collector without racing, and the flow stays open so the observation loop - * does not call `setConnecting()` and overwrite the state. + * dispatcher collector without racing, and the flow stays open. */ @Test fun `Given observeEntityState emits state then null when startObservingState then player retains initial state`() { @@ -157,8 +156,7 @@ class HaMediaSessionTest { * to STATE_READY with `playWhenReady = true`. * * Uses `replay=1` so the emission is cached and replayed to the collector on - * [UnconfinedTestDispatcher] regardless of when it subscribes. The flow stays open so the - * observation loop does not immediately call `setConnecting()` and overwrite the READY state. + * [UnconfinedTestDispatcher] regardless of when it subscribes. The flow stays open. */ @Test fun `Given observeEntityState emits playing state when startObservingState then player is ready and playing`() { @@ -201,30 +199,22 @@ class HaMediaSessionTest { } /** - * Verifies that when `observeEntityState` flow completes (entity disconnects), the player - * enters STATE_BUFFERING (the "connecting" state) and exposes an empty command set so - * that the notification remains visible but controls are disabled. - * - * Both flows complete immediately so the observation loop calls `setConnecting()` right after - * the first iteration without needing the retry delay. Two `idleMainLooper()` calls are used: - * the first allows the playing-state update to reach the Main looper, and the second allows - * the `setConnecting()` call (which posts a new Main looper task when the coroutine resumes) - * to take effect. + * Verifies that when `observeEntityState` flow completes (WebSocket not yet connected), + * the player retains its last known state rather than resetting. */ @Test - fun `Given observeEntityState flow completes when startObservingState then player enters connecting state`() { + fun `Given observeEntityState flow completes when startObservingState then player retains last state`() { coEvery { mediaControlRepository.observeEntityState(config) } returns flowOf( createState(playbackState = MediaPlaybackState.Playing), - ) andThen emptyFlow() + ) val session = buildSession() testScope.launch { session.startObservingState() } idleMainLooper() - idleMainLooper() val player = session.mediaSession.player - assertEquals(Player.STATE_BUFFERING, player.playbackState) - assertEquals(Player.Commands.EMPTY, player.availableCommands) + assertEquals(Player.STATE_READY, player.playbackState) + assertEquals(true, player.playWhenReady) session.release() } From 4278fb2a60f0299acbb14f2725377463ff0da8d1 Mon Sep 17 00:00:00 2001 From: Fletcher Dostie Date: Mon, 13 Apr 2026 23:58:04 -0700 Subject: [PATCH 049/114] Refactor HaMediaSession.kt: Remove scope creation from this class. Instead convert observe() to a suspend fun that owns the full resource lifecycle and provides the scope. Add an ArtworkCache value class to store artwork url and bytes. --- .../android/mediacontrol/HaMediaSession.kt | 163 ++++++++++-------- .../mediacontrol/HaMediaSessionService.kt | 51 ++++-- .../server/ServerSettingsPresenterImpl.kt | 2 - .../mediacontrol/HaMediaSessionServiceTest.kt | 32 ++-- .../mediacontrol/HaMediaSessionTest.kt | 156 +++++++++-------- 5 files changed, 227 insertions(+), 177 deletions(-) diff --git a/app/src/main/kotlin/io/homeassistant/companion/android/mediacontrol/HaMediaSession.kt b/app/src/main/kotlin/io/homeassistant/companion/android/mediacontrol/HaMediaSession.kt index d63f6bb46ff..176d1f96399 100644 --- a/app/src/main/kotlin/io/homeassistant/companion/android/mediacontrol/HaMediaSession.kt +++ b/app/src/main/kotlin/io/homeassistant/companion/android/mediacontrol/HaMediaSession.kt @@ -29,8 +29,7 @@ import java.net.URL import kotlinx.coroutines.CancellationException import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.Dispatchers -import kotlinx.coroutines.Job -import kotlinx.coroutines.cancel +import kotlinx.coroutines.coroutineScope import kotlinx.coroutines.launch import kotlinx.coroutines.withContext import timber.log.Timber @@ -41,12 +40,11 @@ import timber.log.Timber * Observes [MediaControlRepository] for entity state changes, loads artwork via Coil, and * translates Media3 player commands into Home Assistant service calls via [ServerManager]. * - * Call [release] when the session is no longer needed to cancel observation and release - * Media3 resources. + * Call [observe] to start the session. The session and its Media3 resources are created when + * [observe] is called and released automatically when the calling coroutine is cancelled. * * @param context Used for Coil image loading and [MediaSession] construction. * @param config Identifies the media_player entity this session represents. - * @param scope The coroutine scope that owns this session's lifecycle. [release] cancels it. * @param mediaControlRepository Provides the per-entity state flow. * @param serverManager Used to resolve artwork base URLs and call HA integration actions. */ @@ -54,10 +52,23 @@ import timber.log.Timber class HaMediaSession @AssistedInject constructor( @Assisted private val context: Context, @Assisted private val config: MediaControlEntityConfig, - @Assisted private val scope: CoroutineScope, private val mediaControlRepository: MediaControlRepository, private val serverManager: ServerManager, ) { + /** + * The active [MediaSession] while [observe] is running, null otherwise. + * The service uses this to call [androidx.media3.session.MediaSessionService.removeSession] + * and to check playback state in [androidx.media3.session.MediaSessionService.onTaskRemoved]. + */ + var mediaSession: MediaSession? = null + private set + + /** + * The coroutine scope active during [observe], used to fire-and-forget media action calls. + * Null when no observation is running. + */ + private var actionScope: CoroutineScope? = null + private val commandCallback = object : HaRemoteMediaPlayer.CommandCallback { override fun onPlayRequested() { callMediaAction(ACTION_MEDIA_PLAY) @@ -128,18 +139,50 @@ class HaMediaSession @AssistedInject constructor( } } - private val player = HaRemoteMediaPlayer(Looper.getMainLooper(), commandCallback) + /** + * Creates the [MediaSession] and player, starts observing entity state, and suspends until + * the calling coroutine is cancelled. Calls [onSessionReady] with the new session immediately + * after creation so the caller can register it with + * [androidx.media3.session.MediaSessionService.addSession]. + * + * All Media3 resources are released in a `finally` block, so they are always cleaned up + * regardless of how the coroutine ends (cancellation or normal flow completion). + */ + suspend fun observe(onSessionReady: suspend (MediaSession) -> Unit) = coroutineScope { + actionScope = this + val player = HaRemoteMediaPlayer(Looper.getMainLooper(), commandCallback) + val session = buildMediaSession(player) + mediaSession = session + try { + onSessionReady(session) + startObservingState() + Timber.d("Media control observation completed for ${config.entityId}") + } finally { + actionScope = null + mediaSession = null + player.release() + session.release() + } + } /** - * Accessed only from loadArtworkAndUpdatePlayer, which is always called sequentially - * within startObservingState on the Default dispatcher. - * currentArtworkUrl stores the raw HA entity_picture path (not the resolved URL) so the - * cache key stays stable across local/external URL switches for the same image. + * Observes entity state for [config] until the flow completes or the coroutine is cancelled. + * The flow completes when the WebSocket subscription returns null (not yet connected), and + * is cancelled when the WebSocket disconnects (the backing SharedFlow's scope is cancelled). + * In both cases the session is not restarted here; reconnection happens when the user opens + * the app, which recreates active sessions via [HaMediaSessionService]. */ - private var currentArtworkUrl: String? = null - private var currentArtworkBytes: ByteArray? = null + internal suspend fun startObservingState() { + var artworkCache = ArtworkCache() + mediaControlRepository.observeEntityState(config).collect { state -> + if (state == null) { + return@collect + } + artworkCache = loadArtworkAndUpdatePlayer(state, artworkCache) + } + } - val mediaSession: MediaSession = MediaSession.Builder(context, player) + private fun buildMediaSession(player: HaRemoteMediaPlayer): MediaSession = MediaSession.Builder(context, player) .setId("${config.serverId}_${config.entityId}") .setCallback(MediaSessionCallback()) .build() @@ -165,44 +208,12 @@ class HaMediaSession @AssistedInject constructor( ) } - private var observingJob: Job? = null - - /** - * Starts (or restarts) observation of entity state. Cancels any in-flight observation - * before launching a new one, making it safe to call when already observing (e.g. to - * recover a stuck WebSocket subscription after a network reconnect). - */ - internal fun observe() { - observingJob?.cancel() - observingJob = scope.launch { startObservingState() } - } - - /** - * Observes entity state for [config] until the flow completes or the coroutine is cancelled. - * The flow completes when the WebSocket subscription returns null (not yet connected), and - * is cancelled when the WebSocket disconnects (the backing SharedFlow's scope is cancelled). - * In both cases the session is not restarted here; reconnection happens when the user opens - * the app, which recreates active sessions via [HaMediaSessionService]. - */ - internal suspend fun startObservingState() { - currentArtworkUrl = null - mediaControlRepository.observeEntityState(config).collect { state -> - if (state == null) { - return@collect - } - loadArtworkAndUpdatePlayer(state) - } - Timber.d("Media control observation completed for ${config.entityId}") - } - - /** Releases Media3 resources and cancels all coroutines. */ - fun release() { - scope.cancel() - mediaSession.player.release() - mediaSession.release() - } - private fun callMediaAction(action: String, extraData: Map = emptyMap()) { + val scope = actionScope + if (scope == null) { + Timber.w("callMediaAction called when not observing, ignoring action=$action") + return + } scope.launch { val actionData = hashMapOf("entity_id" to config.entityId) actionData.putAll(extraData) @@ -218,29 +229,38 @@ class HaMediaSession @AssistedInject constructor( } } - private suspend fun loadArtworkAndUpdatePlayer(state: MediaControlState) { + /** + * Loads artwork for [state] if the URL has changed, then updates the player on the main thread. + * + * @return An updated [ArtworkCache] reflecting the outcome of the load attempt. + */ + private suspend fun loadArtworkAndUpdatePlayer(state: MediaControlState, cache: ArtworkCache): ArtworkCache { val rawPictureUrl = state.entityPictureUrl - val pngBytes = if (rawPictureUrl != null && rawPictureUrl != currentArtworkUrl) { - val resolvedUrl = resolveArtworkUrl(state) - val bytes = resolvedUrl?.let { loadBitmapAsPng(it) } - if (bytes != null) { - currentArtworkUrl = rawPictureUrl - currentArtworkBytes = bytes + val (updatedCache, pngBytes) = when { + rawPictureUrl != null && rawPictureUrl != cache.url -> { + val resolvedUrl = resolveArtworkUrl(state) + val bytes = resolvedUrl?.let { loadBitmapAsPng(it) } + if (bytes != null) { + ArtworkCache(url = rawPictureUrl, bytes = bytes) to bytes + } else { + cache to cache.bytes + } } - bytes ?: currentArtworkBytes - } else if (rawPictureUrl == null) { - // The HA server temporarily removes entity_picture during track transitions - // before sending the new URL. Keep the previous artwork visible to avoid a - // blank flash; clearing currentArtworkUrl ensures the next URL triggers a fetch. - currentArtworkUrl = null - currentArtworkBytes - } else { - currentArtworkBytes + rawPictureUrl == null -> { + // The HA server temporarily removes entity_picture during track transitions + // before sending the new URL. Keep the previous artwork visible to avoid a + // blank flash; clearing the cached URL ensures the next URL triggers a fetch. + cache.copy(url = null) to cache.bytes + } + else -> cache to cache.bytes } withContext(Dispatchers.Main) { - player.updateState(state = state, artworkPngBytes = pngBytes) + mediaSession?.player?.let { player -> + (player as? HaRemoteMediaPlayer)?.updateState(state = state, artworkPngBytes = pngBytes) + } } + return updatedCache } private suspend fun resolveArtworkUrl(state: MediaControlState): String? { @@ -303,6 +323,9 @@ class HaMediaSession @AssistedInject constructor( } } + /** Immutable cache of the last successfully loaded artwork. */ + private data class ArtworkCache(val url: String? = null, val bytes: ByteArray? = null) + private companion object { const val ACTION_MEDIA_PLAY = "media_play" const val ACTION_MEDIA_PAUSE = "media_pause" @@ -318,9 +341,9 @@ class HaMediaSession @AssistedInject constructor( const val ACTION_REPEAT_SET = "repeat_set" } - /** Creates [HaMediaSession] instances with runtime-provided [context], [config], and [scope]. */ + /** Creates [HaMediaSession] instances with runtime-provided [context] and [config]. */ @AssistedFactory interface Factory { - fun create(context: Context, config: MediaControlEntityConfig, scope: CoroutineScope): HaMediaSession + fun create(context: Context, config: MediaControlEntityConfig): HaMediaSession } } diff --git a/app/src/main/kotlin/io/homeassistant/companion/android/mediacontrol/HaMediaSessionService.kt b/app/src/main/kotlin/io/homeassistant/companion/android/mediacontrol/HaMediaSessionService.kt index c24dc17d939..039db0a01a2 100644 --- a/app/src/main/kotlin/io/homeassistant/companion/android/mediacontrol/HaMediaSessionService.kt +++ b/app/src/main/kotlin/io/homeassistant/companion/android/mediacontrol/HaMediaSessionService.kt @@ -13,10 +13,12 @@ import io.homeassistant.companion.android.common.data.mediacontrol.MediaControlR import javax.inject.Inject import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.Dispatchers +import kotlinx.coroutines.Job import kotlinx.coroutines.SupervisorJob import kotlinx.coroutines.cancel import kotlinx.coroutines.flow.launchIn import kotlinx.coroutines.flow.onEach +import kotlinx.coroutines.launch import kotlinx.coroutines.withContext import timber.log.Timber @@ -37,8 +39,8 @@ class HaMediaSessionService : MediaSessionService() { @Inject lateinit var haMediaSessionFactory: HaMediaSession.Factory - // Keyed by "$serverId:$entityId" - internal val activeSessions = mutableMapOf() + // Keyed by "$serverId:$entityId". Each entry pairs the session with the job running observe(). + internal val activeSessions = mutableMapOf>() private val serviceScope = CoroutineScope(SupervisorJob() + Dispatchers.Default) @androidx.annotation.OptIn(UnstableApi::class) @@ -53,12 +55,20 @@ class HaMediaSessionService : MediaSessionService() { /** * Starts collecting [MediaControlRepository.observeConfiguredEntities] and reconciling - * sessions on each emission. Extracted to allow tests to supply a controlled [scope] without + * sessions on each emission. + * + * Both parameters are extracted to allow tests to supply controlled scopes without * calling [onCreate], which would trigger Hilt injection and Media3 setup. + * + * @param scope The scope used to collect the entities flow. + * @param sessionScope The scope used to launch each session's [HaMediaSession.observe] coroutine. */ - internal fun startObservingEntities(scope: CoroutineScope = serviceScope) { + internal fun startObservingEntities( + scope: CoroutineScope = serviceScope, + sessionScope: CoroutineScope = serviceScope, + ) { mediaControlRepository.observeConfiguredEntities() - .onEach { entities -> withContext(Dispatchers.Main) { reconcileSessions(entities) } } + .onEach { entities -> withContext(Dispatchers.Main) { reconcileSessions(entities, sessionScope) } } .launchIn(scope) } @@ -74,21 +84,27 @@ class HaMediaSessionService : MediaSessionService() { } override fun onTaskRemoved(rootIntent: Intent?) { - val anyPlaying = activeSessions.values.any { session -> - session.mediaSession.player.playWhenReady && session.mediaSession.player.mediaItemCount > 0 + val anyPlaying = activeSessions.values.any { (session, _) -> + session.mediaSession?.player?.let { it.playWhenReady && it.mediaItemCount > 0 } == true } if (!anyPlaying) stopSelf() } override fun onDestroy() { Timber.d("HaMediaSessionService destroyed") - activeSessions.values.forEach { it.release() } + activeSessions.values.forEach { (session, job) -> + session.mediaSession?.let { removeSession(it) } + job.cancel() + } activeSessions.clear() serviceScope.cancel() super.onDestroy() } - internal fun reconcileSessions(configuredEntities: List) { + internal fun reconcileSessions( + configuredEntities: List, + sessionScope: CoroutineScope = serviceScope, + ) { if (configuredEntities.isEmpty()) { Timber.d("No media control entities configured, stopping service") stopSelf() @@ -100,24 +116,25 @@ class HaMediaSessionService : MediaSessionService() { // Remove sessions that are no longer configured (currentKeys - desiredKeys).forEach { key -> - val session = activeSessions.remove(key) ?: return@forEach - removeSession(session.mediaSession) - session.release() + val (session, job) = activeSessions.remove(key) ?: return@forEach + session.mediaSession?.let { removeSession(it) } + job.cancel() Timber.d("Removed media session for $key") } // Add sessions for newly configured entities (desiredKeys - currentKeys).forEach { key -> val entityConfig = configuredEntities.first { it.sessionKey() == key } - val sessionScope = CoroutineScope(SupervisorJob() + Dispatchers.Default) val session = haMediaSessionFactory.create( context = this@HaMediaSessionService, config = entityConfig, - scope = sessionScope, ) - addSession(session.mediaSession) - session.observe() - activeSessions[key] = session + val job = sessionScope.launch { + session.observe { mediaSession -> + withContext(Dispatchers.Main) { addSession(mediaSession) } + } + } + activeSessions[key] = session to job Timber.d("Added media session for $key") } } diff --git a/app/src/main/kotlin/io/homeassistant/companion/android/settings/server/ServerSettingsPresenterImpl.kt b/app/src/main/kotlin/io/homeassistant/companion/android/settings/server/ServerSettingsPresenterImpl.kt index 65a7fdf5820..64f0c77c3e9 100644 --- a/app/src/main/kotlin/io/homeassistant/companion/android/settings/server/ServerSettingsPresenterImpl.kt +++ b/app/src/main/kotlin/io/homeassistant/companion/android/settings/server/ServerSettingsPresenterImpl.kt @@ -1,8 +1,6 @@ package io.homeassistant.companion.android.settings.server -import android.content.Context import androidx.preference.PreferenceDataStore -import dagger.hilt.android.qualifiers.ApplicationContext import io.homeassistant.companion.android.common.data.network.WifiHelper import io.homeassistant.companion.android.common.data.servers.ServerManager import javax.inject.Inject diff --git a/app/src/test/kotlin/io/homeassistant/companion/android/mediacontrol/HaMediaSessionServiceTest.kt b/app/src/test/kotlin/io/homeassistant/companion/android/mediacontrol/HaMediaSessionServiceTest.kt index d775d0e7be0..3e0b4d959fc 100644 --- a/app/src/test/kotlin/io/homeassistant/companion/android/mediacontrol/HaMediaSessionServiceTest.kt +++ b/app/src/test/kotlin/io/homeassistant/companion/android/mediacontrol/HaMediaSessionServiceTest.kt @@ -53,7 +53,8 @@ private val sessionCounter = AtomicInteger(0) * [HaMediaSessionTest] where mock flows are set up before collecting. Subsequent emissions are * delivered to the active subscriber. * - * [HaMediaSession] instances are created with [UnconfinedTestDispatcher] scopes so that + * [HaMediaSession] instances are created with [UnconfinedTestDispatcher] scopes via + * [startObserving], which passes [observationScope] as the session scope so that * [HaMediaSession.observe] and [HaMediaSession.startObservingState] run eagerly. Main-looper * tasks (such as [HaRemoteMediaPlayer.updateState] dispatched by [HaMediaSession]) are flushed * with [idleMainLooper]. @@ -85,13 +86,12 @@ class HaMediaSessionServiceTest { every { mediaControlRepository.observeConfiguredEntities() } returns configuredEntitiesFlow coEvery { mediaControlRepository.observeEntityState(any()) } returns flowOf(null) - // Each session gets its own UnconfinedTestDispatcher scope so that observe() and - // startObservingState() run eagerly on the calling thread without Thread.sleep. - every { haMediaSessionFactory.create(any(), any(), any()) } answers { + // Each session is created without a scope — HaMediaSession.observe() derives its scope + // from the coroutine that calls it (observationScope with UnconfinedTestDispatcher). + every { haMediaSessionFactory.create(any(), any()) } answers { HaMediaSession( context = firstArg(), config = secondArg(), - scope = CoroutineScope(SupervisorJob() + UnconfinedTestDispatcher()), mediaControlRepository = mediaControlRepository, serverManager = serverManager, ) @@ -106,19 +106,23 @@ class HaMediaSessionServiceTest { fun tearDown() { observationScope.cancel() // Safe when onDestroy() was already called — activeSessions will already be empty. - service.activeSessions.values.forEach { it.release() } + service.activeSessions.values.forEach { (_, job) -> job.cancel() } unmockkAll() } /** - * Starts [HaMediaSessionService.startObservingEntities] with the test scope. Because - * [configuredEntitiesFlow] uses replay=1 and [observationScope] uses [UnconfinedTestDispatcher], - * the subscriber receives any pre-emitted value immediately and runs the [onEach] block - * synchronously until it hits [withContext(Dispatchers.Main)]. Call [idleMainLooper] after - * this to flush the pending [HaMediaSessionService.reconcileSessions] task. + * Starts [HaMediaSessionService.startObservingEntities] with [observationScope] for both + * the entities flow and the per-session observation jobs. Because [configuredEntitiesFlow] + * uses replay=1 and [observationScope] uses [UnconfinedTestDispatcher], the subscriber + * receives any pre-emitted value immediately and runs the [onEach] block synchronously + * until it hits [withContext(Dispatchers.Main)]. Call [idleMainLooper] after this to flush + * the pending [HaMediaSessionService.reconcileSessions] task. */ private fun startObserving() { - service.startObservingEntities(observationScope) + service.startObservingEntities( + scope = observationScope, + sessionScope = observationScope, + ) } /** @@ -213,13 +217,13 @@ class HaMediaSessionServiceTest { configuredEntitiesFlow.tryEmit(listOf(config)) startObserving() idleMainLooper() - val sessionBefore = service.activeSessions["1:${config.entityId}"] + val entryBefore = service.activeSessions["1:${config.entityId}"] configuredEntitiesFlow.tryEmit(listOf(config)) idleMainLooper() assertEquals(1, service.activeSessions.size) - assertSame(sessionBefore, service.activeSessions["1:${config.entityId}"]) + assertSame(entryBefore, service.activeSessions["1:${config.entityId}"]) } @Test diff --git a/app/src/test/kotlin/io/homeassistant/companion/android/mediacontrol/HaMediaSessionTest.kt b/app/src/test/kotlin/io/homeassistant/companion/android/mediacontrol/HaMediaSessionTest.kt index a71688f56d8..9fd5e16c6f9 100644 --- a/app/src/test/kotlin/io/homeassistant/companion/android/mediacontrol/HaMediaSessionTest.kt +++ b/app/src/test/kotlin/io/homeassistant/companion/android/mediacontrol/HaMediaSessionTest.kt @@ -19,15 +19,14 @@ import io.mockk.slot import java.util.concurrent.atomic.AtomicInteger import kotlin.time.Duration.Companion.seconds import kotlinx.coroutines.CoroutineScope +import kotlinx.coroutines.ExperimentalCoroutinesApi import kotlinx.coroutines.SupervisorJob import kotlinx.coroutines.flow.MutableSharedFlow -import kotlinx.coroutines.flow.emptyFlow import kotlinx.coroutines.flow.flowOf -import kotlinx.coroutines.isActive import kotlinx.coroutines.launch -import kotlinx.coroutines.ExperimentalCoroutinesApi import kotlinx.coroutines.test.UnconfinedTestDispatcher import org.junit.Assert.assertEquals +import org.junit.Assert.assertNotNull import org.junit.Assert.assertNull import org.junit.Before import org.junit.Test @@ -100,7 +99,6 @@ class HaMediaSessionTest { private fun buildSession(): HaMediaSession = HaMediaSession( context = ApplicationProvider.getApplicationContext(), config = config, - scope = testScope, mediaControlRepository = mediaControlRepository, serverManager = serverManager, ) @@ -134,21 +132,23 @@ class HaMediaSessionTest { coEvery { mediaControlRepository.observeEntityState(config) } returns stateFlow val session = buildSession() - testScope.launch { session.startObservingState() } + val job = testScope.launch { + session.observe { /* no-op: addSession not needed in unit tests */ } + } idleMainLooper() - val player = session.mediaSession.player - assertEquals(Player.STATE_READY, player.playbackState) - assertEquals(true, player.playWhenReady) + val player = session.mediaSession?.player + assertEquals(Player.STATE_READY, player?.playbackState) + assertEquals(true, player?.playWhenReady) // Emitting null afterwards (simulating WebSocket-not-ready) should not clear state stateFlow.tryEmit(null) idleMainLooper() - assertEquals(Player.STATE_READY, player.playbackState) - assertEquals(true, player.playWhenReady) + assertEquals(Player.STATE_READY, player?.playbackState) + assertEquals(true, player?.playWhenReady) - session.release() + job.cancel() } /** @@ -165,14 +165,16 @@ class HaMediaSessionTest { coEvery { mediaControlRepository.observeEntityState(config) } returns stateFlow val session = buildSession() - testScope.launch { session.startObservingState() } + val job = testScope.launch { + session.observe { } + } idleMainLooper() - val player = session.mediaSession.player - assertEquals(Player.STATE_READY, player.playbackState) - assertEquals(true, player.playWhenReady) + val player = session.mediaSession?.player + assertEquals(Player.STATE_READY, player?.playbackState) + assertEquals(true, player?.playWhenReady) - session.release() + job.cancel() } /** @@ -188,14 +190,16 @@ class HaMediaSessionTest { coEvery { mediaControlRepository.observeEntityState(config) } returns stateFlow val session = buildSession() - testScope.launch { session.startObservingState() } + val job = testScope.launch { + session.observe { } + } idleMainLooper() - val player = session.mediaSession.player - assertEquals(Player.STATE_READY, player.playbackState) - assertEquals(false, player.playWhenReady) + val player = session.mediaSession?.player + assertEquals(Player.STATE_READY, player?.playbackState) + assertEquals(false, player?.playWhenReady) - session.release() + job.cancel() } /** @@ -209,14 +213,15 @@ class HaMediaSessionTest { ) val session = buildSession() - testScope.launch { session.startObservingState() } + val job = testScope.launch { + session.observe { } + } idleMainLooper() - val player = session.mediaSession.player - assertEquals(Player.STATE_READY, player.playbackState) - assertEquals(true, player.playWhenReady) - - session.release() + // Flow has completed; observe() has run its finally block and released the session. + // The player's last known state is retained until Media3 releases it. + assertNull(session.mediaSession) + org.junit.Assert.assertFalse(job.isActive) } // -- Artwork caching tests -- @@ -234,13 +239,15 @@ class HaMediaSessionTest { coEvery { mediaControlRepository.observeEntityState(config) } returns stateFlow val session = buildSession() - testScope.launch { session.startObservingState() } + val job = testScope.launch { + session.observe { } + } idleMainLooper() - val player = session.mediaSession.player - assertNull(player.mediaMetadata.artworkData) + val player = session.mediaSession?.player + assertNull(player?.mediaMetadata?.artworkData) - session.release() + job.cancel() } /** @@ -248,8 +255,8 @@ class HaMediaSessionTest { * retained — the player's metadata artwork is null and the second state's title is applied. * * This exercises the branch in `loadArtworkAndUpdatePlayer` where the URL is null: - * `currentArtworkUrl` is cleared and `currentArtworkBytes` is passed through (which is - * null here because no real image was ever loaded in this test). + * the cached URL is cleared and cached bytes are passed through (which is null here + * because no real image was ever loaded in this test). * * Uses `replay=1` for reliable delivery to the collector. The second emission is made after * the first is confirmed to be processed. @@ -261,17 +268,19 @@ class HaMediaSessionTest { coEvery { mediaControlRepository.observeEntityState(config) } returns stateFlow val session = buildSession() - testScope.launch { session.startObservingState() } + val job = testScope.launch { + session.observe { } + } idleMainLooper() stateFlow.tryEmit(createState(entityPictureUrl = null, title = "Track 2")) idleMainLooper() - val player = session.mediaSession.player - assertNull(player.mediaMetadata.artworkData) - assertEquals("Track 2", player.mediaMetadata.title?.toString()) + val player = session.mediaSession?.player + assertNull(player?.mediaMetadata?.artworkData) + assertEquals("Track 2", player?.mediaMetadata?.title?.toString()) - session.release() + job.cancel() } // -- callMediaAction tests -- @@ -291,10 +300,12 @@ class HaMediaSessionTest { coEvery { mediaControlRepository.observeEntityState(config) } returns stateFlow val session = buildSession() - testScope.launch { session.startObservingState() } + val job = testScope.launch { + session.observe { } + } idleMainLooper() - session.mediaSession.player.play() + session.mediaSession?.player?.play() shadowOf(Looper.getMainLooper()).idle() val capturedDomain = slot() @@ -309,7 +320,7 @@ class HaMediaSessionTest { assertEquals(MEDIA_PLAYER_DOMAIN, capturedDomain.captured) assertEquals("media_play", capturedAction.captured) - session.release() + job.cancel() } /** @@ -325,10 +336,12 @@ class HaMediaSessionTest { coEvery { mediaControlRepository.observeEntityState(config) } returns stateFlow val session = buildSession() - testScope.launch { session.startObservingState() } + val job = testScope.launch { + session.observe { } + } idleMainLooper() - session.mediaSession.player.pause() + session.mediaSession?.player?.pause() shadowOf(Looper.getMainLooper()).idle() val capturedAction = slot() @@ -341,58 +354,53 @@ class HaMediaSessionTest { } assertEquals("media_pause", capturedAction.captured) - session.release() + job.cancel() } + // -- observe() lifecycle tests -- + /** - * Verifies that calling `observe()` while an observation is already running cancels the - * previous observation job and starts a fresh one, re-calling `observeEntityState`. - * - * This is the recovery path for a stuck WebSocket subscription (flow never completes after - * network disconnect). The test simulates the stuck case with a `MutableSharedFlow` that - * never completes, then verifies that `observe()` triggers a second subscription call. + * Verifies that [HaMediaSession.mediaSession] is set during observation and becomes null + * after the observing job is cancelled, confirming Media3 resources are released. */ @Test - fun `Given running observation when observe called then observation is restarted`() { - var observeCallCount = 0 - coEvery { mediaControlRepository.observeEntityState(config) } answers { - observeCallCount++ - MutableSharedFlow() - } + fun `Given observing session when job cancelled then mediaSession is null`() { + val stateFlow = MutableSharedFlow(replay = 1) + stateFlow.tryEmit(createState(playbackState = MediaPlaybackState.Playing)) + coEvery { mediaControlRepository.observeEntityState(config) } returns stateFlow val session = buildSession() - testScope.launch { session.startObservingState() } + val job = testScope.launch { + session.observe { } + } idleMainLooper() - assertEquals(1, observeCallCount) - session.observe() + assertNotNull(session.mediaSession) + + job.cancel() idleMainLooper() - assertEquals(2, observeCallCount) - session.release() + assertNull(session.mediaSession) } /** - * Verifies that calling `release()` cancels the coroutine scope, preventing - * any further observation or action dispatch. + * Verifies that [HaMediaSession.observe] calls [onSessionReady] with a non-null session + * before starting state observation. */ @Test - fun `Given observing session when release called then internal scope is cancelled`() { - val stateFlow = MutableSharedFlow(replay = 1) - stateFlow.tryEmit(createState(playbackState = MediaPlaybackState.Playing)) + fun `Given session when observe called then onSessionReady is invoked with the session`() { + val stateFlow = MutableSharedFlow() coEvery { mediaControlRepository.observeEntityState(config) } returns stateFlow val session = buildSession() - testScope.launch { session.startObservingState() } + var capturedSession: androidx.media3.session.MediaSession? = null + val job = testScope.launch { + session.observe { capturedSession = it } + } idleMainLooper() - val scopeField = HaMediaSession::class.java.getDeclaredField("scope") - scopeField.isAccessible = true - val scope = scopeField.get(session) as CoroutineScope - - session.release() + assertNotNull(capturedSession) - org.junit.Assert.assertFalse(scope.isActive) + job.cancel() } - } From 26a8a839b6224a350dfef7b62e8c0e4c1fbf89a4 Mon Sep 17 00:00:00 2001 From: Fletcher Dostie Date: Tue, 14 Apr 2026 02:25:38 -0700 Subject: [PATCH 050/114] Code clarity in HaRemoteMediaPlayer.kt --- .../mediacontrol/HaRemoteMediaPlayer.kt | 23 +++++++++++-------- 1 file changed, 14 insertions(+), 9 deletions(-) diff --git a/app/src/main/kotlin/io/homeassistant/companion/android/mediacontrol/HaRemoteMediaPlayer.kt b/app/src/main/kotlin/io/homeassistant/companion/android/mediacontrol/HaRemoteMediaPlayer.kt index fa4fb3e7577..cbd532d9786 100644 --- a/app/src/main/kotlin/io/homeassistant/companion/android/mediacontrol/HaRemoteMediaPlayer.kt +++ b/app/src/main/kotlin/io/homeassistant/companion/android/mediacontrol/HaRemoteMediaPlayer.kt @@ -1,6 +1,7 @@ package io.homeassistant.companion.android.mediacontrol import android.os.Looper +import androidx.annotation.MainThread import androidx.annotation.OptIn import androidx.media3.common.DeviceInfo import androidx.media3.common.MediaMetadata @@ -17,9 +18,13 @@ import io.homeassistant.companion.android.common.data.mediacontrol.MediaRepeatMo /** * A [SimpleBasePlayer] that acts as a remote control proxy for a Home Assistant media_player entity. * It does not play audio itself — it reports state and translates playback commands into callbacks. + * + * This class is not thread-safe. All public methods must be called on the looper thread passed to + * the constructor, which is enforced by [SimpleBasePlayer]. */ @OptIn(UnstableApi::class) -class HaRemoteMediaPlayer(looper: Looper, private val commandCallback: CommandCallback) : SimpleBasePlayer(looper) { +internal class HaRemoteMediaPlayer(looper: Looper, private val commandCallback: CommandCallback) : + SimpleBasePlayer(looper) { /** Callback interface for translating player commands into HA service calls. */ interface CommandCallback { @@ -49,10 +54,10 @@ class HaRemoteMediaPlayer(looper: Looper, private val commandCallback: CommandCa /** * Updates the internal state from a new [MediaControlState] and triggers a state refresh. - * Must be called on the main thread (the looper passed to [SimpleBasePlayer]). + * Must be called on the looper thread passed to the constructor. * @param artworkPngBytes Pre-compressed PNG bytes for album art (compress off main thread). */ - @androidx.annotation.MainThread + @MainThread fun updateState(state: MediaControlState?, artworkPngBytes: ByteArray?) { isConnecting = false mediaState = state @@ -65,9 +70,9 @@ class HaRemoteMediaPlayer(looper: Looper, private val commandCallback: CommandCa * Transitions to [STATE_BUFFERING] with the last known metadata visible but all * interactive commands disabled, so the notification stays visible without showing * stale controls. - * Must be called on the main thread (the looper passed to [SimpleBasePlayer]). + * Must be called on the looper thread passed to the constructor. */ - @androidx.annotation.MainThread + @MainThread fun setConnecting() { isConnecting = true invalidateState() @@ -76,10 +81,10 @@ class HaRemoteMediaPlayer(looper: Looper, private val commandCallback: CommandCa override fun getState(): State { if (isConnecting) return buildConnectingState() val state = mediaState ?: return buildIdleState() - return buildNormalState(state, artworkBytes) + return buildConnectedState(state, artworkBytes) } - private fun buildNormalState(state: MediaControlState, artwork: ByteArray?): State { + private fun buildConnectedState(state: MediaControlState, artwork: ByteArray?): State { val availableCommands = buildAvailableCommands(state) val playbackState = when (state.playbackState) { @@ -149,11 +154,11 @@ class HaRemoteMediaPlayer(looper: Looper, private val commandCallback: CommandCa when (seekCommand) { Player.COMMAND_SEEK_TO_NEXT, Player.COMMAND_SEEK_TO_NEXT_MEDIA_ITEM, - -> commandCallback.onNextRequested() + -> commandCallback.onNextRequested() Player.COMMAND_SEEK_TO_PREVIOUS, Player.COMMAND_SEEK_TO_PREVIOUS_MEDIA_ITEM, - -> commandCallback.onPreviousRequested() + -> commandCallback.onPreviousRequested() else -> { if (mediaState?.supportsSeek == true) { From 6b823b159b0fddd1ca00e0a25874e6ed847bfd30 Mon Sep 17 00:00:00 2001 From: Fletcher Dostie Date: Tue, 14 Apr 2026 03:18:29 -0700 Subject: [PATCH 051/114] HaRemoteMediaPlayer.kt Add missing SEEK commands MediaControlSettingsScreen.kt: Use HADropdownMenu Extract Key function Use takeIf to get friendlyName MediaControlSettingsViewModel.kt: Fix drag-to-reorder Launch the init coroutine on Dispatchers.Default --- .../mediacontrol/HaRemoteMediaPlayer.kt | 11 +++++--- .../MediaControlSettingsViewModel.kt | 6 ++--- .../views/MediaControlSettingsScreen.kt | 27 +++++++++---------- .../mediacontrol/MediaControlEntityConfig.kt | 5 +++- 4 files changed, 28 insertions(+), 21 deletions(-) diff --git a/app/src/main/kotlin/io/homeassistant/companion/android/mediacontrol/HaRemoteMediaPlayer.kt b/app/src/main/kotlin/io/homeassistant/companion/android/mediacontrol/HaRemoteMediaPlayer.kt index cbd532d9786..2138e83b670 100644 --- a/app/src/main/kotlin/io/homeassistant/companion/android/mediacontrol/HaRemoteMediaPlayer.kt +++ b/app/src/main/kotlin/io/homeassistant/companion/android/mediacontrol/HaRemoteMediaPlayer.kt @@ -154,11 +154,11 @@ internal class HaRemoteMediaPlayer(looper: Looper, private val commandCallback: when (seekCommand) { Player.COMMAND_SEEK_TO_NEXT, Player.COMMAND_SEEK_TO_NEXT_MEDIA_ITEM, - -> commandCallback.onNextRequested() + -> commandCallback.onNextRequested() Player.COMMAND_SEEK_TO_PREVIOUS, Player.COMMAND_SEEK_TO_PREVIOUS_MEDIA_ITEM, - -> commandCallback.onPreviousRequested() + -> commandCallback.onPreviousRequested() else -> { if (mediaState?.supportsSeek == true) { @@ -239,7 +239,12 @@ internal class HaRemoteMediaPlayer(looper: Looper, private val commandCallback: val builder = Player.Commands.Builder() if (state.supportsPlay || state.supportsPause) builder.add(Player.COMMAND_PLAY_PAUSE) if (state.supportsStop) builder.add(Player.COMMAND_STOP) - if (state.supportsSeek) builder.add(Player.COMMAND_SEEK_IN_CURRENT_MEDIA_ITEM) + if (state.supportsSeek) { + builder.add(Player.COMMAND_SEEK_IN_CURRENT_MEDIA_ITEM) + builder.add(Player.COMMAND_SEEK_TO_DEFAULT_POSITION) + builder.add(Player.COMMAND_SEEK_BACK) + builder.add(Player.COMMAND_SEEK_FORWARD) + } builder.add(Player.COMMAND_GET_CURRENT_MEDIA_ITEM) if (state.supportsPreviousTrack) { builder.add(Player.COMMAND_SEEK_TO_PREVIOUS) diff --git a/app/src/main/kotlin/io/homeassistant/companion/android/settings/mediacontrol/MediaControlSettingsViewModel.kt b/app/src/main/kotlin/io/homeassistant/companion/android/settings/mediacontrol/MediaControlSettingsViewModel.kt index 7b321dbb37c..792a6ac4030 100644 --- a/app/src/main/kotlin/io/homeassistant/companion/android/settings/mediacontrol/MediaControlSettingsViewModel.kt +++ b/app/src/main/kotlin/io/homeassistant/companion/android/settings/mediacontrol/MediaControlSettingsViewModel.kt @@ -80,7 +80,7 @@ class MediaControlSettingsViewModel @Inject constructor( val serviceEvents: SharedFlow = _serviceEvents.asSharedFlow() init { - viewModelScope.launch { + viewModelScope.launch(Dispatchers.Default) { val loadedServers = serverManager.servers() val defaultServerId = serverManager.getServer()?.id ?: ServerManager.SERVER_ID_ACTIVE @@ -191,8 +191,8 @@ class MediaControlSettingsViewModel @Inject constructor( fun onMove(fromKey: Any, toKey: Any) { _uiState.update { state -> val list = state.configuredEntities.toMutableList() - val fromIndex = list.indexOfFirst { it == fromKey } - val toIndex = list.indexOfFirst { it == toKey } + val fromIndex = list.indexOfFirst { it.listKey() == fromKey } + val toIndex = list.indexOfFirst { it.listKey() == toKey } if (fromIndex >= 0 && toIndex >= 0) { list.add(toIndex, list.removeAt(fromIndex)) } diff --git a/app/src/main/kotlin/io/homeassistant/companion/android/settings/mediacontrol/views/MediaControlSettingsScreen.kt b/app/src/main/kotlin/io/homeassistant/companion/android/settings/mediacontrol/views/MediaControlSettingsScreen.kt index 3eaef4e8d81..a49cdff0b0b 100644 --- a/app/src/main/kotlin/io/homeassistant/companion/android/settings/mediacontrol/views/MediaControlSettingsScreen.kt +++ b/app/src/main/kotlin/io/homeassistant/companion/android/settings/mediacontrol/views/MediaControlSettingsScreen.kt @@ -32,6 +32,8 @@ import com.mikepenz.iconics.typeface.IIcon import com.mikepenz.iconics.typeface.library.community.material.CommunityMaterial import io.homeassistant.companion.android.common.R import io.homeassistant.companion.android.common.compose.composable.ButtonVariant +import io.homeassistant.companion.android.common.compose.composable.HADropdownItem +import io.homeassistant.companion.android.common.compose.composable.HADropdownMenu import io.homeassistant.companion.android.common.compose.composable.HAIconButton import io.homeassistant.companion.android.common.compose.composable.HALoading import io.homeassistant.companion.android.common.compose.theme.HADimens @@ -42,7 +44,6 @@ import io.homeassistant.companion.android.common.compose.theme.LocalHAColorSchem import io.homeassistant.companion.android.common.data.mediacontrol.MediaControlEntityConfig import io.homeassistant.companion.android.settings.mediacontrol.MediaControlSettingsUiState import io.homeassistant.companion.android.settings.mediacontrol.MediaControlSettingsViewModel -import io.homeassistant.companion.android.util.compose.ServerExposedDropdownMenu import io.homeassistant.companion.android.util.compose.entity.EntityPicker import io.homeassistant.companion.android.util.plus import io.homeassistant.companion.android.util.safeBottomPaddingValues @@ -111,12 +112,11 @@ internal fun MediaControlSettingsContent( } else { if (uiState.servers.size > 1) { item { - // TODO replace with Material3 composable https://github.com/home-assistant/android/issues/6664 - ServerExposedDropdownMenu( - servers = uiState.servers, - current = uiState.selectedServerId, - onSelected = onServerSelected, - title = R.string.server, + HADropdownMenu( + items = uiState.servers.map { HADropdownItem(key = it.id, label = it.friendlyName) }, + selectedKey = uiState.selectedServerId, + onItemSelected = onServerSelected, + label = stringResource(R.string.server), modifier = Modifier.fillMaxWidth().padding(horizontal = HADimens.SPACE4), ) Spacer(modifier = Modifier.size(HADimens.SPACE2)) @@ -140,16 +140,15 @@ internal fun MediaControlSettingsContent( itemsIndexed( items = uiState.configuredEntities, - key = { _, config -> "${config.serverId}_${config.entityId}" }, + key = { _, config -> config.listKey() }, ) { index, config -> - ReorderableItem(state = reorderState, key = "${config.serverId}_${config.entityId}") { isDragging -> + ReorderableItem(state = reorderState, key = config.listKey()) { isDragging -> ConfiguredEntityRow( config = config, - subtitle = if (uiState.servers.size > 1) { - uiState.servers.firstOrNull { it.id == config.serverId }?.friendlyName - } else { - null - }, + subtitle = uiState.servers + .takeIf { it.size > 1 } + ?.firstOrNull { it.id == config.serverId } + ?.friendlyName, entityName = uiState.entityNamesByConfig[config], entityIcon = uiState.entityIconsByConfig[config], onRemove = { onRemoveEntity(index) }, diff --git a/common/src/main/kotlin/io/homeassistant/companion/android/common/data/mediacontrol/MediaControlEntityConfig.kt b/common/src/main/kotlin/io/homeassistant/companion/android/common/data/mediacontrol/MediaControlEntityConfig.kt index 2ff9f7791d5..cf811de966c 100644 --- a/common/src/main/kotlin/io/homeassistant/companion/android/common/data/mediacontrol/MediaControlEntityConfig.kt +++ b/common/src/main/kotlin/io/homeassistant/companion/android/common/data/mediacontrol/MediaControlEntityConfig.kt @@ -1,4 +1,7 @@ package io.homeassistant.companion.android.common.data.mediacontrol /** Identifies a single `media_player` entity to expose as a native media control. */ -data class MediaControlEntityConfig(val serverId: Int, val entityId: String) +data class MediaControlEntityConfig(val serverId: Int, val entityId: String) { + /** Stable string key suitable for use as a Compose list item key. */ + fun listKey(): String = "${serverId}_$entityId" +} From 7de40bb0775046e14feded093dad13633c063cf6 Mon Sep 17 00:00:00 2001 From: Fletcher Dostie Date: Tue, 14 Apr 2026 03:41:50 -0700 Subject: [PATCH 052/114] Address PR review comments (batch 1) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Entity.kt: Fix log message typo "get getVolumeMuted" → "get volumeMuted" - strings.xml: Pluralise media_controls_summary ("a media player" → "media players") - HaMediaSessionTest.kt: Add test for callMediaAction exception-catch path (line 228) - HaMediaSessionService.kt: Restructure reconcileSessions to precompute diff on Default then batch all Android/Media3 API calls into a single withContext(Main) hop --- .../mediacontrol/HaMediaSessionService.kt | 42 +++++++++++-------- .../mediacontrol/HaMediaSessionServiceTest.kt | 11 +++-- .../mediacontrol/HaMediaSessionTest.kt | 36 ++++++++++++++++ .../android/common/data/integration/Entity.kt | 2 +- common/src/main/res/values/strings.xml | 2 +- 5 files changed, 68 insertions(+), 25 deletions(-) diff --git a/app/src/main/kotlin/io/homeassistant/companion/android/mediacontrol/HaMediaSessionService.kt b/app/src/main/kotlin/io/homeassistant/companion/android/mediacontrol/HaMediaSessionService.kt index 039db0a01a2..26ab99dbbe2 100644 --- a/app/src/main/kotlin/io/homeassistant/companion/android/mediacontrol/HaMediaSessionService.kt +++ b/app/src/main/kotlin/io/homeassistant/companion/android/mediacontrol/HaMediaSessionService.kt @@ -68,7 +68,7 @@ class HaMediaSessionService : MediaSessionService() { sessionScope: CoroutineScope = serviceScope, ) { mediaControlRepository.observeConfiguredEntities() - .onEach { entities -> withContext(Dispatchers.Main) { reconcileSessions(entities, sessionScope) } } + .onEach { entities -> reconcileSessions(entities, sessionScope) } .launchIn(scope) } @@ -101,41 +101,49 @@ class HaMediaSessionService : MediaSessionService() { super.onDestroy() } - internal fun reconcileSessions( + internal suspend fun reconcileSessions( configuredEntities: List, sessionScope: CoroutineScope = serviceScope, ) { if (configuredEntities.isEmpty()) { Timber.d("No media control entities configured, stopping service") - stopSelf() + withContext(Dispatchers.Main) { stopSelf() } return } val desiredKeys = configuredEntities.map { it.sessionKey() }.toSet() val currentKeys = activeSessions.keys.toSet() - // Remove sessions that are no longer configured - (currentKeys - desiredKeys).forEach { key -> - val (session, job) = activeSessions.remove(key) ?: return@forEach - session.mediaSession?.let { removeSession(it) } - job.cancel() - Timber.d("Removed media session for $key") + // Precompute the diff and prepare new sessions on Default before touching Main. + val toRemove = (currentKeys - desiredKeys).mapNotNull { key -> + val pair = activeSessions.remove(key) ?: return@mapNotNull null + key to pair } - - // Add sessions for newly configured entities - (desiredKeys - currentKeys).forEach { key -> + val toAdd = (desiredKeys - currentKeys).map { key -> val entityConfig = configuredEntities.first { it.sessionKey() == key } val session = haMediaSessionFactory.create( context = this@HaMediaSessionService, config = entityConfig, ) - val job = sessionScope.launch { - session.observe { mediaSession -> - withContext(Dispatchers.Main) { addSession(mediaSession) } + key to session + } + + // Execute all Android/Media3 API calls that require Main in a single dispatcher hop. + withContext(Dispatchers.Main) { + toRemove.forEach { (key, pair) -> + val (session, job) = pair + session.mediaSession?.let { removeSession(it) } + job.cancel() + Timber.d("Removed media session for $key") + } + + toAdd.forEach { (key, session) -> + val job = sessionScope.launch { + session.observe { mediaSession -> addSession(mediaSession) } } + activeSessions[key] = session to job + Timber.d("Added media session for $key") } - activeSessions[key] = session to job - Timber.d("Added media session for $key") } } diff --git a/app/src/test/kotlin/io/homeassistant/companion/android/mediacontrol/HaMediaSessionServiceTest.kt b/app/src/test/kotlin/io/homeassistant/companion/android/mediacontrol/HaMediaSessionServiceTest.kt index 3e0b4d959fc..d10d70fb624 100644 --- a/app/src/test/kotlin/io/homeassistant/companion/android/mediacontrol/HaMediaSessionServiceTest.kt +++ b/app/src/test/kotlin/io/homeassistant/companion/android/mediacontrol/HaMediaSessionServiceTest.kt @@ -114,9 +114,9 @@ class HaMediaSessionServiceTest { * Starts [HaMediaSessionService.startObservingEntities] with [observationScope] for both * the entities flow and the per-session observation jobs. Because [configuredEntitiesFlow] * uses replay=1 and [observationScope] uses [UnconfinedTestDispatcher], the subscriber - * receives any pre-emitted value immediately and runs the [onEach] block synchronously - * until it hits [withContext(Dispatchers.Main)]. Call [idleMainLooper] after this to flush - * the pending [HaMediaSessionService.reconcileSessions] task. + * receives any pre-emitted value immediately and [HaMediaSessionService.reconcileSessions] + * runs synchronously on the test dispatcher. Call [idleMainLooper] after this to flush any + * Main-thread tasks posted by [HaMediaSession] (e.g. [HaRemoteMediaPlayer.updateState]). */ private fun startObserving() { service.startObservingEntities( @@ -127,9 +127,8 @@ class HaMediaSessionServiceTest { /** * Drains the Robolectric main looper so that tasks posted via [withContext(Dispatchers.Main)] - * (e.g. [HaMediaSessionService.reconcileSessions] from the flow's [onEach] block, or - * [HaRemoteMediaPlayer.updateState] from [HaMediaSession.startObservingState]) take effect - * before assertions. + * from within [HaMediaSession] (e.g. [HaRemoteMediaPlayer.updateState] dispatched by + * [HaMediaSession.startObservingState]) take effect before assertions. * * Robolectric's [shadowOf(Looper.getMainLooper()).idle()] processes nested posts too, so a * single call is sufficient even when multiple tasks are queued in sequence. diff --git a/app/src/test/kotlin/io/homeassistant/companion/android/mediacontrol/HaMediaSessionTest.kt b/app/src/test/kotlin/io/homeassistant/companion/android/mediacontrol/HaMediaSessionTest.kt index 9fd5e16c6f9..5fcedc72457 100644 --- a/app/src/test/kotlin/io/homeassistant/companion/android/mediacontrol/HaMediaSessionTest.kt +++ b/app/src/test/kotlin/io/homeassistant/companion/android/mediacontrol/HaMediaSessionTest.kt @@ -357,6 +357,42 @@ class HaMediaSessionTest { job.cancel() } + /** + * Verifies that when `callAction` throws an exception, `callMediaAction` catches it and does + * not propagate the crash, while still having attempted the call. + * + * This guards the `catch (e: Exception)` branch at the end of `callMediaAction`, which ensures + * a transient network or server error never terminates the media session coroutine. + */ + @Test + fun `Given callAction throws when play requested then exception is caught and does not crash`() { + val stateFlow = MutableSharedFlow(replay = 1) + stateFlow.tryEmit(createState(playbackState = MediaPlaybackState.Paused)) + coEvery { mediaControlRepository.observeEntityState(config) } returns stateFlow + coEvery { + integrationRepository.callAction(any(), any(), any()) + } throws RuntimeException("Simulated server error") + + val session = buildSession() + val job = testScope.launch { + session.observe { } + } + idleMainLooper() + + session.mediaSession?.player?.play() + shadowOf(Looper.getMainLooper()).idle() + + coVerify { + integrationRepository.callAction( + domain = MEDIA_PLAYER_DOMAIN, + action = "media_play", + actionData = any(), + ) + } + + job.cancel() + } + // -- observe() lifecycle tests -- /** diff --git a/common/src/main/kotlin/io/homeassistant/companion/android/common/data/integration/Entity.kt b/common/src/main/kotlin/io/homeassistant/companion/android/common/data/integration/Entity.kt index 77b65aef6c5..c97fd3fd7b9 100644 --- a/common/src/main/kotlin/io/homeassistant/companion/android/common/data/integration/Entity.kt +++ b/common/src/main/kotlin/io/homeassistant/companion/android/common/data/integration/Entity.kt @@ -467,7 +467,7 @@ fun Entity.getVolumeMuted(): Boolean { return try { (attributes["is_volume_muted"] as? Boolean) ?: false } catch (e: Exception) { - Timber.tag(EntityExt.TAG).e(e, "Unable to get getVolumeMuted") + Timber.tag(EntityExt.TAG).e(e, "Unable to get volumeMuted") false } } diff --git a/common/src/main/res/values/strings.xml b/common/src/main/res/values/strings.xml index 4eba1fd688b..eaf6e81b66b 100644 --- a/common/src/main/res/values/strings.xml +++ b/common/src/main/res/values/strings.xml @@ -452,7 +452,7 @@ What is your Home Assistant address? Unable to add Matter device? Media controls - Control a media player from the notification shade + Control media players from the notification shade Select one or more media player entities to show as native media controls in the notification shade. You can control playback without opening the app. Add media player Add entity From 9d486438b2a98ef127612ffab5a9c07097522a39 Mon Sep 17 00:00:00 2001 From: Fletcher Dostie Date: Tue, 14 Apr 2026 03:42:33 -0700 Subject: [PATCH 053/114] HaMediaSessionService: Document why onTaskRemoved skips stopSelf when playing --- .../companion/android/mediacontrol/HaMediaSessionService.kt | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/app/src/main/kotlin/io/homeassistant/companion/android/mediacontrol/HaMediaSessionService.kt b/app/src/main/kotlin/io/homeassistant/companion/android/mediacontrol/HaMediaSessionService.kt index 26ab99dbbe2..c5819962acb 100644 --- a/app/src/main/kotlin/io/homeassistant/companion/android/mediacontrol/HaMediaSessionService.kt +++ b/app/src/main/kotlin/io/homeassistant/companion/android/mediacontrol/HaMediaSessionService.kt @@ -87,6 +87,10 @@ class HaMediaSessionService : MediaSessionService() { val anyPlaying = activeSessions.values.any { (session, _) -> session.mediaSession?.player?.let { it.playWhenReady && it.mediaItemCount > 0 } == true } + // Keep the service alive while playback is active so the media notification and + // foreground state are not torn down mid-playback. The service will stop itself + // once all sessions become idle (via reconcileSessions) or the user explicitly + // removes all configured entities. if (!anyPlaying) stopSelf() } From eda99bfc3d82ac953042eb1e8c8784f130e853ff Mon Sep 17 00:00:00 2001 From: Fletcher Dostie Date: Tue, 14 Apr 2026 03:53:19 -0700 Subject: [PATCH 054/114] HaMediaSessionService: Remove repository param from startIfConfigured MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Rename startIfConfigured(context, repo) to start(context) — the service already calls stopSelf() when reconcileSessions receives an empty entity list, so the pre-check was redundant. Remove MediaControlRepository from MediaControlStarterViewModel, MediaControlSettingsFragment, and WebViewActivity accordingly. --- .../mediacontrol/HaMediaSessionService.kt | 18 ++++++++---------- .../MediaControlStarterViewModel.kt | 16 +++++++--------- .../MediaControlSettingsFragment.kt | 6 +----- .../android/webview/WebViewActivity.kt | 6 +----- 4 files changed, 17 insertions(+), 29 deletions(-) diff --git a/app/src/main/kotlin/io/homeassistant/companion/android/mediacontrol/HaMediaSessionService.kt b/app/src/main/kotlin/io/homeassistant/companion/android/mediacontrol/HaMediaSessionService.kt index c5819962acb..858dcb5b41d 100644 --- a/app/src/main/kotlin/io/homeassistant/companion/android/mediacontrol/HaMediaSessionService.kt +++ b/app/src/main/kotlin/io/homeassistant/companion/android/mediacontrol/HaMediaSessionService.kt @@ -153,19 +153,17 @@ class HaMediaSessionService : MediaSessionService() { companion object { /** - * Starts the service if any media_player entities are configured. - * Should be called from a foreground context (e.g. Activity) to avoid + * Starts the service. Should be called from a foreground context (e.g. Activity) to avoid * Android 15+ restrictions on starting mediaPlayback foreground services from background. + * If no entities are configured the service will stop itself immediately after starting. * Once running, the service observes the database and reconciles sessions automatically. */ - suspend fun startIfConfigured(context: Context, mediaControlRepository: MediaControlRepository) { - if (mediaControlRepository.getConfiguredEntities().isNotEmpty()) { - Timber.d("Media control entities configured, starting HaMediaSessionService") - try { - context.startService(Intent(context, HaMediaSessionService::class.java)) - } catch (e: Exception) { - Timber.e(e, "Failed to start HaMediaSessionService") - } + fun start(context: Context) { + Timber.d("Starting HaMediaSessionService") + try { + context.startService(Intent(context, HaMediaSessionService::class.java)) + } catch (e: Exception) { + Timber.e(e, "Failed to start HaMediaSessionService") } } } diff --git a/app/src/main/kotlin/io/homeassistant/companion/android/mediacontrol/MediaControlStarterViewModel.kt b/app/src/main/kotlin/io/homeassistant/companion/android/mediacontrol/MediaControlStarterViewModel.kt index c30c0081822..7f0927cb4ea 100644 --- a/app/src/main/kotlin/io/homeassistant/companion/android/mediacontrol/MediaControlStarterViewModel.kt +++ b/app/src/main/kotlin/io/homeassistant/companion/android/mediacontrol/MediaControlStarterViewModel.kt @@ -3,28 +3,26 @@ package io.homeassistant.companion.android.mediacontrol import android.content.Context import androidx.lifecycle.ViewModel import dagger.hilt.android.lifecycle.HiltViewModel -import io.homeassistant.companion.android.common.data.mediacontrol.MediaControlRepository import javax.inject.Inject /** - * Thin ViewModel whose sole purpose is to hold [MediaControlRepository] for DI injection into - * composables that need to call [HaMediaSessionService.startIfConfigured]. + * Thin ViewModel whose sole purpose is to call [HaMediaSessionService.start] from a composable + * while keeping the call site free of direct service references. * * The [Context] is supplied by the call site (Activity/composable) rather than held here, keeping * this ViewModel free of Android context references. */ @HiltViewModel -internal class MediaControlStarterViewModel @Inject constructor( - private val mediaControlRepository: MediaControlRepository, -) : ViewModel() { +internal class MediaControlStarterViewModel @Inject constructor() : ViewModel() { /** - * Starts [HaMediaSessionService] if any media_player entities are configured. + * Starts [HaMediaSessionService]. If no entities are configured the service will stop itself + * immediately; otherwise it begins observing and reconciling sessions. * * @param context A foreground context (e.g. from [androidx.compose.ui.platform.LocalContext]) * required by Android 15+ restrictions on starting mediaPlayback foreground services. */ - suspend fun startIfConfigured(context: Context) { - HaMediaSessionService.startIfConfigured(context, mediaControlRepository) + fun startIfConfigured(context: Context) { + HaMediaSessionService.start(context) } } diff --git a/app/src/main/kotlin/io/homeassistant/companion/android/settings/mediacontrol/MediaControlSettingsFragment.kt b/app/src/main/kotlin/io/homeassistant/companion/android/settings/mediacontrol/MediaControlSettingsFragment.kt index c887fdddff5..282d43aa88e 100644 --- a/app/src/main/kotlin/io/homeassistant/companion/android/settings/mediacontrol/MediaControlSettingsFragment.kt +++ b/app/src/main/kotlin/io/homeassistant/companion/android/settings/mediacontrol/MediaControlSettingsFragment.kt @@ -12,19 +12,15 @@ import androidx.lifecycle.lifecycleScope import androidx.lifecycle.repeatOnLifecycle import dagger.hilt.android.AndroidEntryPoint import io.homeassistant.companion.android.common.R as commonR -import io.homeassistant.companion.android.common.data.mediacontrol.MediaControlRepository import io.homeassistant.companion.android.mediacontrol.HaMediaSessionService import io.homeassistant.companion.android.settings.addHelpMenuProvider import io.homeassistant.companion.android.settings.mediacontrol.views.MediaControlSettingsScreen -import javax.inject.Inject import kotlinx.coroutines.launch @AndroidEntryPoint class MediaControlSettingsFragment : Fragment() { private val viewModel: MediaControlSettingsViewModel by viewModels() - @Inject lateinit var mediaControlRepository: MediaControlRepository - override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View { return ComposeView(requireContext()).apply { setContent { @@ -40,7 +36,7 @@ class MediaControlSettingsFragment : Fragment() { viewModel.serviceEvents.collect { event -> when (event) { MediaControlServiceEvent.Start -> { - HaMediaSessionService.startIfConfigured(requireContext(), mediaControlRepository) + HaMediaSessionService.start(requireContext()) } } } diff --git a/app/src/main/kotlin/io/homeassistant/companion/android/webview/WebViewActivity.kt b/app/src/main/kotlin/io/homeassistant/companion/android/webview/WebViewActivity.kt index bec3cad482f..86b0821494a 100644 --- a/app/src/main/kotlin/io/homeassistant/companion/android/webview/WebViewActivity.kt +++ b/app/src/main/kotlin/io/homeassistant/companion/android/webview/WebViewActivity.kt @@ -96,7 +96,6 @@ import io.homeassistant.companion.android.barcode.BarcodeScannerActivity import io.homeassistant.companion.android.common.R as commonR import io.homeassistant.companion.android.common.data.keychain.KeyChainRepository import io.homeassistant.companion.android.common.data.keychain.NamedKeyChain -import io.homeassistant.companion.android.common.data.mediacontrol.MediaControlRepository import io.homeassistant.companion.android.common.data.prefs.NightModeTheme import io.homeassistant.companion.android.common.data.servers.ServerManager import io.homeassistant.companion.android.common.util.AppVersionProvider @@ -255,9 +254,6 @@ class WebViewActivity : @Inject lateinit var entityAddToHandler: EntityAddToHandler - @Inject - lateinit var mediaControlRepository: MediaControlRepository - @Inject lateinit var dataSourceFactory: DataSource.Factory @@ -1208,7 +1204,7 @@ class WebViewActivity : lifecycleScope.launch { SensorWorker.start(this@WebViewActivity) WebsocketManager.start(this@WebViewActivity) - HaMediaSessionService.startIfConfigured(this@WebViewActivity, mediaControlRepository) + HaMediaSessionService.start(this@WebViewActivity) WebView.setWebContentsDebuggingEnabled(BuildConfig.DEBUG || presenter.isWebViewDebugEnabled()) From 5766948005f3fbfe5a5510f2cfc03f98279ff4e2 Mon Sep 17 00:00:00 2001 From: Fletcher Dostie Date: Tue, 14 Apr 2026 03:54:40 -0700 Subject: [PATCH 055/114] WebViewActivity: Revert unrelated deep-link handling change --- .../android/webview/WebViewActivity.kt | 22 ++++++------------- 1 file changed, 7 insertions(+), 15 deletions(-) diff --git a/app/src/main/kotlin/io/homeassistant/companion/android/webview/WebViewActivity.kt b/app/src/main/kotlin/io/homeassistant/companion/android/webview/WebViewActivity.kt index 86b0821494a..9af11e75b35 100644 --- a/app/src/main/kotlin/io/homeassistant/companion/android/webview/WebViewActivity.kt +++ b/app/src/main/kotlin/io/homeassistant/companion/android/webview/WebViewActivity.kt @@ -1422,22 +1422,14 @@ class WebViewActivity : // https://github.com/home-assistant/core/blob/dev/homeassistant/core.py#L159 val pattern = "(?<=^entityId:)((?!.+__)(?!_)[\\da-z_]+(? Date: Tue, 14 Apr 2026 03:55:55 -0700 Subject: [PATCH 056/114] MediaControlSettings: Move HATheme from Screen composable into Fragment setContent --- .../MediaControlSettingsFragment.kt | 5 ++++- .../views/MediaControlSettingsScreen.kt | 21 ++++++++----------- 2 files changed, 13 insertions(+), 13 deletions(-) diff --git a/app/src/main/kotlin/io/homeassistant/companion/android/settings/mediacontrol/MediaControlSettingsFragment.kt b/app/src/main/kotlin/io/homeassistant/companion/android/settings/mediacontrol/MediaControlSettingsFragment.kt index 282d43aa88e..9880613229b 100644 --- a/app/src/main/kotlin/io/homeassistant/companion/android/settings/mediacontrol/MediaControlSettingsFragment.kt +++ b/app/src/main/kotlin/io/homeassistant/companion/android/settings/mediacontrol/MediaControlSettingsFragment.kt @@ -12,6 +12,7 @@ import androidx.lifecycle.lifecycleScope import androidx.lifecycle.repeatOnLifecycle import dagger.hilt.android.AndroidEntryPoint import io.homeassistant.companion.android.common.R as commonR +import io.homeassistant.companion.android.common.compose.theme.HATheme import io.homeassistant.companion.android.mediacontrol.HaMediaSessionService import io.homeassistant.companion.android.settings.addHelpMenuProvider import io.homeassistant.companion.android.settings.mediacontrol.views.MediaControlSettingsScreen @@ -24,7 +25,9 @@ class MediaControlSettingsFragment : Fragment() { override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View { return ComposeView(requireContext()).apply { setContent { - MediaControlSettingsScreen(viewModel = viewModel) + HATheme { + MediaControlSettingsScreen(viewModel = viewModel) + } } } } diff --git a/app/src/main/kotlin/io/homeassistant/companion/android/settings/mediacontrol/views/MediaControlSettingsScreen.kt b/app/src/main/kotlin/io/homeassistant/companion/android/settings/mediacontrol/views/MediaControlSettingsScreen.kt index a49cdff0b0b..4854a5176b3 100644 --- a/app/src/main/kotlin/io/homeassistant/companion/android/settings/mediacontrol/views/MediaControlSettingsScreen.kt +++ b/app/src/main/kotlin/io/homeassistant/companion/android/settings/mediacontrol/views/MediaControlSettingsScreen.kt @@ -38,7 +38,6 @@ import io.homeassistant.companion.android.common.compose.composable.HAIconButton import io.homeassistant.companion.android.common.compose.composable.HALoading import io.homeassistant.companion.android.common.compose.theme.HADimens import io.homeassistant.companion.android.common.compose.theme.HATextStyle -import io.homeassistant.companion.android.common.compose.theme.HATheme import io.homeassistant.companion.android.common.compose.theme.HAThemeForPreview import io.homeassistant.companion.android.common.compose.theme.LocalHAColorScheme import io.homeassistant.companion.android.common.data.mediacontrol.MediaControlEntityConfig @@ -55,17 +54,15 @@ import sh.calvin.reorderable.rememberReorderableLazyListState @Composable fun MediaControlSettingsScreen(viewModel: MediaControlSettingsViewModel, modifier: Modifier = Modifier) { val uiState by viewModel.uiState.collectAsStateWithLifecycle() - HATheme { - MediaControlSettingsContent( - uiState = uiState, - onServerSelected = viewModel::selectServerId, - onEntitySelected = viewModel::addEntity, - onRemoveEntity = viewModel::removeEntity, - onMove = viewModel::onMove, - onReorderComplete = viewModel::onReorderComplete, - modifier = modifier, - ) - } + MediaControlSettingsContent( + uiState = uiState, + onServerSelected = viewModel::selectServerId, + onEntitySelected = viewModel::addEntity, + onRemoveEntity = viewModel::removeEntity, + onMove = viewModel::onMove, + onReorderComplete = viewModel::onReorderComplete, + modifier = modifier, + ) } @Composable From 1f607e80a3aeb6a2621b4d9c437e663a60497d3c Mon Sep 17 00:00:00 2001 From: Fletcher Dostie Date: Tue, 14 Apr 2026 03:56:36 -0700 Subject: [PATCH 057/114] =?UTF-8?q?HaMediaSessionServiceTest:=20Remove=20r?= =?UTF-8?q?edundant=20unmockkAll()=20=E2=80=94=20instance=20mocks=20don't?= =?UTF-8?q?=20need=20global=20cleanup?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../companion/android/mediacontrol/HaMediaSessionServiceTest.kt | 2 -- 1 file changed, 2 deletions(-) diff --git a/app/src/test/kotlin/io/homeassistant/companion/android/mediacontrol/HaMediaSessionServiceTest.kt b/app/src/test/kotlin/io/homeassistant/companion/android/mediacontrol/HaMediaSessionServiceTest.kt index d10d70fb624..9c8e84213a7 100644 --- a/app/src/test/kotlin/io/homeassistant/companion/android/mediacontrol/HaMediaSessionServiceTest.kt +++ b/app/src/test/kotlin/io/homeassistant/companion/android/mediacontrol/HaMediaSessionServiceTest.kt @@ -13,7 +13,6 @@ import io.homeassistant.companion.android.testing.unit.ConsoleLogRule import io.mockk.coEvery import io.mockk.every import io.mockk.mockk -import io.mockk.unmockkAll import java.util.concurrent.atomic.AtomicInteger import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.ExperimentalCoroutinesApi @@ -107,7 +106,6 @@ class HaMediaSessionServiceTest { observationScope.cancel() // Safe when onDestroy() was already called — activeSessions will already be empty. service.activeSessions.values.forEach { (_, job) -> job.cancel() } - unmockkAll() } /** From 3b85483cb30124d5b8d26dc38017375c9437e9e0 Mon Sep 17 00:00:00 2001 From: Fletcher Dostie Date: Tue, 14 Apr 2026 03:59:04 -0700 Subject: [PATCH 058/114] MediaControlConfig: Rename position column to index MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 'position' was ambiguous — it looked like a playback position. Rename to 'index' throughout (entity, DAO, repository). --- .../52.json | 10 +++++----- .../data/mediacontrol/MediaControlRepositoryImpl.kt | 2 +- .../database/mediacontrol/MediaControlConfig.kt | 4 ++-- .../android/database/mediacontrol/MediaControlDao.kt | 4 ++-- 4 files changed, 10 insertions(+), 10 deletions(-) diff --git a/common/schemas/io.homeassistant.companion.android.database.AppDatabase/52.json b/common/schemas/io.homeassistant.companion.android.database.AppDatabase/52.json index f830e347c14..b84d3a58560 100644 --- a/common/schemas/io.homeassistant.companion.android.database.AppDatabase/52.json +++ b/common/schemas/io.homeassistant.companion.android.database.AppDatabase/52.json @@ -2,7 +2,7 @@ "formatVersion": 1, "database": { "version": 52, - "identityHash": "c4130a8113d8dec57f7821bcd94d52b1", + "identityHash": "3c21b887932188439db367536976cf8a", "entities": [ { "tableName": "sensor_attributes", @@ -1144,7 +1144,7 @@ }, { "tableName": "media_control_entity_config", - "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`id` INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, `server_id` INTEGER NOT NULL, `entity_id` TEXT NOT NULL, `position` INTEGER NOT NULL)", + "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`id` INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, `server_id` INTEGER NOT NULL, `entity_id` TEXT NOT NULL, `index` INTEGER NOT NULL)", "fields": [ { "fieldPath": "id", @@ -1165,8 +1165,8 @@ "notNull": true }, { - "fieldPath": "position", - "columnName": "position", + "fieldPath": "index", + "columnName": "index", "affinity": "INTEGER", "notNull": true } @@ -1181,7 +1181,7 @@ ], "setupQueries": [ "CREATE TABLE IF NOT EXISTS room_master_table (id INTEGER PRIMARY KEY,identity_hash TEXT)", - "INSERT OR REPLACE INTO room_master_table (id,identity_hash) VALUES(42, 'c4130a8113d8dec57f7821bcd94d52b1')" + "INSERT OR REPLACE INTO room_master_table (id,identity_hash) VALUES(42, '3c21b887932188439db367536976cf8a')" ] } } \ No newline at end of file diff --git a/common/src/main/kotlin/io/homeassistant/companion/android/common/data/mediacontrol/MediaControlRepositoryImpl.kt b/common/src/main/kotlin/io/homeassistant/companion/android/common/data/mediacontrol/MediaControlRepositoryImpl.kt index 630c03be6a5..8e83c3b5744 100644 --- a/common/src/main/kotlin/io/homeassistant/companion/android/common/data/mediacontrol/MediaControlRepositoryImpl.kt +++ b/common/src/main/kotlin/io/homeassistant/companion/android/common/data/mediacontrol/MediaControlRepositoryImpl.kt @@ -109,7 +109,7 @@ internal class MediaControlRepositoryImpl @Inject constructor( MediaControlConfig( serverId = config.serverId, entityId = config.entityId, - position = index, + index = index, ) }, ) diff --git a/common/src/main/kotlin/io/homeassistant/companion/android/database/mediacontrol/MediaControlConfig.kt b/common/src/main/kotlin/io/homeassistant/companion/android/database/mediacontrol/MediaControlConfig.kt index e5292a81cf9..7ca3d4644d9 100644 --- a/common/src/main/kotlin/io/homeassistant/companion/android/database/mediacontrol/MediaControlConfig.kt +++ b/common/src/main/kotlin/io/homeassistant/companion/android/database/mediacontrol/MediaControlConfig.kt @@ -14,6 +14,6 @@ data class MediaControlConfig( val serverId: Int, @ColumnInfo(name = "entity_id") val entityId: String, - @ColumnInfo(name = "position") - val position: Int, + @ColumnInfo(name = "index") + val index: Int, ) diff --git a/common/src/main/kotlin/io/homeassistant/companion/android/database/mediacontrol/MediaControlDao.kt b/common/src/main/kotlin/io/homeassistant/companion/android/database/mediacontrol/MediaControlDao.kt index 0ee592b6c1f..29c9eb8c40a 100644 --- a/common/src/main/kotlin/io/homeassistant/companion/android/database/mediacontrol/MediaControlDao.kt +++ b/common/src/main/kotlin/io/homeassistant/companion/android/database/mediacontrol/MediaControlDao.kt @@ -10,10 +10,10 @@ import kotlinx.coroutines.flow.Flow @Dao interface MediaControlDao { - @Query("SELECT * FROM media_control_entity_config ORDER BY position ASC") + @Query("SELECT * FROM media_control_entity_config ORDER BY `index` ASC") fun getAllFlow(): Flow> - @Query("SELECT * FROM media_control_entity_config ORDER BY position ASC") + @Query("SELECT * FROM media_control_entity_config ORDER BY `index` ASC") suspend fun getAll(): List @Insert(onConflict = OnConflictStrategy.REPLACE) From 5d53fe6c8d7b8382716d6824c119c4714cc72e99 Mon Sep 17 00:00:00 2001 From: Fletcher Dostie Date: Tue, 14 Apr 2026 18:14:49 -0700 Subject: [PATCH 059/114] Revert changes to ServerSettingsPresenterImpl.kt; Revert log message change 'Unable to get getVolumeMuted' to match other log messages; Add OptIn import --- .../companion/android/mediacontrol/HaMediaSessionService.kt | 3 ++- .../android/settings/server/ServerSettingsPresenterImpl.kt | 5 ----- .../companion/android/common/data/integration/Entity.kt | 2 +- 3 files changed, 3 insertions(+), 7 deletions(-) diff --git a/app/src/main/kotlin/io/homeassistant/companion/android/mediacontrol/HaMediaSessionService.kt b/app/src/main/kotlin/io/homeassistant/companion/android/mediacontrol/HaMediaSessionService.kt index 858dcb5b41d..7fee50bbe9d 100644 --- a/app/src/main/kotlin/io/homeassistant/companion/android/mediacontrol/HaMediaSessionService.kt +++ b/app/src/main/kotlin/io/homeassistant/companion/android/mediacontrol/HaMediaSessionService.kt @@ -2,6 +2,7 @@ package io.homeassistant.companion.android.mediacontrol import android.content.Context import android.content.Intent +import androidx.annotation.OptIn import androidx.media3.common.util.UnstableApi import androidx.media3.session.DefaultMediaNotificationProvider import androidx.media3.session.MediaSession @@ -43,7 +44,7 @@ class HaMediaSessionService : MediaSessionService() { internal val activeSessions = mutableMapOf>() private val serviceScope = CoroutineScope(SupervisorJob() + Dispatchers.Default) - @androidx.annotation.OptIn(UnstableApi::class) + @OptIn(UnstableApi::class) override fun onCreate() { super.onCreate() val notificationProvider = DefaultMediaNotificationProvider.Builder(this).build() diff --git a/app/src/main/kotlin/io/homeassistant/companion/android/settings/server/ServerSettingsPresenterImpl.kt b/app/src/main/kotlin/io/homeassistant/companion/android/settings/server/ServerSettingsPresenterImpl.kt index 64f0c77c3e9..67d8532c554 100644 --- a/app/src/main/kotlin/io/homeassistant/companion/android/settings/server/ServerSettingsPresenterImpl.kt +++ b/app/src/main/kotlin/io/homeassistant/companion/android/settings/server/ServerSettingsPresenterImpl.kt @@ -46,7 +46,6 @@ class ServerSettingsPresenterImpl @Inject constructor( "app_lock_home_bypass" -> serverManager.authenticationRepository( serverId, ).setLockHomeBypassEnabled(value) - else -> throw IllegalArgumentException("No boolean found by this key: $key") } } @@ -75,7 +74,6 @@ class ServerSettingsPresenterImpl @Inject constructor( } view.updateServerName(serverManager.getServer(serverId)?.friendlyName ?: "") } - "registration_name" -> { serverManager.getServer(serverId)?.let { serverManager.updateServer( @@ -85,7 +83,6 @@ class ServerSettingsPresenterImpl @Inject constructor( ) } } - "connection_internal" -> { serverManager.getServer(serverId)?.let { serverManager.updateServer( @@ -97,7 +94,6 @@ class ServerSettingsPresenterImpl @Inject constructor( ) } } - "session_timeout" -> { try { serverManager.integrationRepository(serverId).sessionTimeOut(value.toString().toInt()) @@ -105,7 +101,6 @@ class ServerSettingsPresenterImpl @Inject constructor( Timber.e(e, "Issue saving session timeout value") } } - else -> throw IllegalArgumentException("No string found by this key: $key") } } diff --git a/common/src/main/kotlin/io/homeassistant/companion/android/common/data/integration/Entity.kt b/common/src/main/kotlin/io/homeassistant/companion/android/common/data/integration/Entity.kt index c97fd3fd7b9..77b65aef6c5 100644 --- a/common/src/main/kotlin/io/homeassistant/companion/android/common/data/integration/Entity.kt +++ b/common/src/main/kotlin/io/homeassistant/companion/android/common/data/integration/Entity.kt @@ -467,7 +467,7 @@ fun Entity.getVolumeMuted(): Boolean { return try { (attributes["is_volume_muted"] as? Boolean) ?: false } catch (e: Exception) { - Timber.tag(EntityExt.TAG).e(e, "Unable to get volumeMuted") + Timber.tag(EntityExt.TAG).e(e, "Unable to get getVolumeMuted") false } } From 20757c45908269c2d677701f8695c917c97619df Mon Sep 17 00:00:00 2001 From: Fletcher Dostie Date: Tue, 14 Apr 2026 19:03:10 -0700 Subject: [PATCH 060/114] Fix crash when removing/readding entity in settings --- .../companion/android/mediacontrol/HaMediaSession.kt | 7 +++++-- .../android/mediacontrol/HaMediaSessionService.kt | 3 ++- 2 files changed, 7 insertions(+), 3 deletions(-) diff --git a/app/src/main/kotlin/io/homeassistant/companion/android/mediacontrol/HaMediaSession.kt b/app/src/main/kotlin/io/homeassistant/companion/android/mediacontrol/HaMediaSession.kt index 176d1f96399..349b5368f8f 100644 --- a/app/src/main/kotlin/io/homeassistant/companion/android/mediacontrol/HaMediaSession.kt +++ b/app/src/main/kotlin/io/homeassistant/companion/android/mediacontrol/HaMediaSession.kt @@ -29,6 +29,7 @@ import java.net.URL import kotlinx.coroutines.CancellationException import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.Dispatchers +import kotlinx.coroutines.NonCancellable import kotlinx.coroutines.coroutineScope import kotlinx.coroutines.launch import kotlinx.coroutines.withContext @@ -160,8 +161,10 @@ class HaMediaSession @AssistedInject constructor( } finally { actionScope = null mediaSession = null - player.release() - session.release() + withContext(NonCancellable + Dispatchers.Main) { + player.release() + session.release() + } } } diff --git a/app/src/main/kotlin/io/homeassistant/companion/android/mediacontrol/HaMediaSessionService.kt b/app/src/main/kotlin/io/homeassistant/companion/android/mediacontrol/HaMediaSessionService.kt index 7fee50bbe9d..35ef1356362 100644 --- a/app/src/main/kotlin/io/homeassistant/companion/android/mediacontrol/HaMediaSessionService.kt +++ b/app/src/main/kotlin/io/homeassistant/companion/android/mediacontrol/HaMediaSessionService.kt @@ -17,6 +17,7 @@ import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.Job import kotlinx.coroutines.SupervisorJob import kotlinx.coroutines.cancel +import kotlinx.coroutines.cancelAndJoin import kotlinx.coroutines.flow.launchIn import kotlinx.coroutines.flow.onEach import kotlinx.coroutines.launch @@ -138,7 +139,7 @@ class HaMediaSessionService : MediaSessionService() { toRemove.forEach { (key, pair) -> val (session, job) = pair session.mediaSession?.let { removeSession(it) } - job.cancel() + job.cancelAndJoin() Timber.d("Removed media session for $key") } From e2c21203dcef8a15a2f0f9315cbfd7c168b1e817 Mon Sep 17 00:00:00 2001 From: Fletcher Dostie Date: Tue, 14 Apr 2026 22:37:34 -0700 Subject: [PATCH 061/114] Workaround for notification disappearing after adding two entities and removing one --- .../android/mediacontrol/HaMediaSession.kt | 29 +++++++++++++++-- .../mediacontrol/HaMediaSessionService.kt | 32 +++++++++++++++++++ .../MediaControlRepositoryImpl.kt | 23 ++++++++++--- 3 files changed, 78 insertions(+), 6 deletions(-) diff --git a/app/src/main/kotlin/io/homeassistant/companion/android/mediacontrol/HaMediaSession.kt b/app/src/main/kotlin/io/homeassistant/companion/android/mediacontrol/HaMediaSession.kt index 349b5368f8f..088ccaf4926 100644 --- a/app/src/main/kotlin/io/homeassistant/companion/android/mediacontrol/HaMediaSession.kt +++ b/app/src/main/kotlin/io/homeassistant/companion/android/mediacontrol/HaMediaSession.kt @@ -19,6 +19,7 @@ import io.homeassistant.companion.android.common.data.integration.IntegrationDom import io.homeassistant.companion.android.common.data.mediacontrol.MediaControlEntityConfig import io.homeassistant.companion.android.common.data.mediacontrol.MediaControlRepository import io.homeassistant.companion.android.common.data.mediacontrol.MediaControlState +import io.homeassistant.companion.android.common.data.mediacontrol.MediaPlaybackState import io.homeassistant.companion.android.common.data.mediacontrol.MediaRepeatMode import io.homeassistant.companion.android.common.data.servers.ServerManager import io.homeassistant.companion.android.common.data.servers.firstUrlOrNull @@ -150,6 +151,7 @@ class HaMediaSession @AssistedInject constructor( * regardless of how the coroutine ends (cancellation or normal flow completion). */ suspend fun observe(onSessionReady: suspend (MediaSession) -> Unit) = coroutineScope { + Timber.d("observe: starting for ${config.entityId}") actionScope = this val player = HaRemoteMediaPlayer(Looper.getMainLooper(), commandCallback) val session = buildMediaSession(player) @@ -157,8 +159,14 @@ class HaMediaSession @AssistedInject constructor( try { onSessionReady(session) startObservingState() - Timber.d("Media control observation completed for ${config.entityId}") + Timber.d( + "observe: startObservingState returned normally for ${config.entityId} (flow completed or WebSocket returned null)", + ) + } catch (e: CancellationException) { + Timber.d("observe: cancelled for ${config.entityId}") + throw e } finally { + Timber.d("observe: finally block running for ${config.entityId}, releasing player and session") actionScope = null mediaSession = null withContext(NonCancellable + Dispatchers.Main) { @@ -176,13 +184,30 @@ class HaMediaSession @AssistedInject constructor( * the app, which recreates active sessions via [HaMediaSessionService]. */ internal suspend fun startObservingState() { + Timber.d("startObservingState: starting for ${config.entityId}") var artworkCache = ArtworkCache() mediaControlRepository.observeEntityState(config).collect { state -> if (state == null) { + Timber.d("startObservingState: received null state for ${config.entityId}, skipping update") return@collect } - artworkCache = loadArtworkAndUpdatePlayer(state, artworkCache) + Timber.d("startObservingState: received state for ${config.entityId}, playbackState=${state.playbackState}") + if (state.playbackState is MediaPlaybackState.Off) { + // Entity is off: reset the player to idle (no playlist, no commands) so Media3 + // does not create a notification for this session. A notification for an idle + // session with no content would replace the foreground notification of any + // currently-playing session (e.g. another configured entity), hiding its control. + artworkCache = ArtworkCache() + withContext(Dispatchers.Main) { + mediaSession?.player?.let { + (it as? HaRemoteMediaPlayer)?.updateState(state = null, artworkPngBytes = null) + } + } + } else { + artworkCache = loadArtworkAndUpdatePlayer(state, artworkCache) + } } + Timber.d("startObservingState: flow collection ended for ${config.entityId}") } private fun buildMediaSession(player: HaRemoteMediaPlayer): MediaSession = MediaSession.Builder(context, player) diff --git a/app/src/main/kotlin/io/homeassistant/companion/android/mediacontrol/HaMediaSessionService.kt b/app/src/main/kotlin/io/homeassistant/companion/android/mediacontrol/HaMediaSessionService.kt index 35ef1356362..6a4d16fa668 100644 --- a/app/src/main/kotlin/io/homeassistant/companion/android/mediacontrol/HaMediaSessionService.kt +++ b/app/src/main/kotlin/io/homeassistant/companion/android/mediacontrol/HaMediaSessionService.kt @@ -111,6 +111,13 @@ class HaMediaSessionService : MediaSessionService() { configuredEntities: List, sessionScope: CoroutineScope = serviceScope, ) { + Timber.d( + "reconcileSessions: received ${configuredEntities.size} entities=${configuredEntities.map { + it.entityId + }}, " + + "activeSessions=${activeSessions.keys.toList()}", + ) + if (configuredEntities.isEmpty()) { Timber.d("No media control entities configured, stopping service") withContext(Dispatchers.Main) { stopSelf() } @@ -120,6 +127,8 @@ class HaMediaSessionService : MediaSessionService() { val desiredKeys = configuredEntities.map { it.sessionKey() }.toSet() val currentKeys = activeSessions.keys.toSet() + Timber.d("reconcileSessions: desiredKeys=$desiredKeys, currentKeys=$currentKeys") + // Precompute the diff and prepare new sessions on Default before touching Main. val toRemove = (currentKeys - desiredKeys).mapNotNull { key -> val pair = activeSessions.remove(key) ?: return@mapNotNull null @@ -134,11 +143,15 @@ class HaMediaSessionService : MediaSessionService() { key to session } + Timber.d("reconcileSessions: toRemove=${toRemove.map { it.first }}, toAdd=${toAdd.map { it.first }}") + // Execute all Android/Media3 API calls that require Main in a single dispatcher hop. withContext(Dispatchers.Main) { toRemove.forEach { (key, pair) -> val (session, job) = pair + Timber.d("removeSession: calling removeSession for $key, mediaSession=${if (session.mediaSession != null) "non-null" else "null"}") session.mediaSession?.let { removeSession(it) } + Timber.d("removeSession: removeSession returned for $key, calling cancelAndJoin") job.cancelAndJoin() Timber.d("Removed media session for $key") } @@ -150,7 +163,26 @@ class HaMediaSessionService : MediaSessionService() { activeSessions[key] = session to job Timber.d("Added media session for $key") } + + // When a session is removed, Media3 stops the foreground notification but does not + // automatically re-post it for remaining sessions, even when they are actively playing. + // invalidateState() on the remaining players is a no-op because their state hasn't + // changed, so Media3 sees nothing to update. The only reliable way to re-trigger the + // foreground notification is to remove and re-add each remaining session, which causes + // Media3's MediaNotificationManager to re-initialize and re-post the notification. + if (toRemove.isNotEmpty()) { + Timber.d("refreshNotification: re-adding ${activeSessions.size} remaining sessions to trigger notification") + activeSessions.values.forEach { (session, _) -> + session.mediaSession?.let { mediaSession -> + removeSession(mediaSession) + addSession(mediaSession) + } + } + Timber.d("refreshNotification: done") + } } + + Timber.d("reconcileSessions: done, activeSessions=${activeSessions.keys.toList()}") } companion object { diff --git a/common/src/main/kotlin/io/homeassistant/companion/android/common/data/mediacontrol/MediaControlRepositoryImpl.kt b/common/src/main/kotlin/io/homeassistant/companion/android/common/data/mediacontrol/MediaControlRepositoryImpl.kt index 8e83c3b5744..08e5ffdd1d4 100644 --- a/common/src/main/kotlin/io/homeassistant/companion/android/common/data/mediacontrol/MediaControlRepositoryImpl.kt +++ b/common/src/main/kotlin/io/homeassistant/companion/android/common/data/mediacontrol/MediaControlRepositoryImpl.kt @@ -54,30 +54,41 @@ internal class MediaControlRepositoryImpl @Inject constructor( } override fun observeEntityState(config: MediaControlEntityConfig): Flow = flow { + Timber.d("observeEntityState: starting for ${config.entityId}") + // Emit current state via REST so the caller has something to show immediately. // The WebSocket added event delivers the same state again; distinctUntilChanged() // at the end suppresses the duplicate. - getEntityState(config)?.let { emit(it) } + getEntityState(config)?.let { + Timber.d("observeEntityState: emitting REST state for ${config.entityId}") + emit(it) + } try { val stateFlow = serverManager.webSocketRepository(config.serverId) .getCompressedStateAndChanges(listOf(config.entityId)) if (stateFlow == null) { - Timber.w("WebSocket subscription returned null for entity ${config.entityId}") + Timber.w( + "observeEntityState: WebSocket subscription returned null for entity ${config.entityId}, flow will complete", + ) emit(null) return@flow } + Timber.d("observeEntityState: WebSocket subscription established for ${config.entityId}, collecting events") var currentEntity: Entity? = null stateFlow.collect { event -> event.added?.get(config.entityId)?.let { + Timber.d("observeEntityState: 'added' event for ${config.entityId}") currentEntity = it.toEntity(config.entityId) } event.changed?.get(config.entityId)?.let { diff -> + Timber.d("observeEntityState: 'changed' event for ${config.entityId}") currentEntity = currentEntity?.applyCompressedStateDiff(diff) } event.removed?.let { removed -> if (config.entityId in removed) { + Timber.d("observeEntityState: 'removed' event for ${config.entityId}") currentEntity = null } } @@ -89,6 +100,7 @@ internal class MediaControlRepositoryImpl @Inject constructor( emit(null) } } + Timber.d("observeEntityState: WebSocket stateFlow collection ended for ${config.entityId}") } catch (e: CancellationException) { throw e } catch (e: Exception) { @@ -100,8 +112,11 @@ internal class MediaControlRepositoryImpl @Inject constructor( override suspend fun getConfiguredEntities(): List = dao.getAll().map { it.toEntityConfig() } - override fun observeConfiguredEntities(): Flow> = - dao.getAllFlow().map { list -> list.map { it.toEntityConfig() } } + override fun observeConfiguredEntities(): Flow> = dao.getAllFlow().map { list -> + val configs = list.map { it.toEntityConfig() } + Timber.d("observeConfiguredEntities: DB emitted ${configs.size} entities=${configs.map { it.entityId }}") + configs + } override suspend fun setConfiguredEntities(entities: List) { dao.replaceAll( From fd69a5de049d5aa1835fc17958dadd92c5fc3a83 Mon Sep 17 00:00:00 2001 From: Fletcher Dostie Date: Wed, 15 Apr 2026 12:24:21 -0700 Subject: [PATCH 062/114] Refactor to fix multiple entitites: Build MediaStyle notifications ourselves, Override onUpdateNotification() with Per-Session Notification IDs --- .../mediacontrol/HaMediaSessionService.kt | 152 ++++++++++++++---- 1 file changed, 125 insertions(+), 27 deletions(-) diff --git a/app/src/main/kotlin/io/homeassistant/companion/android/mediacontrol/HaMediaSessionService.kt b/app/src/main/kotlin/io/homeassistant/companion/android/mediacontrol/HaMediaSessionService.kt index 6a4d16fa668..caf1ba656ef 100644 --- a/app/src/main/kotlin/io/homeassistant/companion/android/mediacontrol/HaMediaSessionService.kt +++ b/app/src/main/kotlin/io/homeassistant/companion/android/mediacontrol/HaMediaSessionService.kt @@ -1,12 +1,19 @@ package io.homeassistant.companion.android.mediacontrol +import android.app.Notification +import android.app.NotificationChannel +import android.app.NotificationManager import android.content.Context import android.content.Intent +import android.graphics.BitmapFactory +import android.os.Build import androidx.annotation.OptIn +import androidx.core.app.NotificationCompat +import androidx.core.app.NotificationManagerCompat import androidx.media3.common.util.UnstableApi -import androidx.media3.session.DefaultMediaNotificationProvider import androidx.media3.session.MediaSession import androidx.media3.session.MediaSessionService +import androidx.media3.session.MediaStyleNotificationHelper import dagger.hilt.android.AndroidEntryPoint import io.homeassistant.companion.android.common.R as commonR import io.homeassistant.companion.android.common.data.mediacontrol.MediaControlEntityConfig @@ -29,6 +36,10 @@ import timber.log.Timber * Android media controls in the notification shade. Each configured entity gets its own * [HaMediaSession] and [MediaSession], which Media3 registers and presents individually. * + * Notifications are managed via [onUpdateNotification], which is called per-session by Media3 + * whenever a session's player state changes. Each entity receives a notification with a unique ID + * derived from its session ID, so each entity appears as a separate card in the notification shade. + * * This service is responsible only for the Android service lifecycle and session reconciliation. * All per-entity session logic is delegated to [HaMediaSession]. */ @@ -45,12 +56,13 @@ class HaMediaSessionService : MediaSessionService() { internal val activeSessions = mutableMapOf>() private val serviceScope = CoroutineScope(SupervisorJob() + Dispatchers.Default) - @OptIn(UnstableApi::class) + /** The notification ID last passed to [startForeground], or null if not in the foreground. */ + private var foregroundNotificationId: Int? = null + private val notificationManager by lazy { NotificationManagerCompat.from(this) } + override fun onCreate() { super.onCreate() - val notificationProvider = DefaultMediaNotificationProvider.Builder(this).build() - notificationProvider.setSmallIcon(commonR.drawable.ic_stat_ic_notification) - setMediaNotificationProvider(notificationProvider) + createNotificationChannel() Timber.d("HaMediaSessionService created") startObservingEntities() } @@ -96,10 +108,47 @@ class HaMediaSessionService : MediaSessionService() { if (!anyPlaying) stopSelf() } + /** + * Called by Media3 whenever a session's player state changes and the notification needs to be + * updated. Each session gets a notification with a unique ID derived from the session's ID, + * so each entity appears as its own card in the media controls carousel. + */ + @OptIn(UnstableApi::class) + override fun onUpdateNotification(session: MediaSession, startInForegroundRequired: Boolean) { + val notificationId = session.id.hashCode() + + if (session.player.mediaItemCount == 0) { + // Entity is off or no state has arrived yet — nothing to show. + notificationManager.cancel(notificationId) + if (foregroundNotificationId == notificationId) { + promoteForegroundOrStop(excludeId = notificationId) + } + return + } + + val notification = buildNotification(session) + if (foregroundNotificationId == null && startInForegroundRequired) { + // Service is not yet in the foreground and playback requires it — start foreground + // with this session's notification. All subsequent sessions (and updates to this one) + // go through notificationManager.notify() to avoid replacing the foreground + // notification ID, which would dismiss the previously-shown notification on Android 13+. + startForeground(notificationId, notification) + foregroundNotificationId = notificationId + } else { + // Service is already in the foreground (or foreground not yet required). + // notificationManager.notify() works for both regular notifications and for updating + // the foreground notification in-place when the ID matches. + notificationManager.notify(notificationId, notification) + } + } + override fun onDestroy() { Timber.d("HaMediaSessionService destroyed") activeSessions.values.forEach { (session, job) -> - session.mediaSession?.let { removeSession(it) } + session.mediaSession?.let { ms -> + notificationManager.cancel(ms.id.hashCode()) + removeSession(ms) + } job.cancel() } activeSessions.clear() @@ -148,10 +197,15 @@ class HaMediaSessionService : MediaSessionService() { // Execute all Android/Media3 API calls that require Main in a single dispatcher hop. withContext(Dispatchers.Main) { toRemove.forEach { (key, pair) -> - val (session, job) = pair - Timber.d("removeSession: calling removeSession for $key, mediaSession=${if (session.mediaSession != null) "non-null" else "null"}") - session.mediaSession?.let { removeSession(it) } - Timber.d("removeSession: removeSession returned for $key, calling cancelAndJoin") + val (haSession, job) = pair + haSession.mediaSession?.let { ms -> + val notificationId = ms.id.hashCode() + notificationManager.cancel(notificationId) + if (foregroundNotificationId == notificationId) { + promoteForegroundOrStop(excludeId = notificationId) + } + removeSession(ms) + } job.cancelAndJoin() Timber.d("Removed media session for $key") } @@ -163,29 +217,73 @@ class HaMediaSessionService : MediaSessionService() { activeSessions[key] = session to job Timber.d("Added media session for $key") } - - // When a session is removed, Media3 stops the foreground notification but does not - // automatically re-post it for remaining sessions, even when they are actively playing. - // invalidateState() on the remaining players is a no-op because their state hasn't - // changed, so Media3 sees nothing to update. The only reliable way to re-trigger the - // foreground notification is to remove and re-add each remaining session, which causes - // Media3's MediaNotificationManager to re-initialize and re-post the notification. - if (toRemove.isNotEmpty()) { - Timber.d("refreshNotification: re-adding ${activeSessions.size} remaining sessions to trigger notification") - activeSessions.values.forEach { (session, _) -> - session.mediaSession?.let { mediaSession -> - removeSession(mediaSession) - addSession(mediaSession) - } - } - Timber.d("refreshNotification: done") - } } Timber.d("reconcileSessions: done, activeSessions=${activeSessions.keys.toList()}") } + /** + * Promotes a remaining active session to the foreground notification when the current + * foreground session is removed or goes idle. If no active session has media content, + * stops the foreground state. + * + * @param excludeId The notification ID of the session being removed, to skip it when searching + * for a replacement. + */ + @OptIn(UnstableApi::class) + private fun promoteForegroundOrStop(excludeId: Int) { + val nextSession = activeSessions.values + .mapNotNull { (haSession, _) -> haSession.mediaSession } + .firstOrNull { it.id.hashCode() != excludeId && it.player.mediaItemCount > 0 } + + if (nextSession != null) { + val nextId = nextSession.id.hashCode() + startForeground(nextId, buildNotification(nextSession)) + foregroundNotificationId = nextId + Timber.d("promoteForegroundOrStop: promoted session ${nextSession.id}") + } else { + stopForeground(STOP_FOREGROUND_REMOVE) + foregroundNotificationId = null + Timber.d("promoteForegroundOrStop: no active sessions, stopped foreground") + } + } + + /** + * Builds a [MediaStyleNotificationHelper.MediaStyle] notification for [session] + * using the player's current metadata (title, artist, artwork). + */ + @OptIn(UnstableApi::class) + private fun buildNotification(session: MediaSession): Notification { + val metadata = session.player.mediaMetadata + val artworkBitmap = metadata.artworkData?.let { BitmapFactory.decodeByteArray(it, 0, it.size) } + + return NotificationCompat.Builder(this, NOTIFICATION_CHANNEL_ID) + .setStyle(MediaStyleNotificationHelper.MediaStyle(session)) + .setSmallIcon(commonR.drawable.ic_stat_ic_notification) + .setVisibility(NotificationCompat.VISIBILITY_PUBLIC) + .setCategory(NotificationCompat.CATEGORY_TRANSPORT) + .setContentTitle(metadata.title ?: session.id) + .setContentText(metadata.artist) + .setLargeIcon(artworkBitmap) + .build() + } + + private fun createNotificationChannel() { + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) { + val channel = NotificationChannel( + NOTIFICATION_CHANNEL_ID, + getString(commonR.string.media_controls), + NotificationManager.IMPORTANCE_LOW, + ).apply { + setShowBadge(false) + } + notificationManager.createNotificationChannel(channel) + } + } + companion object { + private const val NOTIFICATION_CHANNEL_ID = "media_session" + /** * Starts the service. Should be called from a foreground context (e.g. Activity) to avoid * Android 15+ restrictions on starting mediaPlayback foreground services from background. From a695d13453f561937c216685525719b370f1c24f Mon Sep 17 00:00:00 2001 From: Fletcher Dostie Date: Wed, 15 Apr 2026 12:45:43 -0700 Subject: [PATCH 063/114] Set notification when playing so it can't be swiped away (dismissible when paused) --- .../companion/android/mediacontrol/HaMediaSessionService.kt | 1 + 1 file changed, 1 insertion(+) diff --git a/app/src/main/kotlin/io/homeassistant/companion/android/mediacontrol/HaMediaSessionService.kt b/app/src/main/kotlin/io/homeassistant/companion/android/mediacontrol/HaMediaSessionService.kt index caf1ba656ef..50a93cf835e 100644 --- a/app/src/main/kotlin/io/homeassistant/companion/android/mediacontrol/HaMediaSessionService.kt +++ b/app/src/main/kotlin/io/homeassistant/companion/android/mediacontrol/HaMediaSessionService.kt @@ -265,6 +265,7 @@ class HaMediaSessionService : MediaSessionService() { .setContentTitle(metadata.title ?: session.id) .setContentText(metadata.artist) .setLargeIcon(artworkBitmap) + .setOngoing(session.player.isPlaying) .build() } From e75dea81290409fa2d010478af1ba5463d8199d6 Mon Sep 17 00:00:00 2001 From: Fletcher Dostie Date: Wed, 15 Apr 2026 14:10:59 -0700 Subject: [PATCH 064/114] Remove entity reordering from media controls settings screen --- .../MediaControlSettingsViewModel.kt | 23 ------ .../views/MediaControlSettingsScreen.kt | 64 +++------------- .../MediaControlSettingsViewModelTest.kt | 73 ------------------- 3 files changed, 12 insertions(+), 148 deletions(-) diff --git a/app/src/main/kotlin/io/homeassistant/companion/android/settings/mediacontrol/MediaControlSettingsViewModel.kt b/app/src/main/kotlin/io/homeassistant/companion/android/settings/mediacontrol/MediaControlSettingsViewModel.kt index 792a6ac4030..2e7d6a77993 100644 --- a/app/src/main/kotlin/io/homeassistant/companion/android/settings/mediacontrol/MediaControlSettingsViewModel.kt +++ b/app/src/main/kotlin/io/homeassistant/companion/android/settings/mediacontrol/MediaControlSettingsViewModel.kt @@ -182,29 +182,6 @@ class MediaControlSettingsViewModel @Inject constructor( persistAndNotifyService() } - /** - * Moves a configured entity from one position to another in response to a drag gesture. - * Does not persist — call [onReorderComplete] once the drag ends to save the final order. - * @param fromKey the list item key of the entity being dragged - * @param toKey the list item key of the target position - */ - fun onMove(fromKey: Any, toKey: Any) { - _uiState.update { state -> - val list = state.configuredEntities.toMutableList() - val fromIndex = list.indexOfFirst { it.listKey() == fromKey } - val toIndex = list.indexOfFirst { it.listKey() == toKey } - if (fromIndex >= 0 && toIndex >= 0) { - list.add(toIndex, list.removeAt(fromIndex)) - } - state.copy(configuredEntities = list) - } - } - - /** Persists the current entity order after a drag-to-reorder gesture completes. */ - fun onReorderComplete() { - persistAndNotifyService() - } - private fun persistAndNotifyService() { viewModelScope.launch { val entities = _uiState.value.configuredEntities diff --git a/app/src/main/kotlin/io/homeassistant/companion/android/settings/mediacontrol/views/MediaControlSettingsScreen.kt b/app/src/main/kotlin/io/homeassistant/companion/android/settings/mediacontrol/views/MediaControlSettingsScreen.kt index 4854a5176b3..469c0e74b30 100644 --- a/app/src/main/kotlin/io/homeassistant/companion/android/settings/mediacontrol/views/MediaControlSettingsScreen.kt +++ b/app/src/main/kotlin/io/homeassistant/companion/android/settings/mediacontrol/views/MediaControlSettingsScreen.kt @@ -1,6 +1,5 @@ package io.homeassistant.companion.android.settings.mediacontrol.views -import androidx.compose.animation.core.animateDpAsState import androidx.compose.foundation.layout.Box import androidx.compose.foundation.layout.Column import androidx.compose.foundation.layout.PaddingValues @@ -12,7 +11,6 @@ import androidx.compose.foundation.layout.padding import androidx.compose.foundation.layout.size import androidx.compose.foundation.lazy.LazyColumn import androidx.compose.foundation.lazy.itemsIndexed -import androidx.compose.foundation.lazy.rememberLazyListState import androidx.compose.material.icons.Icons import androidx.compose.material.icons.filled.Clear import androidx.compose.material3.HorizontalDivider @@ -29,7 +27,6 @@ import androidx.compose.ui.tooling.preview.Preview import androidx.lifecycle.compose.collectAsStateWithLifecycle import com.mikepenz.iconics.compose.Image import com.mikepenz.iconics.typeface.IIcon -import com.mikepenz.iconics.typeface.library.community.material.CommunityMaterial import io.homeassistant.companion.android.common.R import io.homeassistant.companion.android.common.compose.composable.ButtonVariant import io.homeassistant.companion.android.common.compose.composable.HADropdownItem @@ -46,9 +43,6 @@ import io.homeassistant.companion.android.settings.mediacontrol.MediaControlSett import io.homeassistant.companion.android.util.compose.entity.EntityPicker import io.homeassistant.companion.android.util.plus import io.homeassistant.companion.android.util.safeBottomPaddingValues -import sh.calvin.reorderable.ReorderableCollectionItemScope -import sh.calvin.reorderable.ReorderableItem -import sh.calvin.reorderable.rememberReorderableLazyListState /** Outer composable that extracts state from the ViewModel and delegates to the stateless content. */ @Composable @@ -59,8 +53,6 @@ fun MediaControlSettingsScreen(viewModel: MediaControlSettingsViewModel, modifie onServerSelected = viewModel::selectServerId, onEntitySelected = viewModel::addEntity, onRemoveEntity = viewModel::removeEntity, - onMove = viewModel::onMove, - onReorderComplete = viewModel::onReorderComplete, modifier = modifier, ) } @@ -71,18 +63,11 @@ internal fun MediaControlSettingsContent( onServerSelected: (Int) -> Unit, onEntitySelected: (String) -> Unit, onRemoveEntity: (Int) -> Unit, - onMove: (Any, Any) -> Unit, - onReorderComplete: () -> Unit, modifier: Modifier = Modifier, ) { val colorScheme = LocalHAColorScheme.current - val lazyListState = rememberLazyListState() - val reorderState = rememberReorderableLazyListState(lazyListState) { from, to -> - onMove(from.key, to.key) - } LazyColumn( - state = lazyListState, contentPadding = PaddingValues(vertical = HADimens.SPACE4) + safeBottomPaddingValues(applyHorizontal = false), modifier = modifier, ) { @@ -139,48 +124,37 @@ internal fun MediaControlSettingsContent( items = uiState.configuredEntities, key = { _, config -> config.listKey() }, ) { index, config -> - ReorderableItem(state = reorderState, key = config.listKey()) { isDragging -> - ConfiguredEntityRow( - config = config, - subtitle = uiState.servers - .takeIf { it.size > 1 } - ?.firstOrNull { it.id == config.serverId } - ?.friendlyName, - entityName = uiState.entityNamesByConfig[config], - entityIcon = uiState.entityIconsByConfig[config], - onRemove = { onRemoveEntity(index) }, - onReorderComplete = onReorderComplete, - isDragging = isDragging, - ) - if (index < uiState.configuredEntities.lastIndex) { - HorizontalDivider() - } - } + ConfiguredEntityRow( + config = config, + subtitle = uiState.servers + .takeIf { it.size > 1 } + ?.firstOrNull { it.id == config.serverId } + ?.friendlyName, + entityName = uiState.entityNamesByConfig[config], + entityIcon = uiState.entityIconsByConfig[config], + onRemove = { onRemoveEntity(index) }, + ) } } } @Composable -private fun ReorderableCollectionItemScope.ConfiguredEntityRow( +private fun ConfiguredEntityRow( config: MediaControlEntityConfig, subtitle: String?, entityName: String?, entityIcon: IIcon?, onRemove: () -> Unit, - onReorderComplete: () -> Unit, - isDragging: Boolean, ) { val colorScheme = LocalHAColorScheme.current - val elevation = animateDpAsState(targetValue = if (isDragging) HADimens.SPACE2 else HADimens.SPACE0) val displayName = entityName ?: config.entityId - Surface(color = colorScheme.colorSurfaceLow, shadowElevation = elevation.value) { + Surface(color = colorScheme.colorSurfaceLow, shadowElevation = HADimens.SPACE0) { Row( verticalAlignment = Alignment.CenterVertically, modifier = Modifier .fillMaxWidth() .heightIn(min = HADimens.SPACE18) - .longPressDraggableHandle(onDragStopped = { onReorderComplete() }) .padding(vertical = HADimens.SPACE1), ) { if (entityIcon != null) { @@ -219,14 +193,6 @@ private fun ReorderableCollectionItemScope.ConfiguredEntityRow( contentDescription = stringResource(R.string.media_control_remove_entity), variant = ButtonVariant.NEUTRAL, ) - Image( - asset = CommunityMaterial.Icon.cmd_drag_horizontal_variant, - contentDescription = stringResource(R.string.hold_to_reorder), - colorFilter = ColorFilter.tint(colorScheme.colorTextSecondary), - modifier = Modifier - .size(width = HADimens.SPACE10, height = HADimens.SPACE6) - .padding(end = HADimens.SPACE4), - ) } } } @@ -240,8 +206,6 @@ private fun MediaControlSettingsContentLoadingPreview() { onServerSelected = {}, onEntitySelected = {}, onRemoveEntity = {}, - onMove = { _, _ -> }, - onReorderComplete = {}, ) } } @@ -255,8 +219,6 @@ private fun MediaControlSettingsContentEmptyPreview() { onServerSelected = {}, onEntitySelected = {}, onRemoveEntity = {}, - onMove = { _, _ -> }, - onReorderComplete = {}, ) } } @@ -275,8 +237,6 @@ private fun MediaControlSettingsContentWithEntitiesPreview() { onServerSelected = {}, onEntitySelected = {}, onRemoveEntity = {}, - onMove = { _, _ -> }, - onReorderComplete = {}, ) } } diff --git a/app/src/test/kotlin/io/homeassistant/companion/android/settings/mediacontrol/MediaControlSettingsViewModelTest.kt b/app/src/test/kotlin/io/homeassistant/companion/android/settings/mediacontrol/MediaControlSettingsViewModelTest.kt index 5d10a184df3..f532de1402c 100644 --- a/app/src/test/kotlin/io/homeassistant/companion/android/settings/mediacontrol/MediaControlSettingsViewModelTest.kt +++ b/app/src/test/kotlin/io/homeassistant/companion/android/settings/mediacontrol/MediaControlSettingsViewModelTest.kt @@ -5,7 +5,6 @@ import app.cash.turbine.test import io.homeassistant.companion.android.common.data.mediacontrol.MediaControlEntityConfig import io.homeassistant.companion.android.common.data.mediacontrol.MediaControlRepository import io.homeassistant.companion.android.common.data.servers.ServerManager -import io.homeassistant.companion.android.common.data.servers.ServerManager.Companion.SERVER_ID_ACTIVE import io.homeassistant.companion.android.testing.unit.ConsoleLogExtension import io.homeassistant.companion.android.testing.unit.MainDispatcherJUnit5Extension import io.mockk.coEvery @@ -139,43 +138,6 @@ class MediaControlSettingsViewModelTest { } } - @Nested - inner class ReorderTest { - - @Test - fun `Given two configured entities when onMove called then order is updated`() = runTest(testDispatcher) { - val entityA = MediaControlEntityConfig(serverId = SERVER_ID_ACTIVE, entityId = "media_player.a") - val entityB = MediaControlEntityConfig(serverId = SERVER_ID_ACTIVE, entityId = "media_player.b") - viewModel = createViewModel() - viewModel.addEntity(entityA.entityId) - viewModel.addEntity(entityB.entityId) - - viewModel.onMove( - fromKey = entityA, - toKey = entityB, - ) - - assertEquals( - listOf(entityB, entityA), - viewModel.uiState.value.configuredEntities, - ) - } - - @Test - fun `Given entities when onMove called with unknown key then list unchanged`() = runTest(testDispatcher) { - val entityA = MediaControlEntityConfig(serverId = SERVER_ID_ACTIVE, entityId = "media_player.a") - viewModel = createViewModel() - viewModel.addEntity(entityA.entityId) - - viewModel.onMove( - fromKey = "unknown", - toKey = entityA, - ) - - assertEquals(listOf(entityA), viewModel.uiState.value.configuredEntities) - } - } - @Nested inner class RemoveEntityTest { @@ -238,39 +200,4 @@ class MediaControlSettingsViewModelTest { } } - @Nested - inner class ReorderCompleteTest { - - @Test - fun `Given reordered entities when onReorderComplete called then repository updated and start event emitted`() = runTest(testDispatcher) { - val entityA = MediaControlEntityConfig(serverId = SERVER_ID_ACTIVE, entityId = "media_player.a") - val entityB = MediaControlEntityConfig(serverId = SERVER_ID_ACTIVE, entityId = "media_player.b") - viewModel = createViewModel() - advanceUntilIdle() - viewModel.addEntity(entityA.entityId) - viewModel.addEntity(entityB.entityId) - viewModel.onMove( - fromKey = entityA, - toKey = entityB, - ) - - viewModel.serviceEvents.test { - // Drain Start events from addEntity calls - advanceUntilIdle() - awaitItem() - awaitItem() - - viewModel.onReorderComplete() - advanceUntilIdle() - - coVerify { - mediaControlRepository.setConfiguredEntities( - match { it == listOf(entityB, entityA) }, - ) - } - assertEquals(MediaControlServiceEvent.Start, awaitItem()) - cancelAndIgnoreRemainingEvents() - } - } - } } From 1b38f3372ac634a4bc9beabde9174c00aa6552c5 Mon Sep 17 00:00:00 2001 From: Fletcher Dostie Date: Wed, 15 Apr 2026 14:55:10 -0700 Subject: [PATCH 065/114] Fix MediaControlRepositoryImplTest tests --- .../mediacontrol/MediaControlRepositoryImplTest.kt | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/common/src/test/kotlin/io/homeassistant/companion/android/common/data/mediacontrol/MediaControlRepositoryImplTest.kt b/common/src/test/kotlin/io/homeassistant/companion/android/common/data/mediacontrol/MediaControlRepositoryImplTest.kt index eca0b365574..8f72f960659 100644 --- a/common/src/test/kotlin/io/homeassistant/companion/android/common/data/mediacontrol/MediaControlRepositoryImplTest.kt +++ b/common/src/test/kotlin/io/homeassistant/companion/android/common/data/mediacontrol/MediaControlRepositoryImplTest.kt @@ -2,6 +2,7 @@ package io.homeassistant.companion.android.common.data.mediacontrol import app.cash.turbine.test import io.homeassistant.companion.android.common.data.integration.EntityExt +import io.homeassistant.companion.android.common.data.integration.IntegrationRepository import io.homeassistant.companion.android.common.data.servers.ServerManager import io.homeassistant.companion.android.common.data.websocket.WebSocketRepository import io.homeassistant.companion.android.common.data.websocket.impl.entities.CompressedEntityState @@ -32,6 +33,7 @@ class MediaControlRepositoryImplTest { private val dao: MediaControlDao = mockk(relaxed = true) private val serverManager: ServerManager = mockk(relaxed = true) private val webSocketRepository: WebSocketRepository = mockk(relaxed = true) + private val integrationRepository: IntegrationRepository = mockk(relaxed = true) private lateinit var repository: MediaControlRepositoryImpl @@ -40,6 +42,8 @@ class MediaControlRepositoryImplTest { @BeforeEach fun setUp() { coEvery { serverManager.webSocketRepository(any()) } returns webSocketRepository + coEvery { serverManager.integrationRepository(any()) } returns integrationRepository + coEvery { integrationRepository.getEntity(any()) } returns null repository = MediaControlRepositoryImpl( dao = dao, serverManager = serverManager, @@ -555,7 +559,7 @@ class MediaControlRepositoryImplTest { @Test fun `Given entities in database when getConfiguredEntities then returns mapped list`() = runTest { coEvery { dao.getAll() } returns listOf( - MediaControlConfig(id = 1, serverId = 1, entityId = "media_player.tv", position = 0), + MediaControlConfig(id = 1, serverId = 1, entityId = "media_player.tv", index = 0), ) assertEquals( @@ -576,8 +580,8 @@ class MediaControlRepositoryImplTest { coVerify { dao.replaceAll( listOf( - MediaControlConfig(serverId = 1, entityId = "media_player.tv", position = 0), - MediaControlConfig(serverId = 2, entityId = "media_player.office", position = 1), + MediaControlConfig(serverId = 1, entityId = "media_player.tv", index = 0), + MediaControlConfig(serverId = 2, entityId = "media_player.office", index = 1), ), ) } From 3575cfe796b63552a9d41781f391691815c82c5f Mon Sep 17 00:00:00 2001 From: Fletcher Dostie Date: Wed, 15 Apr 2026 21:25:48 -0700 Subject: [PATCH 066/114] Fix subtitle in media control settings entity row; Fix defunct notification remaining when removing entity --- .../mediacontrol/HaMediaSessionService.kt | 27 ++++++++++++------- .../views/MediaControlSettingsScreen.kt | 6 +---- .../MediaControlSettingsViewModelTest.kt | 1 - 3 files changed, 19 insertions(+), 15 deletions(-) diff --git a/app/src/main/kotlin/io/homeassistant/companion/android/mediacontrol/HaMediaSessionService.kt b/app/src/main/kotlin/io/homeassistant/companion/android/mediacontrol/HaMediaSessionService.kt index 50a93cf835e..5083c02df97 100644 --- a/app/src/main/kotlin/io/homeassistant/companion/android/mediacontrol/HaMediaSessionService.kt +++ b/app/src/main/kotlin/io/homeassistant/companion/android/mediacontrol/HaMediaSessionService.kt @@ -101,11 +101,7 @@ class HaMediaSessionService : MediaSessionService() { val anyPlaying = activeSessions.values.any { (session, _) -> session.mediaSession?.player?.let { it.playWhenReady && it.mediaItemCount > 0 } == true } - // Keep the service alive while playback is active so the media notification and - // foreground state are not torn down mid-playback. The service will stop itself - // once all sessions become idle (via reconcileSessions) or the user explicitly - // removes all configured entities. - if (!anyPlaying) stopSelf() + stopSelf() } /** @@ -117,8 +113,13 @@ class HaMediaSessionService : MediaSessionService() { override fun onUpdateNotification(session: MediaSession, startInForegroundRequired: Boolean) { val notificationId = session.id.hashCode() - if (session.player.mediaItemCount == 0) { - // Entity is off or no state has arrived yet — nothing to show. + // A session not in activeSessions is being torn down. removeSession() and player.release() + // both trigger onUpdateNotification, so without this guard we would re-post a notification + // we just cancelled, leaving a zombie media control card after removal. + val isActive = activeSessions.values.any { (haSession, _) -> haSession.mediaSession?.id == session.id } + + if (!isActive || session.player.mediaItemCount == 0) { + // Entity is off, no state has arrived yet, or the session is being torn down. notificationManager.cancel(notificationId) if (foregroundNotificationId == notificationId) { promoteForegroundOrStop(excludeId = notificationId) @@ -144,14 +145,22 @@ class HaMediaSessionService : MediaSessionService() { override fun onDestroy() { Timber.d("HaMediaSessionService destroyed") - activeSessions.values.forEach { (session, job) -> + if (foregroundNotificationId != null) { + stopForeground(STOP_FOREGROUND_REMOVE) + foregroundNotificationId = null + } + // Snapshot and clear activeSessions before calling removeSession so that the + // onUpdateNotification guard (!isActive check) treats these sessions as inactive and + // cancels rather than re-posts their notifications during teardown. + val sessionsToClean = activeSessions.values.toList() + activeSessions.clear() + sessionsToClean.forEach { (session, job) -> session.mediaSession?.let { ms -> notificationManager.cancel(ms.id.hashCode()) removeSession(ms) } job.cancel() } - activeSessions.clear() serviceScope.cancel() super.onDestroy() } diff --git a/app/src/main/kotlin/io/homeassistant/companion/android/settings/mediacontrol/views/MediaControlSettingsScreen.kt b/app/src/main/kotlin/io/homeassistant/companion/android/settings/mediacontrol/views/MediaControlSettingsScreen.kt index 469c0e74b30..aeb496cc978 100644 --- a/app/src/main/kotlin/io/homeassistant/companion/android/settings/mediacontrol/views/MediaControlSettingsScreen.kt +++ b/app/src/main/kotlin/io/homeassistant/companion/android/settings/mediacontrol/views/MediaControlSettingsScreen.kt @@ -13,7 +13,6 @@ import androidx.compose.foundation.lazy.LazyColumn import androidx.compose.foundation.lazy.itemsIndexed import androidx.compose.material.icons.Icons import androidx.compose.material.icons.filled.Clear -import androidx.compose.material3.HorizontalDivider import androidx.compose.material3.Surface import androidx.compose.material3.Text import androidx.compose.runtime.Composable @@ -126,10 +125,7 @@ internal fun MediaControlSettingsContent( ) { index, config -> ConfiguredEntityRow( config = config, - subtitle = uiState.servers - .takeIf { it.size > 1 } - ?.firstOrNull { it.id == config.serverId } - ?.friendlyName, + subtitle = config.entityId, entityName = uiState.entityNamesByConfig[config], entityIcon = uiState.entityIconsByConfig[config], onRemove = { onRemoveEntity(index) }, diff --git a/app/src/test/kotlin/io/homeassistant/companion/android/settings/mediacontrol/MediaControlSettingsViewModelTest.kt b/app/src/test/kotlin/io/homeassistant/companion/android/settings/mediacontrol/MediaControlSettingsViewModelTest.kt index f532de1402c..69357621801 100644 --- a/app/src/test/kotlin/io/homeassistant/companion/android/settings/mediacontrol/MediaControlSettingsViewModelTest.kt +++ b/app/src/test/kotlin/io/homeassistant/companion/android/settings/mediacontrol/MediaControlSettingsViewModelTest.kt @@ -199,5 +199,4 @@ class MediaControlSettingsViewModelTest { } } } - } From a3ffa0a5cf41cef857aed8fa4478ffa7485ce292 Mon Sep 17 00:00:00 2001 From: Fletcher Dostie Date: Wed, 15 Apr 2026 23:10:35 -0700 Subject: [PATCH 067/114] Improve media control settings screen: Don't show anything until loading finishes, fade in animation, correct text color --- .../views/MediaControlSettingsScreen.kt | 54 ++++++++++--------- 1 file changed, 29 insertions(+), 25 deletions(-) diff --git a/app/src/main/kotlin/io/homeassistant/companion/android/settings/mediacontrol/views/MediaControlSettingsScreen.kt b/app/src/main/kotlin/io/homeassistant/companion/android/settings/mediacontrol/views/MediaControlSettingsScreen.kt index aeb496cc978..f048023439e 100644 --- a/app/src/main/kotlin/io/homeassistant/companion/android/settings/mediacontrol/views/MediaControlSettingsScreen.kt +++ b/app/src/main/kotlin/io/homeassistant/companion/android/settings/mediacontrol/views/MediaControlSettingsScreen.kt @@ -74,7 +74,7 @@ internal fun MediaControlSettingsContent( Text( text = stringResource(R.string.media_control_description), style = HATextStyle.Body, - color = colorScheme.colorTextSecondary, + color = colorScheme.colorTextPrimary, textAlign = TextAlign.Start, modifier = Modifier.padding(horizontal = HADimens.SPACE4), ) @@ -92,19 +92,21 @@ internal fun MediaControlSettingsContent( } } else { if (uiState.servers.size > 1) { - item { - HADropdownMenu( - items = uiState.servers.map { HADropdownItem(key = it.id, label = it.friendlyName) }, - selectedKey = uiState.selectedServerId, - onItemSelected = onServerSelected, - label = stringResource(R.string.server), - modifier = Modifier.fillMaxWidth().padding(horizontal = HADimens.SPACE4), - ) - Spacer(modifier = Modifier.size(HADimens.SPACE2)) + item(key = "server_dropdown") { + Column(modifier = Modifier.animateItem()) { + HADropdownMenu( + items = uiState.servers.map { HADropdownItem(key = it.id, label = it.friendlyName) }, + selectedKey = uiState.selectedServerId, + onItemSelected = onServerSelected, + label = stringResource(R.string.server), + modifier = Modifier.fillMaxWidth().padding(horizontal = HADimens.SPACE4), + ) + Spacer(modifier = Modifier.size(HADimens.SPACE2)) + } } } - item { + item(key = "entity_picker") { EntityPicker( entities = uiState.availableEntities, selectedEntityId = null, @@ -114,22 +116,23 @@ internal fun MediaControlSettingsContent( entityRegistry = uiState.entityRegistryForServer(uiState.selectedServerId), deviceRegistry = uiState.deviceRegistryForServer(uiState.selectedServerId), areaRegistry = uiState.areaRegistryForServer(uiState.selectedServerId), - modifier = Modifier.padding(horizontal = HADimens.SPACE4), + modifier = Modifier.padding(horizontal = HADimens.SPACE4).animateItem(), ) } - } - itemsIndexed( - items = uiState.configuredEntities, - key = { _, config -> config.listKey() }, - ) { index, config -> - ConfiguredEntityRow( - config = config, - subtitle = config.entityId, - entityName = uiState.entityNamesByConfig[config], - entityIcon = uiState.entityIconsByConfig[config], - onRemove = { onRemoveEntity(index) }, - ) + itemsIndexed( + items = uiState.configuredEntities, + key = { _, config -> config.listKey() }, + ) { index, config -> + ConfiguredEntityRow( + config = config, + subtitle = config.entityId, + entityName = uiState.entityNamesByConfig[config], + entityIcon = uiState.entityIconsByConfig[config], + onRemove = { onRemoveEntity(index) }, + modifier = Modifier.animateItem(), + ) + } } } } @@ -141,11 +144,12 @@ private fun ConfiguredEntityRow( entityName: String?, entityIcon: IIcon?, onRemove: () -> Unit, + modifier: Modifier = Modifier, ) { val colorScheme = LocalHAColorScheme.current val displayName = entityName ?: config.entityId - Surface(color = colorScheme.colorSurfaceLow, shadowElevation = HADimens.SPACE0) { + Surface(modifier = modifier, color = colorScheme.colorSurfaceLow, shadowElevation = HADimens.SPACE0) { Row( verticalAlignment = Alignment.CenterVertically, modifier = Modifier From 0ad3588b0df23404753ea52d6a41a57eeb07bf40 Mon Sep 17 00:00:00 2001 From: Fletcher Dostie Date: Thu, 16 Apr 2026 03:09:15 -0700 Subject: [PATCH 068/114] Make activeSessions, reconcileSessions, and startObservingEntities private Addresses PR review comments 9, 10, and 11: - activeSessions: private (tests now assert via MediaSessionService.getSessions()) - reconcileSessions: private (no longer takes sessionScope; uses serviceScope directly) - startObservingEntities: @VisibleForTesting internal (no longer takes scope params) - serviceScope: moved to @VisibleForTesting primary constructor; secondary @Inject no-arg constructor provides the production default, following the AudioUrlPlayer pattern - Tests replace serviceScope via reflection after Robolectric.buildService().get() so the test-controlled UnconfinedTestDispatcher scope is used without calling onCreate() - Default entity state flow changed to non-completing MutableSharedFlow so observe() stays suspended, keeping sessions alive in getSessions() for assertions - Fixed pre-existing bug in onTaskRemoved: anyPlaying was computed but never used; stopSelf() now only called when nothing is playing --- .../mediacontrol/HaMediaSessionService.kt | 47 +++++----- .../mediacontrol/HaMediaSessionServiceTest.kt | 91 +++++++++++-------- 2 files changed, 75 insertions(+), 63 deletions(-) diff --git a/app/src/main/kotlin/io/homeassistant/companion/android/mediacontrol/HaMediaSessionService.kt b/app/src/main/kotlin/io/homeassistant/companion/android/mediacontrol/HaMediaSessionService.kt index 5083c02df97..3816be375d1 100644 --- a/app/src/main/kotlin/io/homeassistant/companion/android/mediacontrol/HaMediaSessionService.kt +++ b/app/src/main/kotlin/io/homeassistant/companion/android/mediacontrol/HaMediaSessionService.kt @@ -8,6 +8,7 @@ import android.content.Intent import android.graphics.BitmapFactory import android.os.Build import androidx.annotation.OptIn +import androidx.annotation.VisibleForTesting import androidx.core.app.NotificationCompat import androidx.core.app.NotificationManagerCompat import androidx.media3.common.util.UnstableApi @@ -44,7 +45,10 @@ import timber.log.Timber * All per-entity session logic is delegated to [HaMediaSession]. */ @AndroidEntryPoint -class HaMediaSessionService : MediaSessionService() { +class HaMediaSessionService @VisibleForTesting constructor(private val serviceScope: CoroutineScope) : + MediaSessionService() { + + @Inject constructor() : this(CoroutineScope(SupervisorJob() + Dispatchers.Default)) @Inject lateinit var mediaControlRepository: MediaControlRepository @@ -53,8 +57,7 @@ class HaMediaSessionService : MediaSessionService() { lateinit var haMediaSessionFactory: HaMediaSession.Factory // Keyed by "$serverId:$entityId". Each entry pairs the session with the job running observe(). - internal val activeSessions = mutableMapOf>() - private val serviceScope = CoroutineScope(SupervisorJob() + Dispatchers.Default) + private val activeSessions = mutableMapOf>() /** The notification ID last passed to [startForeground], or null if not in the foreground. */ private var foregroundNotificationId: Int? = null @@ -67,23 +70,11 @@ class HaMediaSessionService : MediaSessionService() { startObservingEntities() } - /** - * Starts collecting [MediaControlRepository.observeConfiguredEntities] and reconciling - * sessions on each emission. - * - * Both parameters are extracted to allow tests to supply controlled scopes without - * calling [onCreate], which would trigger Hilt injection and Media3 setup. - * - * @param scope The scope used to collect the entities flow. - * @param sessionScope The scope used to launch each session's [HaMediaSession.observe] coroutine. - */ - internal fun startObservingEntities( - scope: CoroutineScope = serviceScope, - sessionScope: CoroutineScope = serviceScope, - ) { + @VisibleForTesting + internal fun startObservingEntities() { mediaControlRepository.observeConfiguredEntities() - .onEach { entities -> reconcileSessions(entities, sessionScope) } - .launchIn(scope) + .onEach { entities -> reconcileSessions(entities) } + .launchIn(serviceScope) } // Returns null intentionally: Media3 routes each controller to the session whose ID matches @@ -101,7 +92,15 @@ class HaMediaSessionService : MediaSessionService() { val anyPlaying = activeSessions.values.any { (session, _) -> session.mediaSession?.player?.let { it.playWhenReady && it.mediaItemCount > 0 } == true } - stopSelf() + // Keep the service alive while playback is active so the media notification remains + // visible and controllable from the notification shade after the app is dismissed. + // If nothing is playing there is no reason to keep the service alive. + // Note: there is no automatic stop when playback ends after this point — the service + // will only stop when the user removes all configured entities, which causes + // reconcileSessions to call stopSelf() on an empty list. + if (!anyPlaying) { + stopSelf() + } } /** @@ -165,10 +164,7 @@ class HaMediaSessionService : MediaSessionService() { super.onDestroy() } - internal suspend fun reconcileSessions( - configuredEntities: List, - sessionScope: CoroutineScope = serviceScope, - ) { + private suspend fun reconcileSessions(configuredEntities: List) { Timber.d( "reconcileSessions: received ${configuredEntities.size} entities=${configuredEntities.map { it.entityId @@ -220,7 +216,7 @@ class HaMediaSessionService : MediaSessionService() { } toAdd.forEach { (key, session) -> - val job = sessionScope.launch { + val job = serviceScope.launch { session.observe { mediaSession -> addSession(mediaSession) } } activeSessions[key] = session to job @@ -275,6 +271,7 @@ class HaMediaSessionService : MediaSessionService() { .setContentText(metadata.artist) .setLargeIcon(artworkBitmap) .setOngoing(session.player.isPlaying) + .setContentIntent(session.sessionActivity) .build() } diff --git a/app/src/test/kotlin/io/homeassistant/companion/android/mediacontrol/HaMediaSessionServiceTest.kt b/app/src/test/kotlin/io/homeassistant/companion/android/mediacontrol/HaMediaSessionServiceTest.kt index 9c8e84213a7..594bc975e8f 100644 --- a/app/src/test/kotlin/io/homeassistant/companion/android/mediacontrol/HaMediaSessionServiceTest.kt +++ b/app/src/test/kotlin/io/homeassistant/companion/android/mediacontrol/HaMediaSessionServiceTest.kt @@ -19,7 +19,6 @@ import kotlinx.coroutines.ExperimentalCoroutinesApi import kotlinx.coroutines.SupervisorJob import kotlinx.coroutines.cancel import kotlinx.coroutines.flow.MutableSharedFlow -import kotlinx.coroutines.flow.flowOf import kotlinx.coroutines.test.UnconfinedTestDispatcher import org.junit.After import org.junit.Assert.assertEquals @@ -43,22 +42,24 @@ private val sessionCounter = AtomicInteger(0) * Tests for [HaMediaSessionService] session reconciliation and lifecycle behavior. * * Session management is driven through [MediaControlRepository.observeConfiguredEntities] flow - * emissions via [HaMediaSessionService.startObservingEntities], rather than calling - * [HaMediaSessionService.reconcileSessions] directly. This exercises the full path from - * a DB change to session creation or removal. + * emissions via [HaMediaSessionService.startObservingEntities], rather than through [onCreate], + * which is intentionally not called in tests: [onCreate] triggers Hilt's field injection, which + * requires a fully-initialized Hilt application component that is not available in this test setup. + * Instead, dependencies are injected manually into the service's [Inject]-annotated fields after + * construction, and observation is started via [HaMediaSessionService.startObservingEntities]. + * + * The service is created via [Robolectric.buildService] (using [get] rather than [create]) so that + * the service is properly attached to an Android context without triggering [onCreate]. The private + * [serviceScope] field is then replaced via reflection with [observationScope] (backed by + * [UnconfinedTestDispatcher]) before observation starts, so that flow collection and session + * coroutines run eagerly and synchronously on the test dispatcher. * * Each test pre-populates [configuredEntitiesFlow] (replay=1) before starting observation, so - * the subscriber receives the value immediately upon subscribing — matching the pattern used in - * [HaMediaSessionTest] where mock flows are set up before collecting. Subsequent emissions are + * the subscriber receives the value immediately upon subscribing. Subsequent emissions are * delivered to the active subscriber. * - * [HaMediaSession] instances are created with [UnconfinedTestDispatcher] scopes via - * [startObserving], which passes [observationScope] as the session scope so that - * [HaMediaSession.observe] and [HaMediaSession.startObservingState] run eagerly. Main-looper - * tasks (such as [HaRemoteMediaPlayer.updateState] dispatched by [HaMediaSession]) are flushed - * with [idleMainLooper]. - * - * Injected dependencies bypass Hilt by directly setting the service's lateinit fields. + * Main-looper tasks (such as [HaRemoteMediaPlayer.updateState] dispatched by [HaMediaSession]) + * are flushed with [idleMainLooper]. */ @OptIn(ExperimentalCoroutinesApi::class) @RunWith(RobolectricTestRunner::class) @@ -74,6 +75,12 @@ class HaMediaSessionServiceTest { // replay=1 ensures tryEmit always succeeds and the value is available to new subscribers. private lateinit var configuredEntitiesFlow: MutableSharedFlow> + + // A non-completing SharedFlow: observeEntityState() suspends indefinitely by default so that + // HaMediaSession.observe() doesn't exit normally, keeping the session alive in getSessions(). + // MediaSession.release() auto-removes the session from getSessions(), so we need it alive. + private val entityStateFlow = MutableSharedFlow(replay = 0) + private lateinit var observationScope: CoroutineScope private lateinit var service: HaMediaSessionService @@ -83,7 +90,7 @@ class HaMediaSessionServiceTest { observationScope = CoroutineScope(SupervisorJob() + UnconfinedTestDispatcher()) every { mediaControlRepository.observeConfiguredEntities() } returns configuredEntitiesFlow - coEvery { mediaControlRepository.observeEntityState(any()) } returns flowOf(null) + coEvery { mediaControlRepository.observeEntityState(any()) } returns entityStateFlow // Each session is created without a scope — HaMediaSession.observe() derives its scope // from the coroutine that calls it (observationScope with UnconfinedTestDispatcher). @@ -99,28 +106,33 @@ class HaMediaSessionServiceTest { service = Robolectric.buildService(HaMediaSessionService::class.java).get() service.mediaControlRepository = mediaControlRepository service.haMediaSessionFactory = haMediaSessionFactory + + // Replace the private serviceScope field with the test-controlled scope so that + // startObservingEntities() and all session coroutines run on the UnconfinedTestDispatcher. + val scopeField = HaMediaSessionService::class.java.getDeclaredField("serviceScope") + scopeField.isAccessible = true + scopeField.set(service, observationScope) } @After fun tearDown() { + // Cancelling observationScope cancels all session observation coroutines, which triggers + // each HaMediaSession.observe() finally block → session.release() → auto-removed from + // getSessions(). onDestroy() is not called here to avoid double-calling it in tests that + // explicitly invoke it (e.g. the onDestroy lifecycle test). observationScope.cancel() - // Safe when onDestroy() was already called — activeSessions will already be empty. - service.activeSessions.values.forEach { (_, job) -> job.cancel() } } /** - * Starts [HaMediaSessionService.startObservingEntities] with [observationScope] for both - * the entities flow and the per-session observation jobs. Because [configuredEntitiesFlow] - * uses replay=1 and [observationScope] uses [UnconfinedTestDispatcher], the subscriber - * receives any pre-emitted value immediately and [HaMediaSessionService.reconcileSessions] - * runs synchronously on the test dispatcher. Call [idleMainLooper] after this to flush any - * Main-thread tasks posted by [HaMediaSession] (e.g. [HaRemoteMediaPlayer.updateState]). + * Starts [HaMediaSessionService.startObservingEntities] with the test-controlled + * [observationScope] (already set via reflection in [setUp]) as the service scope. Because + * [configuredEntitiesFlow] uses replay=1 and [observationScope] uses [UnconfinedTestDispatcher], + * the subscriber receives any pre-emitted value immediately and reconciliation runs synchronously. + * Call [idleMainLooper] after this to flush any Main-thread tasks posted by [HaMediaSession] + * (e.g. [HaRemoteMediaPlayer.updateState]). */ private fun startObserving() { - service.startObservingEntities( - scope = observationScope, - sessionScope = observationScope, - ) + service.startObservingEntities() } /** @@ -176,8 +188,8 @@ class HaMediaSessionServiceTest { startObserving() idleMainLooper() - assertEquals(1, service.activeSessions.size) - assertTrue(service.activeSessions.containsKey("1:${config.entityId}")) + assertEquals(1, service.getSessions().size) + assertTrue(service.getSessions().any { it.id == "1_${config.entityId}" }) } @Test @@ -188,9 +200,9 @@ class HaMediaSessionServiceTest { startObserving() idleMainLooper() - assertEquals(2, service.activeSessions.size) - assertTrue(service.activeSessions.containsKey("1:${configA.entityId}")) - assertTrue(service.activeSessions.containsKey("1:${configB.entityId}")) + assertEquals(2, service.getSessions().size) + assertTrue(service.getSessions().any { it.id == "1_${configA.entityId}" }) + assertTrue(service.getSessions().any { it.id == "1_${configB.entityId}" }) } @Test @@ -204,8 +216,8 @@ class HaMediaSessionServiceTest { configuredEntitiesFlow.tryEmit(listOf(configB)) idleMainLooper() - assertEquals(1, service.activeSessions.size) - assertTrue(service.activeSessions.containsKey("1:${configB.entityId}")) + assertEquals(1, service.getSessions().size) + assertTrue(service.getSessions().any { it.id == "1_${configB.entityId}" }) } @Test @@ -214,13 +226,13 @@ class HaMediaSessionServiceTest { configuredEntitiesFlow.tryEmit(listOf(config)) startObserving() idleMainLooper() - val entryBefore = service.activeSessions["1:${config.entityId}"] + val sessionBefore = service.getSessions().first() configuredEntitiesFlow.tryEmit(listOf(config)) idleMainLooper() - assertEquals(1, service.activeSessions.size) - assertSame(entryBefore, service.activeSessions["1:${config.entityId}"]) + assertEquals(1, service.getSessions().size) + assertSame(sessionBefore, service.getSessions().first()) } @Test @@ -283,10 +295,13 @@ class HaMediaSessionServiceTest { configuredEntitiesFlow.tryEmit(listOf(config)) startObserving() idleMainLooper() - assertEquals(1, service.activeSessions.size) + assertEquals(1, service.getSessions().size) + // onDestroy() calls removeSession() explicitly for each active session before cancelling + // the observation jobs, so getSessions() is empty immediately after the call. service.onDestroy() + idleMainLooper() - assertTrue(service.activeSessions.isEmpty()) + assertTrue(service.getSessions().isEmpty()) } } From 82895ffe49c725141ca0e525f6a3391083abbc2c Mon Sep 17 00:00:00 2001 From: Fletcher Dostie Date: Thu, 16 Apr 2026 03:24:52 -0700 Subject: [PATCH 069/114] MediaControlSettingsViewModel.kt: inject the Default dispatcher into the ViewModel and replace it with testDispatcher in tests --- .../MediaControlSettingsViewModel.kt | 16 +++++++++++++--- .../MediaControlSettingsViewModelTest.kt | 1 + 2 files changed, 14 insertions(+), 3 deletions(-) diff --git a/app/src/main/kotlin/io/homeassistant/companion/android/settings/mediacontrol/MediaControlSettingsViewModel.kt b/app/src/main/kotlin/io/homeassistant/companion/android/settings/mediacontrol/MediaControlSettingsViewModel.kt index 2e7d6a77993..388a6eec054 100644 --- a/app/src/main/kotlin/io/homeassistant/companion/android/settings/mediacontrol/MediaControlSettingsViewModel.kt +++ b/app/src/main/kotlin/io/homeassistant/companion/android/settings/mediacontrol/MediaControlSettingsViewModel.kt @@ -1,6 +1,7 @@ package io.homeassistant.companion.android.settings.mediacontrol import android.app.Application +import androidx.annotation.VisibleForTesting import androidx.compose.runtime.Stable import androidx.lifecycle.AndroidViewModel import androidx.lifecycle.viewModelScope @@ -19,6 +20,7 @@ import io.homeassistant.companion.android.common.data.websocket.impl.entities.En import io.homeassistant.companion.android.database.server.Server import javax.inject.Inject import kotlinx.coroutines.CancellationException +import kotlinx.coroutines.CoroutineDispatcher import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.async import kotlinx.coroutines.awaitAll @@ -67,12 +69,20 @@ data class MediaControlSettingsUiState( } @HiltViewModel -class MediaControlSettingsViewModel @Inject constructor( +class MediaControlSettingsViewModel @VisibleForTesting constructor( application: Application, private val serverManager: ServerManager, private val mediaControlRepository: MediaControlRepository, + private val backgroundDispatcher: CoroutineDispatcher, ) : AndroidViewModel(application) { + @Inject + constructor( + application: Application, + serverManager: ServerManager, + mediaControlRepository: MediaControlRepository, + ) : this(application, serverManager, mediaControlRepository, Dispatchers.Default) + private val _uiState = MutableStateFlow(MediaControlSettingsUiState()) val uiState: StateFlow = _uiState.asStateFlow() @@ -80,7 +90,7 @@ class MediaControlSettingsViewModel @Inject constructor( val serviceEvents: SharedFlow = _serviceEvents.asSharedFlow() init { - viewModelScope.launch(Dispatchers.Default) { + viewModelScope.launch(backgroundDispatcher) { val loadedServers = serverManager.servers() val defaultServerId = serverManager.getServer()?.id ?: ServerManager.SERVER_ID_ACTIVE @@ -193,7 +203,7 @@ class MediaControlSettingsViewModel @Inject constructor( } private fun updateAvailableEntities() { - viewModelScope.launch(Dispatchers.Default) { + viewModelScope.launch(backgroundDispatcher) { _uiState.update { state -> val configuredForServer = state.configuredEntities .filter { it.serverId == state.selectedServerId } diff --git a/app/src/test/kotlin/io/homeassistant/companion/android/settings/mediacontrol/MediaControlSettingsViewModelTest.kt b/app/src/test/kotlin/io/homeassistant/companion/android/settings/mediacontrol/MediaControlSettingsViewModelTest.kt index 69357621801..7b0885941be 100644 --- a/app/src/test/kotlin/io/homeassistant/companion/android/settings/mediacontrol/MediaControlSettingsViewModelTest.kt +++ b/app/src/test/kotlin/io/homeassistant/companion/android/settings/mediacontrol/MediaControlSettingsViewModelTest.kt @@ -47,6 +47,7 @@ class MediaControlSettingsViewModelTest { application = mockk(relaxed = true), serverManager = serverManager, mediaControlRepository = mediaControlRepository, + backgroundDispatcher = testDispatcher, ) } From 99b6b10943f7179b76f7795f227f58bedf942622 Mon Sep 17 00:00:00 2001 From: Fletcher Dostie Date: Thu, 16 Apr 2026 20:58:28 -0700 Subject: [PATCH 070/114] Media controls tests: Clean up properly after tests --- .../mediacontrol/HaMediaSessionServiceTest.kt | 5 +++++ .../android/mediacontrol/HaMediaSessionTest.kt | 12 ++++++++++++ .../android/mediacontrol/HaRemoteMediaPlayerTest.kt | 7 +++++++ 3 files changed, 24 insertions(+) diff --git a/app/src/test/kotlin/io/homeassistant/companion/android/mediacontrol/HaMediaSessionServiceTest.kt b/app/src/test/kotlin/io/homeassistant/companion/android/mediacontrol/HaMediaSessionServiceTest.kt index 594bc975e8f..be5e2c4e85b 100644 --- a/app/src/test/kotlin/io/homeassistant/companion/android/mediacontrol/HaMediaSessionServiceTest.kt +++ b/app/src/test/kotlin/io/homeassistant/companion/android/mediacontrol/HaMediaSessionServiceTest.kt @@ -121,6 +121,11 @@ class HaMediaSessionServiceTest { // getSessions(). onDestroy() is not called here to avoid double-calling it in tests that // explicitly invoke it (e.g. the onDestroy lifecycle test). observationScope.cancel() + // Drain the main looper so that the withContext(NonCancellable + Dispatchers.Main) calls + // in the observe() finally blocks complete and session.release() runs before the next test + // class starts. Without this, MediaSession IDs linger in Media3's global registry and + // cause "Session ID must be unique" failures in subsequent test classes. + idleMainLooper() } /** diff --git a/app/src/test/kotlin/io/homeassistant/companion/android/mediacontrol/HaMediaSessionTest.kt b/app/src/test/kotlin/io/homeassistant/companion/android/mediacontrol/HaMediaSessionTest.kt index 5fcedc72457..687f1da970e 100644 --- a/app/src/test/kotlin/io/homeassistant/companion/android/mediacontrol/HaMediaSessionTest.kt +++ b/app/src/test/kotlin/io/homeassistant/companion/android/mediacontrol/HaMediaSessionTest.kt @@ -21,10 +21,12 @@ import kotlin.time.Duration.Companion.seconds import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.ExperimentalCoroutinesApi import kotlinx.coroutines.SupervisorJob +import kotlinx.coroutines.cancel import kotlinx.coroutines.flow.MutableSharedFlow import kotlinx.coroutines.flow.flowOf import kotlinx.coroutines.launch import kotlinx.coroutines.test.UnconfinedTestDispatcher +import org.junit.After import org.junit.Assert.assertEquals import org.junit.Assert.assertNotNull import org.junit.Assert.assertNull @@ -50,6 +52,16 @@ class HaMediaSessionTest { private lateinit var integrationRepository: IntegrationRepository private lateinit var config: MediaControlEntityConfig + @After + fun tearDown() { + // Cancel all test coroutines and drain the main looper so that the observe() finally + // block's withContext(NonCancellable + Dispatchers.Main) call completes and + // session.release() runs. Without this, MediaSession IDs linger in Media3's global + // registry and cause "Session ID must be unique" failures in subsequent test classes. + testScope.cancel() + idleMainLooper() + } + @Before fun setUp() { @OptIn(ExperimentalCoroutinesApi::class) diff --git a/app/src/test/kotlin/io/homeassistant/companion/android/mediacontrol/HaRemoteMediaPlayerTest.kt b/app/src/test/kotlin/io/homeassistant/companion/android/mediacontrol/HaRemoteMediaPlayerTest.kt index afd49b4d920..39ce3476e7d 100644 --- a/app/src/test/kotlin/io/homeassistant/companion/android/mediacontrol/HaRemoteMediaPlayerTest.kt +++ b/app/src/test/kotlin/io/homeassistant/companion/android/mediacontrol/HaRemoteMediaPlayerTest.kt @@ -9,6 +9,7 @@ import io.mockk.mockk import io.mockk.verify import kotlin.time.Duration import kotlin.time.Duration.Companion.seconds +import org.junit.After import org.junit.Assert.assertEquals import org.junit.Assert.assertFalse import org.junit.Assert.assertNull @@ -27,6 +28,12 @@ class HaRemoteMediaPlayerTest { private val commandCallback: HaRemoteMediaPlayer.CommandCallback = mockk(relaxed = true) private lateinit var player: HaRemoteMediaPlayer + @After + fun tearDown() { + player.release() + shadowOf(Looper.getMainLooper()).idle() + } + @Before fun setUp() { player = HaRemoteMediaPlayer(Looper.getMainLooper(), commandCallback) From 3c654128c8ba5836dadf9c4d70a2156facadbf19 Mon Sep 17 00:00:00 2001 From: Fletcher Dostie Date: Thu, 16 Apr 2026 21:30:05 -0700 Subject: [PATCH 071/114] Update screenshot tests for media control settings changes and regenerate reference screenshots --- ...ediaControlSettingsScreenScreenshotTest.kt | 14 +++----------- ...rol settings empty_foldable_c908f502_0.png | Bin 31428 -> 31962 bytes ...ontrol settings empty_phone_e05166be_0.png | Bin 31698 -> 32369 bytes ...tings empty_phone_landscape_9e00b29d_0.png | Bin 30980 -> 31467 bytes ... settings empty_small_phone_66e7bbf2_0.png | Bin 34496 -> 35399 bytes ...ntrol settings empty_tablet_2f22c4ea_0.png | Bin 22328 -> 23073 bytes ...ings empty_tablet_landscape_62cae397_0.png | Bin 19632 -> 20054 bytes ...ettings is loading_foldable_c908f502_0.png | Bin 29312 -> 29844 bytes ...l settings is loading_phone_e05166be_0.png | Bin 29545 -> 30228 bytes ... is loading_phone_landscape_9e00b29d_0.png | Bin 28833 -> 29318 bytes ...ings is loading_small_phone_66e7bbf2_0.png | Bin 31988 -> 32900 bytes ... settings is loading_tablet_2f22c4ea_0.png | Bin 20744 -> 21654 bytes ...is loading_tablet_landscape_62cae397_0.png | Bin 18717 -> 19192 bytes ...entities and icons_foldable_c908f502_0.png | Bin 53803 -> 59285 bytes ...ed entities and icons_phone_e05166be_0.png | Bin 50017 -> 55953 bytes ...s and icons_phone_landscape_9e00b29d_0.png | Bin 53487 -> 58928 bytes ...ities and icons_small_phone_66e7bbf2_0.png | Bin 58281 -> 65383 bytes ...d entities and icons_tablet_2f22c4ea_0.png | Bin 36896 -> 41688 bytes ... and icons_tablet_landscape_62cae397_0.png | Bin 36335 -> 41122 bytes ...onfigured entities_foldable_c908f502_0.png | Bin 51237 -> 57377 bytes ...h configured entities_phone_e05166be_0.png | Bin 48002 -> 54274 bytes ...ed entities_phone_landscape_9e00b29d_0.png | Bin 50953 -> 56995 bytes ...igured entities_small_phone_66e7bbf2_0.png | Bin 55476 -> 63016 bytes ... configured entities_tablet_2f22c4ea_0.png | Bin 35158 -> 40152 bytes ...d entities_tablet_landscape_62cae397_0.png | Bin 34462 -> 39486 bytes 25 files changed, 3 insertions(+), 11 deletions(-) diff --git a/app/src/screenshotTest/kotlin/io/homeassistant/companion/android/settings/mediacontrol/MediaControlSettingsScreenScreenshotTest.kt b/app/src/screenshotTest/kotlin/io/homeassistant/companion/android/settings/mediacontrol/MediaControlSettingsScreenScreenshotTest.kt index 259636f0f0c..7fcb4dbd219 100644 --- a/app/src/screenshotTest/kotlin/io/homeassistant/companion/android/settings/mediacontrol/MediaControlSettingsScreenScreenshotTest.kt +++ b/app/src/screenshotTest/kotlin/io/homeassistant/companion/android/settings/mediacontrol/MediaControlSettingsScreenScreenshotTest.kt @@ -2,7 +2,7 @@ package io.homeassistant.companion.android.settings.mediacontrol import androidx.compose.runtime.Composable import com.android.tools.screenshot.PreviewTest -import com.mikepenz.iconics.typeface.library.community.material.CommunityMaterial +import com.mikepenz.iconics.typeface.library.community.material.CommunityMaterial.Icon3 import io.homeassistant.companion.android.common.compose.theme.HAThemeForPreview import io.homeassistant.companion.android.common.data.mediacontrol.MediaControlEntityConfig import io.homeassistant.companion.android.settings.mediacontrol.views.MediaControlSettingsContent @@ -23,8 +23,6 @@ class MediaControlSettingsScreenScreenshotTest { onServerSelected = {}, onEntitySelected = {}, onRemoveEntity = {}, - onMove = { _, _ -> }, - onReorderComplete = {}, ) } } @@ -39,8 +37,6 @@ class MediaControlSettingsScreenScreenshotTest { onServerSelected = {}, onEntitySelected = {}, onRemoveEntity = {}, - onMove = { _, _ -> }, - onReorderComplete = {}, ) } } @@ -62,8 +58,6 @@ class MediaControlSettingsScreenScreenshotTest { onServerSelected = {}, onEntitySelected = {}, onRemoveEntity = {}, - onMove = { _, _ -> }, - onReorderComplete = {}, ) } } @@ -82,15 +76,13 @@ class MediaControlSettingsScreenScreenshotTest { bedroomConfig to "Bedroom Speaker", ), entityIconsByConfig = mapOf( - livingRoomConfig to CommunityMaterial.Icon.cmd_cast, - bedroomConfig to CommunityMaterial.Icon.cmd_cast, + livingRoomConfig to Icon3.cmd_television, + bedroomConfig to Icon3.cmd_speaker, ), ), onServerSelected = {}, onEntitySelected = {}, onRemoveEntity = {}, - onMove = { _, _ -> }, - onReorderComplete = {}, ) } } diff --git a/app/src/screenshotTestFullDebug/reference/io/homeassistant/companion/android/settings/mediacontrol/MediaControlSettingsScreenScreenshotTest/Media control settings empty_foldable_c908f502_0.png b/app/src/screenshotTestFullDebug/reference/io/homeassistant/companion/android/settings/mediacontrol/MediaControlSettingsScreenScreenshotTest/Media control settings empty_foldable_c908f502_0.png index 777123cc90472cfc82ce7d610a34fdced6ff7ed9..7b68142a14b4da2a9a3542e546b59c90c65e02c1 100644 GIT binary patch literal 31962 zcmeFZXIRtQ);)^5*aZazk!C@9k&e`DK}4EJla?qLdXW;Uz;;`ZuJjgAdXJ%mPPSC( zoe)BiUP9;znh^M};NG5no^#%N?{lB~={~PtR3PM+HP@PR%rVAX!S{94PaVH-oPmMi zl*ZlL4;UDZF)}b5ay)t%d?iQ+jbdPU_Ce$J4Fhk;%J@zX=g_zP{WYF(SG{97;ca_p<3V`Sc0~jod>wgP${exG?b3FJaHm|IFv96@2TdK=#XC zhl{7Rq?E5g>*h0XJBbc9UOk=NGBtiZTbIIb*4oUc*3HKVVpG5EGlMt(*Po)TeO%zb z{tNzfjr30bmw$ex>~!$0fByfs6aV`I^!51Pb@;w3{(rmbMimC0B1NINjNs>)P9xGe`nmQEpVSY zIs0uPO&1dIZEhQb`8LmC=J+IFcZP?5k~*=YaDw4I*WOmz{w!rbZGU$GeYd-nCorXU zqlJT^S%PXQ*ukdbM;zBdni9|yLOd1h&yn1V>UBd=N@`8 zfcm6M2D_s00qeH@=|~Rd_}9%2apH1#`k9}9Q;e-zN2mq{l#JRJWX(k=u2xD5qKnSU z^+~Uh7wY`AQqki_55HDZJs!H{sFkl#HJrFieC>|P%W*^)_IGSA4Y-ruPnK+TE8-8H zBqIe)(t~vqTE?TUYDV2+yq;Og>DqLrjSc$jaj2T&R;QFZz6N}7r!x$qQi52P1Wp!& z{PrGojbD|vq+6piK@~M~u7Yi@l=h5j%e=mGl7V>EZ>qp#Gg~`3PPpdTH#f6F8Sr$x z-=8k~;OTCthFnguv3j80P_Dx3skQA(AEVl|E}e5_xMq)H zt4~_>C6;5mW1Y6NFlv`Nr$B(ac6v)n%X9xZ~qQ z$gu1o@HKOJjlH9)a5z^!F0mgHGIM-iM;;ZfK)ClPV_6T~zlqy$HrH+-{leFAn~!k` zZe`|D2QQXzMB}X6c=pzVX8Y86v?p^4BzXe9KHl8j>fx80eCA%#%I!A`RnEjSkl72RBWsE*8(@^2iY_qm%#jd=8C*RC%HeK-;dqV?s z0*?3~Yx2Btv|Evs9WmRHYs%cQHdZS0~s;FBeU7xx`@6D*2s0W@+)KoeRrnqR0Z#lbA+bjY>>L=d3yP_kL3Og!Y3I^ zIaLgQ7E^R3B{aOEq_wmV;WbfJ>eTg9zvo~3FMHW%TvNO*h6UJg+cgEwyp{dl`)d=GOX(4VVJ{4` zGBeM<&Ba#{G5dSesvfu-ZNw@v3vT3EyH-z)3Ir+NKZi0X9+Vom_w7kvy4sRL;I|HF zR6I1`I?b%{{6d1P9+q$EVX(T^#Ivog*-uA!w4AHv;yjYUp?=~F?J)nkY$+LLlep6; zJbbUDi{e2tp#;z@En=6SRHl*tFqV_sqhK-Fa5Bi$ce(wy`(|e%Rl8%^pCq`J+KYG; zHmn)WmuDkuH}5%*kE|(bA+{IgEQhKlJd&&hme`nov78Uwo~_#W-8&V8G%q}W1K%LNO3 zM;wie7gtUcwNxCw5$b$<_=cPZ`~eJV!X}pNSfZgYZl(1gLHS!fSoDEFXq6kx4OB9I zhvF)0EV*>9cB@-coWatEtK;DWs^-fdC;9`iZLb5eSOUn≤a2$_b;^mEjyNwGuS1 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 DRQr%u~hT(bfTi=|N>C ziR*^fd{2)PrrhOgUO`NTLumnOV5uIn94h0XMKMT9*>ranFblgh5E%??13Prm+?vISJ-L5Eg%a?-&e9ICYzM7(aXL7P-pj73amf7am z5i=W-eKSNu`U6n!#VaN%c^QY;IgkqHI^6$rPkn9r@ck-|OUjk~KMy^%=o;4N1$geb zau`#E-`A-i{AEGv#qvo)`}SybVG6|I!S?S1Ei0fGL#z4rcQQ>?AGmEFXgG=#S1;$A zR{?wlW?ferjTIeUguBMcXCBEQE4qLsU(z}b@6)1WP14;>C4k=|Ev0TJj`V zG`0W5Mq#Ik4FaaR`bNX^^U36+r_CnCs%E3cd}VQ(&h_8s%@ZLgVK@4i>M(+?f%M0| z>?3@rlL0N_U+c2A`)x~@h_RMFh6PMqt6Q4iuzIkaW-9ePdwPQ;%2nS@r}D>g%n5q_ z$8y+ePruy-qjfz+1<)3@jeDFA9^9+6sDos)QI`|bUvhP2pN?B1{RvMd; z97pIiMjAxjDldgQ*CteZ_9Ih4Y10S#MDflVhf~?Rj$6826EU-$zQPs5Z_19{xi`lZ`ozfTtwI7aHSz+XxpjBiISzi;cx{ZWQQmq ztyxKFsWK1j&>8P4NnlDSQ#-D_zq?gMS`j{{Ovq>|yV~O~zxnx!JIo`+GR$H6J_5Co zub*n!dS{KiSm*zvV1`8+f%+a7_jDX2=m}PhQvgk4-wX8JmO48IXz!}o*z4}|paUj6 ze=qXz<3(d5f+?tfy2V<3FZ9{@tm(JB0EdEKQ~nj!DG^0q3uB9w#$`Z;idBJn@3xNy z_l#s7Q{tw(YriS_YR72H9-VOqU(TzmaFJH$bV69%%M#p5P_FMw5GB#N3_gsw;b_ zgMy?{9=)n`6&tU4azn$V>_kB5p?gG8Ap z#p*k!@z8p>&;)%KMt)q*Erj>)|M^=$n_T0^Vd^Iwwkf21t~0o}DMrR@tV&vWLh|??&k<;WNBlczy(Z zCc_ZG_HpCNRRHCzLNnWW89`6!&<5^LND$_!0iQVG`qWDnx4A}a?9!!KdiwvSrE#V1 zBugo{`$w^2btxy!In-m2>qMQsposqVJ!C$JIz$r@D3!_ke*Nn!Dan_unlO(-sgOW2 z4v_x6-@I^^p`r?Dbat+)rx29a&Pv{&Mkw!1(%VZWoB3XA+XI^wJ)rD^I|1|())QnB zAwT_Q3|+Tu#Rrl-@rCwzYMX9A6ty-jFI9flB&R*!&+%*zS>WFaqb+dQX&+xCT@#jd zT?E$;^>i_0s3DJ5uQ!~CrjP5;ugds-zXcfWs8-thI#X3r$9>eA?rhxs?rf~v%#43* zNd~EQZnz7Q4D)GfQ29D^QWH)G!=hjTYAotleeb8y!U4{x+*%7UMy~CCz7px7GT<;K z2_^z`oYP3}tJD7akkaost*A$tgZ6r^(cXj?5dBnv`V5AFMS{3IA3Eb9Bng&*xLWe3 z?)Gey@UVd{=OzHQ-eKX>IPT_uL$*ctIQwr^JspQ2d){bpQb1Q2O+@31_3xCb?1FhZ zEt{w%H6-(i3UF2*-NBpE2ZZM;KzZx7u}Sr@UYN|$O-rSF3O*(IG&X55DL4Lg2TOB< z%30(lB?|&#=!gNMEK&6rM0UOER_B}9pk>MDN5Rb|iByh|3<1`E+4z!VolFuh!JQ5Y`<{T8#tpf>4o+mYYk)6w zCR&A7wpfA&cr~W)=aK4>pdsJ)egMY6Rg4?%eyxgfJ*>UiE5qrrH!+07V>@An!MOJ#Aj=#--d)jzPF)c_+toi=sPB7>|>;7)% zqhE_O%|$=83H4wm7E64_&8NZG@ppCZf<*h%S%e+!%crzSKo!f^M=AZ+6pa81Wfh!s zA9+^`Y;X}h=Fb;VOuyU$T8V)(*WZ?~#-!M0XTQ2K=mbndOOE>?!o{DvI0qeGhh0l_07|vyzEh|udT|#I?tJOIFm4&e zB{>sw^qRwPp*ee9x@a6inE)<#DOZd7rxOc|kG=JBe7&S@Nul3rqiSqD*B*<$do`7$ zXE_?Rpz;!_G?+eHao*`J=jMO^gu}dyc6Y)7h?T5ZJ;L+sQD~MWbI`%%UWo@6-u$2T zzB8`LY}?zpp3yTp!k`GElq1rs7^ATNQn{%ND)I*2mxmt453O3O}c=9fDl27 z0Y{p2q<17CAP|To^pnd2oL1;`wKL zlkWIV)kT-V-$C>3Gde>75{k}!;so~tLF=$!$m)T><_Ml@(4)?w4o9|2zn*CmFB5qj z`UhNH1U(A3G_BfcxQy<5iT2$=?&LvS=G5)-q8z|rCZJgU-1mqfVXoSMtiYrvf z%udd(;8HN9;j(ovn`#1AKU}RAI!|a@{F2}G z)>Ht8@6$Ga()W=|+UHX)^NGq9is@x<;P9Q8njL##VMOVCU-ppPy4%4lrYori3Fs0u zU!4`Pyew6>1$L|VS>`25<)S{XgiXB$ob>-@lMYs4@6#VMd8v0(Z1Sf%yNP=-ka|{IAXj@Qt0f2iafg93=o)&2AA9ZZ9XVd#wX>XGY7*5Z-|P=XtHcdubr9 z9^f+YZ@J7K+fdGJ=My6xO9wZjML^tkE&q)@$;o*dn12-LQUQveAz2HWkd8goImb-+ z`V@*{xcD-HKpCU1#P?MP^LnE+Col|K%=RP6q8b3tdZb|wWb;_Q^J2Cjb#IG=tpHpz z-R7!qB{xA(1_9L$-gtLZwj*JvR~Gr)UA_HtgwZvq+5IV0m&)8s+cLOib};T1XFUjm z6s4i4bxH|!(M|w98oQy%8}KQs+H0Gk(+W#w&LgN6(vkKRW=klZnk-v+{--(Fi)c0z zCN&HF<4+XnZA-i^Z*TUHrv`xa?AXcjIn3-LO|llWsyt)wKwz&(OM*tSnc^%c~4)sH$OHUCT@)|S2s4ICR%{F2lkNz?M2}_=3fzF*Q z$t@8QUpNzSW6tp@c@xV=Ss9cY&}svKikg+*^t+Hh2KNO(nhqoOfaElR0>GeZS{eIm z_*0)=J-d}EU>!Zmo`RlZA?AFZ+QB|49yz8}VnQ}06we@fYTXhLPQ~kG*aL+afa0M` zC;;L*dV*6PKghhrEy*0Yvu0G-BT0NmW6pA+fukocq<~hBU+EYJYX7ulH~@hSy7X`jN8m z4@`K{53d3Q*i61pH(3YL+1LxXy9Y3fQ7%bGc;1NnyP?-EAGFkjTV7Pprq~5v-Pr;n zGu%1*pyhH)N0(!!PAOs(v_JNe2mk}WkDhe%6a2#0Ct{DMC5f-b!I@Rw5Y~4u-{GSl z@C8w7wXcJHQ3BIptAm){ZYRIK0_-=xl+bsO^d!<_f+?~R7S2mSP9Cs!aHL~vTM;~v zSfm_B3(l0eX_oBL!XlThQp~PSNiwbCkh}6t`GXOa#g6&e zbr;bo_N6ZVLoFa&C9wCpaa|Dp<9W12c?8PAUPV^;ZEEq3_tNRmQ>X;Nk``M0Ao zFPpxF00(*=Voi9>-eK%p-~u;Kei@Evarp|sl7f(>Bb<~e@taI!%mzTl5n z76O-~+l%qc3>O zWll(09?h_C2lEJUfgo%4gM`G3S;dE5eBzkx_s4<7yDYhTb zlsREss`HaLVIiCa3O%_N8@`t{+HH7IIp+Z(de_H%^#V_zDS2g4n0@ zZ&Pf~p9b*fGfYIlf!xD+0GBlxIw&Q*t*{HK9?49^&CfdoG$&pN;ES*mwOKu2RC*Sa z?~!0y+#CpiF1@(-I2pK#fuQlY$Pu82sr$9|F%B@xceJcP`SCH)i($n%V6o z@5gMOMJtLSpBt)Ut~tBALx~?Y9WuFYSR?C06qnbDDlBk7rx2-)c=F1vT}66bVwl zfQP%xDNEHL4es5$9)ThA9Q{zq95?7QE2MF8kfNr#{0L$6$G!M_pFtmLe#=@GhF{-V zT3kQ=)Q=iIgPQYaYq^&45e27lv2*EwdPi`>b-rN_#6{=PKbr8ZRTn%MWjcmm639=VWjZ<9~T8j@HzdHZ&34w0L`8{FiD-l*j_8lXyCvCLm!;j<9^ z3x!3{KkIxK70hLjE`_~XQ=d`v_P_&1u5MFmmUj+4{rq4sIpRq0_ZYhnn^CB_iADuI zZOxVUfQy;U&ZJ%zkBtM2L)baZ_xkb!SH*uBvV8|Muph^WJglRCNhZ7KbKS3X4!pHI z13sB;70Czg>9sQJ_|OF!=vgE;$Af0O&xOx_B2DlU{vP{ZBK9QhfJ)YvDXMhzmy`y? zQxZb_~#R@OHw2iV{se9{diT<209c-?*f1d*REVLY%Y> zjtQH#0-G{y38qFx!7H!A8HW_kYhoA1$n8D{gxUq5d@ z>+=3pJqLfk8OrP|`RgY$m(wdH{> z>=Q-aR=o?SBA*RtoYu>MBji1ugU;2P-G@>;R&}Y1$;GsV(YhMw`6~N^T75CwE5G zTW(BJP;e-|3fHWlP*RMHjCAv`^(Kv;8Tweo#Y#Z#EpcLIu^u$QRaMbUP(RPb!GUemVA;&f;?p*~DGNU34RgJiMnOTrtww_2G7pPDkG}WBo<a*;!J;Ko8azAAlcCRlC_FUO zLT_A)wc=>@H6}CkwFCvdJa|$~`B`*~X2~^W(Ye)H8(PQ_wd$5kSc8N#>oZER>nzg3U^&Mi5MSdKgdaCB?Ne+%`Tq8kvS?=3YOYpRH zrC{cEX=tb}^!Uc9uMZyP75XB@5Wk&TSjn`~)_x{{bvoav%A#N1vN&7|appKj%%zqW zEZQ%c4^%4qAluvl?H4wad|7VDrEruBV{ChV>`7>7pohcY*{{oIVqL9y3m4tB+@jLD zgD5e@dV{d|kZS{#+K{U#@I1H1ha5zh>fIMg0R!z1=tJ*R{2A*NKxX zR`&>1NV55=u08b-E2n)Pc_!~upzNc_160635=q6PSdD=f&HGD~eU=?W{gZ6Kg`nq* zt>Kitk+q`7vU4A@%v+N}5WkGMoAcI7R=W+gQfd-VvU5;lfmGV50xKdvYv(@Hb`6lHaasu-Kd_?rO=KlGGN9sq)qDbLQRN+Fa>EMB68x)kkU(3Oz4%Qusw+~3hi__n}LV1d(oR3Y|zi}88g z%B!;|C6OI2YvesCp0QF3@q$0Mw^uv&_$VBtqsKEU#io9eFHhl#cv_hE2v%tdvS?Jv!ea;tI^ntX&S3bt*Qk)E)=y5Lwn^ z3AL|PDzT?J+(?W~!Miz2>__yXhnp<5d&p!?K=Vz-%V;HnkGek$dLcBnjY*7hkX5#F z|9GRuPpl(Zb~Wc!g^c`8G=%_G(i5XjuFnZD2Es=eBYv+wyrrgn@T8fxAhI%a<_pG-Xp=*!RJxkG&=}9*o|zu-YR{yyrQK`6z*&gINQ*-vsv3W zMY1zl>ez2xrG8SXt5Vw`aoe}1tChc`mkP8{_viPz1yZ34a(Pch*E72Iefp-8b2}Zd z`1d>Yi0x=1cWnbRqrd(wV+!rD^>f^^YDQ7s1vQ#v=5f_#59~f zF`Z>KOz&5Sv!zv?Pf)KawnVZ-o<3 zk0Y!PI%H*9*$1O;&VI5q9I*~80n2z{r!UP6zl_? zsbHSXSA*IDmwd&Z(t>9X}^6_P&f=q_~RVi`fq zKLHj_wV3SsR}?IPXxd@FY7}g}8wE^((fZMhsTlO9?c1hU+oDyFR|YsAdy zP;qW-l_)DR=(qC-)53J+vfo|AiF7G*I%V$G?T!rQB*Mo0T`!2M`6N!KNHe_qvSv25 zdFJOIIUgY{5388nI8vNyFPw169j_m75)-r=Qw(XjwJ|SA;va{on(vE8M+VMpp&?Ca z%fk<*d?hzTNDcz@3_g5ayulSu^eyl8o=M3J0@}w5flH-12Ya>0ysJEf+%4q9WXs11 z&k7CA$zX<+#p~G`B~pL6%`!5`#SJ7Yg15|?dca^j=9ETdsiaywdNpvtCU6+N3ex$%(kp9@`kNSu%Ueh?s*ZO zo3lmynMthyw_&=Kwd6oH%C)}o=l+8CnkGW1v~ZJU-R4Fq`7ODr!1e|A9Vw?@lX!C9 z1T!{(O{@y6BUd_1XWNk4eG+LiBn#))ZMNlFyB_l0ot0$MxjkPu50CA(#s4#*-RPR5cyvLm z7xGg>H&^&Ya^rD_t(CGstNk^JrmP^U+b$oFW%5AV*aPP~v)M_lVvGQ2cb0Coay%5a zn34qv`xc??0Yl8mey5%NF84W4aM;s7Y&wY6nQW;ANgpR?i2XpWZ-=>?IQwIh@7M?L zjJ~Vd^+IelcGF1?;<=IDoMM7>V2#TpT;D@qz7h`s*P~1&P*-O`D9<9-N!@$4O`G!=rzX2RBzm0NY9ITUQ zKq5nVFf!!6+{=1W74fo$Gv?{Zp9Ii%Z7zt=c5*N1B{&VwN`8?%{1YH5ztiC7yn#{{ zS@4GSUfHO)F)P8iDdpk2S2(S5qA6_`wSTKKcf<)$%ypADVEuh{a<9~ z)Qccnzuop{(@D9(TW-NhAbS1*+yb9!qGpv{gf>!;aUihFJomj^sP>j9Lu0?GPgWFO zgUwB(!Qq1`16TV-3>>VV?^f+fsp6gLz8F%4a7*6p3Co7oO0E=k4TwCx_!3`zVN=$P z@46-6S#e+O>W7Er&Hs}V9pgtSws zb1Iy79FSuF9!7njo3}D`UJG>ygm+B z;%S=NXS3DL>8n6jbj##_!4h@-YpIO3$#+R&$oQ6c2u#oEm$4TqO+fu#u8s~o+p#~o^It=oO#%^o?DUmNz=G+ka8pl1XDKbKSY7EJ}##@71O-U0v4wa3z zYuh3W3~8Qe-54jF9a+AbF57jNK6tn!{x+gL@QcNE{5u_wQMZ8v@%Ufrs$-9JG!aYsPuwSg48SJ{>6<-!3|W=P2Po#y5;1q zGs`!uPHkX2uObjyZ4Am<-`tf_;X^xLr6BD4_(+d`d{A1FJs%&ZO`Ic_8K_*_7N<50 z%-~VRT$QMX(SspFj9Cx2xNaHezny;0JT*0Vsp54>vUqI#>ubWmOwvzcuJh{~_$l4h zeCnQ`D&dqO0r)7^CP$`LuMa0UZ32cLswgFU&&=UGOrmy5i-*(R$o6)7i}f}VdkV0| zTZ$}X+Ek4hw+*GVVJ#z;!uTfYUn7(D5&t!Y*I; zx7kS0ziA11PO_4D2^2SDG~n6iZKbJl)iGbyy%%>2ad&3hFNbTbsBEoVdpVM}lMZbA zqtT%jOgJ7Cif1iH*b{JC;liD5)bQ1>rz)>l@a^ja`(eN*&&eoeDO)gjFq8N|tLfU{ z9lk}0Zf)AMb9lRePRw-ExS3(9afEYeO~C_qq6T@%2k+}BxRY0JYk3Ox)eYfq08I&y zI3l$*6uj*%D>5b~s_8kgax^3Z9CoJ_?>31$3^EzmlC~J@;d4Sbwche3&aLu7XCSbD z`&)f#adH!l$RJYM;!)BR7*BHBFoD?fuMLGLw;*>-@4cnW$fM$o=V&hA|cw#_nLT21sN!Fq+Z?)V{t}6ys5)%Jgw5uNcH z6;1%*NzEVyMgX?E zI)I`?&cAVeIsrf5Fs7Qj3}Kt7+PX)Z5EzG~M5IcRc}%mP#{}>F%5NY<*at~!aPV|b zhnZfC*v;L|b4`Mml?eJ0AU{r!LLgn*-#=KlyYHb}xz#0F=^VV@TSgfB8)&_dnl}MpTpw}+MEt?Gaic9 z2ca7n(zN=={F08f1cHc#_Z7)=w(R77kZh4Q%T<g?w%8GbvyYzoD|P6@K?l*n^Sq>F=u0sqHAao=?0bE|oA#BK5DR9OPzBGybl$WW?v zRnlb1usMP5Ch6x~|9Okpd*d516r$-2L^fIoKhl9qlAE2<#CsxI%V>VvXr^TaX;znN z_%+Qb?~TV4XMx~?&v=2l`i+$&Sr9e3Z=k5g&J*HuCW>5%h5nggyDamqAMO$&&9;He%}9c+ z>2DZ{6|XAtwuJu^o5X(q=B%bR0B}Isg(o%!8tdVHI9gSRBXD0@*-7Q@jQRE*KK}<) zm&&4+pS8T5%A#O_&3%WvI|64Pp{_7pQ)`l&Q7O@Mqe7vji#uw9gpYUJjtN?J7}Rs0?V<8&xU zq8*%2ZH&+oG*AOP@K95UVZssb_IGD;Y~qk+8aQzlxR#QKYsxA}=~8uUJ{yypR>O@M zPw-+KfbBT1w5YW{n#kqJD0I<%56;q;2ME_%nn2??K9y zvZR_8m9T(CeFLpe4AcN7U8E>20$lQEF=Vvd*ta9FsE}a`DbvHV0o3-^-|SUsy$Fdhe`Vo9&$|6TO*$cX16i4SghMelx z8Vp-Tt-RU?(`ax_L$Lg1V}*Q40n#JV&E3|GlyYXsUgzvrA|LKw`?Dnbkjv~pzXP`X ihYu{-_#Z0|+YIrvsb}a{$J3cR)zdN7F1dW`xBmkM(9wbb literal 31428 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 diff --git a/app/src/screenshotTestFullDebug/reference/io/homeassistant/companion/android/settings/mediacontrol/MediaControlSettingsScreenScreenshotTest/Media control settings empty_phone_e05166be_0.png b/app/src/screenshotTestFullDebug/reference/io/homeassistant/companion/android/settings/mediacontrol/MediaControlSettingsScreenScreenshotTest/Media control settings empty_phone_e05166be_0.png index d346a4fe780af225b267181ee6fe16579a899ea5..16b34646f5f01201b5e76b2ee782da046118bee1 100644 GIT binary patch literal 32369 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 b{(|Tx*?8IB>vA1192`YiHJPG+Oy2z;pb2c? literal 31698 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 b5EWDz-oDdiwKoJ&H43%++Daw&9tHgmJ^5Ej diff --git a/app/src/screenshotTestFullDebug/reference/io/homeassistant/companion/android/settings/mediacontrol/MediaControlSettingsScreenScreenshotTest/Media control settings empty_phone_landscape_9e00b29d_0.png b/app/src/screenshotTestFullDebug/reference/io/homeassistant/companion/android/settings/mediacontrol/MediaControlSettingsScreenScreenshotTest/Media control settings empty_phone_landscape_9e00b29d_0.png index 4422dd5e54631dff449c4456e823c8d558524bbb..ac3976f47c05220f5a8583b4627cfbb85b5728f3 100644 GIT binary patch literal 31467 zcmeFZc|6o@|30j`+EZ6ik_)ZYkiEuswMfd6J!wX0Oc+!Q##)zBNXkCevSw#6WX6^v zdv<0p$!?5chM5?{?;KsreSh!!dH#5wKb}9HZ~akC^D^gr&f|P9$NMmRF+to0&9(B8gb2;aHI36dhiU-!spvR(Mp4azBTU6T+POM(}k(T$RQtERg&h;`(5c}MlUHm$4A~L8NMX0 zA9>d?3vZMO6_CT}-V7|>yRbTsr$q#8u*pq()#0plb~$g62o_ z8Q#uwPH=s>FaS>6NLgRXQqgVD5%r5AEH(%+JNTaa^O@A)*U_$`Y1&iL@YS6>rDs9&Hb9>8-I(G+>36R%`HrxBQV;V0@fL#_~2l3m70UDUBvg; zF$hoGy)<{t6KS{_?dcNl!G|ro#S`yFzTIJW@LQSh3jJPRo@LX1wYk@MA1325e?-bY z|LxJWDai!6nzgQik@pXs2s}IwoA)t~oW1or4@Y!Nau-kbvK9A28+W>=KXJ8D}WAL+!ZEAFzYm}mc zvnl2wl;qGCQNLd;5C5CrQfHHZwXaR2wi=^VQIUin4H7~g;^DJ5Z5KD@uDv0j)SF{ixZtB+P^vPk-Rc~UE3kHqrBLWKLnwpL|2j)keVuO(9o zYevLEQ@szn=#=a(xK;d7Y}+}TtE0Xrl^oet_Yzn0DhD3!-2&6Rs!~g7Qzf5WzNcR? z9UKAH|Jen5aIDYk**w5ntB)CJ$x)9d&apU9L!VK@Bsw9w4CtSWAI__e7S0W%BRPzb z^$Mv3*Rl5GA54nqo)NfxrGZbwsAioavz zVIly%BIyEa$j$i>&zUGHjp)eVE`DiqOY%E%0)KAF>1~9i_|ML`K{1oxRY=H^@yrC5 z>mojL#qI2oX#3tAv(2M0)89dGRS*^xs1e{fP11jzJi>FAgHGY$-P`~9~mBHV`)#=yl zIf9Dzr$zmLywl(D_Nf#HDiqeda>cQSS^lMB*%DPWc4RBT_vO9E{mT7!A|-zdfysq< z_jjL;H@I-eusg1Lxz9=^I~N>~OJiLpwm#mu!>9M9Tg~o(5j#E_HC&o5(~|t7OY3gL zSCO~-UzUisoG%kfr2LSux_UIU%xZAVGUk-@*Dr>V7+DFU12`RPe3-=hb#z&np)PmWM?1(l;8<&|`3 zs+G)d7r1jbvf@~IgS3*Y@JSx8yG0gl=UE90QyMCZ068bg*tuXi&Ni{#)Gf2M=Y6m* zP4IOeUWNbt7~!009j#dxtCE{DCl+-llgJX>Sn^P~U)cTYMGP4=lMzci{o#llEYZ@? zRbdqbAEW}$nXnrHs*Y29o5(2ZI2QC18RJ_CV8=h`)tz5ksCSNdf~@Px6-iKX3A4C= z2XcjHq4sWJJQvsQ22w#BDuK9y0FX1QB(nX_{T+i8_^eFCD%LpVm-SsY&%X_ig!{6oR1GZqlrqfZ6p-Ycr!{6*(z#gP{Q*AB1GwdqDQv20{U_R8ccFj$!4ttW5&RSQi zuZ%|;BC*v$&V(S&x_ZcufJqD@VyB4L+md0ewb27f4tAmTSAD=^i2#SD5uA??lWEEOp+_@>;bK{2Uy$BdlKB=7S^moN>UtOU$*vL)TV#pGd#Ul zKvvJCawhX$XR3BnTDT@LvfymEonVVJZGEL9z(dRALzin8ZmK;gf$-ydXkGln>NR>x zE0YYuVe1rRw>LP|YH;%vFIp8#EPzcS?=X0nC%y>t8htjt&Zg1w7+G2zN%Tat1%#~p zQf1145AGcGD%xwjDZ#ZGqrUX@auWf~fRKFYP2!5|+xA6Sk?ZHQ%&KiA3lHy0!p%6A zEU|Y?pv2G!;(PNCwsagro%DMQgOH3laKft4i~m&6Ak&Z z)9!qt-@g&MFVYoNx-*byRQ7xn0bhNvJUCh@KaoGLa^b+(T+?p|mdWy}{u>+ivnZVe zB_!U4d{{nA3SL=U0^hHSp%@eUjg@ksx04Q5=#YKFIHU*Uk;*(Aef6!dR_D!ANi z9PY;VXjfG9g>ZrpuBL>o)OtZ1x^mjAL!ADSQYB(ExGTU4sU{XU&*ERUBqE~QRv1&B zM>wQOr^EH*+HY(~JJno*cQ0TYb#4gvXEh9d+3uCSxNC2NAR^Hwl7E#$3m^x#>&K>s z>5!OW0%LxS(Lq~-hE*qf@6}?1ddRs?HnURDWh_X@WqJ*&dUi*2jYD@P zYKO-O)Q;FYk94u?s}xpxKNf&WT#G%}0TIW*OO*{1WS!C;^<-<~8z z<{UL!ZL?uq3LHI01!)r*Io{PY*dXLO1T`%5JgRiJFjudy*X0wPNQ11BFH-eKB2-lb zO*aVTWJ4%g#F(Q&$t&@0zE+V}#UwWAiYJ+#HueoDp>qXZmrFY1|T>d3`vUDG>Jd#ru&vq8WtG zI3bUeoLAA5c4#6em!Eos5;{=7v2USb4|WvCS@;ZwbDWbKGYTLIbBj?I;pWuz z;fA+osGcTf_G@&=0avu}UiDeC(b z^Fex8v}`w|8qLpB0TLvFX{}1I>w(so(&|w=!(uO4z|e4ejij2Mj5excbKh{bOYA3U z@~o_z2wD{xfM8`eU(g<2ISua+-%(7ZRSZ!M7P2)|I=VD(ti1CrW@BWVclI`7XTOB{ z&pL`Cp^|$Rx|Xxfg_oIPh8((Hf>fB)Y`T*J;%`ZlBV)vecGx`TLFZfeYiyXsFgc~G zDI4nf^-;5A*3y+5`$;Fv-@UpQ$g46v=uxAc^sc$}H~{S&wgqDNY6(B>9P8G8q0vPl zw!ipg@0F36Ps<vq-?e^99%y~$-a4ig^ z`X)0AXfMML9lE358~gSe#=oS1@KyJleS&k0u7ILi81dB0Telf1LkhD@H~4Kv}1Q_p(s2K*efyZps%E&krx)Er!C**=7hX;P}hZ#8Z49 zO)?gmh!=4r7yLY=@>{%W?jJe{cb-0EeuLj>9DD~UAdhF`t$z(yaTxHZpErpv#_GUy zF>XoOvp+*>!Pr1!4*sQA*k^TO%SmQAS~wQ+S47R+Mo=d%K-l86wRRH(T36Yu&#q?} zMj}skUhTEaJlpXQ>L^9*&zZY?29e^2)9-pGX!6m$QP?w4KcXegzf7h!m--V>$k=eHU093np2sd6XR+8-)dVVo~gzem}n-NN%11G!{S(pN0oHR_L z2Ifl#ZY8+OT=0E-tEB_LD=>e7q`8?{ikQ@n;lbyYjq&3tMc3gKKdu_88H72js_OGWb8 zPS>jG)KG{a`l+F1dZ>Mj&?m~R21h9xz4{ci>jhI`uI(kNA6m|K)fh}uVB^W00>!FD z7d*9(k#u`0Bm$JW?iz`zjlaGd&!SmZ1o23nV#0F43n)g%6 zpuCSh?hWt|bbsFw%Nm0#|> zdaUY*SDLt-ne~D5-yXL=3wGbP&WF4Dn|yA6P1Ao>cb>fwqbr2SnyvJ=Loe<9-YLdQavAVzW)IIqsG2jIrGqv4 zG0py0=V&dtswydz^UUH|*;68R@`X(73y!l$W5zr;RPwX^Y%slZ8l$VD)lOn93yLxu z?3xWB_$Y%{_(8JTX}HMwEgX)yXVA@8pnmnHtkZ zvPz^SGZ=mUbFP1xWUUiFu{SCoZ_+CptWzCqfnj{X+pyK}hUgkK=-h>87Mi+qD_34V ztnNQ0!ty~TJ9xA&k!LB(KD{i;`P`R-e!aGh@i98Er?V~~NX`g+%W(RrGBOos_e${m zt4{%8U~$vm(`BwX-ZFhNo0^4kzCxRbwH`4k;(w6o+2;8Aa3)p2Qi$Y*_N#%MA=OGK zbXObRBK6|GI$v3O+wgl5EUwSR?dY+d`J(#$7%J$XMw7M>GTvLEW^HaOyQ2;7hB_m= z;JNv@S;FOkuBA{SEY4hfAID3$<(A1C&)I7r=5z<=SX}t(>a)RNQD>h4@Va-_%DC>> z$s6@i=*eiRubGlNY}|Du(#*T&ftGVyclKE)XAN^0I(6nc)j!2^1pT4L41O1sP1Cws z(_5bjeWBrMl zfSP*t$}djLo;X4+Cs!xHI8HG1f<$C}sZeqJ5Uq06I$J>{I6vU~2fuK2fievnNYcH@ z;aUsJV#C_~j^)koBV3a=fjI>gAkYm2GV33C&Sqy3PeUQ2^nqjkDCPR^np0r%z-0ZJ>gK za$xUUb;g&_C>{1)%5~V|SbD<_>)g5A>f`O#c6bHvI5_&GKXqpAmDc(XgVMD8d+-@a z@&giJdW!WU-ii0sFO}H0VRa$4LUM&Pi}j~7fB^ANIDI)#RpW4Cro|X?=a+1(u&toV zb@RgEFL;S0MWY$h)Z|`H`zFk*4$2btnLOa3S8G_pE`?R2ffNVm7 zV4%w{A$`S$7ab(yMV9)kT-(wuOdtIlm{d;cWr+*y=#0F@gw6%Z-u!guH#X??6buWH zA0}d+O?+Y|m6QGP`o`Bsc+6FWc6RQ5m2~Ekfb44UjA|9#7UZASbTr@@krA>Q`h1za zCVXi1=J9jXt9hABeEYfuk|d<45}X|%*+KOg|1f(!E+Bpeesd!uQigpxPd0vE?)7Rk zv#OXtmn)RzR-YdPwi@FO2%8G1GYkYWx|Ay4_lC>550c+&cZag7w6{w3Ba7ZheUJg4Qg~38<6OqlRNs zJx;l%*fusNqt6siK}-fauIW`ZwM}5>(oQ+B~+5!@ux*r#FF6!!GsdFaSwTdYSMb)8A4OHb>&Ll z!bbgwwrk zge%V!&JK*G-jy>u34ME3tt1u_ybx@y!HH+3KRc``^LA@;|A|jZFc^7bGQripn*HL` zt1rGI;X6h~y+fMY?9_zW9J85wXOQRk+j0cAh1~xpl>DoNA>-IC(tt$G&ZOfRO9jIZ zG}s3Ai=bhNZ&yo-G9T_&XW9qNy6@x7`?%a=dBg~oJ$$XdQ$Jaq8>nQRoYg^~vOUF7 z4x4@(`7A1F*8S`DkhoAgCWjn9S@y!^)pN?HcopsRp0FB%F>?zV0@IKtok;m(N18Q)9#XoY<~bF%WpUG&O_a=G(pdVQBo!Qmgsk7h$HGt-6mU`eCK<`8f_CbFk?s% zmqs{$AQGaaxXCg^SlVYQ+Vn!dLuJaFIBz?~AgJ(;;a>K9paCGA?I8DE5q^VhG_h?) zN~zqHJ{$?cQaSaB&c=8&d1T^qNnRtiF{^+{WRws36_n_q!zr1Se!_i#_lRe!QCmM& zs#t!)`5ydBQ7P0SO(wM5;X_++8)1GogV7|zLvES}orY-3*M_-yP*S45+Cw#* zdTRNt4J;Ww`OJbFm5zSPfY>#L?WqjieeY`DwVhtUE+?mhpB0@Omx-qv99)$T>-=N; zUIohj5SM*}*(Ra^YY!7n=Pc4!*U1~}EKG;;iCKV31(i8n9@M*q>MtnsF`y6$l(awHcH)BNc2 z9Q(uaXdBAdTL&LyWtVsZ6Y}Kp6BxW}9)ZLk%+2N$lx*n#)&CcOd`hI~p|noPFE>n2=2V#}@Mn*3nMNqBhHr>H?w zy;^e#u__B8nD*d$lXOj0ODMuJe4-atK3e|Fwk3*H;gUn@hYa+)XYYG#LE10 z1C9XL0~Osf#puyq%>i|TZG@hbK{8>`J^>DM2=O{4`t6LPx(IswO}n(_$3NbbOFUYV z3s?yqzS02N`6x@oL~}IQQ?|h(L2}vl7|2}xk<~K@@7tP_!Mlwh8Wa(39l)jr*d zXPz5!83{JfQrW6pco`d}4~ti4UahS^poNUA0L74V8~&D=tNk6&`(c(tW__g+j~KsM zMsxc|XdlrF@EPOcS}VGfZo(x;J&IJP2O94DmU}7i{R4cl;_pi)ld6_A>|vS$WmY#_ zoePj+^g(9QZTb$Px8pgzZr9^9GqGGybrW%9d5&vN^FX>DhrtaTxp}isl{mgt%Y8SJ z1J+mc;>DucRB6?!F&69SzGq@|*?p;=qkMxA;wti?gWhovqam|@@!`O-DW-A;j`OnZHc2}C88#)S8k^e*v zx?>?}fpn=D-t2QnwU_E7JhxA_JIkX(iHlyj6_pu zIdhSoKU2*BQ?=v$5akVo#@ZK&P~j<>UVc$*%lMeQIsE@#7(3 z+K(-+2{@Zcehe)|w}1!GUtSdSCeu6M{#pITL zwxZwP$*yDoMk}i_uWa!adP27X%6rK+T5#_3o!=-r-EW-kri*`_2mM& zXy~&PBjIe@z@dWNgx6@>)i!@XkUZNfVBh7SK>_>Go<8GApZ>qVLTKir{oT`McObfE zmKHbl`8I=uRglh4B+P?x=yYbMzN}SdJ(F45Z9rMmr#@O$^?R-%*WKDOGc`NK*4Ng` zgRJgel-LA>7HT3P%K5m7flQK%jRx1Xrd*OH*4F^a}R$rJz(2nm<(z0Ke(Aq zF7Y`V4|=4{YNDs2KP6N2;M_=&>8Kfdfms|cbxMA-!lkb{>-QX#^ie;P*_vs)6?aK~ zri!@WKRcH~pp)8bs{DEhchZllJ;=ew7d{?VeF-%0y|RnSY#u;z}k7&!m-aD zD5=?kiD=gmZuuciBAX40(|jWa7{N!2sjkUJA3*gnLK770a1Rr^V^MR;TzE4+RC3#X zF+e%{O}YYV&tU4wT~k$$EwFcnnk(sUZg;_?p@Tosy(vM=qU4FBac5>eb{y&@<47P> zTa$RTLj7VL1wk-4N_0)yl|kxJi)z_J&MnBgf0i`xNu^dha67kdZ9@y>I;$%FJo)Ki z+;;q9RyG*@6}BP*qc%5xufy+Ibyjh5@;7Sgpm_>4O<0qD%J48cWK}djyqpRun$r_~p%nR=&KwfY`FB^)i3|~PnN>SkG(tdqV zezrtSRTS`2ouHaOz6G|IUBO#>!x1mVX8TQddWAXSiKfHUMrm@qgq!|2ba1_3PE+}f z;UOQ*gQqe%R0PNh*Ptw)dvWR|CFf!8o!Tn8SChCq{vuy`&qo})6ilWoG+Nap8z8mP z8GqzRG%T2Hn@P1$3*zUu?>2?L(p;Tx#bvw)N8ca%e!o_Wk6&|9v&RehIe+P{lCyYg zTxU_3K62X~rCST2bR;Hv785-b(*WVp3)d%laDzMO4%>Y_zFyq9oea5!se^TXF8&H$ zOP&JlN!BEdAUIf)mM3@TkJtFBr=k5ZcgU0CXEQOW6E1Rs~ z)aIUVcX~#>`y&cAU?>qrZ0(uJN*UqIak=?*C~m+ubRGe^#TH+ceTDv)W@QD63C)II z6v;?Ip&pU+5Mt-owH1b9Fek&hUDp6Zd-3^v5Vc=8S+XH_sbTh)wi*$gOY6`Dr#3w|oz!pAbG-_sWs|nG>nwPf}l$kb}XiLMllVF@LLJZZ_x-VwM@iTKl8zQ}|CG z%?(~v?%e`os=m68CtevA25j@3hek7~A`z^2?`x#-hWg`?Q5RAq4t1|H6|b|r(_gVQ z6!em-I7|`-g-R+-sbqYN>8K>`EJkIJji)>fQiFFbT+e>eXM(rcLIix3qJw)~{}F6X z%NrdL%pi_m8T1;iJF7x8^Ao7Z5Xh&axHpT_zc_PazX0zM!Yg>5$`mvYH{5!EvkZ*H z2}>8Mck0hAlx#boe(pzK9Z*|@$iB+pPVHLvN!(T%racpY4WM~D!T-NjU;M4xIVDBiXq<{4Bb}0e^rBV$z&nOp|E;&wmL=ft$MfxCJIc+^Hk;JyYui&-lCrDUOx6}1of73)J*c4aUgO%~va}Pu+rkca zmySvw?Hvg+?3pdUrH^akoNJdgx7Ryn#@DB&20rPf;LspV~q`TKR=q8Ti3ijRp=;SVe zNZm@fVtC~#?Qkz0j2Tc`{YpNg2=CN#1MRTbeimtlnWMMU@{@;(wy^EKq+QQQtxhjO zBwolt1D1O&Xye*nR8)$2A9UWW{i+LZD z_1#|Va&yF+lAjbR!5Q$)HV(QB_m9k|v#*#x*Uj{vdWI_jRe?u0s5)@N9qsCj)_L-> z`y`+*gz{Fbne5sBkqi!*Y#57>Sgnkc5W$*>7^?`oR~N+ietjbgamc%j@pVe2<=^OC zW901BpBxrlUwG~Usgk-(#ZIer*T~&2l_+_Y{9-S=Ctz(%G^ysfKzTV>S}Vj1&Eg9* zmEi`6aHTh{aAKgTk(%SPEiY^myr+^pJvIs?S&VAZda@X4oPTW27T%C9KamxT)q2st zoFKNky+cLP3^)893l3#8XdCz!=eeVUe@hU~_?rkH!4^unvYAdgm{r9oBuMQUz=m}B zl#O;>`5O0D6qoc$9)sWym~>Y6ImGc4ip|FI4&8^;I+<>El=c5JI~X^vT#@2t zhbWL8gg3K;$v5+gKP43tKOvCLuJT&^es88L15-meM(4_CRG;iRb@*Gx$AYV>(46Xm zdV?w!;F0V#Q{?TgvPz1K`%i3^h(IBeiH9ohLP?WOG!X9w@>Y`erOb!FyDH@yTQIWh zIM^VD+ww~AESD+eHV4jl%!z;D6jBq~W;{^EC(So=g?w?~i6kX~V8NkiBhU&|c8V7G z03j0bv@qxe_|WgN3_dPZR=lg@tWpZe9FnU)LkNF6$O4l`bot~+@^4)FH!>miop_r+ z5UnAYW`4IiDW_~VTY~<}7%rcnKQRo-`h-CNXa(oTSUA4q)J)B4fD_P;4WkMwXLH)g zO3Ucgaz?vaN1l;BALq(Tg^80fh!uyE<=Sv| zbSLyrx-;63-Y%Za@I8s+v?)6NOat}fmR|YSTM{q0ArJKv7Pte)PE-XDM3u8YtiE1w z3lj*L74;4?ecaz7SCe>Q+AQm3x02_m#~gpf&fgyVKFNrdwy@U}y{b1hvCQEPt1C&S zrLH6Huj(bh_V1A+ICVN%*$(a+;4?U1CpP1Nv=#amSN8{Z-UvE_-i8Fhf8G0Rd_A=q zRD>$J1qy*xfKKu_o}NI_w%zGj+`J}60Rp(Tyxcm+jA$O zDp-~czv#trUd;rUm^FyWFUw7o`4y@cUNSuJjQt4civ~|;L~~ofeiOaT!k^&+UZiGL zeGidV5Xfe07zx8#2e{*(0FrH}Ol5%2Qm0Pav0kN4!>EHMAO*yvh|%+rKF8&$_phc?PC)bkilC|-#QctP zXpcd7EWEEb_lQi#pPQbydZMcH1Ytg1`v6Z`;u|n@HgzA3LWiu$Il40j>Oe`Y9=UQS z`urNfI^E&0JU0V4HIzKSA3NUw3ey7$l(r$2tO<$eAtNy^)#oQr~vgy4i^h zL$61stfiN9++K<@-sfX$#k^#f3=|;4tOk0sR!8O6dn3;T#O&J>2S5CXTCd4G(2-`R zXtS_Gly7? zTt0fU05I{7mtboX3dmlpy~)nTIY_(_3P=mC+qR=JH(5jz<&+js1nNh>iSuJQ%GsgU zabmMCqBN2Znb@1iZ?Sq8w*+(c;^RbG`1`~PbYMkVa;unY&dGlf0ZBo;3yzikN$y>` zfA4(RN?+kwD|r+kII5MQlj`&WWPk-6e5|f*ySVLVTuqp#YvBkmlN zb}s8R$DkNnc{KiH1?0{z0yYnU_)Rzy4+5RD!oG9HTVV8DYmSs#tzBl?-oel`bm3m3 zGuN%fQ?m6- zyxK8>WRDEnYNs#>1c$7|N7u!|M%-YZG!K7ueIU@X|1Rndo!RRRrp$_zY}YyQOfphR zZthtykZBaMX>p;Tj{ff$sRoUZdwKRCvU+7wC?UO(OBb>es;{~pg)`dlw6KZjfMnFW zCc@splG3LpO$VfEY>vmZ8+HXyPF{tovv(J6(#&3yRymsi;yt_tQ4tm@S3Mxsv9JjY z?x3Q7S%~IeSE7IY{~+1eY04*OE*eW}y6sS?+X>KzQvD{Y60u;`&qf&yUTq#wFL%G3(8e38DoL$*`u2hEy+nv-L-{qCIbSX!>QqJ2Y6Ox{4n$Q6J&!Ybz=a@MO-@ zpFFcVL&hvaR<%M=_IY0>1oDl zQcO8L>3gy-eVFp5A0{;KZwO1CfxM?@h(;@KKl7Y2^r%Hf#qzl)%&YVOu3%~JLIemM za*-Z@G?GiyKd^xS`q*)<4$WmtZ`+pbj|a0(xf{RR^-z6)ak>ghk*yqJn|Ef@5U{+{CS|oi2%BO_E0{YFc1+ZI5y7>E@ zsdt?$xu>6hVRxRlafm&kl7G zbf_bn{RrIBi2?={e7tLO+n)nTn=~4TOchDJQQ6)n&-yk?LU(M&8*iyL7n9B(jvd-? zJ+?m>KApkOS2`II-BX^wQGMK-ntk87=48BvU4k>NDZRIvcUGF4s~DFIO$JcQ3AX5{ zCL1nQMWhX^Tl|@y+}I-M0*I4n)YssIhUa}2)_&2g7)9|&a}yH^tv+XS0?!?H6>wXW zJj)UViX&HYh{W!TMnzlTlaq4_LJ?Y{+zvGc%-wI8IUKMh8MVM}^`<)gBCr1c9$4FO z#{YM~%JnnTxW=+loSF{8WkI$Q)G4tNw2wmId$Sr zD~lc5y&Q%B0ND4s8vF8fRU@{*9s&LMGJltQ=Qk%H37)TJs3#iBK}~msW@4?XebJM> zCudT31vp#q=7;I^Vu_BqsLcKrzHYA!^=fMv&9+@K&jIjcAC+r$)ZViQxZ zag#Hq(Pb*4fb}TuexDgC%l}@ccl&ndQylz`>!ZAL7aLWW-*1g{--O3p6gXwKBvhN( zvNY3;N1b$ioE^GlHgZQWRW+e`uZF%&e_O((fY+5R<3)hxz|DDL*2_UK0vrd6NojZM zT>CmrL3eB}3M8vS|2n*W1eSWW*Y7%b zQ2&LwhBJqAtIl?Pa%JS5GG=ZP7oT?^Gn&&`_v@>;LN}(AoPN~u(VyZBS#F=2jrZ%_ zCt>qzTnwW_i!7FFCcFjq-K^$Hox94e-$Va6&YzchoFBRqm-4&?0zianJJ&S`E8FbBmWIPPe`mLut1O9lg%_g_dykT@}?!qq|l;TS!v z7vzkzRhv`@+|Heo5~Bbi>Z^G9Z?z;)@6rUy1>p1;neriQq|WH?_rDg0Rh`fDur!Pv zptV>5&2&~f-?qy4{Of*kg2r<^=7GxkipUx@SEJ-lLrdYCu;?{XyVlPa4DYoRqud9S zs7*}^vj*NMRt$QcDh`C9zWnv_fo1gx$bBOcTn@P}7g?R5zB+=PZLi6ky##2%fKcM< zQSUux?-Y`?|FH35@u6ZvZ>e-pWVJ?C#NebrEcO2V@?npbyj;e2Fm)I|`Le{P{GjX@ zq_EBfScBfr8MD2~GBh?Rt!vvMmgja=Tc;r^V;8@KtB*l9+`@_NU znN-g|W}{DpG|REq4fGRK5$%aj0tNKnd4hIn!XWo(h%@05%0J+m$?QzDB>D~Jwy7?V zXAQjHA(r9n=y-!Sg33fbKmYP`sDNj(M=|-0Y<%hhpiGN%C%|A7*?7mJ=s2tq`%+~b zgb8x%wKDmC5p|#EEuzbgyq5v2mZF+p^i#IR^gs+ihGenxMuhA!3CEB=cgG=6Q=Vsh zFu>(vx8351L3bHhs{#E&vR`LvmfF%hbD(-)z2Kz&xc2$(moEGkW`GIF9e$zQ%ZB1M zWYkn7t$>DG4mE+kW}@Y^FW(`So#Z|n^vqzumf|D`D&3qCT7GK#np2K!I)Ncec=4;y z`;1WYQO&bfxK^?3Foc#7;=_wx)0M^6axC>?w1?7RO-#1`K4wkd+0^Eh`&*)$$Ao8&oCtm|locx;i=zIu3dIxQU1 z*z6()RWb=1sZRI!{fXZw0=3<%Nuo4Yzjs(coi1YrY8ok8^AfkF$x%%C6fZ-J#ceHr!MV@_esUVnMhj`NwY&Q3_TQxjhmDNpuU|nwBKxsW$)*k=7O?w5@dXz+ zZI$TTJHr(QpBfQeX~iI8n1E^ncO7-5TQqmW_}9moJgk8LrvYE5%Vf3a6;*)CVN;;J zGETcK8{#!dDx%hzf}Pb#(n;3)ejYCxPEpM^niI&(8NPoR7Ura7Ql1Tlmq6%@TgW-( zteFh{`k-SyJDVHzo#h>=We7}!SOW@GTDZsjtAF1LDeDglj`7`(Tq@!0orh#z1Ect3 zdw$;4#y6R52Lei1Ccb~Wz+v31@StXA+6x{z9-f;`r}wWeU!PuL%_{%nKu>c#L|fj) z@;Mi>Yhf!7PqZHKt#yqjvD9IhjK5pAHR11f-o2+stP&aZKXCOh*J%DWLigAb*XG(} z^IW)(lg~{cbO09Oy}v*HlwHL9=8tav`J-Pl-fjSkl|EN8Fb;&+dhO@OUf$dEQuYbC zRMZuK&;R-BoN>d-=E}#O{#^O_1FI>(rPS)WHx`t{S}VYVHYfGhyLnE*6MudOgMU6K zJ1cosaN6ktI1G`Se#4!Az5VEgG2cR+3Uc7XOI!>6`*C2A)SqlmB0*!$TG~dw%mb!{ zGZ%n4N{t5V|2+W6TCa0S_HnT465YRD`B%HnlPL%1S$7kE{aczOo34p4!}%adM3^DD%!EoEty={_$0 zZWb%Hh5E18D~yHn6z=)k0{u9I&rn@{1;7>=(Y$M*_Vi-jjmXFU@hQ4wUxvPd-|CXy z&Ci=QWbS*@7YhFCdpCfSE~2a-rUsFi00p<L*U58?5_O*2DZ)-`?jj=kWNUsU#@_1I20vAF8$YQAzo^2B_tj! zGAhKb?0y-6ok;kftBzINsxoV)qV>ec80XvluNO$1Ti>UUKR7+ZP*?y5m2kQrj7EB(Q)A&;I8heYhObCwfTu=0-NYr#bs6CBqqO$c7`AA# z=OTC4-oha*C*6cxmqoFZWv`n538zo0hS+l~MGO=jyK2 zEB16yO`hQz=MZ?}Iv{E=x(pDDJXpHuJD-ate58nb1vB+{Z=j|=OeNnC0TSPK7DaW2 zZAWB9dHOAlX#TUCcd;+^9>*eq`*ZmBAixmz`43&*BG{d&Pbt{sdQNN1gP);S`w6fU z_ajepji-tZ>x`5Qcde2w$Fy6d3kipi9|CF{nxmy72TKs*P6Z$AJ5;(RRBKlB=|JUf zk5hfIb&qVtw?FQsg{jOAnpYyRO=3+Mu`uFpU+Glxp#nC=dV?s|gaQUp`#xYFUGL*Q zx4fKrg3<5#74xDSKN{P~DS%VI2eK)3(Br3L?)Y1*so3GfQqc0Tkcv?Mr8Lnqh8oLJ zQ04lVMzDxX2CK69&u8|P%c9Kz+kghC6We#&=}cCV$8FWu*BZq*a|3qa%2pwY$Q2xV zY!KFCmYHLGmk5Td!;GZS)DBVf_(8nm0ov+xmES)Pt@fT^HcufiYKglks=IpRzqY@< zr@JHZLbuq=L*Q|A?=A#)7JR5v3;e@aeXB|`NE!Dy%l$M zuG5Qmc6j}8_X7QkkkG3vUk3rqxP;nZPZL{Jvf zco8KzQFS2o_bdSUD#S2Bdy4_LJ;nlx$8)1Elc%tfadq~r30!gjc)h~sR$g5UB`#hh zP|{e;ztaW}Pb55jD?v%|hS#Y(CCX z93>zm@zXlAqDCX|AwQ_zwWH*hx3_*Q={8V9Rga~H%FedNq**@u2<|bMExf37xfS%z zK7DFn4iQOSXO=guOr?++LS+*7?|sePt+AC5)YgF|0M)*4Yn*%C z$qZ{A+ajw$>c`$|I)on-0e4q;V1bhc(MNhv&l?G3x{wcGJ``aM+)tR=ba!3EXDkwJ z`r0sQqH_|i_t;{Xef&1LAdUJPxK$vDjs~{7(;#nJu}Ziu(vtKIYvo#}0lG7zA+72? zUN8C`4+-iyT!tWl#Oi}kQTD5$Yr1A?R7GG#|Ld*;rsJ$7u=C?pYXRI$6Vh)e(g*JD zmI3CFEPZ0ex8QSBaAsX2-9P=3k9}i}a5f#i*)$I|b!`%8d!6 z@h192i&`DT=62g}%G0b_JoV*GE@NxBvIb&Z1lJpF5?eanc4-nSVmBMX(!AfGf~Rt6 zKu@OT_C-MB!Zc=bcX(OCTgp90yrQxdkgw-K3P>SvLzrbFSW}X2?p@pxDn8~vLx$<& zScz|9Ra*)ytyVjon&;Y3GTyxwTJZg5h5(z#!KcGtl9h1zXug_0DVEeA%Cm*VTP ztlz$YxeB;&%?|UwAePdo1LSj_^LG;R?0SF`k0B=a?Q)3}FC8qy6Si@*K+$zXJt2<* zGG=Rf6>y$|EMql-Xp4tOj>qV<+4spkxH{rB7B)>kY7$FeT`alxjMUe9J#hL~0ni0t zP(=Q3W(c2AqfA>r;4H@se!&4=bm%Sqby6@Dc{Qz1{j@}JhDBOiIvak-BvzeO7cOoO1*me(J{QwU)+svR`pTd1%JiT`?%Om!F5EK>PQ89gL`XClNx{R>&y#4 zTR7JUmA@#NZL>|qz9ZQ=a=dap;)VicCfd3WTo;n4+bu_<-+B1?Fa|Z%k>VP;^h?Xq z-hv_`xDzD_0CEga?%6;?S|_{*vZue-X>0!Wy+=%m0d2qX7qGz49-+zl^P5~$EO_Q% z%h11QI_mAbdm%^BmCzg|zTF~-?AK$YGk98fWVzFa{ZEj6+@$bm3k(b3=;`VYy%cuJW2xa)uMz2ETR!7!x&-!9hFx>^E~A1R!TeR7={hmO$+ z&c2b%23bzcU8|q6%WlwDsEnsDj<6_YQs3otQaLx8xWr{}757?IK6S1+0;=^C{AhZnftNRa~bp2@&;lx=X!1Tp>Ii7BlO zv^@znA%B>QcAI)$)j9ua;Po8@U+bdY*pY7&mYF#>Z^mw|_=wZ6U);4Il@tE`f8^pO z9=YvK`UxueKHJn2M^6)q3zYWkyO!j?Is+t0S{rNgWH>jk`K!2&5LyxDdN;4<$ZQev zp1AvCC0IN;ZbdzaBjXWMV)XY)fm%wDk__@Yrb7$d!qGZae-_-63Cy}3Ozv$Z z&AysnD!|E($;N`xbNL=9D`p2>TE8FsW@ak-`G0^J5aX$jLzZ^@IPv_qE)JVpYjN0s zpAg7Y0R`WeR>FJj!kbkKANQ&`bN=<)x|ILASnL)U_x7Pm)!JpLVt|NBhUf5C!;NY%*=dEuw>bgt@Nmb*Vt9c2 zx<8n#xo_aWIYsm}@qzQ_cmsq-d7w)8R(~8g3=y6jkW8xhj`Lxk>`puM4Y=C(@h!Zo zjeY=SH{-w*Q;M-tw^KB6#rNo6FgW3>Jtm8vv(=h+8Ul%-#q@014EG`(Pf;ZjF~59- zh^Z?U1!m(}EW(eUM&0($Arxx?L~<2-9*;@*wr9^OS2a|4r#oPI1Bix7Dk*nRy=F-@ zNuWp@t^sTn+CB`%4Sl#@kYBhp8Am;_?rhN37*HbS&#!{pNj~T+fG6>N^W;g~l)u9Q zxu{fk)7Gp-2G%KRWAtC=?(N{)u8w|ijmtP#X_@Y$Ft7(+(b>0vp1ExBR^LNVkB9Gyx&hpp;MrL0SlHa1fC;lu(5XN)Ztvy(L7XNsWRK zLYFEvA=D58?~a0J-ZSU?`+j`ax!(L_=Xuy`@3mLC*V=db!g#fR_G$R6{`c877gR6w z;SL5ga6)b1qcgH&ZKDn0)ec@D*zFkp)&@Jw0}{vLn;7OfOWi9I1voLZPUBJ}6JV&5 z1<3aY1$+6LpK*#xI&=UkkW@bAB?K%}TcSbfRkpZbujQM4N3Z-62mf}1gg<>k&uS)i zO8Iw;Z}*E|8cxLlOKzBLC4BYrW&q2|NeA9{qS=45Z1V4BK~y$7^fOxS5nS-C03#6B zA{xC{AX_`NN1NGn=CzG$JniHG8#Cr(TD0t-$ZuBx?9+^y{2A~;z+3Z9V4AcRry~!d ze{g{YLdNEvreu(6nO?cA>bxK2H|+#-5LhK&_H5stCa%W=?B7gW^l(S#@frcwkIs<$zw`pb+QTT{ z%WB0uTmjTLv`weTp8LlLK}T3HAs7q5BGn!Xsabz7FuMrQL;>bqtm@fm&L@_Ej8g3$ z1a44%_Dz>|InefgKBW>JpTi}GSt%l^Xuv80qFHduoo8RG_6*SHwl|;&k`CNjikq0f zQf>kW+5+#L`v4hd4NsGEQmMKACw{EJYM-#|nV# zB;!`W$tlv1RNN<{D#Z~pt)omE?|37@5Q>hLpLx|L4|F$QyC(~3-8dKe6$!yo-fQ`a z1FO<9X~&(8u->O!Vn11Q?e0mLL65FB`ETKFk0x zryoG!TWn^K@?{!(4LAX(bUh!D99+(@H9>pD2+aZDp)r_?Tg;sTJ^ zlX;ptw>F6Qg`fAYjGcR%k^I^Vq%vB4fXd>s>>uO6*4{d*NO`B#$Fu|YDB-Y3?(AXE z8yVYlK2Y&QQbyo5;Dupko8R}>)@M>1_AWF5pbE+e;K`7Cp_df~0qaq3D zh$#p$b0)9K{CMdgh+*-=az-hIBHDTKi_}(#T_+;3DXD54$HqhurdHnE?*n!1yqtj< z&fii{0GcIsWOnO+-~BXM9$S%wGz;x;__)45d$;rhI*1i#KOado3Xihp`IeXHnP{}; z!;ks_{wF|L_v7;}=@e}b22hc$45&s|e)6wpSGVa2L!{kf1{y0M6MiEc ztt>oGJ=%M$ef>qyo@&bti_mjk#&#rtKOmKd9rN;ILDbaca`DDbzot4DX%MPdVRzof z2mhI^iym4+RO~DaVnQ1q6z!pxo;e)D_2$LZN&s9oxRf=4`~(S4?0mtEDtW+?MKTF4 z`D*C5HXMi_e2zp!bZvI1NDZc5#y&E8k#(_-p=rjo(@U40NjcI9%ivSUnagvz5MoRr3%s47u zn8dutA7Q1$O43Y1)Q5V5qCvN0#uDqT>U^x4t-OG}MAqgo=t=Y~>vGi_xr3*U?xb0n z91$fn@9PCX*WNEZ|C0qN6VQ^7nxPs1;NcbWEP-w@XLB39FrI#Wo<-^-RMeneA9;P8J_j zGvWScW?p%t$?)1~R*@87-3eu-_HZ=7btGv(UFIiQ{Q)f23}V^+`}^iA#-f@56?KGB&0OcTD;ej_xj8*#ZH#>MCFPsSG57Vhnb?62>o&! zyn= z3YeRK?+j9n7Ttb7h5&aFS)7P3bEy^$cTu^Z-_v6+1SQD&urtEKug?nQ%4G46;+fmWj3vjzs@VT%>y!laiD72 zE`ar99CUQeXn2E?yd;wNkH2N6fZ#A_|1ruZ7gnmNb)>ZK-irO=O*}|vDgcT4weSD@ zA7_jQ%{bC>3l(F&dn@N8ts5h376vNY2BhErEsqb`1NrkObijs#ppek_ddi>t9M4~J z<8+i(K97SGNiz!gyzvOBj#~wQDz#(wG`Mr>RLy!b;%`{T|J7CgKP7N}x9v*qc)Waz zyb*NZQpIs+=ir0cZF+Z}NG4kR@wk;!KjUfb?{yjx29rXg)T+1E!NpI0HZU1I=FZ+@ zo62YSc5WVrT}$cq^|qyb-4=s2r zqhDj7>1znOe|1g{J$kEWY0sX|@xec;99Ol4|H+m8e*;Vd{@=PJ#JyT2MRRjDq6$ik z=(w@`x%H6Txev75IaD!MF~gdxI75o77{|-&t{vv&U~VwhcbeE+(bFg`TYz&r66GYZ zg1|{(hYUy*V^fi1 z>@mLl1>J7#QBJZu-#L7m1%r8}anDL7$^Tr-K3?9=h`BS>mx~j_a68{P#i3a<(w)-r z)km{XQ`IKuIB~h6tVx<@XE?=KgA1#pTOw8`#4GtO%*oGucE@-9nVVo!3tAgd^U%5D z>?V?7P66ih-7$xRyR}ZQyIYQ;HP3H`KmE{oYhd5#kJ6oXp$#kSgaLg1ID3p{F`_|f z*Bz$Z)8N2%=#&*@9A%@asoFRQEF5%m-I+>I)tU8RV)J6|cx??>4!#BUoq;=c`^+dQ zj-^F)Q=OqSUS3{WJ&t#Qdv{cQp9v);$PBXs%M=G9bHU-K>ey8BMSeTEcyr3~gH#Dv0w{GfN? z+h@l59xH4LQWhJ!4F1!h_KzMH%}efH*cn~9bc_YloNH8usk`CJ&K{H3OzCY%M(zf5 z%VuMTUaK+ST|oS-uNH$l$`E9q& zg7E?i!Qxq?1>E!PEB?+c)|n<@$lVPT%WmYvM#*|08lQ4wtI)1h5467+ZxN4R_^eN+ zz?>fmXSFQ$%S*;EraTW6dyDm_`#+qxvs%B^)tq$g7DpAeX%xBO|10-}_Gh-IcXZU) zIa1W;NOTt4Kx*tYbgdI(@eqkPT;e$7t}APhrB(8A*(z02*f7en4URg$^rW8%uhz}! zcl71J?uQ)6CSThT?`_g)L!gx{v7z(YEq@Y5Ru)$d#Q7s<_oc?U4QinzKV9z%e{eDD zu3Ug?ptG5K!QqzSYs##!$H^63I}>?l*ijU ztlP=<8Pg3iiTbb4;se(P9^P;B9>V?Fk8qUaCN2y49D$F*cKc?+v-DUn(2i`jzSQ_@ z>9tNI%Crr>kM^!5!^W>%|1UBPr%w-5&>pTv+4dK+sZ>MyA8uZkgdck`BApb5+&ztA z35^_Bft(a2B-G{)JBsgc;u;^lyJObHtgD!m{5n4D`^q;gRv%}<)M^jJ{n+r!*P($i!j`^`mc@A}A}nP)!zJ|~WtH)x>lR_b#1Vl7jol?Z zb=rU;FD3U6@Y?6Kvk*&pqh53%RTcu@w(I}&p0Gt4gYc8{V%4AAES^OVCo;fY@+49t zSxNS}Qi=C6brxzMFw-ETFhP*v=_s(2_LH-`az$oo$vBgQ)=~Yk6@&sZjc1a&o=k)D4-+K#21sYzldK)%Rod_2cEW-EtUZ&4O=9A^T$gnN<)u!2_a6-qUxq`A0Pigw; zz(+Ll)`7gxIEjhPFEfmgwM{%%G{1FUWx^w&8t<(~R@gDo!zL+;`QVo$(6-fTLM0d`l)hcPz>;anAbCfu(sSOgu$&QJ+fMwpdi4g+~x zpf7U|*j#j?3>CIVGV)1415quixPeJ?8lBBm*m>$iYP8MTyj-&XFz!qo!9@^$J$$br zHn1yfF?p0o^f<*u+ekHP=XlzJHtWbK<7uv$O6Q7Qn_7C*g|9<}PAaoiBR03{X7m@Q z(@EjFdQa%JbXk5hv;$A0rYG|n(HMs`a+0UEh>bTwxMx~uC_(QI4pdA3GqI8pPjUKb z{z_^^(`wpn<(FxKY|p{Z8kpoMUUbi&`lzd9s#vgXy^%CjG^Xla;OEi3nN?E7_b(dd zc3%YXZm8t&=wX;%-!rNa((;8ziRZZf;&>u@K(CjuU9x(Wx}{?hK+#(5GYfBs)6uhuTwh-VpC?>_#1x1<$hjUFLe3fu_A$93g^w`;v>-FuGmM6 zH&POw^mRjVpN6@Iv?ZsS&967iiV|;PYQ_yO`m`H1whBITO;h&%l?CH8NK7Kl&fcCP zl9j6=wC7${s|B0AKCbbstz%VgM^T4hDtKpPlYivWi_M{`e?20;0mpzPk$p@&pD%Z( zH*r%xLV~WhRm!v0ZqigG68x6f&4*vx$R?Hgr3{kR`ePM|5lV_)E$2aHm^#XRv-^uGI%W# znBz67fGUTUj&$eyM^5N1VbrhXZ<@^4M>x?67l)`xE@?L=f{D(#k{2v2j<50USOeq3 zk-|Rb#M%U;j0d;b*I^K+A)JNV9C4ACtXQQQcIJ+(oQQT#liOddYstMflKv?<)(GJ|et|$v6*ewyYNQvKRmyU6 z(UZ34lGJj|_cN_`ap)?HHaGt=POA7ON`)S07R6E49Xt*C(-6rI^CQ_B6UW z;>{-FO!lw=Y(uKWoF*}-7z!8l@o%y?Q^fY>Y>M#X#>0VysvYk$r{ag#g^93I3%q#L;}CkFxc$XN0Le-XuHce41no-*67M)xs z-%jPEt#3RIDRixL?V2F^dTzevz_w^!-zw+ooL4Q2h!8BcRJ;F5vEX(K3r5JT-D@CW zUL|dA79Uts!DrPS3@u;v>|drCUL^UysVfSd7&d6D=OnjBPxr`iOy8w!e0}|8-1k%F z*;5A0Zcyguo*Qr-h5;2r7;NrkC*587@U(`(5HeL$ci~oJ{Tm&c#IR56j5A#n&L(XdvdKsE=CVT+Os~EWy0k9i?fncSR&R7aW?|I>O0A zW)tjUI|qTcN!()FzOsajTa_ay70c9=3@O&# zfLSaGnBvj`l-)!RHmRYSDJlt!jP`@2lytg>^6!!>1>F5)As zl^2&bD~zwZjGa|W{NQK%0_I%o2-bUcQpiVK#V7lc3^nAa=4|PS*1n0RE#rdvM{5No zVr7%PG@COt?0ju|$RfJW*C7lCJBO#S!VYP-ok9)6+MXKm81RGBW{xlZ5Shi#{&Ji{ zGp@`MqfarlpX?_leG=XF<=du5^9!_ULJ~BQKtXxI*ZrDG59d5Z?YvivdxgP zk)~fO+9Ewqv_jxFoeDFDK~OlQ#qowproEI-ggec2FPhoc&XO)n!Qro~TqcH+v-S-a zIwM!RqFvI2kE*qVWVui0I-WG8_&N{gzF+?!6-uxOU^ueEh*g+H@AVY3aBC|5u>$O3 z$7?Q4`2@S}*-1GL?)ufSN0!6YR?z!x{pYLoUvGi{Kp1-xZ4wX&wC2Mv zC$XdHKO(ve2^P%DshrpYbBqr+km|)qFLc`iNxEocJHXe>ttZcGbSkY8N^@l@(VVB% zlMJe|s#}&)-5og<+O5I?_OM`GL^U%2d7mWIAKw%&W%rEY0k4R*6|hAe_^d4&-6{ zz0l+;!DBba4kcY~^ zKDz&9`_Wo~!<$YRoM*e%mmF-Q$aME&DrTgVddKt$)@|vFjl%q0VI{-n>xW=^Rw99f z(xw7271OMd?mT~S^aZAScOMA!Z&(=jk8w%A5pzwDI2mwMe_Zg@{BiLuM^TITfw9jAPLXP+Im0w95Y?T-xc6L3bA;g9c79Jda`fd9y&4B}U!JW+P5G)i%U z?eL3-R4bQ*Roa4$#lX@k$}FZ+fky&4ntz=oMkE4~80K5p{(2f(E1ED6{z7kS1x*_W zZlSh;d%b@WlLZJ0~eP&Y_t^I zo)7y>ZMyA0a(~p|H!eF^Qi>$z-p%1dJH(S0`>m)#K%8_>?B3$F*LsLMLcSI zflQ~S+YC6Hl;N+uyfYr?DsoYctM$W#WpvSTg6+S|x zPu{K^St;!TJrf(1F>Fc(o99%OD<^K<*FptDA!{oy^PWjXOe}55bu`@q1_3C9b}0w= zsjP1wf>P=~57H$MNjC_SVV)d9fpF8z5udW`x|3 z(yUi|act>CG{>O}KO!PRFcBQxIfaG3Kb)7+be#!X)GTXKv3iH?nP|%o3w@rF$TezW zF{U{Zv4lHwNGfk-biEx)d6rz)V*B2>it?oNK#^U|#@caBwZ;gO2|{@NqHrJ_1p>a9 zq}sX1UH#$uW^K-#P1y#OqETy_FQHLpnYU~666qVL8)=$ZF+w(|rm3#>NA@3CVQ!Eg z0Z!+uVB%MwV!K7hjl(b%6A=n_x?rU_iRSJf${o@|->%NeI?ENS1DxQ4M>WgEBb;GY zMhHZM2!d!ZUG)2)GE-xC&kN0uU8fevB^W&y1<{z{aVh`7Y9t>C29`Gy%-|&(C!y|E zH+~Srn~#ks&;F9|-sHpzWEYKJL&kNEb7SRET~cwIuZl8u)Jslf-m`;V_E%St?kuhe<@Azgz~O=X3SXX@8RBK zQcI;3RLk0^tgUN?pcxcKT6B}2Fc;RU8nlATha1WTmK9cfwpTDb1j7vwqcJK;&Qo<+ z_{z%8$bYj?&?}b`l$~8~%cC-RC%E6tBtvCe<45>HPTt%FxBE1XH!pFeG zx3_y|7$hfGi#WdpCl`w}#$wfDsWA}tmQw&wY-AxdkuSqAFqV`NQ)uh`iT*>H$I4Df-5;d6%RhoLWs8B$&-PhQ#my^uj%Wd`HJ_Ece2WEB zao`6Y;%HtwTOX1;{u|POxepttv>XAugs^IIURYq0v-*VFAq_|w>37xN>`7Z)iE9c} z%FrigXef8}aT11I`Hx;Tb92l3?}BaNc>vpb#AVjJZ!J5sS;{9&ECd8Bj*c$I$Uooe zO5_O9)S5<7HOUkKM% zj}u(@3vdLbuokKs(Q1(=toB1^WLhctbFaUd44x~f_rCOzJ}gB ziOoJOAD+mKRh>!8=EC-zRZuY)-B?sFv&GaP4Bhh)_du|#q%ZD92t%^%OiZi{Jof&p zk0@e~<=VG-Ir!E(l{smR%Not;G-|HYEA4iaZe$dGmjR$+U({3!WFDJRHewFQ*qPmI zj9b(fr)QI;-3U9=2@0@xt`&WrZa*Xj!)$HuT0t-iW z-gn1a6G+!#>1)}jlOHc@7L9O@N^Iwb8I|dN0;Pp}Cy476AoSeX!H;(} z%SO6SvN6<~%t$py8}_iXJHSU%c!*vNyBnF}(#(bJ%g&aPRJOedVUO7_Sn$P7JlaWq z=YJgD%Yr$2QOiOEdG1PT!U2GB!@`_A&5OtScEx*qv(||xE?-PR`cuo%G)+wwfSjYx z%F9YWdJyGwdG|GvEEtw&lC|Jq&b2M8+ywJk1SOR(j}qbZ(=&IjgStuxe?gX;cBGS& zx%HUo8R9_2s))yq9B)4h?E>ZhSM~e8qW`VMy)%Md~c>o NXsGF^7F@p<{6COJ`EdXM literal 30980 zcmeFZXIRr&_b%)_Iy#DF1O*X+84(a^(mTwkNDT@|lM(?#O+ds@4a_*A(nqOMrT2tT zLJOdjFm$O&2t`0dNa!S#5I8&NGc!*)=epkaI^WLUFKVt3e%X8Nb>Hh=_u8SijdV^N zJAdrJfdeP>bZ?j(IB?YOz=3bz-yH_8Jm$Ubao~Vor{0a9@A%o##v(TcTekN0mY{df zW`t!vQSyt99ZoJhTZ!{i4{Hr`sV`FcaN_cn%=}-%%#H8d(7v6|efiC`?j=0Kw=BKA zlH6^mXfaM6o1IQcIk=R1zuZDZuDrc6W-s9z@Vox{qdK=o*81ze?0?n%dPw?TUio~P z6aOzSyvfpC{>R^6`6cS&JC47~W1thz0|&|{TSB=) z7{P5({J8J*-+TTe(MR-FT6XY(Uu3TK5VEK0jFhf&U;o@G-Pko;Vx1rfZBVcK@Pwo6 zTMq8~L})OI@%G@U`<@M3PMC%Rh@?uzFfaZCEy)#2Trs#tv(M#+$zGj|1q$M{{JnWj zd=QIHq-pJK-NN}Ujnk4n8|GNd^|=8YDP@bb6r9fbq|`Vkec%`J@>1|#-TU1=IwrVM z`&bmeT0FnpWb^qNcp7)k5k(2_ie<*?tXJ%;d0nHXGarAzi+CmrsuhENZz1o zQNu?D#Z!7Pq--WauICRlezk)ZyvIx*YcVv4RGR9(%NM7LKKP53qTYn){eDK(G1Tx6 zY93o_>3i_-H{Y1P{6Jr66Lc;zFX@PvvQ0`w4qJtU#YihnJoa9)P}JJnDYvaR8yNQc z=D<|;afY4$Ok7Y+-C}J~0$#o7vr?bp(pqmIGf|xpzLdZJfQMzkLMFv7sSX5&>PI2W1FE+(kERyVZrhjz902{kl@|3e1LxT*9vz`E*KFttZ5ZTSOs)S9h69 z((t94*|c))16_%FTbeJED_AA65R|zotvck8v>;dN2l{lhmQ(P~v>?aX95*YxpBH0m zHk|^gbQ(D?ec-1Q(z`UL)D$i7J83$CsQcmF$G0IB?aZCEaZQmJ)|6Ut@PVJy!X8GH z%M^%A*7ZoFC`Gj98lPpG@N(il5ktM{hu4*6qWt)7)CrfI=N@n@&*gIAAEh+bm{L~cQ^TNr=U?;mCy z9k}o(1=N+VD(hP*dW^a#k;7cw@z*Fggt)pzr9m{|&@VOIYNP@AJ?C_kPXx0EC+d6ahCJ(AMSr$`FqMhAR zH6DGwok0UDn7lwPZ{wyiL4YMMP^x-&{oVZ9_~x8SBE$HJkg)D#B_7S*rVx(6P-sEC zG}MmN^V=y+m+%9+zmH5Hhb}!%{|+*;YyKLiS#;EA^xBhz=upGue)-%4n}>QCPi*`q zL&zM`_}@{>?~c@W(V;a9+8|-~Qqn zBTI4&VD8CvvqW}=c$2eJK!B&4Bc~L*X*?6gtbMJ`iUoOiQqkvDZosY#`CsRd@Qc7Eot-EtV@-CqBTn!tUi)z+` zL*V%{T<5<3=Iz1X>H~6XCZ1|7VMD>5ob?hfgFc=UylUWb>ir=Cxg3@>a-xB{saqlx z(ON4>_si{HIa!6#gvI-RS@a}=S1RQF_JU_HCHchFXPhFKhVA*LZ9YYKY3qSYN%6ZL z{SCJa*(*-abhr7s;s(nmggTUbR<21@rBioOQ!RD4q+HtuVm*B}DgNZ?1L{{vMb1e~ z$mW_rvY%)0-P2VUnXL)C-;_UP9Dv+Q(Xh@f82eBc75!&?6l(2Eo(fr@>P(e)sg3I@ zxg!QEqNpDD6++W&01ev)e`&%#llB@K?Yg(5|8X_Vb#6&yf!UJ1;2Gz-P)@LKlf2}& zl~{cU)2p?Izb)fYPdB%|f5{rVp5LbUe|#*~)Bn?BJ#f0vT_{JzPe(o~AHE5pRxeU9 zjZ%-%gmJQ^$QKF9pdD`rFsh$xe*H}YRFm|3b)bP{+!iBh4}uSlxDs{s_}Nl zxenygW)h%1+S^|b;y&x<8KqvK&7RWQx$S4mEK&9(mk9?>hVYb?SXVjK`7E5j zoX|0CNmvcDwRFCN(cImfrsX8qbpU)yM{Ug{yi4*r!+gNh+TC=VM52yvFE^hGM4Ed& zUh7s0qdg;h(npN!g4IddG8_u#+~NYBEyij{(CQ_8BI?QdnY}!nQi{mom_rObMpr^ zADU%`VVu`?cP;ik_L!DM$8^fZ(gf79YQFyA^q^j}kC1r`6Tuu(WnnaY=OZ9A#iq61 zhT(OFV+7Zlted-8+tAITG#4_~Q3t~s>Z*a1rq>vacE}HHL}i6;lBFAP!TH`&cX*Y2 zw&9a912~7L$RBf2gBumgsFQ-4@bHKn4=v-I(16pOS&}8PMx#kCr@*i9xwBxuc~@T$ zEu&xUVTf|Cg-A6k2P(Fan+NNIOktxzKhE}vkR9VkJV>bXzQv<=inAAeQx%!K*tRz` zJk|@>R?&lvhHXe!Ms>AX8mf;NxJyNKR?q%X-Bu3gvrnyL)d%gQdIs+9Y=saz9CCdw z218KSj$srZr|h;93g`SRc&i#de#%6*xn$O-g)6$HsG8-pdyQR1RA7*!z7wdBUUT}R z45e|utlPUI?wHh=way^HP*zmVlIdiCK--(}1vhlj!YjYlk^HwMohxwNv$NKIiT_wLK`G zTzyEIiJu=TvY=dy+uiC7W|Voa<;>q0{>kQGPqiQMK|tlk0(UQ;tm$yee|ySsM{O)&C2Nc;|Uy6)o+x#5r(U22zZ+R zr`O{X(HB%+je+2hlj0UXAdr= zODDxYo@hWhxzE5Q93uEQP(N~Xve^kvR}7_MUEyMEKW2Q8kvo6ibm681hUJmDSE9P; zBgU6ZQsrrg-e5d;z4GZtlvjUNCxZWILV2&I8nY9+YocO~?!Pg54YE;>l;_n7l={eO zR-SFT3LzNHtRkiA*G-tK2k1-lJZs2DeMMpQZ&-kPQ7%?SP;MO`xL^MQM!m&_n7ayT zDRD#9#a1548ZnNnX zyO2a_#qs&1&qu{2N5zr0En!mIyjZ4{PYOIGS($-NLJOri%3v4|&oRmB(FUgM_%*#b zWK|jC!zx+3&%aK3hCX?MP-GPUpig_!*n|(0 zJE4^)o#!)V+*!XduJ$`Nr3`u({@n7p>Z=eAo|EuEQfAL>q|+G+NgX85dT7+~y3dG& zBLaSJJ<4K1U=H1+t+&!Ap9>0*;<-;0n~;-v!$LiDNr+R{^3|NMX3AW|bIJ1;<~Q3w z1kPrnkt|F9mK(pRrSAERmBCh~S`W(Ij;j61o*7mqEv$l)sb0WQ4v%{enuw~@M)1G& zAeH_YIA4%=c-)he3FW?n#h%M4u)I9ZW9Mg|VbevE2i(NUJ{7QiGWVQ&nUP|jN6YHy zlF0T%ENZ|+Q4x!jQs2W@L37&^XV*EzS*l}bHFzJ78mq7v9m^t`a95@1Oe7c1ZIZoz zW;IvOUVEME=*;|yel+XzlORhwp67-6ktd0~8-Y+$){WP>RBZ|C;3OA=5|QcQ8-cfn zqULW}Z3fUV$EE9NWxJ}iJ+~E$p6Ddogm^JN!|t|`Gepo6v97hy@1qsPa)Mm33(v;# zR2^Z_mZ2rlSzTsYLOxoZJ$!t#B2lQ~TH2v|?eqD$GBM`p~yzDzHY5Y z4e`=MVAg`jiLV_;f1=f>C4h|B0#Tm_A!Rc1og}WYoEf{F+9YJ;!2IB4NUaxGshx0i z%+)k#CuF_KZkidgfJ(wW6Ga@2bKBVwmBooaqcub?#lKQEbt+0R<4X9D^V@l&)Z!U* z-D2U+)a|y7iD0eYU;B^y&%(ql(6kdRyNs$vn1wBJ=%?16^3cv~c{_n6X}9|es@vBJ zf6l}eK@FbrRIO=?+Mjbi@v-Ukd-&{no7OINIe->Iw;y~Rhf=AX%S|q0mmc*IMto4o z`E?zIK^)dtN6_gPYJ%|j@6}iT5UPjz$HJbwJJlHDqhQ522MdP4mWk-}@OYQM~x z-mrAw9cP8=fpr4W#=HA%pj)4iKDUJB`@P1gG>mT>zwhx!0(T!37v=`jK#Ufmkz1Dj zt=aGc7{-sD1`2;1mEIx42ERRK?fZ=GwGFc-2fB24wBBWAkjTgVBzFQo%X(9#VY3Yu#Vu&1 zE*plN!$x_r2U%Iki{_|ctD{bEuv>tg1vxRwU|>Hd(wHGg^YV?S)aOj}Yl&uJ1&Q~* zDJNciWI2~9y5wgKAtu=HAvK=q1R}Jo2M~7#kR7WRi0w9&804IefxX1gB1xy&{kTAo zNSv73h6HA<$l$15%=`VIwb&0@JUeI!3rjT3IMm`}?1UJ8>XJ{rm*E-++G=*tl2z7% zi!j7lvkA;}v8vOCSvbG@T>9AZCZ@@+XrrGjdd38&E=&Bq%X7y23HhWlqt!rY9FjBdWYkXHuOzl1x}!nzXv1g`;W$vZSc3LtG?qW09YZ@~&1c#s`%i{x&Bp%V4Wn~5! z&la9+6Q|pvDHo-X4^sf?OlFSV*%L>yBb3~GZgsRlr%M}g%hCuc+sUv-w(iyxCuUop0$5eT_*xHQISJ+lZYu z3mcy4-F7o5QfJc2LlE=C${#WN@dyw)oJi-x1pSPsT+%}*JzFsCvLwryJ5Z;udXsx! zjP;hSIa#J8s{?c{6oM?&Sp@PnGt2$cg7>ZA@O~AfpHJ|kzJ>?{yyCKVz@4l-==9UZ z3S%La;uyMWJa!~1^{~-&T5wHSGH;g0p|D|Ww`Y0hr?uTCz<9ln~ zY6*QnlQ^xK+f1^IT?q?8MfBxEyYivmb#5&RxFw99SAZLo^H8xSI*k05=rg$ZT!130?MHZ>b%xSf}^KwgprEK}g|u?)@V}W!_Z_K6>g?B56o;Bndpt z{1SMYPii5~DJ_h5(}|2gjsA63T3MoNF1pNHB=3IBS#k3-!@P=XcxQ>0EL7=i7-YGB zmqMOJLeLUhe9aK}lLY+EYG+6of+zKco34p7!$kD-?v#b7q2choP4{oimdheK6A7JE z)+qsXOFz%C-$OHg^{q}Td)P@b$}7Ack>mID#52|K!o!C0%O@JYznlv@@e~0+vt)cQ zB*iI`gIL~spBv-ITeLu$BiN0hBpp4SKBq)w{AyO6rrLRByK7Q){&vSBgZ#hY< zTkkh`9)!hWFHfK4VA58M2N?6jWA@}SUTOUN{V|YsteIo?_mYeL3?syZ_$P)1nzh7)FCCtnC*?@AeOQlAS3xr86TGb(Gh@Cxx>%pqnr!ZUIq@|Kmo#9`@+9VAP6VG(Y|;|mH1 zOfI3jQ_Mc2_|$q~jE|OM^mUL~)No@j=7PQVp(s*y506_qyVk48EMDF&mG=9QUsPEC zqX8GR+GP6E7(271&(?h4S7W;4%49Rcz1T@*D5P{}k5c7X)f(7@94@wUg!=Fd+YDCwN$0X?}s2-qX949FUUSL{I55E-I7%QrenAswaDC=CJ`{^5|cDG)F zhd6WuR!$lkT5bqMx7s448iZ$fjV%eJEWst0Nds@%G6MF!XnM!f~CQG zLDt#vBul@_Q;G!tCkfkf%-7QR<)$Vf$Z5|hF8qzi=d$DU7ty5-v63AZBm-}H>Y849 zM!lf&u!UQ!(${n4^%Tr>zEz$LPtfg87&FK%UK178!yll}PPCY)wOA%Gu8w+;c~b4+ zhuy56-{(s%lZDYDe*wY_aX&t4&(~QZJ)PjB(u`8OA(eEFypTIisMl!1BQ*6cPjsAx z;qH2#)>%8EOt}4#z^tee076nxLm5BcsU9Qo{_sq1%P>AQ&9ZU*vZG^PEXndIDlfk5 zS6omeS3IxzUj3I`L1d`q?sWr2o205Vzq2;dV9{k}(M|*npmuv6{yqq`TRbkqxX{}E`51FUEJcwdUfXD zj&Ke{h1D0x(_|ti2RC8mHvX0E*mKSn2D~wZ;q*HN$i^@LI7>kpk&0rKWBGNr#<85% zf}LH+FGXE)t(TDs13OYEB=aRx?7$Hz|70l+oVaT;Gxa0OswPZPj9(y;r?*z1v#5Tt z$(f^dSZv8_%%%zhDOGBp?M;Vn29x13F#JDr#7KxYQQTvkjVwUbLNeOb_UpG6Tq8^b zXae&7jm{~FTJKZwZar*E62wQ zB!KrF=be(~w=%GU%FmaK72k)t;_>5JJ307<2t`SDPJmwdNWs&}I%%D8^1==c4Y}Lp za7Ql60SdvF-P?OX0YbnKskJaruGy%ZmuYZ8GV+n%`Q zkaL^?hZ_5M!OxxeAYYf`um$wHvxlt%KHjb#v;VEmQY^i_KSFY{w)UtMfpAfq3ri}4 z8DylO;4%2!ZEA>YbAx)oP?fBF}O8biNb&)>fy;w7vtoTT6A`jVm2Eq zAd{y7R%AqyfFO*9-c+iAr=Fxxn2U9o4W-J?t%-F3M&N5FyB?^8mY`e+iXXDhHDxUA z;6I#hpA?py{WT1JxXW<2veo*olLQqAb56eSo0m^ztc)w1B{pz>3^Rpf5$d2WSrC1M z()?nKZ*j|ToBgM<^wV|euvy5MavsPGh@qE>s0}x1NBWl_DnaZdXE3&{y(QY*y54;n=yR=rs0T?R@-P2m*?% z*Hd}AZg3afqv_waPghBds;=x&>PwNOjR>yt<&pe&(7zex<}D0mCj^E~4HaE?7=24D z!ym|bK4zB^YY$=GuS~ZEDjfk0$-DW=TPBJSw9`S3U{{$Q6Q9Y-!j;v4V1&|RNrqLS z7&!jtd>ZM;XYO<+NH1Y9q`Nq5DB_o*!yKTnF;8&hDRNhm`vL>~t&THiW0r|`h_=4A zla4E z9BAs-(o3~*5%*y{dCH0lAPFpu)|7832|t?SS=gFb2pM0#=$pzC$e9berarGNf!TKS zZ-JPM{AOdOcK%rKX3iX4QWzCNDQnE9d&D?i-A4gPf!37Sh7NYY*Ocf<^PyH?%vjg> z5GHPQ#?I*@FMxQc{IyV~;S0E&_1GsrU&y3#DQy8J(c8=2u!xM(onMJfR80=oBONn~ ztHQb#o~Xiai$?oV68#2wFtuqNS@j;&as}Hw^){rf3p6=%+TD4vKU2qt;4;0FL^(1aF7g=sx zkm8W$3k{3dr-%(be>HaRt?1&rJEDFwcZ`uTa*qdpYWUn2^HatI0KEm%S9I zNUVk?%%*_f;dtFd$GRbGqqFD0Js|2Hu68T^fRu1Vs`y}QedMx=WKyZMBDQJ(`Bjkf zcP14y7S@5+quW}^(PT=oFZaUYKUW!Wuu7B=pqAHC>o~zQ!I~EtO4q= zo0wyN?Dn+PUtyrJ4G6)dx>IHgH&an=LhLH_viH!JDmB+AMR9N6g$EFk&POXk?epL&fsk}aC%msxsCpEF{J zu%$peYR8Z>(ytpK)To77jM98G=56?}<;>ed6FG~feEVckD3`_W^lFi=%e4`BKP3?b zs=yHBTAo0xtLmR|@JtfYFe{N1dI&RmON%wg9P+UIHJ;r>&f;jmy&AIhs9V4_;d1s5 zzuIRrhU);_*>vbfLTRKSSLz#w(`Atm_(2;5%Vki3)?TQyw5@yHx1Z}{(EOmz{4C&?_Xne#z7xU|pd=M*6cmbiqXMS@}=#Ns0)xv;&^&@7Q57} zeczy{ck9Pv8*_a+f|c6O+@^QRhz}@6%SnSiL(I_<&>~R$@B2@{aoGalf{|vF%G8iG z>Y`Pq*&nqNz%IK9wg4$Ne)&9qf7hKS37>gRGl*PTJImMikgP)W$B@R)2otmE8TzhI zZN2Ki&*s=vh}rXV*P&0F5b+8(%wk&-Fu?>~=k@;#0o-rN)MQ?^*g#a68^Nwd=qV#` z455FffyB?m2aMA#Ni#QijGtk>3QV70XJ>+YayGsxu7UNA84D@iJu0lS1iJv&y-Ma% zW8=c$rz*qmxoMfz`WWet|_ zVDaW{XZN?xxh3~#A+;(im$I?sUvXhDg^S72_ajCo)=lG1vp@`;`Y~) z@t*-OJUR9+Nx&^DN*9z;J{j!{*?6L}JN3fL!GGQVoXFjFp>YHo2gb8&+2tb8tJ0=b z>rMe(U(q$?5Js^_I=Q;f=Ls7QF$L`&_W? zI5%5PqOTyV|Wi2_y(}G9*EB8};QSsZ4C|5M6T(!Z=)z=bZpHC4{ zyIZq}mjZm@vWS*zjjBgGsZ-CQ3^u8uM+6_gN1J~z6Q$w+1;9csG$??O9*BR|Sj-#A15zr&@^9m(y<= zJd)2e!=oqsHaOA{CQ^U#|F)UFuUqetVhWT3+`MjALtteBR$a@Q?@y(m@TsJDE>J1i z8q-j>o_)Wv20>AYsnMFj5D%ic}+Wg%qlM~Ml<))u8YOs{t8jdQ* zytnnB-Ea&esPZs-d0W}xyfkLRqWP7lDY*eQpb{kn_WG=yA2G8H*J5IFuiAqwXNzF7 z{=e-skEhdDRmhLsSuUt+ULa_yUV)W5gN9zX^DIGx8s|QbrdWrQROUO0+0@<-7rDrVnLg!!#rF{#9sW2={RTzX9cf@Rr#V; zim7Q1BksMupRDrmZAkAiaFRz4NiVHYfpsNB)_u4btF5o_`h!B~Lg8!;U+4d>s#~y& zCIzY?7ukFsGz##gXn{%>e?n6cTPSoII_0|8L^Zm*e(+xQ>-*V`j7u zw@i;bd&K!1bE;FmL@1ZdUZxG6loE6#ELq5e!6iB>PID}*h49#sq%qJV&t@xvv`rNu5C14K8b$z;hiG)%p0L@^ z>9AR7k2}*&W^W*UcaY*Nxm{^^oY|^KzvlRQu-bp49w_v){!$gZb<0gHVQ0kyc+yw* zP9^(WHNH<$^0aGAaWe1OE7`3t1RXY-C?0V8-tB4LDx3X{&(BHz-rpahfq|a-w1-K0 zII%DK)!pq#l+WF*Fy1Kgvu#{iPNKZGovjIDEfP^4Vi>x!^rlEgX!Z9WeRL?%H!_(OgDE zKJS&*;Z)!vVXMJ^S9l7I0@-44l84GfZqQ|~?R8h{`@cxN4Pn00y6JhLz-w(W(9yrO zcg@B{&d2^?eEfqeTgHu7Ik?`fvo7sbNjb>3mVcFZKo9C+!NRXC663~A{vS_U zU;@eMNH| z%RRuxxoW}(FnTX8Jib>tbzm~$kAM{Ovn5yx*f&HLT~ZER_^nOG zeIwxhzQ(tGy2weRxC}wTH3e*$o{;GMQr3$ZEORn9^=x&<8-p7qpZzEz^^VFm^zC$5 zhnF2JD!Z(GA`hYdOreRv`(}I9T;ae_2(eSDuGqqEfEvFLgW9vlk3-XyMi-k;X~DzK z&?r^XYQUGcJrfsFG`H3<>fNgmf^ZK`T5aLFbp}@gJsOK@NNM<~#HOaKv}c=6MPLOe zq~k?g=Cph7sFs9z2bu$N#pxLv9IV(a0{{-M1)CP!YJtiF-`ZL0<%s^KUv{1}(vS(i zm!ozi^tz=E2YQsmA0j02?&twXl%fm@4W_ z=XiY}V#P$@OT#h&2*rDGf8xe0L&L!%m<0>AHzfqU92BAx%tSrXP@WQ)P5*QbM5_^% z428N{;oz?&?|$EteMU;Uai>i3ZZcvc`Jb7?ar*uJ(TB*9-$*|4*{qYnuX&|pP}Mrg z7s9<5@ThV&PB{OC6PMEdH|igDU;SJDd!HcjX~}K4f3)H#LkaW=obejea9`W#$sxPI zAVq7PBs36&ReKp`67SbaRJmRsbND=*{YK_(fUacdh^0F86UTRlRZ!ry1A*Vfw|M}Vs1Ds3?yUcmlT3|YAaBk%t>g6{F|G!@?NRf zv09{iY30S_xx#O78r(=R73rO`5!|SsFH;}I@fU4>A74LTSoAE&zZBG!Z5PzO)RpHz zU0J_hSHf(m^FTukJsiY%(u^e9Ca|c`y(@4F)7<&P$W8IQ$Gk{50_ch|8Sv$N_~Xji zOx0XX<3?Q$>7PbW0y<<(m%caM4Dn2|oD`t4*Q^#O`3+5kOha;zUu%=5piQ`@sYJA@ zic#I^A_FErWl#T4K=Nh^$PjBBf-h&hc9++zSfAZ(^lp>8l4u&Q>PXOEw8fTLc z>q<8>dt1p~^|c7#ovlT0yAcO4g~?OoTkIZY8of=C zcGHO+On6X1$c?AbTkFtm%WfDAEzm^*-6sD^jOwXX)^L|fZN@@D=ppIeH3M1}o?FUB z`N0LcXY06!8k7K8PO9)3S{nsgsnSZZH=;$VvazV{R@%OpkVSj^UbY)#pA@DBj9I9? zB^s^4uw)k(L8Etg>;e}mfBh(Bn{b7?mjh=)2uVsk?!wti(9hrshKGmwX@O|q7(ixTz03@R-pnnH5;Bw6z3Z7n^7N! zHUI|OPnS3Q2)d0E6kNk?60t~Dsc~~E{8yyBE%k)b=zHeFEJDzQ?ben|?eN3n*JZk+ z>3|v>wj+AOK`YcniRcW}DuNK~3!9MyY$ibNI$NMDbhp(6Y87@M|5LcsnS9BiZ$p-s z0#4Z~|FNgVPD>7?R%{vcdX7Yv)J?)=zI)HYrMf=O-XI?^y4+1(~=InG_Wm=KZbI28KT&O;=y z%anDn2iJMd7k*9{om7>HeylqK0%kDWa-1D7CV3jVt~%FMPtgKfyNZ8bb72dTyN$4T z0$Bw^RkC9}@lC!|uyAt>)#2X?T9p@^q`vl}1|z+J^e|-3uSfR9Fv|4#(!1CG#Hr-c zI0LbzzGs0Ox5if(h0=&Y`nfMI2{gOvbgcyr<`Xe*E7aHDU&mQyCFw46V%7{|4K28J zgnzzlrLA`vXGehnF8ey0Eko?bP2rz$Gj;Y$0$KqH$h)zP04JBh4pREDMCCWdnEoJk z3+ZRc%5>t57|gZ z6J9eFCLYjuu9SCWy6bm`BcsdqeMc`v zveU@Y6+}xWuoV)@f&2hK$jnm5@o=}x^GOlacLqi&%6-h7>NE?xc>6@@0FitF-pu01 zklzxn%_zVY^WTN%z7GU>!ywP>c&nmahRB3gwitc=k63%J0lfg==ewbBRRv*cYVGzr zyvkXv#p^Ti>NY(D75%vHOh|x)^KlBP#iy&_w{KTe1!`gseb?q(vpuU=m12iQt)Hp&dD2LCBP zJY!zeAw377Wf7<7aJol6i?0=_U?!UErsU8~56WXS7J<xUffSX~Do$=9KHP`;i$6 z3#+BlskQbQ((nSu*>eS6+as*7w8B9%jBi4?+f`WY*!vtPUDfnZYYvNfSR-KET~ z#jR-9k04p8QOZ0$5cR1E>NKD50_j)Lo^`b+t=kJXKdxD8*h? zVS(w|+c678oaoiI+pbQ9*PovxUyO8v=Vz760{U|cDaZJ{rb3_H)A-zo4K!~1(L zX;iQZzp;-2C}I_#)MsdwGk<{25dbqF+&^+E>(?{}gy%iI=qy5u(P?|^1iBKX07~ez zg2tvaae+43)=O>ZqOWd-kEgjRbCP=QprWOw9&gX(T~AM4&}NMRc0Ax7sE{~#&)rf4 z#YH|Ze`f$*t%R*Fv7konw& zzV$X$C_Tj3^p`+dqk_k1?fZ=$*bbpDgw!pJ3A(6MK+gtNU)tmMm^f{BP_FbEDtxeU+7Y>%mL3-chCh6odsXt+5ct_jCPVGt490xirLeSjI~}Zio@T2ApXk_w14>l!?ibi z%ahGyV6`g)^F<2Q^#MqnOJ8P_GYXghXjlIFL0Hn4XM+6ogKRJ6 zpR?XqjdQp5zvsZyFW*!C)Hav{8Tj?rhIlYu=>+~ABYE0@G8K+J8=|i}cG+P){#z+)MiX!?*wZ-e0yg_HNokdg}?9NK=dKZ`TddK zYpu4vV{xo)Dh8*ExCFl!@0Vs!{tM&Jz&mi@mpPp$7MTNix185zd!;X#JznqA!CA83 zYwnl+U*Ee2rl84W=XCzmShjkw|Lod&l3Bl(%G`BR@3SqK?U&FknW*@C5E*K5;@x!p zi$}ppGtqs!3C4aAFaN=*c+((Kv{rJ)Ch6M(dh)+NR)QR-Vp81sTlZdN4||UM{T_r| z!J~FPx+E8KH}zljUfpeU{rklVi9whARD|ratO`~RiRihpa_j#VsrR-ahEIrd19{~d zfsFM8&qmfTw-_BvDA0*pVBFRnD)0d8M-%gc=3~(BhMRU`8h2IKE7>Io=T*)9K|;k} zv#!`*p8OI?&O3sBOmnA@hRM-Q`7ExmZ==JUy%v__*0yY_|Rs3=A!k)IRYkdC(9R zlq#hA-Y$!U3PVIoFt<#p8#Wa@vPP-r6M9m?D5!cMwWMl0U2jQnpkWr@tFyFl@UQi9 z>TJ2>*ZwV!&HG#TtAXuuq4VIQ7!*6TBEjgRXZUfy=}4txN4dZ{;v`?Ob~hTOW49*u zc8S5=A})6%CmydsN@pgI^65lfXkTn#F4Bt2d(M+?HmGlY_$>rgkooilk~$0niFfxc zZdF?*7|gK-gnF8-TQwo~z=u&T=CB9lxQ9(m3_M2thKC-(cR}>=44XAYUN(lYC(0;2 z34ES-8DPvyC*M^VIw&k^`>0R*Af+pTJugcJy#Y51$x`~tYv;5%R(-*?^1Mxl|I&3A zFvCsm&oMZH%hF!*o^FtxXj#s`ng>&u*|3DHJ zv7ZL%zr6>T%6>(5a<^W7#(9EWJeTg4YPTCEAzWfz^_Ev(L_#)6rS{hugQmAmz}-oi zR$&gVKDn{g?CyjQ7Ye7zo;-~lZZn=W=?N6Pu~hU?vd)8?c_ja^%Gzsb~O2fVH;z<2qQphh-U*?_sLB#3tp}r&V6>6Eg_ZxBxJnu_;VEKEpE*U zD`71d_i^ApssbCKx9k=m*dh|`*5|Vb9BOu>i-0N6lHAdAjqC|ZM*Pkmk_%5LnNU;| zSkN9oUTFomso(n?G=y*ozvpdO&^nz)2B!I*uV@O^SDpH6r4l8%;y&b%D|(ctBX&nohL=wPhoL>G7$pSu7W@Nf`i9+r7R&VAtrW7qG&@EwOt`OGX3%cEQcT$;tYp3=`>tE zIx|>cit}RtiEQH)vZ*Xd#cgnQC~$Alw^6)!4Tz}62YZ1ZDD-i6X~qUsQxj z0)FFXIUE^*v8}@;*xaA1hWd^n56)0U{HzM-6g5Qwd!ocRo}5=a&M&gCS;i=?{l(Z~H&hLRH(o|ntb zt?jK3+zKITP_tT64APkQs5IdO8(Dd>*!rhrPwru=KKMe|l|oZ2t;;RohTB=;nP=3` zr(Xc;=6@t-VLw-=wB^H_V7?w6zJ8haN9nAmKXxYgM8cUmXv>lXqk z*uy$|Fe_T~uBGS3;uubsF%>S&-Elm5EVm2fCo9kqT2!=hdc}#yJ34Y{exVpSv7;H; zSr2Se4-SiC@Fthn`VFK3e92$GT|EwbVU~Vl<(m3nXKGF*c}Yre1&+q;oIw-g4q-$b zr_J)z#l++uFWE<@um5LMC43MDSmw3&X#>z2XXZnDZXOMNh@MbVyYL1NgDhpEn$H!pn(tGdTI+Df#817P?)BHdE(YDrlDd*#e zKB-jh_5ump%-s(9ZT-QlvQDXTX$zClRXS)CJY=rk5cTtKb4q!7s#}={U1#5X*gE?v zwO5CiKE%KNR%!*Mr)XZ z3llIK$2$jYX+pdBc}J;FHmjr0!Q3cjZyWRk9iaklBV2fO>K*>D-vsh_!B+|glyhk7 z@;K$lUrDwr9?UwKlnvwk*S3}3HuD-a@lmg2k?kHPb&CftWIPv`-?QbGwi^vbOcNqQ zh{Yh)+E{QZ(u!3;D$EL0V2{Wq8gA&~hrZ0E3_ z@^n9-b=$#>;2Zv?P)6Igfw61A-HB7|Sj|8`ePZnJ%H*M~9%)(E!Gu%y#UacjmREGL znJ^^s_<}}21@K68BC5vB|NcDq3TbSv#=FjPqa0G5uc!SdZOMSA^Pq_~>Q0>qpq9YF zaV4i|1O|lf^2gKv>m!1#VLKZ44p$2Z`^*mldkXTp)*chwh{Qp4QN(Pm&2B*VRy(Bw zgM&e$-VUw<`ZotPHWVapq_F*U=D7w&I9(judPD^-umV(# zV(<3l{ReeX%-^AdTLbFWS)C-D(+DTNrO2pt1Y8PYFF0g$$5rT^_@~F~C_z3t<9#BGjN5b=1C%R77Vu=Ow%f|rBY%A}-$GK~ zBtix_we65s;yG_LZ&;Xk#wl{*9eVy93qUH-0OXLB{6XBj__Ofv$30>ezGDYK4VitW zW;6kX+-(G1rLK;r$M*MJ%-#{)ZxAATS9EwE5jIMy#>=!1Ggttx!zE1$!EYVM79=lc zkl!^Ox*-`>P6r>x(;=@wjn>G;GWksfh1o~_NF|s3Yv3(y;ucf*@}R?P8=c?Y{vhbV zeLqLu+#w9F;R1R;db6a!L2kD)#j7u%sF$)@64P( z0eG3$*XpjWiZMXR2flvOVd(;XLW?gbc;Q9Ya6*7Ht*kI@HZNq)G&m%*1CwsLejVEG z)mZX9`u+MG|4B52XJ#aXE{oj(d(boSyK6n@)Pe8OMgL}!0UL5Okqr-RljXtUVlHxw zfFdw={i|8m?rN`>06`uChRsxB<7*7amV4-AK7VwJZ>EbrruA^aar9q#a7~R9O0HVk z^bJr<22{7=M~$IQkhpUzD-Q`9n_l#& zOPXE3G~R2t;Vx;$PS~kSl#YC!F!_F`J!!=^__SNPL22QilnI_pfbi%~ntU12dns5e z+jr6i)*h!iay@1Zo|iB}CEd^=Zf!8qa#jD@5O<~&0OP9M`%3SgoZ8J&ejlOK^{bPE zMkj=e#k=CH^=nq51`-O_kJJD7u~V<+_EgV#3V@~Rl@mXKZGihe>iMiW)b6Yz^Nr?` z7ueMl*74i(j`z2>KnaMSJk{)VMB#sW!9-5Y>gy`?;I5YE&psD1y>`BBq7hYk75uAK z=IFD_mUUgA5YJ#t&G2@D*7ks!MP{Xxe3{=z)|rKr<%$Hb>lvB|Rt+Hn=DrIWlt8;1 zT&DZI)S;EH>Eym1mYi&@#m4~$(mbH+x{h3qe7@ftD{tM&UF7#FwJ(3%vdEKaoe2R( zRlZa@2-nwf7kF2o%-LTbQ%7(gs@7{5a*NAOb*pT^D#TGpJUs?z10*P1w11FY) zYuN|TN9-g#v=Ve%?r#Fo#r+}OsP!t9>eVRADhD-ePy$>Z#m3M1F$Zd|)=B`DibRB+ zM2(3`E3=Z zHH*lv#o?FX7wnaqUSBzH1oy*Al}KixPoy>>H(nMTcy%#B zI|OKqId_zDG8rH=TF-Hacc1Poh&-uYZNjgc;S>Zx-^ zHj|>8w+z6Ds;sgn1Vc@L?VjSAlLLs)EC}r6k>9&?HEOnI>yK<4?eQ@=pNN!s%-i>Z zb-M`qqUH~@z>F!g%+_Y=s6V;wlh+~c)Mm;;(v<*D+jB+Mx$ELBW z8ST_v>5PSc?*7H*`#s+6+jmB^NTk`rL_+ct;8Z7wwbJK?>XkrsJ(50`^+b5m{%T{r z``!6l>WDATWm9JXvd{82s$^|ySCY=G2nDaCyH4;!Z5BO6R9p@TKR%@!?+lFIbf;_4 z>7$(@{oJBdiDNebUWIddwB-%?&Ta5%=(JA`L3dqeU7EG~~oz$G^Zu~clc^H7w-QlHw95LYSl;9B} z0rlO*`}>0+7Ri72B6&HncX%Hzyt|qCo#fg(conPk+T#0J>vVyU$pXgO-$ulMnuL$o zP9tt-301;-4OLwLGh&c8?g(-H>OF$puC%RkK9uk_>&*YykK7t}a)UqvMU;@WZX_X_ zC*JfC91Bz8Ao%tc8P*<$bZz{rD*>?f>N|fV%$tN;z&)#Nk*j?aQ)3MjixJcs59k_T zh8tku_;0LQjWLu)v4{VL+WgYYas9hP!ox+U(V(`W-_LhF-ur@7r85h280Hqc^FMZY z0bJr)a2-nE(xWDF#~#i9J*n{d2hqvvI%sf$S+x-WLM$xC6o6Z`k)w4rbr~B`>vO9}+0^L^qgxQ2kCb z%E5`t;EYRrxME8EY`B1J#Y6Ushs6Yp9J3X5kEM|#1i7-$o=zunK6n`OT#kCWB;3WD zP6G$?`x~X(AFOrbAc3Og@$W8K4;LgVLtJ&11140Lr2QGoT?Pp&P0IoJWu_Stw}d58 z=~NAk;jon#xnC8~qayCVsyVys{bgnTY52OC|MyG6>yVFfaTB+pOihJl3wXN_=rOq)8Tnq?r##*x zz_xL3oNfs?(%j(xaABHfXRZhxJ(lR|JUURAfisxh&BeWZWVytK?!T==u!*)45!s(o zS461Ms94;6NVl_o!Ulr>k`HSXZ!CIb?V`4}h)=?9uRD;F1L0(|GL)cZnq~*z zv14uG^E^JJZ>=ZZhLc~LNmI2_HD80)sgydm*SNhwr(MU`VdWOmYR(gK$BtP!IEta` z9_)7gE$6UpvxhT6D(E_xjEShvk=-UTNKI9jk*lm6K;I0JR(5MEKR1xZl0kj+5C&+aT+3Y^<(dY^Lg-rLFs(Ws| z50*tlM94{XFJ5cx`L^pNi)`rRanrU7LC20IdYztE*zMPC947~V(;;<1Q0Off_4cXC zO|;eCHve3#!-wq{5fu@^#sBTcR$i=}Q3g(5TRT`7vzI3a1Ifa3>KxWsE0LZ4W;dI8 zC-jDMb6E){u>4$r=EkCKt(cYH3PRCBTYEY={f&n&QD!e0EYqaJi_L_DkcqD*tMIE( zl6X{J8X-FJ5{{E0v^!f%&p2s#jdf=>PP%Gof%0U?zhul`g2~$p{ zLZ>?QhVJb?%R%96#h5?#al4XE$5`JMqW7i;J7Ed$1sCPVbgwvO=}Vf&kM<`<&1#|5 z(s53dwb^^p530o1@{C#!pU>|`Y4MKw(K*_V->{JB{o&6sUpjgKnSje6$3{{PuOEiZ zB-p=g+AcC*P7P_ukaEe7DB`2q>XrCzI;xayrmGG$sZf!SVT;~^v9s`VXOKsB_rRSu z?|}rpHcM6a^fozwJb+F>Yo*UpZG;E1V`p4TQ=)h?VV-`Hg~Y{>4JT@npUai)pO&sJ zoalIs+nvZhUi|`gSiyMtr{6=86+bJ%amSC$N8!tyGNcJUOEhGzi%wQ(bsj*;wRDZ zM%3SFS~Hkz?RhcV)oX&Qn_gC?76;KN~6d<^?T%v zCagFG9RLfYX6ANwnH3sT|GDz+I|PaP8^1XF?%Xo zwl|aUK?)mM)Og;|HIh)6WRN{dT~RsHZfCP;7M!FZbf|>V>p#ps#ucR5<1-bn%GXjP z!)h0A1#FdmXlJ%GS7zi9mi{<0d+ywF{i0y#+9Dr@Q89o*dUkHd>+@7Vg5@^kXO6hi zt(rVsXX(!bh?@1ZOSNkQOy^n8C=vo5EF2cL9)g`I$)RZFYzuDn^98zvt+z;1{B(H( zw*AMy3~S+bm`=;$f~_gbueWx#K}Q&^1?8FU_R#nOj2@VwGE)4EHp7 zd-ZdPTW|UcDBfW=NF9|SjHNV;7A){gNI#6}o6OxEqpD<4g+NCJ6r^A5S?=lg7sdGN^1P9TA0 zW@6Jcl}X}g7+n9FTHXNSbfY(^ZFXaRI2{q7rod&*{q*BjmQgH;8{bs)s_rd$wA#Js zH?!>_U(K4;OKTbo>_eFeBWR#=oFQzH7H!PvfFYt4hmMTkC7D>??ankt z2X`frZhr~Vsm{Qw2uXEZfp($Q>-~zJnvGaEKW0OFP{7dIRTS;p>`|cz)4Yn9S*hocgxk$DwRXVlp%8p1gMw_EtmeW5(g>{~1!k5)Zdg(SP<|2zs}C@5;gnEI)SpdgtAircY^(v6O@*^jH0{(N6JScU;?# z;m&GWjrXTeg@zO-J@r_$47j3FIABcdM1LP8L8IDbV!0iS;!=9NwXl`tw)TNOR0Rpz z@*c%DI4Q8SL~>=Kg!`Md{8(tHY?En_8t&Inb9R`*$pO_(|3$T?`P#D-`Or|^wa0Gv zU0q|N$1S(9VOtS)ZMCIEwhQj!MB~vQ#{CQvbEaAi*JueASIUO=n)8rJ$PCk9cc+ou z#a(UN6XF=DgxfO$QhZofeH8!HbW)x8uC0CPc-^3Rrn`RSyO3VRNT5${NaN+hDpx<# z$N{;T26~cnw1aN#J43f6&S_pf5wbp((Nd=t5YL@@$FtZp<0&8YS&|VOIuGtV)1fec zTqo8YWW;u*R1=*}2?vFa8Z?(`sEh;-6LD>I1B6XCf{Y$bae$@0HL4jzH*evb?2NOe zo0PmE-zU$@VFGw5HnfB)jeuYbpR97z$6R=$7=d4Sz1C7Eq1RdK{1Gu_wh#;yJv)`E zfP{@=x3t&h@~rX@^UH;FXw6t(IWo@WxAsvjq7#ioJ+qa&)RT90f|xKhaZcH$c}8u1 z@FCKH)@{JA?D{1}RH}WnrXnhYb9W=l+;8Q^0{`&f?AF_?d8t&$dd?S38okak2!6eK z!7l&PRanvdaJ#)+EVEpG-l(>>D|ZS(*O2FK)qQ;0{uZ&gclJDur5UZx(!!xB0r^i% zh4`4b$@|G9Bx%X6t?p8a2XXRR&@37iAJS3XcOw=3mOvJkiAA;}v*hsoW#iDoF>@H_ z5+3)^OT5a(Sv_M*iv0r3$J|5?elg0UcD&YeXUf@rXKVS5=&>?hY(ov2T0}zow#_>U zrfSISnhU|(HDF;{Hpf`0&QypFE6CuN?SI3!4sqKjX?4SzDgD7%B>J1 zvC-wIt>R>#xy>>Y=7gJOpi2-=q7yq^^s&~7l~}>P3GYH!#P*?-m~N215`23k>2(r0~?8|!!?hun0*fXxRHV% zcRa0UeYKw$mWCh9?aJg<(!g!6)kOF(T?CfF#c;wKPT!N05)IlD(p;;KS>~p4a646C z`4Yv= zUw3SMy1C}4Q@xZf1vJ{kdd@{J8QG}gqQ#b()my=+aPoPj(Wcf|7?XU8IT|LTUlw8ILFQUyIO@|1l+RxsciEOPFUd{xe(D{wizWlvGgVtK~zF+jgxNbw`y-c zH(M{M+WdrY$%lDj+<8qFq7|W`p3W8FWO@oa>}tggJa793%|1qS3pj=9Zut(VFp_Y2 zy|RrdI)3y#2aF_iPF2aY&tIC+B_sGH-i3GJ_GezK%)4(+;Eg@yqQ%LU zhPe88w8W%t>SF#A)Q-^3(o|Zq!rbd5KW3!@$NTAmDbL?31z@4Jp%$eSMf1A+e^)5SsUvk zJdNy5BijQg6B=*;j6c+T=~&ueNzH-EF&@V0J&*2ioFrUOLkp$uK-U!-RLdO3Y&Zvy zDiYat7`@bJ46KGri>};63>ybRu@I*elc5-mN)f1k)~(~YLZU*bj(sYu{}@V07G ziqwm;nO_Y+-%8ooYIBbVGu5YmnFs1P4(Iv`9-#-#1eh8)J%v6Paxw2|iUg`== z?<8bXRvmJCdTGX-12#ND4hiIQn_6$k$|cpt#*(mWt!go%eKvvFmqtcA{Uj74+0g%@ zy_Ggs!U}zUd%cBoNIn-GcTQ5072!Jvb+Q% z{0pA?QJcPS=nIBF>GsGiLPJZPv8Se@QlsUz8#+%@6(U{_&&W|x83BG}NV z2R(|P;PB&3P~dn83Uzk8jUN2Z+;SZZ8W& zA9ie>d9PiD$l7y;b6MuEg2q4rO*Ca*XjWq}0j-y+0#V2rx#1pWwz zF1sxR1N#v{-!2b)R;G?2J;;-l+u)5z=JV6|2mw^ zjQQ^q7b`ySc&u-hADbV`Q}}E%Fl;o9aeCafy=v*_@Du z53lqrI;#cJ_1qpthxd3t8_0>xDO*v70?UBT>C$NICB-2=XMCjpywoPE%kEUljSa3x z3)`7zUz5pWkbE?C8iIcM(XrX1v~cgh`^%3&9Hg-z#(O*RL>YveCsl=wnl|o*=p_62 z6{;6p;dWm_Yjt0{QAZwaQUNbX63Da?k>iX=&x1d)Jbq)(BMRlkg01T|>O;QooJB`C zhODK@3%2KK_{ve?o96?_70HywG<-JF(5oYhK5Ut8RnAB7ZVHEX2w2E*wf01)KGS%p zvD}AGvy@VF?T`wCosKtVDwRF4U5I{t*i|@t1eP-B=vwxxN)FM^2Wx)<=Q|_%ULdln1PA;>*wy@r2a(B`&u-v${BW*^l zL&9uiXH-^}R`>9>6xXVI)^cGU8~PGAhS)A`(bkx&mnJ&9#*!Ew=5IHI`H})VE2}@+ z0&lD|DSc{YWcXCu8dzQtFau%aQ@D^$>GoW}jKGQNaOmFy-qNwN3MkPdgIOtJq_Mt| zY+lR>6rnTCNQwPokc5_4YW_xFae&x3k-5s#h_T;9_*{O;l8BprO)HJy$sO&d+Gej{ zL|q-$Uyx?AtlTTHIbOmnpK-1r8Pmm{N(vmt{jyO{u$S7LeL$xp)F<@o$9Sk)^Nqb$ z&xlM++?zrjYKis2G_5HVvDNIXCM>tr*@^PX{tpY)a<_8jT8L>+$!Q)*l7l$`$m8t; z#dv;ARBTz2a6_2sH8pRn-q2{Tj25P@E2#KX_R1lCLZ_QzKmg_%9+I&56ib55p zswnAOY-?NFXTX?E@QwY(pM#VhXrct_iAu|1Txy{4bkaIaF@L&%3FW8N4M!$G_2h7>8lG2F@ST4 ztad%(!8(dP_ulDP|F}Bw@cdMt*t~|%-+-gKaA>4x74gVO)=?#R)O)piW($J>z9J#? zXuF6lW{K_#vGFItGNj#g`Ati?YV2%Zw-vTyOw@#~j2o+&7+_{_k`uJ5WJ6Xv%aS}g z_XB5_p6DJGVl))8J28jKvsGg}02OZA|D}PznwL>82MlB9B!aJW3{-@biqD_hqu~gE z4Qs5+Jpn5AgS?1u4gdRaa)SEvb5upe+}JdCiYgKv6|#3TXyt+v2kgU&_Ok0DXX5$< zNma1xE2hC{J8tj75xGZ zm_h+D6a$Znyp+JnIF1S24gJ32p%ImrzqWXTmfbF&i(C1yE$^0h5mb-Me?wjmQA+t#pI72%MkZLU->p_#ev$fJ{3hx zlsXFqkBYTTml{>s9rlsMfu=E@E(3`muv`j0-n&2FX|UmBL*LqVls+k>FT4;F`L;)I zh~s1KZu36F=g#cl{8K4PP(4d?mhV_%VPf6E*WWIyWIA33d&I~%y;EP?SyHru=`*)G z(K|&}No?q&2~1MCS345Sva>RJgku$nzoxyZVT4P6WWtOXe%uK7zGh>X0X#6@1I ztCbGeW8`i9CP2{HoWw;*rQoPY1@ECN2;T1$Zp$o8l1`jQL}Kih)6VIE4tWv`?h0vprC zt!PI9%qQMHo%mB;qcW9zDTc3`OA&`#lK*mve@SVVCc?j^CPUH41LobWjq0NOWV>^3G3%od9KKzRpFU~8! zIQi`4ms5xNtFn8Dk7Wq;xvE~b+3>!mzNUWf{M^`@%n)V ztB=pfX?xrDtG~x0)N6)3%{{)dncVKT4Dj>V7nKVs8Rh0Zb$?ZFoW0(pHGKWabCFJ0?1SC6ysc3l18-lYn@ zd24lNV?>=dV0+0ba-+Omyd5Us9n5C@Vi+~WU4Q(EUoM%lwSnDBx$(rW{Ty94%Y{SS zASvEXgM7V1W0enDWD+~!N8gkP%+<@%-fm8Tz_fhIwWIVNB^sNz_d|FxUty#4g+Y^eUm2>FLtMP}9orh=;0d|L5~(yA|35 zwGVEo9+iT%LAEN#FdDc>1gx+H~)EQth4T!^DSKNZ^HCjL8Ov}zoZ82qBuJ`Jc`MG z9=PSEdQFZy=fSb|dcUbg?DQ*-;!s*FqM`AJS6`oWs*8rNI<`Qg8q`Vbi@gPmR@9y0 zsO8;8P>ISe^FL}KW_evod%mT~mEqQXg{HVS=dRPU;@K^{ey0E00@ry?Aefj> zCd%hrO!Hee^;qeUR<}=ntmg6iXQ(>J=0ZA-cJtK0xozo2a5e01%@~ZR+>Mt;SWNyv zV0YFHlfliy?P?b^?d?*@OD((+ol1M#WHLG;e4T{Al1o1`b0&`!)eM`>aN@u(cv84r zhESzb3sF!-jh&rfc8eFqb(DN^w1MtRX8FYrw?3;o z7W22Y?!b`c`&IZgbMD+K1uP+ zKW^wR%9|(NeIxnNCq^8b$^C0y=_0kV>fogMODD`9Q`-HF4l|~_zS8u9$N%?Fa@|bv zYrC#gZfct^T}hQNydAYz6O>G>2(iHe<-ugs z@;%|Y{bIdSP{Fps&ME=TiD-CCRxndfnoh>NhG=jSb!V)DtaKKz)f#h~}VZ9UG*wOycYw5mC(aw4tS;8P`cVf_rBD`Pt0u}~w*(~_nw5mv#$rUGR+ z2bGifgbmhz&6dm_gSIq;63V`c5DWJnz~VCCvGDbKBnrXfT`@R+>M(4`aK-voWlEfK zRlsK&r#kf^}2FMr*OIX z_Ze6$C@RddCr(LpFV$do#8%8HR>m2t##63&*|BZgY8Ku0{B=&hovrw5uP_zAz(1U; z>hI)w&6F=V*_DRym$Hn4+)i>_rxcXf{VG`De$b_`p$#vIu?(5M*i{3|30{`LRFnAO z)eHI2hlZ)5gs*Fw`leRx(V3+?>!cdl8+~@Ng2+Ju$IODt>J3ZzqkVllCRwjNhLQa+ z1CkRy=NNZ8Uh9fNRZ94DD6fAh&MohR?z{oK5>jQ#9y=`(5L~`lHn)|2hcx}eZqqQE z=Pr+hV|I-GW66)~%B%vON{Mu01SGe?k)2H6)z=h9XO}W<_BG4G8Hvh{@(vznf}&2` zG%*V*C%)!PR&XwXl2F2iaj33>ITEs#zTYHWUrA)ha_Kpmf%$EeYaNa z481d__p16WDwJaIS(!7G_{g3QmcC10uVW3)R1bU4-1^+=xZ!NF+4c@+XBDVdD@No{`xt36Lg`= z#TA{h2_r(sDYx@i;$#2?TZYRfKw{4xMpfn7qX-$iC)tKf4Qz*$U zo4ua(Ssm-J7`G2T0jhO%7G%Wck9*ISwMbBXD0vu{%KJohH@U{vzF2X}CwbUp$z6z2HH>$B`eF*{ za$0`hAtx5TvF)vXY_*;yHvj~Ab5BTcX-@v^8QC0>Emc!mirrnx?wG7uexKZ_ZtsS) zS3{_hFpTq%;+#xxNydgtKS*#Asw*`~om4a9#(UPjF_Ers`P8~yuLPS>8jtI*PPv8e zvvSN%zjr33u`m1X*@S%`IW4INk89P)H^(7S+SkM)tZIzz2Ion;djbsNP}OVPz74y@ z_7v7u-f=8jTuOHCyt|vFEM~3W61({Fg4iXA*^h_J2d5k0su;{@4av3sV;~CGL~Fbs z-3*Mp#zXI-?>JM79&vWwnBt*JH0P3xUjyB0Qc)oYz4i;@bYJy)v66R{LS52i{4 zQzyJ>b26dp&X-%$2KEX05}pTT5P^4E3bzd)H_;y4)ou4a1IW1EU7&^|ta(uLP(5nV=%gaLSo!?e%vo9%YHvNP-y`&%BOtRo(GFG=;< z$-Y)k$_g(g5QhU~TObQc1??Wj39e)8Uv=T5iiy_c{)@E}!u279mH z)*;C@NujUKk0ZjPh=Ad)*^*jKt?I|jHJr|GZ|Fz0n5+&l zo8Qg*)e{+BeTrZZrp}EtoIJZ$6m}6QQdbGa;O}Ftx9FsN zJ>Kl?ECd*koL`<+IOkGhWX5F9>=;@6@%_Y4jrvX)W=N|4e$=2^*v?D|Rx#>~ERWoQ z#1n944+lECcCni8F6gIrOo4pureBSA+&&y&c=&6^+y*Wp7cc}}uZNhq=|o|?XZo9Y zAvbx5A!Lb;$~PHd(z9a2@yk|jatd>nSu^q@Y6)kYqNjRP>$5bd;+0${7j}?-jUHD9 zm#r!~AniMTy;EEMNjrXP35wf`pACQHBxY5ZB=JS7oB0d}@Jze#I^j9FKj(H>ZDcT{ zhu}zDt#HXZ10muwpZFrS+1jovd1qHh3a2Sko-#@QxXK1axEKMpwtcB8W%ya;&eMDS zNNu4lRmauWpHOeayn6zEnTBXal^4z4D_D1Iz)Mv^<-%#T+T7Ex?weLdU7HU)ElC~J z>UvPCU<2O6Na2=IOE zU#o|0!*KEdk2POofwm#n@5t@+0XCELs-VG^LFRIHF#LsR<&EwP=A5vSg?BNyQ-+@B z)u3t2_0<<<7epQM>dT#lDR0S)J>#C5pUZ1flu0LHn1mh0hcUM4Qb%p&7FE}>)l(5> zIl&wgH`ub>3w7&nCsr;fw;x#gk=C+SUcloRm|w_slBt*|VS**()J@M03NQjJYO#@K zB1@`n(-2H~h|W6A#3SmU(JDd1$s)T6_Nk8O9y}6ucIBI8M#D1NE4!jcER8RVr+Yw6 z!lKtU9eQITy2mq=+cQ2)VpOl?d8Xy6(%-r3{YUP|wA{%P{*^lqzq&S%yKjHzPW#y~ z$ekD&em6)J%APkWBR0$Vb|t;Qrw?f8|s;Pc$rgQq1+&@^hP^0s#GGk-v& z^WatEA@omHB=hbnJHF(vFR^Bdix*)bIrOp?s4k1tTSFVZp1x9>k{T&C_KsIM4766I z?MIwNQYdaKD#Y?HF+ZD{qPj*|UC;XRW(o}+eg7QgmZE^4&wMT3HjAb_(U&A!)xh1; zZD_#eYp?x<{CK4Re>)}b1Qf@0)!}uzhaLB}o7=_Q2wHDq0`HGH! z-4$L=_=ihf(qaVVFiLWrQ{0`Xb(q7A^QqL8_ZEOa_=yacweWx*SdREk*6D!s>P$7b zWfVX(gd!@}>-HM(n?QKb`AWFyf6mXKo5zH!2XWaZ?s<_}95dm6$jLYJxrYOs4@LIo z%on{MUx-lWW_{(4+v~n^Z0cGy*=X;j{W%exw(15OrfGs#jH;>v$y{vE@FA#tGLt_wYC+{o zksVkM>!HyPHv6+wv4nD)6LXS|o2d$bw2J%ycoCurT5ZCQ2qGK2jP--U=u7+z# zO(?je=A7{JC7nV9Wa9L2&0IzKN7*thw`ngoHriTsrT5l+=NFQ2h*6D0}H(oR0i-=Kd zc=61qc=g?56EVDBMN_g}H~BKw0%5f5=yWMkT|{;@MT-pM;}j_IcUNEgD`SO{`v)>j zb_7#xb0vjIvt=Rs_vH$_?TyV2hj$lohJds<)@wIBL-|oBzVTE8M`ExujHmfiERnck}e|Jcch#Y&CP$B%+Y;dRT=4RH0Yx z++x0sGVaP2<4)!y9-G(0YiUo;5wl#J-3o`NIfxkU78<;OyZKSZv+ttYe2ls}&_5Ui zRDr5z<87usLf_|hetoj*xY@C6%?u>a4KdZ`Zms-U#~0*1O5l8?juh3LwXkLU_ipRQZ)br&#&JoluxfBEtCk-1+E9?e^ z4gu;tZOG*(y|~h))D=yov`pdnOeKbY)Vjl?-{qRIzoK1-cf6#Nk)8S&-&esshcav8 zXPpF95g%u6N!OpCXkBT1h-UKYy_PXsm2SCekZviN+%k~)WM>K%0ud%9auqzO1NWk( z%%7>zKIwj%EMT;`%ND)vD?;E#ToV%rw8?)%V>9Hv-Gx1g_BR9R^!2f5VH>4m#e#2? z2WzZWnfOGrGFN1BSaoGCtZk?;-{4!@fJlMnk$WKNM`-G!!ZCpUwRgff&Y`qk*T4qz zGLl;Uc>%%`Jp*40s4fpMFWM!+?a(J^@ViC+a?~TxFglycuFf)r%A>i+KwRRbx6Q{Z z-FTFqjyTD`LFl^~Dw#qTs{xxbkJA!WDeobXI^TGa2W62M z?U*6(Gg+C)U-n0??B8uDj-&kL*WAq055xn7v)a9^3+TIoDUBq)40$|pY3dwI1WNlUIL95vK`G2W2$a zUL8B?XQB&zI`HWdbN<;^WKIrXQ;)R)!L_0+(4Yim0S;u*=iQOkt$sc5 z?j}Hg6UI86?|B(|{sNs@N8haf8YB0pMjicFe5mcI;tF*l_v0^ra< zF98`%wg0|*ht*Y73bOCz8JGv|`vO~V-G)XgL?CbuG2qO4+)-tGTBKt($y~MlCV~dv zylh#fP~#{^{hZ*$=kCWG})X8j5n{@kZ6~nVIa@n0@*( zw#%t1OJX!jVt4T&(**l1bGM7CK_9)Z%V>z+;;R_~hd@67VGdY~M+#OMHQsU&mgAnX zEPO_v|`?Me<}`{fGl$w^}`z?NqP4&`5V`H^#BfuwqYEv4n!biGI`7F7G- zJZw!KXuhBPd6f}dy%`hs`CKLHwu1ktA5q;0QvXY(7y=A0X{$c<7xTom?u@$Io4V~< z#JPfyx)h?k=Q3nG^~K;VfgyVos2CamYx<3;e)L~)-re5J!#X3+h!x!Xa;ZxzNxgJ{Cs;BlC9h;|EIcq znaMa$zIb`Plf$|2+CA4R2vlRvpYxk1PAd)I{3-z*HP0)b8fl355>PR+P0-H*I%8YU z$Xe{ZNEl=lNXvJ28ksDR*81$5qS5O9+RK`MNBK^<)mlwErq#VkTu6ek%x^ zB{%``aV#D0d}>v)f=wTX;vxXWJeH`Ad%{5KriHy-ygqB)njxcrrZit~p#r^~dJ&Zo{bS9ylK??R<`QZ!R+6| zxX8{{4+D#uNWW$N*n1bZKn=m{<}g%_VT<1XdX`6r1 z^tI;u%L_oxHJ~i?<<7)kTsP~!vL)Poh2!tqaako>W3X@hUL%cFnLmuCQDV~gR!^%| zhFZ)Z4M52)b`8aLQ|B10J^IX|i#N)x%1Af?PFjBjQeLMMXDq91n45vDUvtXy3 z@w9Q+7v}(r{(@sgF0?T$OKh`|f_2xepT+g_k!_fJcNDDnd5!Ph5kJ%jMm*4+ z`q;7FD)H;ONbShRGXQ@dTYVi;F`>i05Bn4_;_Y`G^{b_B7%zA*%@K@$?vDU;ilHeD zr=1K@C6roJH1$Ik`Rn1*RQhUZtm63aZMRn8;06{y5`AjZ)9&E6uR6!#XE%~pdn`=A ztm{Ij>`Y;g;;h6&BjFML0ClM08lx*P8Y znMavGs~kqMr1I@ZE%9^PK5nC4K}?XV<~z5it5)$^(64fn@iz2(u7VLU!*C8&*x8Gc z0l~}PB7UX(Bi1lLGxFws*``-5jALg~&)VIeIqM@vX5TqYW@n-?QP>_TCZkNi);!8) zO}GE8A{++mFS)Q$DEVKi#-!f-p{PuD)(;N^UAp8JgWA0 z#9=L`J~r_09q}`ZQZi9JriQ(+m|k`^N#)q*;qyA>f6lh-f#i)Mz7$02eza#NlMuRa z)+>kLD_?CQ6zrrs7XPzQ2S*>eRE^KuboCuTp2Y6m}Od^;2Gu7H>|2H(( zm_S$E4s`(vA4JoZa*v1^>y%&7<`nbZS?j+ZtV@uNSb1&;^p{njL))$ENiN?1a%LU4 z6pF$mXytkd%tr0kuRoc;&sh{L68V+gQhtpS=pSkD$^$;Tu>V`gVHT*{0= zr;g%TTrW^_G!~ywx33S7Nq$Dtisdbs0}a(Z8ukkijiV)%>+ko}5;}n#4|n2hw2s(aRYJ90k>pMYQeFyhR<4CxATvz%i3{NIHh+rATYJFopzs2QO$eB`_0*aqyjjV$ zp_KMN17gd;olLhs{81sbxUKu%KY;X|G|&4p{cnAY6aSOB;F1_e8`?%Ur_yS0A}BBb zmcVAyM`cSJ&L({_<57l6g?1Be+d?%bQq2D4}C6Wd!-8s$C5K&pJD#y1A-p|5VodS|DW?7t5HiomKZ7sxMKDYD6omd zmS#@GeaCX$)p{^$(siO%gQL$nacryDg>7Z3tII=;#6dnOcc743CX!uLY~x1#4Ud$+ z0DqyEogj8;c4Jvrar0rlhIolQB0~D#806m<;Qke{sMPJ9xBLP~-_}sk(;oityrj-l zc;rb7$2sI)m`KW8Qh2MZc7a#SCYU7Zw_hWMHkG{pb*x^)=I{8&@HXOa7}xklzV$vI z;fK~vW7pcK7?-zgzx_)R)nmYkP zJRQ*{K1pLcAQyn`SS9RZaW8!u+nH|ltY<+^hUiUoD^3)5_uXtcex>2{x>Q{WE?KK#M4-D z1&k}7Su$iX|9IoFiBQQlIi|C$ZX)V=-=RL*Po6a>$Nm*sUNc$*1~amtu(SLTO;Xp= zOwMsQ@Au9nZBW?f-uL}`U4Q$Btam3dTIt)Q#u--VoZK-dCA|#6qW07WOpYpVL^>)hsjL26zYqsa zCf-dY#X4p*?<6ae`0-hO?E1`K@wBdr%qzZrHi_h_`!*#%dyyCR}u14Lkf7LFCo|67WH;ilE6PURNU%wUB*ORS>a z$G0cIY;h)iu`H_PSp96dmbHr5IymWS1;uqvcIG=t9Q=v#yR#Kt^oJ_F+cerW_Q0UF z^NY!WXu+(^*GNC@Oibf)809QGOu``FSCN9$T+Qam{lo2pCu z6uSUm`be;=^UuGn5_?Vjk8j68w4${v3+BliOLO8)GF zeU6)j&I&Z& z_Af?v{mca_nXcta%7LDAog^x>2L||EHF{tQGv%I75Pw%USKsY+ezF!@ToN~bi_-)V zH{HRw7QDLt%-?(>bl#Lnz6AKX65xiAnj%+OpDGPyR94m0j�wYUDr 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 EKX(;SLjV8( literal 22328 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 s{j2Cevs{fd%O`M2ts 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 z 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 Dq2Kr} literal 19632 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 Yju@(VOJd=wx#4o#z)Zj5mj}Q9FPMQ$NdN!< diff --git a/app/src/screenshotTestFullDebug/reference/io/homeassistant/companion/android/settings/mediacontrol/MediaControlSettingsScreenScreenshotTest/Media control settings is loading_foldable_c908f502_0.png b/app/src/screenshotTestFullDebug/reference/io/homeassistant/companion/android/settings/mediacontrol/MediaControlSettingsScreenScreenshotTest/Media control settings is loading_foldable_c908f502_0.png index cd790af860578cef228a7b10160557ba7872857a..83a95f9e3adb364ff7ae69dfb47fe17755d378ca 100644 GIT binary patch literal 29844 zcmeFZXIRtQ);)^5*aZazk!C@9k&e`DK}4EJla?qLdXW;Uz;;`ZuJjgAdXJ%mPPSC( zoe)BiUP9;znh^M};NG5no^#%N?{lB~={~PtR3PM+HP@PR%rVAX!S{94PaVH-oPmMi zl*ZlL4;UDZF)}b5dVcgU_=;#uJ&}RI!%XA$4Fhk;%J@zX=g_zP{WYF(SG{97;ca_p<3V`Sc0~jod>wgP${exG?b3FJaHm|IFv96@2TdK=#XC zhl{7Rq?E5g>*h0XJBbc9UOk=NGBtiZTbIIb*4oUc*3HKVVpG5EGlMt(*Po)TeO%zb z{tNzfjr30bmw$ex>~!$0fByfs6aV`I^!51Pb@;w3{(rmbMimC0B1NINjNs>)P9xGe`nmQEpVSY zIs0uPO&1dIZEhQb`8LmC=J+IFcZP?5k~*=YaDw4I*WOmz{w!rbZGU$GeYd-nCorXU zqlJT^S%PXQ*ukdbM;zBdni9|yLOd1h&yn1V>UBd=N@`8 zfcm6M2D_s00qeH@=|~Rd_}9%2apH1#`k9}9Q;e-zN2mq{l#JRJWX(k=u2xD5qKnSU z^+~Uh7wY`AQqki_55HDZJs!H{sFkl#HJrFieC>|P%W*^)_IGSA4Y-ruPnK+TE8-8H zBqIe)(t~vqTE?TUYDV2+yq;Og>DqLrjSc$jaj2T&R;QFZz6N}7r!x$qQi52P1Wp!& z{PrGojbD|vq+6piK@~M~u7Yi@l=h5j%e=mGl7V>EZ>qp#Gg~`3PPpdTH#f6F8Sr$x z-=8k~;OTCthFnguv3j80P_Dx3skQA(AEVl|E}e5_xMq)H zt4~_>C6;5mW1Y6NFlv`Nr$B(ac6v)n%X9xZ~qQ z$gu1o@HKOJjlH9)a5z^!F0mgHGIM-iM;;ZfK)ClPV_6T~zlqy$HrH+-{leFAn~!k` zZe`|D2QQXzMB}X6c=pzVX8Y86v?p^4BzXe9KHl8j>fx80eCA%#%I!A`RnEjSkl72RBWsE*8(@^2iY_qm%#jd=8C*RC%HeK-;dqV?s z0*?3~Yx2Btv|Evs9WmRHYs%cQHdZS0~s;FBeU7xx`@6D*2s0W@+)KoeRrnqR0Z#lbA+bjY>>L=d3yP_kL3Og!Y3I^ zIaLgQ7E^R3B{aOEq_wmV;WbfJ>eTg9zvo~3FMHW%TvNO*h6UJg+cgEwyp{dl`)d=GOX(4VVJ{4` zGBeM<&Ba#{G5dSesvfu-ZNw@v3vT3EyH-z)3Ir+NKZi0X9+Vom_w7kvy4sRL;I|HF zR6I1`I?b%{{6d1P9+q$EVX(T^#Ivog*-uA!w4AHv;yjYUp?=~F?J)nkY$+LLlep6; zJbbUDi{e2tp#;z@En=6SRHl*tFqV_sqhK-Fa5Bi$ce(wy`(|e%Rl8%^pCq`J+KYG; zHmn)WmuDkuH}5%*kE|(bA+{IgEQhKlJd&&hme`nov78Uwo~_#W-8&V8G%q}W1K%LNO3 zM;wie7gtUcwNxCw5$b$<_=cPZ`~eJV!X}pNSfZgYZl(1gLHS!fSoDEFXq6kx4OB9I zhvF)0EV*>9cB@-coWatEtK;DWs^-fdC;9`iZLb5eSOUn≤a2$_b;^mEjyNwGuS1 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 DRQr%u~hT(bfTi=|N>C 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 aotN4#P&#=3qdhr2lb2OKmnn1g&;J46GrGh8 literal 29312 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 C&5kJm diff --git a/app/src/screenshotTestFullDebug/reference/io/homeassistant/companion/android/settings/mediacontrol/MediaControlSettingsScreenScreenshotTest/Media control settings is loading_phone_e05166be_0.png b/app/src/screenshotTestFullDebug/reference/io/homeassistant/companion/android/settings/mediacontrol/MediaControlSettingsScreenScreenshotTest/Media control settings is loading_phone_e05166be_0.png index 07c47397d11a5737e3bd4136d3e2acb8b6159862..cdc73cbab989ff5d703e6d50fd93a9826fff0175 100644 GIT binary patch literal 30228 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 b&LGmT3l2dSYkdHlpl1@YPx2nWdiQ?-cH91z literal 29545 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 U^!=b}z$HjgPVJxU+Yg`rAJFl1mH+?% diff --git a/app/src/screenshotTestFullDebug/reference/io/homeassistant/companion/android/settings/mediacontrol/MediaControlSettingsScreenScreenshotTest/Media control settings is loading_phone_landscape_9e00b29d_0.png b/app/src/screenshotTestFullDebug/reference/io/homeassistant/companion/android/settings/mediacontrol/MediaControlSettingsScreenScreenshotTest/Media control settings is loading_phone_landscape_9e00b29d_0.png index 2c5d8e4fc19e4322dd6e1a4a5718f5af473208ba..045f0d7ef6d6726765fa748efbe725780f68b2d3 100644 GIT binary patch literal 29318 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 G=JQ{pAXYH| literal 53803 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 diff --git a/app/src/screenshotTestFullDebug/reference/io/homeassistant/companion/android/settings/mediacontrol/MediaControlSettingsScreenScreenshotTest/Media control settings with configured entities and icons_phone_e05166be_0.png b/app/src/screenshotTestFullDebug/reference/io/homeassistant/companion/android/settings/mediacontrol/MediaControlSettingsScreenScreenshotTest/Media control settings with configured entities and icons_phone_e05166be_0.png index 5d009cdfb7e9b28e253b4f2918c58052f3dba070..186587a7559fb68b25e727936f2f85ac7c19c487 100644 GIT binary patch literal 55953 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
  • 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 Yw1{S_=}TSwid>fq+6L#cv~C6c2f`&BF8}}l diff --git a/app/src/screenshotTestFullDebug/reference/io/homeassistant/companion/android/settings/mediacontrol/MediaControlSettingsScreenScreenshotTest/Media control settings with configured entities and icons_phone_landscape_9e00b29d_0.png b/app/src/screenshotTestFullDebug/reference/io/homeassistant/companion/android/settings/mediacontrol/MediaControlSettingsScreenScreenshotTest/Media control settings with configured entities and icons_phone_landscape_9e00b29d_0.png index 848943fe550027db2ad3c4b02b5aab532988821b..5b165b91b941e713f9e972a74ac80f6e7f7e6b95 100644 GIT binary patch literal 58928 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 literal 53487 zcmeFZXIRr&_b%)_Iy#DF1O*X+84(a^(mTwkNDT@|lM(?#O+ds@4a_*A(nqOMrT2tT zLJOdjFm$O&2t`0dNa!S#5I8&NGc!*)=epkaI^WLUFKVt3e%X8Nb>Hh=_u8SijdV^N zJAdrJfdeP>bZ?j(IB?YOz=3~!`tC4zWp%^@a^S!(2lQ_Ie8~M17*-D(BdRS|iOMQ{jhZC2tWaj@8W^R1vhW71z?#pkkbuZx=zGdm{ zmE>+iMT>Fr*z9yl%E6`7`{foQa^>xnF?$K$fZz4kAJw@%vesY!W&f-8*F)0(^2+DS zocMov;Z2tA@<0Cm$}dqD-*No?g#)T#|MMaLvnKx!#7Pm%y2_(_7z3Sv9ym}w*%HbX z!U%4Q;>Ufb|K9T-i9VvY(z1gO{33I;hmbv0XQXtM`}*fj>Bg?%66*v>XoGs)hbJ6m z-*Rx@Cqjc!jJF3*-S=$Ra>6tmKqOTvhI#QHXi2VE;)=mFntd)mO!n$zEKm@qlV&;X`Ghq*)YdquFnnNNGV&arQmedC#A+Y=>xxzmzRR~>fZ0}(J{f5 z+Q*{!)#CY;AH3c5|McF|LCP;Zc%0I9zi%ThcK4eD3zx&rIXjv_`h8PfH9gOTL-Gby ziyA&MD4x=TA!RcWay@^b@v9xQ;5}ygSc{=Sq|#LPUA{O~^ub@O6!j)V@AosRj-iHs zQ1jSYOW%Wszxl@WK1E@67cFppOyL)m)3d%nThI*@TL6y2RtkT7BVSzNp&D-{3>^{ zW&zT?U2ir$I4DCP;x4*j+pRA2b^LkH?AMiwS70_oO= zl7=tU%%+uVALvTd+tPfQT)`@lg`mt$Y1JWzqy@QBKhUS6wVZ-?rUg09=D1nm{k#}k zv*{E_rPIiH=>tEdklv*^rKV_s-$~OEMBNYXKE4g9XlL%Mjcba;u%^_CgAe?q7WOcr zT&6%|vaUxWMJb{+*C16jaAVAur^CI^k(XF(6{EpgA0S^pr7_6#s_7xi^{UI&Ej2J{ zB2MP1enQ>FmB!fVTD>=IcgP?6YW1vCF-;3Dia$GbAG~^WLi8FtAaVVQVd@^Vf&EA-W^SXosb8Kv*Vru(JiTm0xwC;=T^}rF+18n}H+fLC$+DPY67B4k zs`2Ra?F<@N!Q=&Uc^fyC2?8v6fl}4G>+j~*#y96w5*fx%goJe`EAeRdHid8mhC&PC zrJ;7Dp5IPsx`ZFl{e5HtIdti9`gf3#UGvvC&7z||qt~7!M28wK_si!d*gVwBcw*x> z8A9fe#{Z65es`q4iw+Ii5>^XXcVS2S_(X!FwfSX?b~GGLsZg-{5yHV2g!9Tx{`MEw z7+I2I0CP{Sn!6KqKvy30NZrxrtHbG3FNDb!N#=XbfzI7<)6aU*;GjaBIdm9X4D6al|tW zExq^iQeWAD`J#adWMB5<^gsUd8wGrN?R+fmI+-eJlv3JyY~7s`l6L`}=W5ucQ|}KE$mOu4krNHnP2Ccq zh}K$3x?gVp%E>B>CM@3n%c3U{yiy_Ww--EvDaj|UKI0U@G;Gf|ZSyI@OIr_IN{Zk0 z=x?}X$X;=Rrn}A86*pKmA=IJdvvN(MDxJEMnrf-TCFR;S5bNo)N%1F7A5gzaDsoO@ zLN?a~lKnh`@1Cx@$ZSp6{iggW;{fDdiiUM=!PtkosOUfAqfl#S@>IwIRcETaOKn_N z$sI9R5k>XDuMnDM18CSb_)8P^nY7o?XxF_Z{g10@u5(Kw3(S`61r&@o8%?G zt;Fg>m|m?t{B0SJdb+vw{Y%!^_53!)|Knq^p8lU6>w(jS?m{^#eme3|`S48$wR(|? zX_R`5F7Htl2XU1zY5wNv0LaYv(s3Mu0+%_UU}zAmb7z?pM7d2t3GHa)iZE+XDfu*;gIWd zF&Kinb_}EVIAyn;P&nsj!CTev@lz(c%_XxwEnLwpMb#{)-D~VBq5^{)^_@V4^qSKj zWhjmNW!>H#amS>_taSznhO(k^mP{uD1lrz&FSwzL7GC+amK3PYo>rq+2LdoU_{EJobgL2PAxNuX_%34lZksYTU)F29*x|48eD7tZXdpsdZ7I(1t?xT0rN8R4YZ&pUnA5Y+rs(z!?jWAqIL%`Gg zKfNBGh`ylmY77K-J=B!6Fxv^>AyFP#MZ`wT@YktNnnX4P(YYHK8;yHo#kP=Hr|QVr zv_SNR?+M(^p+^6;PjuDF-&KDD7%Z>0G3tG!!(C-MLM|W`({Mlcvzs9W?H==>81Inz zZsV+ljZA6D&e~Y;9*Z2xC3@vZ;ExoGmI}G^7ox%{x$DvIEKO<7{Rvn4K0Isk1cR`!VB#jNJMArVBSEFf5PEy%N<$ zA2GgUk}6L_^akU(>y=MGqP+UEIuZOw6Uuuv)tH^oT@w{^bpMUfYmkk4q&%-ypwvfJ zv+``yRS3aoW)&$_ziz@@JwRWY=UGEO>MIJXf5QUYi*m6tf^zHl!2S9cFzPKX#N1U# zONkq*F1GSW)`)RrP190UXS^iG@P&nT(R2y8MS4|)PO|#3X&U*0v-PxHBX4ed(9h~4 z*@YxZD~``6eLgBKIVz5{Z3&aw=EX9td{W>k$;u3D5?UzDQ3k_!c#cU{k2Wx6$FJ$l zA*;$5AHJ-3{6zQA>y^%;6P}sDg?A^U3RVPi3$|ammxHJ+tH-5xmq)r~8l9MyL331& zH4JAs@(M^-9^JO)6+U41c%?OjMLe-|4w4R4U1~<^L?&FTJ;jI4Tat#%J*-PApIx-6 zGMGABl}k<0p%q3I*}{XJHwt=u!*ZuD;Z6xWM+E21*hTw|En#IknG(WhMs(Jmg-^X% zlQHAMp35y@yh{@|J8DR@aLA#RbPd0@SKDPk}`X4Bc0ArNa`SY)roa90(0mlZM~H~`CL$d6wiI4*o2(S8y4!JOG2Eomapc7HB;syo=cv;Fu&Ob zB5*bnjbvH+x7_$mEp^XltPHj?)p}6wc2w<8_RO#{X<-$VO!Weea(LW(&_qq#44W>RJm4l)_NjpFley>I%ZwEJJX%&q zmqfNFVo?Joii%jIl=>dN3Yy!VIJ?dv&QcvitHJwt)L4bZ=vWrfgu5z5XCk?9Zj=Tct~ExWSniygF*iC(U&7xY43atErz?xZ5r z-gRc3@GJ{njq-ghLN!2_)Cy$HF-C$EqZJF=Rbl>7)Q8@E4a2bDJDFa3yxobM@pWrG zYKWI60<#uGPJHb+`V*~2EdgZ27Kr*h2q}}1?<8@J<;>Xa)FvS#2j&MaLu$RiO6`QB zW3Hw_J0a^;cGJv|1ymC5nJD6DoZHThs4PzW8Lc6DDgKqRsZ&vk8CSxGoZrqHr54Yi z>lO=lrf#=wOayEF{@Q=se-H+|53Cc2Hs0ND1Ks+B^tmN0-|sa}rD1&A_s3fw)3|a;;i=5p^XQnpj#jr?qbLdp&~bKviV#F_Jqj8O z-bz%_Tw-`G6NkN%S~K~KFJK`_>e^?bG9x^{!$p5yHR(mNAH7~oeagA_Tb91>sQ0_o z7pXxfxZ{W5)>)+cl9Jo>naj0r(-X`h+WH=8onFo7!NOUtnUW_I_^U)l4q96v)ZAi@ zrU&nCHBn)YE;J!Kwhf{cRSr+n_JUtmdikIWs7moVjXww=`m5OyTGpE?4V!JSC~iS3 zb=ffF95%{}J;=&RUNlDqTODEMHY6}>MFvOhV&3lut;K%O;@LqpOg1GYL^)vgS%K@ zU$8yocZ_v+!?%%XJE@W8Hx>G8SkBXOP^xVlwz4PNzplhaCJ>oLre!B0WaSXKIUr`E zND-fnBY#z`FD)MXq%5CrTl>h>o|$yz_CY@b{xns3Y4Q2mGU&Z<1bh|N{z|wWI%=5| zWK7}coabo1YS$(^Y|~=I-#&0lYpk&?M64Bytk%}3Q05YbiHDuR$rZKBsc^mSsovFB=LyWEGsj> zc((9ln>gJTO}QwAe3$}AXEJl_&Yn1u9iimjbE~5bI$hd`Tb4#p*-nNvvURr>ai=aW z(`ZzkIetc9WlfU@?~u2vQS4iLRV!k?q~0$VHYh!`UN0=+?tDvk=xa>ksnO1(*+%TN zS=jJQ@3xykkvfxB9)g%BR{n_Dk4J#e;Y2zgCg^88<&qvk>Dhv5mnB)w+<`iM)tlV= zVyw4p&B-z)SskErp%7%D&LWVvnOW|iF7zruT{ySrlL;s85)N;{w>YNdPoR`H_z~%r z0t=NJ&TGY{Dn)uA+smP(7tgcd)au_(C<3tw+hw6j~nY(AX< z<&{(T8JFc;=(n>oL&}tI9!gbSH?%LmPbWo|h4-r<{d|HS^)*Bw;1!p>1MXzyL8qTK zRu~JZ6vxn2C}`xfrXKCFHYgWSwvlr-!`GV&DxxnR+LaIeu5;dk3#LB*QF-BJF^*B!zH0%e@W}zZMbmaV z{XHgxJ{5A=@5m2y=IA!cF{n zZ3oZayoQH}v(P8AbM4!RM=K>U2eLopX zp39OTk#X-+J9gmo2E8kXbdXU6Zb}^tF`r@@uQ-;D?Xua}&tZ0Ptu=Fwf}H}tsUox6 zv56pfvS{TB{xPHADhn@(f|YV@zO(#jHDbJ1nqB6;^~&Wf9#8Rk`7!#hi~WT8rD!ywE3 zyA<*)5`vc4;%kP$pCsUSRy#w&5Im_j+;mNx8788qcc&~w4Go9yZMuJBwp7alg0Up~?J{pDQPiKhtonI+?c zAt_Fg9K`b8``j2u-l7H49Kmi3CF$tt^f@Ie<5#olG}X>4+g+2Y^S3)5Ddc+F5^DpB z)g4ypL@3WVbl^qQcG>Ucrm6cB?wFb`XSc-Z_&#}z84Yu$BTXm0>Eu16*F_P6e#=Q> z-Fm;l^B^o1dwKdS2a~p9JiwSI9aXWdBk${}>uEk(|p)#~+rr{+_u`~6~bDTk2#g{EYOZ7C&qa1%6NOk}#W4P6j) zjfP7uZ$;-8_86a($GZHywT9c zhUJaK*Twa{7^zEs5Qn;X|3z>*l6_O%g?tKFsbhJGOJ~NtI4MV>9Y>bvx&s@5@UGZc zcfmSq0^{X&hP_pny5r;!KsaF_6#6?+e|fd&!1>x(z7ODA@^?O}b!FPH*bKpeb7V0S zXuzDXb#^SPlKNaQ$R+&vol#l4CC?*wfJkx$uNi?j9&2eKQVAj@d}Y!{2bO#{KodUH zKp}iutXslq>yu~ci{teaZZ9=<#u+P>wm|}_k8L9asR$sii=J^xqE5hS&kxj~-EGy) z?PUA`X?H^qPcm-uTT?7zZ7&pEhyKvCU=A^}5uT9?k+-buB@Rnp>>ydn3yW|w9$!#E zU~&oFonrPG#i!N_V|=t6qpyR^qJ|rLF&FH;4@HrxdwAT^*|lCxX7TcNskGmZ{G!78 z9}T#m)h5%Q#@Lx9eYWNUzZ%mWS0FBzTCK=lA6<2Xq<@B-6vdibTt##m8(#LO0XL|Nw&-A~^zwY&8a zJj9_RuyPWa&A4T^!az%>AvNMH0>?snxx-5KamfRkd~eBp{$^0(U`AVC>uB$~W@GK| zA7E7qM;F|9dTcS({=^zZhlG&{GV1)WVhDb}4%C4&-60+I0@yaMQKp8X6BcO(7c33l z3$o6RCt3Pco>CFER~m1dOM4XLDaEaeY)~hoI zcZ72wDy+Uho+cAHIk*WcxACuR$DVVxFyM_L45!~IKsJT}z*!2)h*T7-9Luk}HIC)9 z7VPXoektmbYrTwA7}$|QA(=0kVh4^$`6o+p;KW^%nW-OHRyARYV*CP$JiWC7okjJF zP0k#x!(vNbV>VS7NU2i$Y;QVrGnfpQf#Ls|BSu2JiQ*pPY-9nd7Lw7fwqL)s;2L2f zKogMnZ*)#cBp-TP*d{~>iwv<~-s_Fqxr=q++GXL_diavQd*KF}P-pwKtreyiTRA>f zAOXDZIPa7+zmtoT0E6^|d++R4E;L?}wKa{~0rM+%-+)=BG(lNWYqXvp0z zhdXjn4p0cb?B3oB3J?N@NUeo|a?M8Nyi9`&8c!}kb$Y2%14D^DNL%U@b~Q||+V;dX zhn(XKIMmq33x4jz2l=`jhb^Grojq(F@bPx_nEh{cmSXAc{SlIrwY5jB2!xB;Tv$>W z%pfBL1&_h+Zc{^Kn;X;vhT3ZZ>p(B~8h!-}kHM|kN)!eZQ4ddcx)>*y)S|PK6tme_ z0hv4vup%Rp1O#C;^rlh`JoO}n!d$GwY$#QBZcVHUFalpY+4Vpzv;^fsQ2dZ}t|?<_ z2mj%8`=qes?5|<)!(E2Em95ryog}D0m~--l-@JS(V`W_7EU|(6W0)xe2ZI#+w4D;rJt@#hs{F9l=DDlKn%T1L~Xc9JNgIV6njqVX{2$QI(y3;wa!Rf zwL@%Ph5VHnLUaN(c+yKkRcAEN$y7$ASdj%rigv5vc;KA?-ler74!~GR=$_UZcmLMz zx}M6@b%VR;9!>wYeY#3wRCQ&KQeTQJZA5UDFOTHMgZ|AhH*aAmJ0UP^YN+VC!{}RL z8U8@d^D(=WSbGTber38XQ0WM0NZ!p?-ZD{ypq&nK1iQ-gnD|Uq7Ot!Y1S6ClOERnq z#lZ1D=hH|(K69rtL3#;;A>GAcLlM6e9p(Uqjd_A2Pm#Nl+!q+=Z*`nG8?#KjL$vj^ zovbuA0m?Y$a-A}_Nnp`8_s%6G!bl&a%sZURXlu=M+M=u?w^>qD2!Yey_DV8tqepFt z)`;HD_y#v)B}%Q}!`4<$n6W(bdq^$AHO8~)Z43=ZsSzC}N7;kE-8r6OSfibrzW(UQ z=Ri}xmR_oji?|Qt$x~Kb07+nJw5EJRN%+wm&%)NkLdf{?Mc-7GK+asyHT8LI3Cy;m ze+$H9OKlU3bdxoHgvEHzNSP^nh&)CW5&A1 zhcI!gGj>iNc>%;j<*$V@4PU_Jtj9k2`9da@OKA%*iQZoBhDBtQ?)*w@qH1!u9_g4_ zTou-}@I)1UTQu5_lISVv zMPfBHVKxQ)4#(>zI@S$g8=XA|?g3HvaJ5_M2c(1}QpE>b>m!#{B$G<56|q$V$ghH& zzcZs4V5}_L9msjD;@mzX8_U;H zwpBG6E(b&Oj>7Qs*@Lc14oI)YqV0*_5#EmMIuwAvI&O(~Erme9;8*o06I5a04Ic_q zhbsml`k~f*D9^&&=~<*y#aT6B_mG8qo8tAQ>9=1mKY8J_)&ULtobh}+IH5J1X9G$B z?V8C-FF!h0|0BQx%!03_d6gsKcLIMea?`n<^io_RaQ$;%6IE&Kk?CG#nPPdQVhvD_ z-NYRGW4EWR{t5$)Z9oVv)txe1xS5J_6Jl4Xm%WF+RH?Z}DZ(?PwleI-ejEVBp++stVwC2iF>k|%Eoa^yn#fr+<=ZEVLb)t{r&o(~U9OG5`zeVi zPz8n{*YX5nT~+^#gJ+VEhFOWE&_kHfTUx9^=8%Wwukq|Aau!De?$wa3N8JLh374~f z_|-m}FiF4}2~$S<^t~rZ(oD zn_2(-YFPt$I_qc}>qdS7Xn_^&e#B2ZQAzoXA1sEVo;?z9DNal{A^6UPVvXYNjOTSO zaEp0vpJFQsGdyn{jHm8i2BdK0GY^m|uweZ?2FZDf4#GH1f=k`k)Ss$s&;c4@j!VWm z*=`f{Bb{gL(o0IbZ@_B`r^RHDiWYIDFtfM~w`T8gR*Vjwk}qwCL|uSX635fKv)H9( z?fV8ry<0yX+nDRq5vfEIz`f8T!sj>{GZ7mPHcRHlZk zQ5UT;&HkvJ0Cw3;umwoD@yqA=`@8NuN%+ijnnC2!+F8E7hh!D1KZZ1ZMwpmQ&(L>$ zYU@=8em2LZLd>3@yAFNYgoszTVHVqxfC(n>ICG$_1u@B35IORD69EOC5o0S0RvxObFRB^t{MgEx-Yj6}P{Z zjQr?O5-nLRYL78M9V((Co+5!^=gSikkO@= zUJh(y$XENqr~{}HLGoXnN%b9X_gNgZ+Du0OxCAUJ9{)Hka^;;toNc5>!ywA$d1}B? z%q>kZe8atWPj=lW^~Rp=s|wOJA7AbI4E-R_W`mUvCYyE@hZ1vd3!T+8u;>k_+~wo1P17af+Fy}ISn+pZAd(})kCM;n;PRZ0`3nLnz4xK0rLgp6Y_Nb z-6|lTCMnFjW~IM)X|m7w6sO|%MS}Aq4XD73$GeFHYtQ=1y((Z#AQsbuKh;8I;|F_NbecgJG6jPuS;O2F^8Uia5uh^aWKtAKHnR2*gj~ut%!fzTD75J@B$t)sbRKe~&*XHj|nVfibC^!9#QG=!A)^Jog z=Dn>4?S^9*L6wKu%iGEh=cO?l7R|3bP00sq z_5W?Bc|4uIszQG3&T>Ir^8!Ir^$M)i88r059k*rqUs%yXQd~XBIo%G4)R2 zmkc74eJ7}5B0*{F!_DF8qp|fdCM0~YImnpbuIrEBp?bfSsoe>mg%Q|reqLnIMQy|V zLVx6iwOim1G7B!c%riYdyy2Z)w^dG2u^&A52u->Fw*w7rrEW+1Hhv(B%$QIjYndPU z*#e>%WWNalxERuBKG2EOvgb(I4gKHtjZU) zQcO*A7;*3I{bZGgZ$o;Ifs;IXNP20F3al$3vhKshSZ#fU*B=x@7Yb)<_&Wc0Ro#MJ zG$~LGxya`8pizJ?MGI8A_!F9n*g~Px&?(owCaTfh^@I1aU*{i^hG_E`y;h>h95bVR zxMh0e*(1*9m{XndB|^Du9^dW9?O}1S?HuF&V+Pq7@iJ}jq|7kD{bLj}QGSEpCIKru z+#l3HI;`yUh2JRve&_d<-wm@FJr_cB6z$>ArprqsH)PVL5_2D&>TEgw)+kNg%F_7@ zr9U>ub9wT_W644$3@*`8ahhXcEriF8B#nU{c{W=Sq;0AQdH6?>(J%s#JVc}8_JqxT zPKV7xd)%3JGJ6B*yMq*G$?ZzR~hZ zcPiQ6s_}i2lBZo`ij#TIUde8KA?UEtMDc*z_ij(~R@v-te11;y_x}D64Gi?ur#(#4 z!-;*-ukLO~qI~Xdh4Ds_pKasHA`gujt;(H|xUT>Xj)^X@8?~@cwf`SVIX}Ly+Fzt? z%)ZLAutip<#%@%5peaO=$m9=0pz0RA)aoMp&YhED#vE^+FFWha*8Qw0$R4)t_xIzC zQ3%}#$PQ(TJI$Oc5|MH75>_UbRTAI4-#_K3dI^#3;`2JsXY5dPGwb6*h5*ucfa6X4 z!gAu==WC3qd~Rm-_h!Y*NJv{=j68weptrXkj{R+vuGt+ z!umERSG=iE{~=`YWNe+=gCbSyzF30&!3>TKea;GYqIYfmGttLuK&S z@_Dbc4yOVa30n>RyTVgw6v!5XlRQ)=a)T~=ZLhmp-~UDGZ3y#~)=kd~1zu~5fsX#I zy=yiuaz6GC*wWCmsy;3MR!Uui-!R?M?kk$( zSndHf&Q%jWfYEz#;qkrFsRNS{e*~nMpDp1EY9z`UJt1D&$99Ro#J(Z2=#p~i!f$Od z?i&I3_cgxl(?w1i#bpQzt|?&4^n^t3m$F{WV40J-sb{M*-Wc2{`Rqp#sdrSip>LrX9`UW-Z$H;<_ZUfLWrGGb;TBT1JwA17}TCUejJ*vG`iS)N(&x- zhDNE9Rs+7o?U}fcqPew>QSV-j5QKYh(rOFWtuwe1=+RhILrTL>B{nr>r9InpDgrA& zAssK`GN;{pN3|r(JJ1}ED^AbY;9$jW831s2E!ec+Rtr=f_}0!^FGut@{j&3|MLF|4{)N*#HV=NbPc+k+5i2GFUmBJPKq%ge`x7^285#~A!7Ny?y(uB+<)9FqU?%F3hVqoaZ2G5jAX<&6 zWGK|t3I~5JdH4IC>@!l*jXPzMcasqt$^Xn8j??e&k3K|>{6_MT&t{zre$6W-gR0g^ zz7X!kfJc?Hal-j8oVb+szfu3N`|98F-}?lKPfKpY{i78}8A_l};EdOxhWpw^PY&4y z1}R$WB%y&ItlG;kD~C{Tu9a?&vZJMCZRb_8M{U7vT(RcNdV||q)9PJ<-tsFwcMFZ) zu`>c*T)nEqn=}(<9e^xeQ7md%*$Kc#L||i{gj4Ow!s_E$wcH}FTzMHE4>HL>X3=5G zf}kKM14wzzO1QIVPrDMBggDho?CpL=dVeUwG|Vgf@}t>2J7Ls;))NQy^C6RG4!kE0 zEqr?q(wi5a$@sVhoa}+3(9KO<4a}W(7jwgDVIUbhzoZb%Q(J-RWKKdmdN~4x)Nqfod+6X=;0v7lV&8*Hi1Qj?p=XfnC8wOMsAAdJ?2Hi5kOaz$$&5C!yi}9 zW~%0D8aL{4NdGi~63`)Qy7ay2W{78!<)i?Wy=JvQ$!};PWEzr#{92nd1#QALO(mjL zRgCIR7a1`5DSP^V0+KgVK!#Z35PUh~wY$7##rjN_=IT$TrW9!eaxgU6c>>^e&^Vin zSXa84+1pC?s;@-=?`$o4+l@GYDNLRs-(vSL)97t-9yO{9Kf~4B$Q(s?A4UG~?EgkE zv71ipV8Vk6LT)^b-dcxlTXw@}Xn`&g=r;LRVpLD9vWB}@Z3^1 z$`3BkJzK{;)Sv{&a#DrQ(Ap@_N|jcMy%8-^m5oJpx6<~-ge=>-V4OTue$yo6k92>JTilX`Pt8opsGXIz5S{Rk;j%lGwh9%vsoC&cqBz%p-;DY= zv;i>Ke!9HbN6>AYpx_#AlZZvKN{yRS;lCo~ZK)@eM&C0ZW)XreY`3;#YKI>lzb?}q zO$XHAupQAG4qBluN|`Q#@5aWkL^8%I-E{%W>|~#e|4d$Dz=#b{-;u zU8byqJ-E(uzVLIx=%lJl^kdx_5HN$`mgDSzG0D@=b=A49dWsg<+Ex7fnhRTy+--!# z6UZtUs*)Y+iEr|yf`yx7s1E;D(5k%PB=xl)H5lm)q=zAMem$};hEb-^m)^bhCr%}o z#u6FrSEdTcN)G{yNSwD@k{m6SHOzYiPl( zBmDDaD{Z~YI6DdqaM{<{Y#CxdZVLa5o2j#363_}rK;DgQ1UR`2c97DKB`Uuu#`FiV zD{r6jZ^yANwO>QU_&7qK7l4&V_`5{XA?d!iI=t&R6En&4qpr2YbE;VR)|4?qsrHGz zd?O*;N{0e#S0(i-jQ=J%^P9?CdO5iU_6SQxr%TuQF5y~ZTnP$ll}q_EIEqJSlz@ht zk||rTj8cJ>{;;o6JMa{BD#>L7#WK8hn9gRj8c_UvXAyUOmBX2nPxt$k$Lo}HeaJ>S zn(&&bF!6xKbEUj1(_Ozi94S3t?3!fH9EXKFaISGE^M%`wgoSA6RDR|OEl4Vk@kzfq zRN{rSZ!~3241N)+8dEkH$r1iWz13BX5BV$e7s_}P332ED={u|hisflFrqvx^$Ilk` zCIhx}0tfKSP`1;MZ!MP^?K^s@QbQM^a~)XMAogR;&reY<3i(&Go1Jq$1ztCW+^(U?&3aTEL(Ooeo-W>@IZnhxrNrVJzA=p!`7ZBy6miQ zmz_qIt{_@6fvu2G4&(;_LS~jaj)%Klo==LXzB4dNQSM{rRHs?k#oH%J2Z-bg@Mac2 zhWwUrZAJmMnEx(3_kAG98wPo1$6FQcGDIe{vc>4@f5h5*4d?{`Ki>_7t11XnQ){>1 z;Z@FREnc6ASGVaQsOZOiXF>uboR3pTEk0cZzkR!+8ZTD+Jph@;*Dt9Ke=|r&AGU{zPUWQ)f)Q{nZ!;&%;($8BcbvF~)ef9E6KfqRcvr%SHHTX~Y z;TiLy4(T}vEsHoshtoasS$wTX1vAlPHzkK|dQcvtu>jP!!G%3qOA7|3GN)XR-H*&r zSXeEUPOY`ikcJmH&YmmqDo>&XQe9+&5UCt0OQaB<)6ZB*o&DNH4+N8Hm#qoq=`Lk< zEpA1-egw%%jZ)_6fv8VSP^bBX7f8Q~_N=QtY29A9884Oy@qXib^W@lmkHN7#SqMQN zK2|8p^Y5WC$W9Uu6BV_RHJGBke$SJNr4dB>6$p-qKq>aB z3JXlv-i}!);zX~u-F9^^pJd$E~ydhIXpvK7m`AM^)C>g)0y0(>S2+ ztAV?hDvA)Pb->CP?_SnZdA2Tg7rm%y1p!8@RQ|T&aq7!jw#8vEEnHwvjiy`#^`8nA z-A36-ELqC$+Z;sR8PE)2`sPLFg}Tc^Z!MR__H6)v0^>@VYzuvfWY~G`{7!+_7~bD| zNuz>Q_>FxGKoP6>q&`EdocRNEjsTbe;r@|RS-+++AUyBsMQ0IOj85BQC(xBB1yDk# z6*M-bi3_yJwq9yO7kzazd_2unnUmCW2Nf+f^>}+O?|ORbf;MXmu;T&uK!wD?d+wGZ zC@$K8;UH|E9DXSMvdH$uH_*Zg(AXGxmh0Z5Rqm0d_%6!`Xa9;p34~A8vr=@rhRo+K z^sTq4Lg^vKroRNz8WlW7Yu|75z;+0IA*60$OwdK80(xec^C$sv>JzXOtIw%B$c9hT z?A6f|A4Rax#3G+84s6nJP_C=DnT~^BMS|@lGV0NmA7PojV|lo#1v6-^LqE_TRD}@{ z)Fc;ZT=5$ge6_syTg)2uV|z?}TbKvAEQiOjzRjkEZCgSwzp(Bp>hX6gYUDu57?u0& z&q(}%b!;mG!zyoxg078cr@j0M*VHLTC)l?=1NG&i*%hV6>AgSvA_fSInMvWUTdSQ5^pE1My#ep#94a7_Pn9 zTb^tt1FKybm@iVWt`9)sT>3JboKe68K)dqS55khZJQL)vA7l%nk8uxbK>xWMOx?Aj z|D5%{YMi^Z|2+que)*pAr?$Zy$iT0^HpGMRN+ zUTd}W9gAaaQ!zMQ#3lH>c)v7*@?RK#1|GN=VNU0XMdm=>E$6k_Ug=9_kJtNjaF*=% zn){{y*Z1y$DQGg;Ih{W>maQJ_KfAV`WY+JcGI!n7`)mtl`z3TsCMy0OM21?NcsE`D z;!$wYOmyFFg0Wx3%YSex-ZY35t(BayN&2>cp8W5Rl_1Bdm=t&Z*1cER!=595zXu^# z@TgsnF3H8*P5oEBS9cp-|9-JTV$dZ&6(Rd9tAdq7B6@DD-1@&o>b-4<;S=KAKwh~< zAY(njvynB-Ek*|u3UuNY7`JtY3OoS&(Zsx<`55%O;ijFK#$DC*N_Gjtc~x_NkWlg0 ztSk1{XF%bSiukuF!H%HK$>-N<&Wr@Nde8Qxl5-)+WeLzA750E~`N1P6Ntr^f6HUF0 zG2aRD#hf$K59)zgdIQR*ls4^lMX_;b)xcgWT0rBjpKTk9wK1`T2wwZtO$NP--@(Z) zzMU(zum|SU%Yp4sCJ;=i2hv3&Rxa;PE>@K|PY>$^K5q6Fo2@?u14GLswNHFX9yEjn zr3&f3x65Lo!Vu9C%q>&uhD`;JtWoOugq~C|3aTDREved0*IN=CXqd(K>MSiB{A<0O zI$JLJwSUWF^ZwTTYGAuu=sfr+2E|UTNHF^78GhVvI#TJ_Q7*8KILTM6-Hk@+*sY1Z zU1D&zh|3+xiN|Y@(wWJld^%AV+7}y`i?rhMp7W%e4eFa8ehWbrWIla?qz=PC;@y3V zTh*2c26LzR!zt~@L`mTIqX3>?qO3C1CLR^;h{(HT@Zad!)8s9myKcUi84x0 z0-q;d1{m|w$#)fo4hoCfKI+pxNa;#o&&!fQZ@|q$vXs8^+Bt2GRbQ~JJa5zCzjWON z%y5(Ya}18)vb2}HCr}%7uFyyDRpMgx^vUuZ<>_HhKE7T?W`U|%0_Q;CR1R?>a7m+X z{=m{&Um)|Z_4$P?Ykbu1l=|{dlTOthnbDcAaCcIs zRhWaTPi|~AyF1~-g~DmFCr=}X+l*&TdIAM+EERo}tn(me9?ApV$BT7f_>~zmr)aLk8-IJhL^W~`zB} z^9jaGnz5dkzFX}~y!CcCwU)cckxHK6s6ehP6>73$IzA*n|`SyFxMS# zs(3wGfTa-j>gA{2bgj~Hh|*Xr3;ft00s)^he(lZI))UGS(4KwyLBT`a)W4M=@>s&M z^v#}U{REhZ9Zf!A*v6PI!U&KW;@LpfeR31bf|qNDbDte%ONeCv2^p_E{u~8*i(9k8 zN>~fVeH^%ts=!9*ExQE>wunT#_4zCUhnn5!B47%%BzN>&BYT395x=vCi0ee4Ix~@?|B;*v`(jyfoZ2a2DB4g(ZC6N+Ouzg9%OS{xIK$yhIt`bP z&I}fq;`|suBHMU{Y${7qaT}Z+3fx=tZ4@tF10w42!Cqj|QJ?^>I%(5yqR8>u7ZstB zfZzC84o5~{Z0m3dHuvYMp}u3tgELeSKdS;dMNLrvc_jqWU(co@;Btf>ZmK_Eq#Urg zu6Qk@fz|)E0K)p!?Vi85569cDC&~tT+lC9!6(XDtade(EFnXb<->&eo)C(kolaM># z3#&gZKPrZ`x6FJg;K}2`ln&l9kXCU#hiD6Wwr?V%zFr3k5-C>rv5R?*aS$lM#-|0F zk?boL!s!}&J8OEBDmn`ES#i3qs6n_>*8DVpzf7uQSIx)zQ%S<&qc|t?^V-qk712M@ zK)lB+gy^J(A$K-cnj##NY_YVLH9uCWOfo%3D%!c{{>y%Xi8DUN+|+mtuur)+>dF0Us@@(_WQGAe`BGPgY;#9C!G8Hkq9O zp~#~5sLZDHlOsh`-gT-eDo#!V#!2fwXFdb01X9Jmb2$m|BB`!>^l^Wcq2$Dc=jC#9 zYkTVhw?c>-)U1{igEZznDor@SMpm9Iw*D#ElY5w|555p~rO*^h>v9XY;dWMd<{9<# z=@-Dd`5(zy*w57|ZTavfn6HP2uV3c}W=I z)&twrgTvw&yvgOYegkO$U-H*)SC0c;D;52_J+3mU-=c+5oi1nfcJ3n@2+*q9>HpF1$wpsnXG+{UpEY zo$7*JP@Iii{O8wj;5ujrZn5ZKS#auG-Ymb>s_M6VZzc%x@JWI%d|u@73)G`*r!DNd za(ijlOCcR_GXmQ;RGg=?8lwJn(I0?Y1$a6>E4O}j`?}g`@&@Lc;{iKPz#94QIsWBQ zJ8*pibz*0DdIfIs2Yciym<8aB%7T>t@iExC^xnI-j-+t_hPzbfH2+V3w5_#X%K12= zPb!tWy+Fb?bGL(jTYoUCtW&C7+QMXXl@1yO51FesME(5RoKl{i>Q?4K*V#88w$8pv z?bYV7y$==84~0+S7G&0nqdC2${1=-6S}`$HucufMjd$WAigrjh8~v&NEdQb0M#hLc z8T3w=1|)|2itcil%6}xV*B{P`xVvtF-9Cna0T^@vgJnD2G(%>uLWF|ts3mZ4 zT*+w~fdS#W{PFbv`iNj_*p9}%!_@-9KJ$aXo`SrtwZ{ZEB5_b%6fs+Cvm4O8)lTWa z;9!ubw}b0|{>?#+4F$;?DQth8d9FcIV#Pid))`MHYOx3YkIMd-oOo62>yDoiMn9#F z=->+Mo?|8+4M4!EPMQgN%gnx-)qEQ5f(M?Eh0g1cz$XdLsbM*asJZ@}5Y~HISkgPM zb9EEVJ+R(2WBkA2YVrr<=JI3{M` z*t>ms|3O_8^LOar)_}ToRwoJPG{T8*DKcsu0hfZ<3l16GaTR(e{^{}hxaMDhc@M|_ za2G=Aj>slEMJ9&2lOp5*-&{(l0p~6-*c#kpwC4%j@3QX4!`N#nWaf+OHhn|1O0+32H06AnOe-Jk>{wzHFagUgV@7MuQLuQ|; z8BIVTcN;-hsjK7ZvHd+4vv&md8-&Q-6&>D3gpHD_@iOhh3>Luaa7mLw@LR{R1F25~^>_^njn-=$Ao4c^@essZB~ByQd}$R@`(uscsI z+|(WY+W^b_U+leiR8wj9HjKjvKSzWal_Cg?V?m@#lkUijjuab8q$DUv(NIJngc{Tl z6a;JtQf+_;B+^>|6+)B}lomoa2p9;2&};biu{`p;&+~q3ecxa2yVkH~tzm|olXLES z-@9CU?`ylv6d#}7H4Bsv;%ye)3Qx9BUta>k3wMrzLmmhmI0WnpxS6iHWfq$hx*L|%b2=z4q2*(TEc_8&=U|6!708H9}7$NZ<3|h6a-A zPDX!l7J*C#*sZq2^uIYDSy1C zPTS{j#-KrW6S8;d2@7YfcAD*0bCKZuy`jORz?;={fB~>niN@`Za16?Syzzp43We6( zJ5Mp3aEDXPK+10q*oX3#fdWFiK70Gy2loo!4?r zh+C$uPLVVxPZ!gGh^Hf>pqm$M#B0~HjL+GllIg`nY8LKI5~JbN&l(0I975E*P)8C_ zpk4OQJoMw9byJ_y$*oO@oGi~oMS=r)3P*D}sGOwo*lQHYTQ_V@^QyYv`ndmenro+Z zye=43mFEh6<*oIX!Mg&Qv+q9^_RtSi=-#b+aT8j5IkVj=z+Of!E&{Yc5D*vfFQ(6y zLWNu|LapM?4kK^U`a``!(K_GdOyyLGd&$84o?LrM_+@&mqSYN~ef&Fj;{J8paAJ~5 zCYWQn_wGD=P2G2231|~e^gpOo(5l*K2(j|p-Y1Gyf8MwRF?M7(I|N=He+DP76o341 zr{xK22KPOHGg@UjvkMa7J#elHCA1!WYXTTxkV=O9Qke`&f>-%j1iBBpLaBg!t<#*T zl}44r7w<>+=<7dpl|&4tZYd!gnqPn7Hf~DkbKJBQ?67OZy{0Fm*VCWNUd}xOv3>^v zZE%s_$PUNpLGQ*IMIU+{x&)$I{GJZ^Wex2br_zVtZQtgGek;E750+Zwe7{gkmQ)1~Jn{$G z^T>&fMc9m1ijOti#D99X&F05%d&kG8x-;#!SJ)G~ zuiW9!KWY;C?(wpI;M@zP`)ok=5q~3B$)<4Xj_Q<*|5TjQ;1-k(*Y!6o$91xgwjYW* z2S#tW!6|LW&ket|ZQj|r`xiIBtI8c7E_>*%aqf5)JnWgID+36cKj-~*lZ&hzL3#BC~0qM-Q2oW1D+!UG$p-)&K2v^qNSiMd|>M zCZRs1^Fj$-+T#D}N&wcLAM$tf*oiBac-MT}py^hI#ZiM8 zWFtBYu&5c>3}@KD{{0A7V+5mY*RB6RZMMBy@3Ll{YlLs5J*n{Ne|8SJ93(*nvvwH( zLI@V)1np$BrsfvV^vH|MlzsjRy{3J|4ykykTfpJ{~EaU9lTV)Rjx8 zF-{FlqDRz~(s=>&4BeRLR++&gl{*jL*#ZA#q-`1h{L7dBJbdSAywgk5fBQcd;@7Br z`zvzE;pgWC$e(}t_OX9%@_+i8NFF3jiBi^+W<+g#m!caw7s5BFc&N0M=a-*eevPHn z4%sQ(H=4EP?%>ng*<;#opxI;7Z=ltK?KjZw3FtT2*AwwoUXcBd-@RpA^08ZIgne_= z$`DI@V%v{=HHXM@)BrE?p;fZeQnzLN!h2JaD5WO0NL(SgG3+P4XR&xv)GQm%x&K{) zGU$8zrlTplRCA>2EtEn9`929BHCS1oVYFtxNf>OKhx@Axq`b}X+g2Sa4UI9x7fmEfKz(%L3SP9_wPPM?3V{>Z?2B zkMUzV7Z<_{R0i#q_*K=ao%aWd{q_A3T9nM=){szzodxSd=)RNTjX$nB7Nw8Ysr5}m zUjk)9%x(g%rZ^u6)LM1*$yxv4m)Oa|QHJ;;-_K0-1K)4_RF|Ij{i_H0_ge*8Ry&7& zf3w3rS#pA845J5?6==A!QI^m8M&r#n_O0)q$Z((T3PIV~+2z#G(0oD`?2n=;+rEFp zj@FE1sqv0{w}6>c1HSz2hQ{A7J^b9lK(nu4TC@ty$4(rwQ~S7Tub&?^Q16>=!Ui#7 zr}$KD>wNL^nz0w|eZRW(NwUPazfXW2_hf_$Yt5M*mijB!{ds?W|L&(;;)o!*aCTZW z6Z57rQ7|OwmlP%LmhImcuL)|!`7sGaZjBZ91Vi5coTB#q>K&2JXoEgcy-Y<9?lpbB zo1w)^B=lm;;TfY3EvvS zkLfNAfQ}~>QBHaAS*JF26-VrvXVLAHk=9WhclC1xp>_INv&($D%V#J|-(Y_NH0BW3 zKEyEd4t@XF(;VW60C{1d)N7V_akfJ|_XCj*JNc&Vhhr*S#-^0tzkhT`q$66pZ<>j$ z^;q|7VayZGNS>t_wchqUCv>3E2^*TZX(;h8eL|(r{GA5M@4iM1&fn6F=B1%y8~^h@ z1&>Ts8YS3$nhU&XO5UEvfucbotxX6eN7K2TKe?pTHD$u}6(R1KNh&PfH#IguX;3I~ z!utO%Pjj*|1wfuL=j;l7?_zpijoj18%%#pm zVa3ml9JJ7@`lG7#hS!lDqxu8_uKzK+ph;mxxK;>1oi?ZV{fTy*&l-Ndh6D;BSEZxu zFp1MwFmh@#mnt@PdOENWm!Ge0reT}3Z|ILE+N5uFkis4;Z!Wxq(%)DSpFM&TAp2Vc zihUQtI~tZgts(Sb@d@N+Dx5w|H%c4ZQ&T!{cEWYp<-Bv8OR=se?Z(rjArFS|UGXfX z&r7$|lOA3og`u@g{lJeYmp6>~el!kCW|lg=1i9%h4?ukykR}T!<|qc(niKHctf*01 z3r+R?MIUD3rW-??B6v6AoZ0GkQyh+8LlUHk`EQHt1xAFMHTDoep@@ zT^Av%PbS8d^HN<$_cIL%IsIxfMg6mLb4t z&y7tq^Ltgwd?nV{`B(LPT_wtEZsK+WX|s{- zoEdk%R}ri4n^HP@gXtk_d#X#X+Dp4>4e7Ri+nhFv*Bwnb^Jn3%=>kDZ%cyzob|4%u z*PE0K?=1^7;?6OLL`Lz7>1@0k;o~5Mvgm&LwCz%R4ZFSczbt7-ZniiGke487g_n6q zAzDtrLd?T2b*_B9^UR7OZaQB5(j`IzIyEQr7EOcB*5uawYU#gpF~7ra ztZcIFB<`8%aw98RTOg*%>)Hol{Aj&H|yz2xQyna;R!%cvxssbkjYYUfqbdD!7NT?p?M=oc`vHlT<_ktW-_fQZIN?+lF+ zbN3G#|LD*xo2gH`>tvK9-COIHnXJG&W8yRZB*v(8hivJ2O|zB^FX5fix#dwpmjdTNm~lk~9=6k8Y-9JFBoO*gRB zFLnHAjA4b)&s5rn4`6 zZOa}OkG<{fnPn=Gv~ZCooJBzqQf6Z2rbatGevDezNz7!L!l2mft}4tgZY!k&`1$8d)#yp~$Op^vYcB+Q8ESmD4Vx5gQT)7gYPv%Yx zAEV+UdgYd-skJKiJu;S*)jrWh=863Bo)b>?wpf%^ahONMw+=J}0NyG80|#THed@R9nUL z@ceR-&+t6f`K3bnj*l#nfuVIG9v$~bgGKp`S*5tAur$@0?C z*pdE$$hSm;ex=})Dc`LMDdk@02Yl!2SkaDHdsO;FJi+HZKZUs_RM$TJ(G++2)9qph)S8or%lI+N7@dZ0y3hy@7eN=9T4Sj8MbU*nF#3 zlKvu#z13XJ`#$CZht^8sEVN_{c|2P~l29!3r+S^xYA4#Vezq3cnu_hXEsU2A_V78Q zAR2o_krZ7gcHhIp`6V`A7Q3XU*eeqoW7f#MeNOI0`DmgAmY*%|8SkeBA61q9c`z7{8rBz&_?MAiGL}t^| zhR#k1qlk}WuL$lAhEEE=@%66dO?29!d<2$h6 z#PdC3v9k)jVzE2 zhV@ccjkigkHVI4a(Ck`6l1lL}%r)%Fo1ySJ5AFS|ba~P|-o4@YiQc{@x#wlWl%3Me z=;?!#nw$MSU)JrEToqF|oC4dC?Wcwuvg#01zhh^~1?m@@*Qq@{#WOJU9NEN(Pb>at z>*vP)Vfv-|y!(Dn9r8r!1o0&QmM=<&j^BWn*7o`nNBp46P9BK#Le7ovO9kaqb6gwQ z#^B0FPmPa`N`gl0#@f9ZD+@f|@IeS4Ip|=}7qv4+6I@DLth?J z!SL=X*GV!0@!cN87CIyHGm_kO!nVZQ%X8q4c@?j6Ncs7gf9qx=kAjM%6{*Uj3wk(f zw(32@Pzl@fW2*NSJm{z}y#qpXPluM7=%bcx)i2CTcWJhKcBP11IF=eEZad;DvFXW` z;D<6#-11nqn!fb+Hh~{kmRkfPW^L&_qUGlo2vXuHb-h?(@H#s|zl~D;TbqWJ(JSnw z#fUI%H*8m7UCZ#T;d@jqCu;N{cJ~xB1QobzmB?s_`80&kYhp*#`U=#oM`t!MhgcoD zdc4a?z1>4bXf1%09)BO7ea~CpS?Go8^|cOjaEDl&HpChkwK?jMKQsv{ zjL@uK5Oc~-&pQ+H`wQL=H$8tcFZomXzCO|aVvZbb>=2)#B*3kr^XT=IbnJ*?XkHUl zb)%6@VacVQyUs@FlI0aL9*67AcocdATyk6_J%pa27u-AHMo@LMbm)^aIHadLy|h8I z&u2D1P~y_Wl>&xee8(353)G8(Wc%y#%LdM*mC=DiZ~}*09L(*u6V%*1XUK%Xs8ojM zSq(emN8$h#1f{Ah$E|XDGPWaY=|!4(9fC4^^GoS@K@#@98!dR{_JSQ)1fAJGquuJ; zmYk+v8Xr0P?Cj$siFxRL%|6kqUaS)0kx*6#te}dt1{hVrA*4%l2>EmMY>q zr2Qpp;nA4EwIdEcUpUX2b%m(OB6=F7@Vv}tx#yaC#L698fxXHDaWdjx&(z2~YQw)N zhcv|1=N2HYK2MrFQ|Weiz<0$r*06nsW*F9MQ_i*#O4L75`eXM}WM_Drnt-2TRg=zB1L+CVGMpmzH2eURFBwTm?bibbxNlA*`JBBDX z6=8h&)W5-sUn~;Iode;{SPz6dIrh6Vm&#=KIan3C|JrP6>AU$SXBr6;uB^NrRbdc% z&0g;Dlx>b_6E)4~eiEtm^U;ceqxI9FZae9;^`4CKDSh+G(-o=ss#FoNGPD8d(v4T| zZhSU6ld|2nl7_-}&I_MVdpK3eIUS!Z?fU7wD!c$hSGB40%b`_c8N3azMPx82t7cjV zN=|kpM?F*TW=xRhExLn51N|7hf*VJ@Ze6Lg))N=ql zucW{%-|X`SCnfEFRY2Qm#giUkq{hP=e_N$ZzyL{(L+n%L%N>RnAAJ!Eb<#kGD(~prh;3>|xS1D$PQy}-{x#e#v zTsXVB$yZUCAM)E<|rAe7p>=QNUJvX@+EvDQYi z#)si-l08a)>!s|OF86CSjnpatUH6viUz>P};U|2Q*Ra6}f{Su3P-&~6uN{%6(4YVe zmIHZ?0YxsFJ4BnLvxYxCTbz_m3@%|ZT+w1z8=Vm7TTPYYU#A!-a) zS!pzI8Hr>K5FTX1&8FVmvEXeKjuRPh=U;QwB=GlgtPPPFT8Q46$Knj`Lyiz zcxfB0_|Lv{!=gSGV&z76+m`m7nSo|Pn9o{rgLz{zddF_Zn8)L+-mgZa6+~_zWke3G{AqgV!>uQn6B?7QGH!;Ir zKkNR!K@T4pOHBzX@O)65xpI7o(>@A2vlSc>?dxkEpI0cFF&Z0>kSp43YRzufjN|(A zn1=4?Y1@87LWQd-cRbCF5uen0;bo>@CqQtglFRHisMc#p9-Pdn2|@V@61$1XvDxS8 zF6E)6j5N1G&MNI3>Glmh6Cdk-oZvft<;EHCdE9*_*y#$<@;Fgb`n!r)%!sMcD(Ly} zunSz(N~fa$UQ7+pesNX2#Rd_%BWG4V2!& z$_Bhr$C8QXOKHgt&FQqbIct&v>427u~~m`kv=97Q7}Vwg_}(a2eIev z0^3$0dm0#@X$aDv8jg5Hw6S-)UBt`U@=#QuOr7X;e+z`1beU!eE=auNx@Fuzn6z~{2lP@S1){Qb+HmbTvI#~cqlURiSl!zZ-O zP(jG|`|a-xTQ>^hH9HY--qDcnZ*vuoqefb*pYD`_5h#(_@NFu5&zX6vAmgW{+S@=7 zL8=uHVD^>B%j%6OYq<|r9ncfn8fW1nsG`}=@H<=ZjQ#b-kU7QGxdR&{^U+XPVXv(c za$`r&B#gRQ_3-Z410a1|&6PaJAsyW^^}{DCu8b^a`e50rXYB6y8&C-`y9EzM8%n>` zUX?FoY%_<&?QwsxYX4hC&F9vToH~8m^WDm%%lS%Alf$S1e&qDkpIMJ&jp{n>WM}*r zt_9-xLi}&c4&xi6X5CkT_>_~$0D0{>-AMtz;S)k*&< zrFa-D^u2AfrG=xIID7hE1u^@VmuSGvgZkH}j~NMkpH6(CHsoLJeEZF}e4kSMOrHOH zyP~G!%YSw0Jxp8uW%t(nt3xj&e((2Q(PI|>e97k(|7W?r3f}+K(skxaf+p5d&9U|# zvtGSXv0|oxBx<+N6dSG*%#ENxrJr45@B)kCH|o@VDvhGD|Tm&lyy(n>Xo?+c(qM%fopNCHXpG z6U3CPPujvPILcwUq?225?PnwVqhOvD^Pa^Kd1WB%XTn^qJxIZyG|Kn;c{_8(A6OB> zp{Bh=O{g{M@ZDXaP_|Y_Yp#XTzr216wU?q-tr{FGNf>k@%rgSCvKVQ}TBc^fyor4< z7ckE!du!nMD+(0y#w-(koL*vohG|`j(EDenXqCI8Y{NHQQi^6b#R&gi&=1XcZ)vA+ zK>K=*D&+L)%G${OBl|x5%`UXGKSXMeRKRW4g9gmp&ag|s?c!YNh2Ao5f-r_fvR)Yr z>+D#ps>x@@pfFZh=rS$6fAzzcn(NA{Z!PK#4!~9X9DB)(F1%BqkXSy`!5+GL!_*{r zwyd`yxQ943OH|;;tbEEyPu_FHV7i4Z!Z2}d#UZ7CL*Je>#QhG9B1DB6Ij(exZ8%V;ZSq4c0L*8z}0+?b(COjr5&^|F{o3sgpaomNzNt_*R#Biqo818U?C^!xB6w-S5|<&XQh2rO;~i7UyI1m@8ulO!mCVu+2v64DIr7`L_VNAN zF0{(6J}t)?ZW)$dT5^dO4>+1b665X>U3op!^`sK!-e}fBaf-KFGjs$bXNw$?@jF+j zH623=Ouc00AAmOh1n{SO@wP<=>O~ZLIEJ_ZhJL%*-d8giyuLkZccClePWHFz&JbNJ zt#WCOYD9B4EhugI5L>x4P#eF~^!_=ly&!4I*4!e^>}{J!;U-l5^wSYz+juo}f-a10 z+e3X?L~s3DW?Xmb-Cg7JT0kT5{O}*YpES-h!kNvdj?_Z&?y=8X?TK_h6^eab(~ul) zLhn)jX0BYpBSkymO2t| zPbYZ?6$1xZZb8Or^>z*#wF&nUOH0&Y$S!2sEng@k#uR%y__KX0CX-yHNeI~&_tTST zCnHWiw-iR5fBre+3j38kSEF5VJaELOS2AxKsW_#$vbfj1N8*{z;-zjMx?@plFmRVS ztE*=Vr0zPJoS3~X8#icO864ygm97|C+~niP@~diu))QCs9-00#mA+{6_BEsoi*zT# zC)}=Isy^$U{-!8asrxS~Jy(TwpY%y104)F@It8|F8FR$0w&V)WPw_vh()9ubtXXQkP!NQ z_I7*2Xct`I8wHx|tVKodoI#UM_d{6Vcz(=!apn3p z4QaoRx81twXPUeO_%Q~bkSXcBcTiwl*S6s!G``kHMPmcgMoNFTy{aMb2yj1dDHEY9 z>64;rO_O! zOiW6zCsmrkQQK;?@IHFakRBAT=V^Z3kWr+3e~+={z%~-xz;Wb|aiX^L*oE+3IkcT` z)s|b~NwrOW4=xL&TBEm-%f$h;}e$wGg+jX|iB(QEGg6Z%(((LRe4!c?*CC5w(F^f~K~F>=A)4 zPkD`7dXkCn_K;2`^lp#Z_ZZPy@i*vGy}Z$0F__?ahTAh+QFO_y9R{~VoXWIx9CBXz zJY~FB&8J?CdXg9AX;tlQuFz1otHx2Xj>-W>Eo00G{#W2g$WFupH-ap;zajsb!Lzs>dSNpP97e$*qCv#8euNAwy%ltyt zGBiXdWN#r(@vg2R$!s<@V#)gNyDDHb|MqBZ{|5Z=L)(`Z5f&zj;Ue2YXXf)!jPj4b z>c_5xs*z)eTWYC>GdZ<7_EHVr=6d!K4HJGxfOf_8s}Xzomr&tdx{Ht<(qna1*w?2Y zaGi#d*drV8niSh3^}pS$5v^`o6oF*-v85-bEAQ0Q;)qgjppodVbY)&AH8S?LFyDJ= z+#sh6Sg)Dp9{v_9IUa%iQj03xhkPX>Kc7rXnrD|M)e##y0lg_=(4~nQ(9d&jq_utZ z(r>mL)AOU;vh+98V-{B~mQ~i#bgZi!`m=Rrn*ed!AM4TuLrw|{Etq@US<8aRp}AwK z{Fe7_y_n(~I5bc19(lf1Dz-qXPJG0rk~A3)0WDdz_C2JW$7a|9W-IS4Nfq)nNt5ieUW06 zJLs0>!S$6mzubUB^T>cOt`fAM+w&}-*R&d#nd_`RWuUV^m$?3WNPa-Tu}Da7|6Rd=dU2H9I}5Uwxs?DM#m-oPjg0~Np*HR% zsm0KYB?SY}+n7LH@U|_g+9k<|Con*NJuy(HP(&p5%}c&DEkRPUsxfCwe!WsQ^86Dyp*Y%KF@I zO618lT#KX&HG9r4&^JY<*(6KqlYaRNFO-E>C?y0HG+hl~&yKsi_mJ)U$@4+ZgqoV? z1LFAsDA}(cBPE$eem2aWRo!dTH{o!6E~>Cln zTve@~!}#;=MK@q6PlsBq53;;R+(~3Q9Acygn*Pr4AS`x9n$l8-w*DnlRUP#w%kKa? zbhF-T&9G~Rvn7qwy<*0itddYH2#DJLQ-(a~(Z(XzEJDMq2|>!?U)c4P|mXF8BKq$HKGlsx=Q9p*@ZM2SA#k*vIM#PBf|evU1< zIeP`SVkD%8&4;v|ZtcKi{-mx;2N({ZIxRy*MH2|DZzkjY#$J9AjYLsYuH>*@XR$$B zDpf12%>V2VF>O#NVhw3w_y$xavHL_}mnzuB?FRDbSY7CMRG=a*G$Y<}7gHExyuq5% zn-LgL<`DvV_~?q7+Q&`&JE}^0Zwccm%C6ja2^Up4QN4|+LuQnpPm?iC4mN(hi#;f$ zMU!#}i~=vE_3TRpT+$v{qw`HqUCkL;R`5FIBWOmy)L%mOlqf9APoU|>WI8{Fn}{4! zBH-d^&t!?vMd&q7?CvoUnxTv+Eu#;1g6?|^nQbV@qxI{j>PV2ZAmFCNWA@eziPs9Ulii$P zZ5#EL`Ywc_%)Tycjb;M!?ttI z5fXkj_8GOc%&{0cDoC!qYL;V)S}I2<6l#uO2P#okwuM|bj{ut$0tZa;GL_P+CeYC2 z&@-7l>%DX*@(Cb|h*qvGL0Uy!%@w#6)`nxDQtofszSVoYY=3yu=DYSqRM*ECf&8@&S`MxgEcy+}mI(?#0F4z8ICt9k}F_Y8M>G(3!v;cDJA8#3lXA(=FZwpnj zr^dDKQWj7|SXF9L$CF3Me|JFNXnT7}df+0=80jYHP=Pc_TflIv za)oDKb8`y?Az5o@DPT4?^lsY6jxo!$P`!OpZCKq?c#@iRA zO?0FzeUxLw<2c%oFpz#AAc@%%kNDAzN3?Su& zeW_{denJAi$9^ue#2seTxt6TQ>{0eufC1U%E5+>%*{xAlNrnVns8sP|#al8rW)Jjt zFfJ?0mQL6ebn(X*=5+Jm}$Em1guZ2R23 zIOYZ74TmO8BrwZJ^Z+`5ukWh+;qOhkn%RjyZB{Y;K%A58YVN<~?W52$@%D4+fwpo2 zWQb>M>l1a;&hR}&Nkf}F4mTQ2&J|CFO+>RNG6#tXc&f&!}}wZa&5 zZ3vxqSTLls?s8Ls>#NN(!RVs3l^+X!uv zl{^P~=iI58_Zl7im~G`#19x_s=4x&;)Q1@-y?&+N>_!&l79G4q^S_hI;^AmJCwd;l z+3a!J(Zq;VZ4qS$gHv~o`Zp2=Vmogq%SntsFR_euxq0~>^db5j%ei~pOtwar1H<$h zXullMWj$ryG8TRt%mZbfsTL!lw~oTs0HdaplZ-@TXG|N_Th<3EKIPxvuhthM{J|E- zaAd?w+}T6g;wqkw8}kL7$Z|iCvwWu12`IKkD-D#_$MqQADuvS>Wy%%U*FrQ!ROX5r zVvuo*$9iT8i>75)K8O(Zm6bOS$s%h=xECEE@)W`c!ZeD|N-$$zjOj6q*H!EDsoJ1@ zlBV-+v#-BS^JQGuSK2ZOEMls(T28f%3CNZ|)Tx>P2C)h?)7w259B@ZE<*95NG;Au! zDE_%WaD=%P>5(96vmZp7+ z1V(|eEHS>2JuzmRvdnhQ>vVXS=@(%8oBIoNVn<2u5hw~q%vTZB-JCVbpV17Conk9Z z(30$VUxguVY`}_t#0IsvOs$-6@Q`Vq1XsOk6DJZzW!bFg*lcK^R5niZW+xa*d~vu# zdfI5h7|(z#)9BGZ2XyWuZWjf*PoY%ss6O`(t;LN3oln!{E3k$z#6HiV-?^&%2aJEz znU|S^I6&n9go^36A0n+?FLrL^fRI-b_(U<&2y6xMo&ece#99;WNfC`H0Q4@ai+4>W z@X<;k;yy6ARpq@9;iU2(PMNQF&h-*Hrzk)cSo|DF#T3XcybB8@_qYj7+>6!$YP>v6 zB@C0rME!!H3y`kb*A(1U&q=Q{U3I{03;w3&aPYTqd@C=CubpF^oWBP1RZedESy!v`^tRFTcAktx!2>fBm9N@0m4awr!=4)JKyCdN8am^K z>c<#bt_DT4(0VjW^y*1gN7`JlVRAomg!ThHk8&3<%QJ#D>@d(m&KF)Sm5>jWJ5Ali z2-*p53j#FZ2%}35M^v~H*2~5c*eYp0Nknhf+CR)F(ZaDW@brVz2OImFE*cwnjCOgX z3y=@YZ;T|&#}XcN8{X1|>gFS61Jj(qA-#ytj!HbUM2TcH{*oVdVZK_<@I7G(0KS@< zTV1DT)aSy(S{hai@y%|W;}3YEd9n0|Q5ihNd!UK53GsM82$nc5An%mbNWsEI){3`Tq|;%+ZvSEi1xXp{x1!hi=oea&bB zxaqOktf~18_{jQb!cu>2$xuTAeQq9TCXF5seKp|^H!<}-049QHwHl$rSrIEzD@nw4 z<>b3`pjgZEyMOW3TJdw(1pA*Av=;x0W>_J35za3ADRnKNIA;LD6a5@V-=o|zUI+^Y za5mS6|Atb3Q-7Fbn?J;zdA;grb(w>E`C5p`PBIs=bBs}5%K(p`f=D6l602s5y3;vo z>K6?Wv7MF=2#Z3v+4iy$u_YkTRiqq&|Q z`C2LL8xlcW>N*q4h|qou9&J>UCch4ZfP1JtKp(`2Ka$cLLVrUEu$%14(X$p(zt2(O z8S$~yzPt~g!=vt`vJ;zpU$-6f_Jc<}a6?=^CPVA9B@*FcIt^DbriDRsPb&Ts`V`!`Nld*2t{O2!Gd_%T34^ait^ zE3y}@9S07Kf!-mK5Z*jlzr?fT?S~7RNgcF@rxaMKN9Q6c=OV!HA_qeRuVh>NLXB*J zS$ummI5$qs;h>|cJg&ABAe#sTwGF86haSeVa}*+Kpx>cb4J~dTn;kUUU6iY(oWr<) zt%V$#Mkk8}Nb0AD{1=n-VFQvjHKOJXn6PU(o2QS#)MW)?q+0?z;^)UoxtD+I~%V+eZ^wrWtY-K&obF_f&1kkfCpT-Fw zd~?E$!HKsqJvqX^w}#+NOi1>}Q(qF494g_OapY7k8ZAnv$HS^U+a`WE-fRL~8}$Y^Tkk z0OWo4ftgTHdECBkH(EWeJzF7Y+mRGQ0~`7VI19HW8`h9s^ad}Uib4YbTj=!bXcy-+ z9A;oy&1nbLvOU!N37}@J%n?01?~DZfEQa?`R=cMnnm+aM?okAdt(EEBFKjUN&VHaa zhVdB^fwDFot|S9ec?z>$VCv6}d_4xbjxUnR>;;L?=n}mpYG2P0%;*iyEfJlMw_J(4 zw0sWJo08Y*^@(uLk?a5pI*6qs)^TcUz9mD^D5t~(g6Sh zm_pWuZ(tYDF)BcGc4KZX-D#U>$N)xph^ zy4ig`-10!%(G2}_tvBGzA<(umU7|89v(f++xY*fCgWC@yh%C+M7bG<}N4;O6dcf9Q zZI^!kOkAlDuvDuY0Uk3~x4Bm$!MBp64%pgr*W1k<$nos2VHcisRhheAL{23XW5Lm% zsrg3XYJ8p3h76vpxphhi?c-mZ$$BLy%a)x8U!0X*8DT#6Pfzy0&>02n&aPtVtiLxM zdGq!AKRW~}Q6H|0GY}|Z@-_Ggi(v)A`}#uc2kRezCYAVY>0OxNNk;idZXJ&>Gq#Kx z9`2Evn>>^#Yj#sDO|HhJxuw11phbeDO=d=ePHS4BoJ{ur?75VYiqCjx`KNWZ_>1s? zXI*4dg`a-IKbiT}zwfWLzdzgm`!oFSIivIZ6^)Y*hJ@y6*6MlA9unvP4qeZ0VC!sF z!C;y5VA=V-oUG|HTHo^EZ~iQ~0DyXmbxEeYmPmMT$R+wKKcKeG1OR8x$iUygr{~;% zDB-vrpvzBEWuq{E@J}LRJln4Ryf)katO62`w*og=bNer2K&kay2H$si_{w_aH#L8H zzLO<<-NQ5a*PGu%cC9okMIAEPu56blebbeXN43ws{+n&w^!9VY`B%}MB*+x~rf|_m z-IH03&=}UYeajk4yk+94`A;^@aC%cBrOh{!FEFcKoO^rc;G{==oEjr+05a0{UcF)eE*yaC}a6Yf$;sK zY5Dm6Kii9&m%y}U4>lyAx`9}@6~QOaP(9cROu8q{lXMH>A?DJA{NgYGy+lLEkh!{R zlgekTHGRjrY9x`I!8B)u$7y|f`0jILn4~{s*E1nYvpZoEuq-nq5R+e%7#A?vpp8P3 zF*RClJ>-&jfLb-(I`S_7OM9drWCV#wUVRv1OA-&Nx-4Z0OP*RJ@9*|b)dZ%CWXD4| z|3s)YLd~J(WL>OEW83*5WFXsM`s0_Pl&rzT@_<=O1gq5|D$5X{ltiSSQRHE#88E|k zwbcWv=uDZQsrPJa)3m-;3eXuo2lx6UkoPvqe4BC+@cw8RGu zEGM`$(hr64bDTM?m-7V0t`XG>hak?VPDb{Pv53Jvv{%Mv@Hvzb!ODcc||?` zncOZ`@vRE6RLSYJB-o}?;0nI&d5P%;IG+*!?d4Uswgjjm#H2I$W+YqDV-~0Ge59@z z7!J2fZAu>)?X5JjnMA;k8m;WpIloEC1_M*FvqORmR9?CUS}eJ<=Df`^4hFqK+&o5t zc;_p~jXiw786lA@00P=!gnW@I@>jeK4_apyRk$6XQQ3dK?kItNa-hDhQ7LBv2iyQ4Ma&~}%MDOf0 zB<|`j8?6>CPxcPH{$xvYPKH&UQ^B|IK|=u@e2-G4w{16I7AMUiKu?&3${!~OdHN!! zvUl!DbIW-fqlenEf#bi|859K0Pq+$wS=;?aly$CpzGL;lJx95LRm&fXoMuxyxi`&| zqRyL9Be$sUlF9>6(bX1!Lf);&$W60Np5{3tC|yH+0O}d-CvUQF-KmlVYe~QeYY^~+ zgdiifdY;}6y0hRiJ8DH;S{_g#WbjxiJXQ#TUN9sMrnTSTK){dzlV9wR>ILo!0g59T z`vl}L)CGgqy0)aR8y{xkT0c3NvO+Fpr6m{^+(CJZFz1$Q#aiDP5)pk!X)t!!he%xjp=yH$G9Gq?X zLnz0>Tvs~^XGYy1&iw$RLf9ep)VzJ#n!J78P{P*=(T43ZBzi4|GOS{)&kQ7jj27+Ow4-M}^tMA4~?pJrF)%Se*EY$S35NX_Ph*md5E=l}7 z{yth@JMS;b?J!p9PK$9#X=Fkn8Y*NM&V>mGz-|p8M4?#szufb+Pd(S_4HWG& z*&hoWs8Ly6t()n0qg1-j{B$D6!m1;db@JW?-vgLt00iPAWp8?yV@P(duyN;6?>c}w zUW<6Q{nef%qqr-l4+|GUK?9WC9DKDMU3T&(%=TVjgU|e2x$ImZjubT)KslPLxvs^x z(86$i&X%L;xu=!_f#aBwc=eZ&Km8Pgh~p7T50+Fp0qPWNps*&tP z)3K5t1T?Fz4N-t^#HfnNP_d-M;UbmnP(nuHMpFULk#v}0Gc2;9kQ%WfK1elJ3hP5@ z(4h10-(sb?tUogL)Sf#3;ki|*?#Z2`)9Ia)Lextrml=$|j#dtRyClNjU0$sh^ zP+rc?6XTK$gnhh_TnXhEvx52ur=XU~reF3p3?UaWA}@g8Cr0i}{}$;5-Y*^f=(F1d z!|mq&rRaOjiIZx#mX!8s03pl|`xr3y^$}p6le34nhCs7tQhmIpLIUAMCpE}2^u+iD z#01uL0eiNNl*MmrNw-I!UgB+()7E;U7OqHe&=?d}+=<-w{R`V5i#-Ab*R;W@-v<9| z+=2Gmaj)z^-fWZUtIXzKB6BiKbPMh5EgpaQ;(VaVXGiuFdpdyNoNrDms4pLXz22x* zWaN>z>Sz5>?&!YND>h30HtbLVaEjlb)uK(9Q@!ts#W0^yy@g7qd{&81H(RUr@b2D zH6yWZhCSF<$grzc80v%DzbxYADlI`@cxNnf3TjQ=0@Ir2Gv>B$s^kC=NskjxCh+Em z;Skl<2vZ(e8(}hGxFEPj_o=gNM)SU?Nyy=1$sS0ij5letl7}3wLQ9J!H9Nrh5iWe~ z!D`v%-KW}mV~w{NnoiH+c0143+>V;oZ0eWpFNZRGu78VcbZ#?3OOIccg>q)FS*Kb7 zEKD$HJT}!Id}Acqz6%(GZQ4d>g41BH!xvxhbVD(QB7&2WTZaR_0%yCA28y(2+!HnG zh4N0V^dt%T`J~$?#(ruLj<|viA$-n#)W}At@w2r4mnnTBp+=B~&$D{tD zrXmnzLj?9HHK+shflvF{FzL8OkpKUuz3U8X@@(6-7JVxST3Hg1Iw&Xt4nT$ys|;lX z8OoBNM3xC?1i}WzDnmw91OyQoVTdGUuLMK|T2XinBY+Gg6(nIrN!jpSH)`MGZIAEI z_x){ta!4e1?&likb)MI$foa3_b^+J=5dzf`hiUT_Ve=J@-324PUYRd^VB+mcyw(~r z?%e_7Otunl%6`(=L>Up9FxYtK-yqboKXf6FrfXqsS^HMAQ)cg#aKKy zp%aucZBIHaBMw5N$nSuy(i-FBf({2RU6`A-1G5FrFsfgXmDZ>qNe8?hBCKV&?8Of- zK5=m=w?4S^L|E;dx77%9--&wV{)tWI2a8;A75n-#0@t&6vfM+TSuP1GwZmi9Ez#qT z4=d394>nT0jqIzG)pd8T!@rZ+C`8WyJ|S%G@#%*r?{2J#8K`euaCC*sH!H8&j6Swb zp9g0vEzE83ju^g7y;WUV>l16;%YeI0(5y(Khl~+pv08$3f&FAOmIWmfvD~#1Y^Y0S zw;E$1&;)DN-d1w<1YwUu?(NV=>5`1WLy@;mRi9F{NR0Az&ZWXa{p~@Fw5&Lthh*~{ z_C8yFO$R&nyI05!E>>6Cqn-x_GzEx0GwOF`ktAOu=ywf5u5nncz?f*^~U&O(Mc*%Mu#^v8A@j%z7;zblePOWCNm%PjGPrfaz-4oUdMc;L!9D@2 z8!|p9&-CfD#*Qa-)sNK-EP81UJ1q;GFcWSt%`va(d&BDM=CXpQR`o<=*fPH#V9~gV z){IcNdL+MP^|G4WPZj;;w^WDUlqv6{V@qF&66n`3Dg$Rn$C}~J1a_U9obZMW(PmsZBK$4np;RLDp zYZ%PFTglH_5>2E=jftMJ0+(^PuBX#Lu%z;FQ0%1mDb{clFPig?OUSyoiEgL!N1H7c z{o+kpA5X@hq-(Q^ocv%&OsjQG-`&B;$4dGgO=^zS>X-wz7OE!n?Z!41FN~W+4eVj@ z+Sk@K;qL)jFF;Iq6#^%(-pi=;4_;_gVn9eQsN~rEu*<*?&vhXs`~b(98Y>Jpng$z8 zBd9KqW==P{Y0F{e_%hk-?)K&{kF|(-ALLrO^TD}WIGL+ip2IZUK%uDLOVQ?x-Tv1K z9V#?6^Nu$eUZFWgJg`}Ze+qvB8~nE{4?$tP-a<712-7mUL;4xNgU~F0X})f`hRo4u z-bH5E>ny|EfE3(~?7I$7%JZ>XbidY!_m27Qu=r^_ta9f<2StOKe3jwsPCfCL#D9@@ z*axO5NHUyn zg3Y8%-i(xYoYr6@ssHfuDlnMHa|vG9YThJbFna$E-b6NDE8xTLjf>sQL0!jd!fg@; zSY%(m-?qLo5@_+dD|147)hr%^a&Ws?jP|<(t2M!LEOt?wYRCxl7R09jR$qT6se5d8 z9v%7SK<1xUS^2pk9QrGPbnHsp5SdyGl{T$cel}e>(uGei*d#?H$5qzWjUqAcK0+FSlu&*z|dqv7R!OR(Y2e2<-_rJnziOJ8|ERFfG;m8+@~kuAzW69?0;l!$Uj` z`p*T&~q0X zw)8Vi8L^F2yyd}rlw?}Rh5%^e=zCH#C#~yjzMdLwzZ{%Gdy2PnQo$7e>P80-RQ0H^ zJ6e#dr@QF1Wjj~!@pkk+n}iKK?-i%1({nUsL8&bob4VjGGo1rn2%z`Z` zlQKEt4AGVo!g${zB2HY9RhAk$*Op!$Bk$fs&jADDiWfJwzvjj_S)>S>Y8;O`(uLAW zMOYrE&ksI}Qu$atW}Oi2xpi$|ODG-N9?piDKYJfN>4Q_Ae4kW9J$yKcuwEzVts3{{ z3wT6DN{7t*>Y&Ai(*3}IOROp?u+hnJnr=R!|6@U|Yi?gJL}|Op=&w&M4wLT@Yb+fe zI?;a&OuHH|@u`cweDf?A_^eK37@Dk91*ps0VuH*G?WPq(e8T(W!9k3Ki?pg>6)}&o zzg>sFM)cF?0AT?^I2i?6_jmV1@P|}jaPP3)6y$ss+l<3Pp{vuhk18rK70-5kk$kf- z9jN#>ihbA2T@I6Bg|j*F*!!^_(MRlMZ%Ehq$x?07rF1v>?y~LhQ$c!$k|y0K&OEpE z<`yvaU3`4+0?<3VIjgmS+#&V?S$GvU%`=zaz{%K-;RgBl zKBl@rm6{fPp*lMf*c@hP?)z>jZN`1j?umMOvrsY!abJ| z@MV`@;PoK(N5fmL5em3kZu`7@;JZ6EP*g;|bY&IgYms-SNo7XdiW_Sb{S=K8c3Ksa z(;nfOI;rvs5p(1ANLM(jZzb;yhMA}4rzcuFdB20d%dhv{DkT_P=OCv4dagIeH6D|% zr@Ax`Y-ZBt1J)j|-X{~{v?sfe2FsD4$dvTCZn-9EU>f*^x_cC(Lq?LXJd1OGIco%@ zfZXa(>EDFt)c}jp$-6lfpx#O3c|~t?(@~s4=YisY_e3QpF0pAopsw8@UwPeW0lQX; zDapu8xYKe7{9G_bdO6-!i@~VId=c~+BZ?7W%CihWC6)& zV|nMYB^XD<_p;J{#)C*Kaj!+@aTBSdzQ8PzvpvusKSw}`mVO&AtaEhd)o0`=fj01Z zbzHxPLeSGL3m-i)J$JTLoRKo{BPe;y^gq1hko&rO}7af1(TFkTH)u9H&t`FV?yxMT^V$Eiy{31!(|Ji zK;5Be(%7x$x)$FTwwej!7pt985NZ|jR@ljXvs6=XqgOCk(Vs!YyT-&6i*}Ksr)NV( z>m?aa4!;}=tz9$XD>}sdTpnMqm{Dc0FWIyS*iP6%6TC+fbtg`oSW$9HJfBr$_R6Rd zY~TveGoK}WyG0n`1tr7W9cdVG#yTnaoGCLN_065}Mqjw}u7sWd053|0dGB0t@%|!X zUO$T8`{hg zqEkMKVHYM732O7qQ0YP;`Xuy7r@(>Dxp|@p`rO35=&OukS%-K9>JzXNNnHY3sH}^u zpbA_H4ej>Hy-vWJ=e9aPU}rmlwW9ze_GJqPUPEkMj#wvDQmn42A3|!aePmfxKh_sqMBwEg zISmvtWIv<@^hP9+SfZk_U6F%z$T%qJOUU^*QI`}hm>pa9eG`DcSDMUq$4W=}8FL_k zCZFk33ZlmQv4}sq<+=O}A#&;QJtblI$)>Q#I2~@@>W}7#6au+Vo(73LZC6UI8DeTS zPHi)e77P#o8c>NxVNG$VD6cgH%C6$Qa3ffmCwu2dlCAB_&-;Z%OyQ$0u>qtOJ-Fps z&m4z5L7AUt)7jrMTk08ppTgPWN%4Uze!Kh(EOzSb*sF>}G&(tUAGj_b)88s-t~oxx z`z^F&&5fD{8+k}oKP3BzGLTULcLK`H!=u|yN;N&861b>dW4*gQ`1HAC;4`=pu5XKTDxlW@20}8`MRCl2O%()Ihat~_ z+C!MO;|U2|?=a95og>UKmoBRKH(<*J!|CcCmYO+Iu+o8OHw;AB3jqxDM1Zo<{Vs-D z;A09|zVsYw4oRlxp^-xn_`xM;cgh&8TjL7N*dAOq@n`(-nSR|*AOFnENLg=(y1faW zzsLtdt9{@eWH$+ems)c?NHi(o{q4LoyVhaScz6Jc{O)9+8I{J2l##W6w#}^_M~?Ne9=YuBmJ`k2^Nq6fE&!{g zI~nIyxA;e5l}VE7%f_jo#kX){w*L#eJliU7t4#659OZHBDa| z4$9cXD*k4ZCIK(>?w+$pnyY~tgxCB*LU%{!FaR3oZDf1PJso_JvLl8!HJ!6k1Tbs= z{L1%t!IST<5^zn)vk<(LUnxXR+-QR|Y=#9S)dr>(nSo$h{ty8C(pQSdYcybPL_FBp zf<`C4y2ppFufW1d(R&5jBOI#C9jM%{WXnIO5B&{w5pG2NW;MA3ve`m~xNA2k&ck_| za9SBIp*5KfF;EJn5Nc-{)cz<9I^hpMNkPPxK&ANr@4h*2qpD%#;nhfGZL`ds4uhv+ z=IKeS^EeXtfdt)nt)@pLy$ljae)9#~Q$#Fb% zG2H0W>Yvj*L&SPqCQn2>-cLE8VU5&?tUV&j@H%^;M1%2w<}Roog~H~(icZ}p$2ODg zPNWq9=t%0lxThVO5EZ1jORPeadzeB2HJ7wGsMF4Ey=`MOwsHVQRv69&u*ho^JvNdI zD>U+4`rL!cl~pth2gGBUwfn})pc~?c zve_|mOi0*8S!WquBNLlz*Rrd4k zsZ#FnRHP$}%NXzY%&!blnW{C4bZvDKuf#qNXOH*Ql!*Nsn1{vWzLhbd%y#M<-`AcM zuz7vt96~j-Hq=c~)yiJnNXyXl>`5pb5U=^Z0cR!9&P}7(XMK~9xCadtRG`^=SII;O z^q73Ne@p2vz96f#MmEFE)nr-6QLZ=aAgPF1pJu#et<{<+$8sd3Oq{haBvzc{0LK3C zV=K1KWo0h~&7drlhP@|@Kg%C%faA(cE(Ly8qnpxmF9E-3zSBgFX&nN+4|K9Mh6Z<) z9qSzHl}%wL!jHF@3y2FE0{eQ;&4?L(peC*wHI>gz>DrXv&o8Z(NsmbW_~xpZCQVHa zGuUrT*T|kWt_Zgwjm&~B;ektVO;CY6s>8?be_l8xU7P8Hq(0}aJ*rQvNpTMLF=mw| zFskQKO(8h%Y?abQ+9B8c*w6(^CZUmtygt=KeY+jXcROr1Rv1~CJghg6Ehz`+l{D54 zU;~EGHe1AL=_(>%6taDivNjl%H54U}1e)<}brkixw^Jl;SRPxfte^+KQ;z*$^s!F& z&Oy;~k?)LJLx3{hLQ|$hMGqXf2Yr4w$7y+vT>zMZD~~!?wscX={~BnQAuaP(XynU} ziBq7a*^2qty1dXT7r$rJdh)!^P%=T3v34xl5}|-)z+5D);7JY_m>L+Yw8ihHY>^e* zPGV5Q)M=X1)Vqbdl7{-*K0R)St1?Lv)PmATiOg&b6rI5N`3_^vPF##}kOo?h(fBIW z!VW}hM6<=C;=1xwLUmMMHA`#|#U%36dZ;%*j=4V%dy0%3W5bRjQW|csk_qDQbG&TC zge|Y}rlP=Ucx412D80!NoI?Cji#6R~lFQLBrf1!T@4vLC#Lc`Mr?_YvwnLop1SvSj z)Y&(b#2PH_!%@P+^xTxJ?^=!1<fU796emf-!vXd0nOa+>YPprsK9Jfe|QGZC(p9t!ayw- zVO%@ysDqUZ-3dm?*v+eH`urdIQ>SbzHc;b1enJZbn@0?RN6kbZ-fj)Dz~&@Bo~lmC z^qE2U^2b15CAR!d06-`FMn!yIYOvKQUM5aSIVgfx4@N7?)aZo(AG}+~7Y;*DiZ5pU z!YqCZDLRcYh{w2(QRc{X&o<_uT_eT5M-u)$nA|wD@fKRmbl%gsrJ9Zn~a#U~+xo}5Z+Qd0GY zu%I-*0_k*DQoxzBPfPNV-T}(08);-#k;v}n(iR7!*;r!*~8&=lYlZ46V4r3sD)wcuZ` zvNeJ#b+oT;#8i^{8QKnh>KK?%cLnTPyc~l$K(lyptSM(@Tnn(=Q$}zpmQo4{$ zNFB6&;)Cmga#mAP`tF}x&F32w#T!P91-DLODdWcQgsZ;(O_`Q8wduCrdZga!EZF=| z>&`C6Fm;&@A$nyuOUy8mBboJfbG#96A2dD1XlSRYi9pQmp2xrb$@@GJr*smMn+<+Mhd`S$qhbtY3?1P1iG=SivFz?0+7peHMuC-7~LT+oc#!5WiK- zNGX-LgC2Nn^H@;}C(BeHLQX&{(gy_o>o^^hyFa- z2Us+Z@}*?X+=;^g`?tD_8RS=X_UZNW&=YqP9={g=f@A}2%%L+4(GuO#pMu`1Gn268 zEJ1<+nJO_B{od!Fue!Vqbh^TJ^+e<%j7Y$Lt{_x;f_5B*v!Pb~Z%Xe!49b5Pl<4~W z!=POC|7B2em#w$`?PYmRoT2}>*Sgs7q{zR%j%8R(ez)7<|+^SWplE3>iZ>`Gt=0Ez6|LvczJ4KfKy|ZFZ3kp}q4RHFjBWJ?@ E2Mjv>tN;K2 diff --git a/app/src/screenshotTestFullDebug/reference/io/homeassistant/companion/android/settings/mediacontrol/MediaControlSettingsScreenScreenshotTest/Media control settings with configured entities and icons_small_phone_66e7bbf2_0.png b/app/src/screenshotTestFullDebug/reference/io/homeassistant/companion/android/settings/mediacontrol/MediaControlSettingsScreenScreenshotTest/Media control settings with configured entities and icons_small_phone_66e7bbf2_0.png index 050235b6ecf59a45ea4015fabfe80817e492ddb2..87e7a069643a6fbf8200bb6e935c18484f9271b7 100644 GIT binary patch literal 65383 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 Vu%LUg>ILvPjHj!g%Q~loCIIJrh>HLK literal 58281 zcmeFZc{~(s`#wyYQmBL?vo|||IFGXzdOGTCth}sDOiXMV zw{I9QF|mX&G40mhzYqM&u9z$vCZ-T3jT_gE{H*84Sa4rj*VmS&5aG{kBPG#^hc&0$ zn2$c~&FCx9mX#d4d+6C~JuUbAXW#c6O`a+5T^Ij&JMorz^es;^a$#{QRqjBugYm7L znb%vyJ>b><{9Iz)?%mq`_ai2zyK<7uhyMNW?7Kae{{85$J)AB7est-m7Sq4~vgP)r z|NX=N4bHzJ@c*OCx%eb_YdIs1xbZ_4!Nk;Z+|sN6CW1!Z-dfytJ$5dWjhQKmd@*?a zPTpTzb2i(~IZRAYCfdzw$Km)#S>%Ji%q2NnY=YKFlQ!El++-V%O{yYoIw!7iu{n_P z^(lu=y5IK~od+*AU0Pqk>XLQ2_i^zv-7U3ckvFnY+4%V(t{@{QfI_Y#;#EFmvOSTc zNU$`mMIgeiU%I=b&(X4b^UNt%F}V4{XhuJE@8jrzUB99(HYd5_tDQV1U#Sm^vhq|&glSMV;V(a)d8Ohx6Hm`anLy!0i)eJj_-0~cQg4(h9GH*e8g_}I=@pS~nBP6}Du zDyLl9zfVkNmf0`MX3w+eEZuG;It1Swg6h{{ayjGsIa#`fHT#ZfqYwE$4r%2R=XoVO zlAS3e7QFHtvJnXt+}d0WuItxR<=bU9Va4vZ$N}Madbh@?0&1?543V$?4jifz@zko1A2(t%b%#p$L8-)4ap$WcOeN|L-p@ z2&rtY#6??Y9k{2xXM4dHQ?jx3^8-gl&>g?@cD?>pgh3V)6SvK$YY~o13EZ9{kHKf8 z_FjT|@a>9%)WCTxK#bkInsAE z-;!o7^_?QTpK7KrRP~#Oi6Rsh-hQ~{$t9nUIFqN!%p}%4@`SzBtP{3hOk$Cm2Er>k zP%pUeUC4%TM)@J|n!}nRglViqdVG^Qf#;`m@qw=(fy)g-PI`Pi9VZy{>)oxCnJx&b z)YV~ib|`KUvps&xv+6aZA)a+FQ~9ss(;r>V*PSkZ+eGjkr&|==o(f`|T+ZY7mosgi znSy}j=r;NpPy}E$Ex1CVkky7C9?TwXTqYyJY4al$Ind|mrFK4<Eu(pdBII8pPa{MrX_2!bTe1m?{%t>z;3d~keQ+`qoQD~1?IfYpr(r%gNA zSUiUjYCqp{StTXf=s<+|KhRd^F1X;3X*#!wL3A=U7#FzR$XlGvM@dSa4(zn3b4&Z; zHxZ46TRwcZ7kg_?TXsy!e`Bemfav754DJ(oOCa>Up{|m#!dizwVCm7RvbyogloRpI z9Gl;xF6v;(lDcp$mY0<})CK(SCnGDAe|>%0B{x#Ny@uIV@?Ys!FPN!y8*6Y< z|N0}vJ$+$u%$Hc!O71?Z(n`5K7o)P}w?iVizdCGDfScD1 zreP-mNTj*B)2ZaAkJawKLB3O5{#j`=^~I^6;peLC`v+*dS4BD~4^G)T2?)i3J-MC22Ux3ED*!73|#YF8HfmBY2BVo$iT+5**xC=*TK#4vtV%ZSKd_$kFv`JU|N6)?I4dqc;%O<5?R^N%K zaIKH25v%Z9mdbv5klLD_yHP{a#b632qBc<<;r}z?Ned{^IlJ&Kj7VC&Xh+UJkIaHm#JbgK1TTyN* z)zgQC>#~*OLxZpg@jYtS_a?E{m>EDCPIlaP5){2ern>e?H;@u6c==oyMSv_@_5KNq zfTQe{{nD+AP0Kyz&8&O9?{`J#nYr2*gd+-MwiL*?-@t+7s2D#0E1y=0kRZ8ryrIQRKt)#S%zwM3^1 z#U7_=pUzlvqXYxS@sn?@?L`l|z8N^CqqI7B{Xz#g$I4XL>tpo;`0?PjQzLq7HgP9s z9uJ#27zY&`h>`FTBQ@OW7+h60JYhLrfOk~mt(0($g9Nu#u0NWlWp?(>DBfQm%oETP zQ2rXSTlA6CJ03MoAs-dklyLoAlEgGmSpUUYhr)_B8M#@E>cVBOkCmSVT%0q692)Xh zoOtqrqR|fI)f4g;+q&MYHQ}4^NyiFtHf%>{Yt3Mhp&~V?~CR z%`bq<+j*r|@yaMDhRy^SD?S5i)b{fuM@19Xyo6p|+3i-fpHJ4UI_0^oLd)zgf?X09 zyZm(KSoDd!UV!8lQCM!NU)*-!)@DzBvv2CD$Lf>_b12N0<7M!n@~>t$5ZmG%*CGb$ zx?79c07L{28s4@VWiN!*%@*x%+^#JLwNcAtZ|^`I+pDvmUn*Qp@)|?VFN| zN_B!Qs<4H!`EQ3!YC0hJNyJo-E)f~cK2R_82*mD-7}uP=PJ$%jj7DwNWZ^+Ij~^&g z85MRb!Do}Vr%rblAXh_#2D=_@{ftl<5iVOXa$H{nxK*AH+!K>BcEo(Wy>6MgKTJ#oq_`3LKzm%mN|BSU0Mgt5B`q<=lL8 zRAx9)aQjzB=Q|cbOL|JEP%+uXql*Uhl8Y(I#GM@>a$nc|k@~3p1Qs@m5h=AsHw^3X zRjSV1iPlm0Xt{^Ks%Pfo*_hJJvi$+k&-WD*M!IySU=aDT_Q8;F{!15G%DBli{Mnd| z!!80&FbtR5Q>apYIsezbV)MK@WPMNnR@wdrsvvwt|KVyb?=Y`k`L;E?C`Y4dzDxOS zf4@RQ-g_UFX-!_xO zn%Or*qb_`YP{C=#YBl~NPrh%+qa$l>H^fAq!%W$`j78O5!O5j0 z-YKv)t#ogwwg*m9a+=4OaSNv_+G0~zZBG0CKExXLjP|oubZ`sH{&9#Nb#Tu_dP_Fn z(4L>c+jOG&Q;q8=&xPgaC&(3TP7A%F?}KYc=37deMIMgYCl0;TC#pFP6l8b9wXzXL zR9Vr-#+~>si)hI*p{gb0Si)O-TH2;|k8y;iY@^Cv{zmz;_L}PG;oFeYunmx(O-FH+ z2rIc%-*NxAMC*W}fx~)RL#)+$Ihr#{QR+d@YxX;p-3s5Ax`O6V^3UY*Mm13)$8H=W zFiV8;a%L^2P1Cu|$qyzV@d{zizow7FCT^i_>v!~RL7k-Myl;1Vv2lxYTqJn+r1`9k z`Pz_Wo#*F7PNs0n3n(y~v#YUtIWqld<s&eCXC0ASY)%lHI6!=`@afZYP7aX`s z5EPz7+S&GBEY7w$)@$e5pR>i;d)dgKtG3pTj4xQy#EmGE&kUm~)?5jzouK-Vx&qZQ zQq)1oYyc%Q%3AQAyU|{*4cbTLKEWu^sm7uM-s<}(pLkqhSlpf13&@z=ti;0ybGt$4OzU<1`+2^CgqU%@& zDLV7xn|*zcfKvgi%)F-fsEL0!`$JRBgM`B-$2~ID__g?Kwuf(_GAnmWn#1Mi@U7(p zlfIG#JTk9P&DNwD!bV8Rh42KT4pU44;Z8x5y493ivD6Xhli)dOB-Psb=`R z$gN(q?Pgy3lF_j`;A`ByBz0{F%Km(x3G5AF)u{+c%dc`sIhUYr9yk_kJ>yCc3-c1XIv~jP<6u!$Ix+!`U&q|O;e@yAbQ)|Y|24gFUVs6e~+Mr$n9l5IYCv_o4 zjod5dHHKSd*7aHM#$w}H&nH+{++UL}`DUO;y2n=rBQ~)b`&2=jxQ?MV6v|%17>Dv% zq3j}h#effXDU1Cl;2RD(dyBr=1`}4-X0L+t5Ob~6!reUrNUEhnOf{A>)kn|@6L*yN zxg$QN)hBu7#B&eJO9Tx*CHbg^6R|B}_xF00m^ts+q5|l5r&lgKK9yR!&g@0*@)2EO zmax~R0#0P_ZU4MwDwzOTdZ2_Tac9L(h`!I)PH|mfrE88Ly=TPg=iY~^Z$*+2f^Cqr zJooi;lB?IIVHc{>PZ_SeXN0;Ze_SbK+!PwuX11SzU6l1|hF?O~YlGUbm(uyV6K{|e zaQw|u8@t8PzSYh*iMDKMYaXdPH|43m4pS7gPa0mAeX?3!7xf%^y_8RJ*r_0Gxba#! zO0K`vYkFpKBvN8cG7Q=`&82MR6i5xc;NG+p9xVfU%GS!T#&my!*n7GM0IQ&I2nP&L$XrbUS1>yW^*B0dFla+D(-l0ADVy{Uv|k zOD3?i0?ym(#g?a?vU4bAfpCwhJX5tFXv?XDMsPLS94~~Bo^mKBArJLyJ0FbD>toH5 zfLv#_dAxKJ#s@={maC@Op?7t&a=B?MzSQ8V9P4<=uORy9K?U)sew!czwe+kj=uYO| zgd1!@-osr4#{jlBW%IVY_42`ir8IV(=Zw;$&6V7 z)Bkwc>gml-A1V*wM$eLss04V^ukTTat5qYk%rboef|F*}lUJ0W72eFOkpo|o0##K} ziY~D92nT86JY%Br#UsIKmTu#pLaO`mS@I-@P^43+&At0~;x7ekTW zS$>l!Q-SqI`z1lty9!jblul8L-qsf2Ta_Q>Y6O3YuDH7SgV@h&<8ehd5gu*#6Z*3 zswmd|FimMdhw~8$uJR-AUaD&Gfr}x9{TiZ_ zpO2de+lNhV9-VkKbv{oks^-wtF|33L0DfBhZfp8-gEi=(3;E-qMZFdoUR1X@(EYo_ z(0diq>Rd++Uf@=4*sQOn(cChdo;Q=AFAD-uFaB@oTO`o$;5z>(jX~{L1Rp@8F_1?_KO#~=VXLvL?sKxb8a zq>be7WKfC@8*&_5;s5Nh0ZJ9_)|<+M0{G@PWaEz3Y@3xUw3|zc?cC@&mBq_ad9HWl zpo?D7WUPcOLo>*?%ux0h8E&Fj<2;vz*Phr{WDA9K8)X%S^!bviSzEaUZaSJj5=*r5 zF%u7R-Y=bCCn_If*8naxB-lhvHW5_QaO)G$adqOpGH3~YV#wu!SWK7B-?2@|+TFBM zD9gn@cvEjHuxZ9`3oL&|g-%_IpiIHn#$@@ml;_Jo2nEhpsKWxavlih;FSqU~9}7pz zgeA$`xQ&#mdb&>=^+b8LFh_I=&pqWo>8~MzwH5y$*H(Rp^|uU*+iF54I_kS%9o)P! zW}|O$DE_?m6X96DqT#S8qaj$2#ZPRdsLK-$n5Xcp+_=BK$Qvu}_|9kD-6s?39xA+z zo_Ud#HCcS{yf3JfuLM&jwWfY2uCOby8GRJvbXo6dC&@2G23D!>vs`Lt+jo(6;&;6q zU(N76k!(<#ce2E{fjWbgF#kVC)%HS2_sXk4bdYlfoLV&Yh4o_7&(O`zc+rD=veM6* zt&SN2CK=aUVz9+ffUVc*u?C{?$Eh{!bz?p$(E}Q|iPggSRv^Qf=T|S-ose%~5O_(B z?#m4R(fBp=plC2=wzxzzc=5emrkcO;x(+I_8neht^Kn+2pM-r<(l39i)zGVIi$82% zkNu>)lzrF6|E=d#PZx33hZ_y8_-C^A)oksb`2)6GM!q8j9;)|%@{SGA;REM>_(9vlWTCI!BtVg=>fAv*LxfizIfj|?XVMC@ffd{ zosCc}CB6M<^0^gWM>@?xNr~9H(^L2NPV=-aAGcURGLRS9!S&jsbbJP1r`vdY)n#5O z#RE>8%rmt@Sv~Lgjl6evy=BY*YE1SBPtU~ZWmyK<59wWJQ-o3p7-1PYNL4hURM(hxotRH|&c_im*R{tWw9P!KtGN z%p9L`g$IY%G@-J@1cltxxef^)8a3o~UTw6tGTx)$C_8v9;*ccs<8@M^NiCqP=6v>| z`E2?>HLsw5l%KST+iM>nnzgZ(udxvNf5QPY-ckeqFQl0?P_g}J4d}kPRfE-?oGm`- zM1HjW`D~gE05VO*A-H|9Y$Rs%f}eK`V(zrkd1(F%ghWT|`w|JU?pGLF|H+QaD6a)W zWiH#QNnh-Lmml2w0FmfA4+cYyztwi?}xTGu19fN1{%ZpCfF z_tyeOv6r)jnW}J%HH-Bl5~@J1#^&oDEqKtNM+hd#dOTUr0j}&Z(Wa{3l%(;wXHzE2DYe$NM2^ z-2^@Bx~{mUKp=!og6SAxvyL*wOeF?y4>uHX^fp|&|8WOvxfQYXy6Z;Ii&(nmOSH)@ zneOP-;VvRW3TDI@C#gMOlWDW!nQ0@H(lL_lyE$bRuBkbiz(`_VLILb@FHM@7u3fJT zrx=v_lhDYiANmWsyF(9rWukXo59@QzXUsB=s_RZn9^OF%@xoPpk|hHN)TD+&4gs}xYlaD`5 z<>ip>JFTY0M9}dyv^t3mKin&Ybzvu0a2;HjpA2ax8VPK0EPY&lZIIvg-|_TbTE*Gu zs@Ub2P>Ryar!q4O_`(Nw0xFlAU(>NEi}I?Sf}Ttn$k|xTdYmmK-r)}-nZNCp!R_oK zyFxPK>3N-uu^n|uIIHsS7?x6O_l8kiGGi1eAIG+lxTRU_eHeGqOOYyEXi$Ielc0Xr z+9s#j-rS$a?RhzpnA-V&moA@gR+#qjDiK_PF3`JCO}N!Bie2!#W`Ei4GTj|Y{eg@4 zVmN}!e#To-`=r4A)Sqx}rpH0aBnHJDdHcxDUXUt%-)e>cC6OI(+CNvfzaX%FdiZjl zw_vU3F;RtNKkt7qfr2)D68xm+CrOzuEuTxag-_VMPm=4(Y@x1r7scO5P-;?*sC(3_ zv^FAaC<%M+pZf;hwbst(p1MV6Oc~eLB%ZPg_*)wQ3A6j5jwJcDswQ0`|D^D5M!N*2 zfjT?}@iB{iY8?D43JyDj;QMKros`Y167Oax?=zT0mY34kxwBV93nsWsEG0L675qzA z1O^mm-yg47ha{*69b5bZ1k5hWKRzRfT%gf!?%p0JHHJo+cZ|4P$4pOM!#K(Smb*yn zEjc8f8xIrdm`y`U!tu=>IF#gCY3_fL0?Eh&cjbPz?1sqJS{KB<4@z{~q^-(mk_ld{ zw3k2oY#E%uAkTDstJt_i2wWU=w9IqB4BCOJY&aTWeIa*|0ze}FRnNSw5l)Z{GkKouF1!C_n9Bk-&!-vsE@r_X7`^r-Z-2as7 zt2($OWmshDs>>%O$baYQgIy!dLD`G5XZ4v~O*+QBu-Y>CN%Y!y373#LTBh4EET$N_ts&334h`VxP=DXlqnEP+=mAziOR zmvwISFqpBHMdLL~Uf`jcVLfFpaFS_W0~!c;sa50fEvH;fYqlQBBGGSx4aftazS(0q z9{&0kQ3q{L;5|ViE>?61MDL~uAkzFu5vJX*hv6eV{bzha?9IR!1n6{cd#s&&8Pg(a z7To7eDJN{L`~!Q*Mi4*_g%+Tdy=oY#_jD+`A`if07ZV? z4nzpSm8hVb7~ynK&m1x2AJqhFQ~r{bBr;%L*8HXxTXAz0)bvIq;%r zx^*H+02EWavecvTu$Orojb~q8&8`@zLa`a{m!1y)354ijYMwjQD@&@17`Y!U(*%ed z*G{XUF{cb#4YA*(_+mGs)u4+jhe>4I)2nwksfQer?#sG)SH>;zi7nf?5ucFvvAg+w zc9~ws6-V`9F&s)OvC*{_zr&vKvofpfWtAf3u`|f}{$7zX zuLHVq@VDk87JYv7K(&XXW=`yv|8H?_`=h`0YcWN!@&?)gm%|ozUl=s#Q}(V8$hU@l z#Uvro($!fJdP)hh!I|<|mN+ua<$QAXS0vF9@e0~!3R+~plW{^{Y9fo9;9QZ~VMs^P z1bCXI0F1@GOB>v}6U1el!{m`vPA+q&F)F?#Nv5@FK#N{evKFQHnDZ?pMlr)2P?HtU zNLb?SKUH(#;@av!y<UrvJX7R>L`>^6krawMP}xQgkF3@45zOVn+D8u zY4}Z1$5@|)zBm`wfXK5fe{iQO#(Ku`wn&EU+>_Wl7tz(VYvl>^z=s0wm?~L%`r7mNmrB>TK#hQhpEr#OR$KdvU7k zH^XP35>{1YL4Sc+_yxx7b`!dtf9r)%J_dBsGcNn818$(=hGipRkGZa$mgKTJy(ZZS zggNKk{h}K~#|M2CjQmR^*S6@3x*4XG(eh!y_5goC!@oDDe|h_8!mH*DGDEb#R`W`@ z=tdu_I=oR+*VGA7-=m=$>C*BY*gjBsPu_#d>Mm<_Z`lIbh5X8(kAI&ZAdimzes37( zH}gwPSH@AWIB>`>2y}7z_K2DqAZ?)Q=9}=kD@k{zO9;BEAJuj8I<_r4~R2C zB9d^gJ|9hHk_fe)Dt%$?Ez!KaMW5L&<_A6%p26>;pJ+NzR|cl}e3r%y2B9)HI3d32 zg4sZL`ZzUMV08vg0POwRJI|fL&~-i&`||WuJ)7IQ7Ynzb>q`vtiVO^Y>}0F4zhZUs z&d~zdZ|7*&E4w91U~0Ns)#7(W9YZ9%4r#A-90u6-_lSsrZG!~@<*K^5B42>3MrKwE z%->B{qKf}Co5kCT-F>P=hR%1;nnBd9TL0$h%Ydg(qDOXwk(;s&2k!QZ)`H%!z^AHx zpY*ept~iP6P!S_DFE-$TaVyu0ABjZ9E+?^q>N#*9g{Bs7*52vs`UplvU2c`PqW94) z`0%^|6-GY^i?Lp8no(wKJWHkXtPI|nUEnR)J;-0|o@`6owpq zCf$(eqd}xvWq4d`TDwq>G`S8LY)q&pWzG>+Pui|(PpK}*XxPYM19p_@5~4#L&$7|y zS{OkTGj!v{Y;mgM-1}5O)|IBdtoL6@qbKN!tX><9mK`@84S#u_VfcXr9s-s37Dm{5 zq2gwz)%NJhXRC0{og^*$GJ`MBg+v+sX@T593l!6YTia=Y^rL-tz0G7EBDgh*|N0dq z=Xl8&6$t%s3&nCftH5+6xumurcD0z<_$8Q3RjZ(8Ecy{_aIFMZHMBu~Sw;RWGNY$} z=c$U7{b;1(UHDA)gp0Z8-D!d})7I*R4>H1_ z`dR|Vz@O7w~zttYISxfBO%^$|Frqy_6dkwMaS}`LBV8!jJ_yLI-Z1Ww4 z~(3~iz$6Q0S#NrvnyqbXzUeGj?8<+4+g>G8U1gS%~G)`88bTtA@Gti$U%rjQ}=)pu|ote?gB zBeLKOUJrW>u`;ApM;ZJM{)O`w+bBJOMLWY6?*3^Y@>S!t!$NtDMK^#_ep!5E75yS9 zvH${a)Fo2;W*?As*$RP;#D_Nf#DD3k5bO?W65rrGw_vYYjA}_WYacS~2E zaHi=tz}XWPTan)oJ!c#L3|CLAKw&zosY@!py{U5{wA)++QNF6JI=gYxMsZ!*AT( zbsTu8k8rlA02AS&5W|a-8}=R){rfq8-uQV7W9J|w2O-bA0UWqmGOi<+MnQF*oUiIl zp9kGpO(!u*qT%D#pFM?Z=YGFm+2nz{3g0Z)BY+Y#2|Uo{Du1>U4!<~X7rebX#CzAT z4#D73Z5lU2M2$;R@Wp5R`CQXaem|#fJYa4z)w5@mf1#P~#%EtW-->z|4?Rq#+Mk4o+XOa5N(ym9==e$<1o_sM0-meOaK1Mlxa+h@x)@wE zxr*6ZMagtUdi3AqF&>!s?eb@8xxE2Ao251D2}4Oec_k{FGrHCH0?J{SI}-J+x1O90 zRQlM#lyJoU1QXNG_B}sYmw;PVhtWmNOwI%6r_1)2*?x7ww4L;2uBt7+_hDb-39nd> zv{(-Q8c~n|cS*;wxijFkAwnVa3Ydye$ebcwoEi`t^TaEC?NZP!GjQjcB$=CbHGzwR zIPfLsrF`)+X9Li=Ec2e=r4<1m@i9y~O_D!-QQp}YV!z9jlq62jQ6Nk4i6`$fWmo*! z(&ZCOClGbOGQ;*rA=4#ayJRVTY`s_8o`)*6WL5x$rFkg?i{IvL<1E~wyL%*Ezk z?{AH1>z2<*t1>+Fo7l)pF>}v0rVEYBau0lE4D@|$1i&AmyWd{KYl!FZG!U)^zawLW60DxUtL5@3#> z-7Y^3N82HpzU@_1@TlW;>Z&quaZi52(H%Y1mb&QJ+z#N-cFf6crOUr#VZ=a+Sqv2J zN95+=x=Pwxpo_Z@8Wx-Bu2M{QPUZF32>s_l7z5M4<{Kvz%lcIvO}t$y?aPN>W?h>% z{?37O2E1>wadLASGJD~{9^7SjtLcGY&h097d>nT`nenx&fs}!x-Ev<~1vGJbdatCY z3E5>8G}wKeVDG~rXP4=&BJZur|H?UAy10maK3ZUM;;M*K%u*!!KfZUa)MffFMiWXW zRMt`~_zVjk*rN z)lhDcF`uD;nlMs$T`+j#5n1HBp^jYJt=;7}pqgna`5IWsv^yqROlx+8AT6eXJ0e%e ztEU7zG&BO4j78Qs|CLX-o$gbYz;I%iT7XN;PFwR1|@P`}klq+b9!P|kft{&jT za;gMo{+V;_pt)D{2WvS(;Pljj&Pkrt4D z7SU_gBufU^nV($-MY^Qbf3B=<{z3lAq`6%Bdr*RnUMvrp*cfkZ0m*uZx(4d)P;C`h zVCeE$iMLo^gkz06nt;8>siDjU6O{Zi`TjsnAhEM3SmBvsgJQi34{Jws2e?b0H?^y|`s!@>dQX3D!@e1i}9qdFtb2QRx zy!KNvg1aao&rR5(mSX5p04(LbV8%RtQN+7h30jlE+GS@^>-q+4M@VD6ru}+A}@?2D%a<98b)asXE zF5Sp(yAAxAL@78J7{8xEXKhr1r4gr1gmdA_tnJ6j?%K@;Ad4#-ABi7^JLG4xh)4 zELULoFK77HM|3O3h~KccDMS_TZIDj~@=}nmCFv=p!rApyTkIOPsk`#@^4wvM>Lae! zpUouv77j9nFjjk9`3!j#;~2hjj~=`APsf=<|L&j%5**2rg zZLVNlFezM8M~+Y!?tX3@yJ}&D?S$8X9pzcU`F6tgR)oq%7G=$BaKFLX!G(@}dCTH; zUye%0o^`%E{_q1^9Ef0J?PtBdYo-=wN9gi3C*(O2J}-|)W2~W42h!wy{3s$GK-I*oE1nz?O3l&vd8YsUuE5mfbMAJ_G1hze zvERD=-3gbqb|11T`rxuAc%|i}-RNxi<-kpznvM7`Gh%Yfz!+V-b|#HHl>%Z}kP)p==$87qLWzFAmt3~bZ z!Z4QYVDaWOZdekTP^bG+ezp)VIr0!_$E&=Gg7Rqmq;TWB5*`#*&WE$~kxgard>Lm4 zU`DBxTJI0*dgg(j`_f2-7zrTO{K2gv2&d7+<+`!@k zRg)}wXdk-z3o6zhPy1+@B?i9zv^>&PeTuXrr1XYMy9{g5oswIJv+F6uhIk?@yeY#~ zJ^*1aM{$Wvh3)C}c;^Y$gIABTMRNGs9P`=6XbPsr{%q!o{g3Rxky&W+0UjxNRD!M zvd7nTXoRx1{^sw+68rEHYnnf_8@-J_-H{vSX z6+1^+|Ief3)C<`4VXOJ~&clefZ$rLTvd=x1-j&IyE{(?C+D!NA60PLC#rjFn3p?8i zkF7e8MvEiv-E&SSy7N)#O<453m>Tgy*XagF9gjSd+sMl9@ti85!&2*k?I#=tsWnbm zAwKCyG_)YqBQpBv3a~N`zGO^zYx_g1VGI&UBU{MS22peSo4 z{{2@eAJ4i3Lqe_L$C9re-#JB<#RGTI9_?<8`va1%&x{QIGLi4)ZS9Xc80ipPlDV(? zp1HyE6Mdv$^og7C~a>>mv17Geye(yr0JM1Y&|37CrL{3BRD- zSozc;D@;S4Coh-~k~LdqhSFQ`l#uIw(N{-mWZ$I>H0&B;_`=PU<}M=Dw>V|x!LczO z?R5>z9EJ8Rb;h0~#<-CHo@IuBbYw+{uwG9RHNwqy7MZO$8_^qg<{KsbO80|#0*;p6 z!JKz^^9F#gfPIN}M!tvgx%i9Ruw5f(*Z{`~L&1)V^xSZb-$xoagf;;sI8Te^swxbh+9G5TY>hB!$ zIcQmDwYkf{Vh!>s`D>(7;uq4hp0;*2r8d6ofQk(Tr6Jydgy!PiE80C2f5&UcHw~1RJ?3lJiv0qNx{n0{IRXVzra2X;zA*TZo}A^gTB*geq#%k` z$Cq{K1QWh@RhB=$@GvpK%Yfm9Ew#oUi0;mq{z$A0%_n}-ErHjb*VH*jLr7a^baV8A zQ(6422d)#=s%f<+Ia`R2m$k_nd)TBt(VEpA&)Z>JBjw{|kXvQZ`&?b^bT}2YpWfKp zJ2&};MQO3jl*VoDPfz~Drc|Vte_f4m!eAWs-FwU0-*}AzhW4Tuec&5)x&v8yBzXRmY)_iq zhoa zWU-1OP0D)R(suD)ubp8sULJYJ2C&nzcP|F?*3-^_Q_)n9+2HLiiM~4lnH1$wT-(cZ z%_b*l!cJh<6nCASR@=YYd zdUas6srqQ;h6Vb&$!^MyfCFDoha-=OD1sRA)Pb2qTeg0QZ&A zjOG72faTI|>LEf+7+sQy z(Zg`S>r%{DyZW8`B@orYS8~`I;9Du4maruir{@XlU0-Zf9jn z4@>uBKLDRv3FmVw@ArvP;)(G%<0bAu%IWjp27NyqwcYk;^o7rA|thL6X56^DBVZfmxHzy`?BcqUu}kR z)C2p_3&nHTYw2sX=ma?y!A4$-v9HEKtrSg%-i`UR;hkOpJzU=Ht8_4ZhF3G?^ys^) zqyW{G%?8Ti>SS0m|M8FF(OOSdng z80^7k*Sq|vP^4O-EWC9FODqWd*WsN+1i0cr_v>brb< zD~GDs5?)g)6tR5??s9V+G0M><%84U^BXc8OhiXy9b0rEdg}pc6@8!C7DZKrtWMKxK=}{ zDW_&Hv1_nlDO3mVPiSPEufR$}9c`Mv=iy&BmA6%KO~rwq1Y(-Ec|MH$YV-4J$Kv5N z==RU7Y<|VA=I5vyXZF(XzkUx&s9P}aB-}laUD-#vw&9+BHvkuQ(yP?_kF=Ip9^T1l9?lj_pNj&ljWGDJ-?_>|vFwbyIsaIDP;U{eQfeoe z6Z`J=_Hni_TB-93fDzrx`IPI`->P{ed7l(betTmX(&0DejT;r_vc`2Pa0HB5z+Fem zvufdG=KKR^GJ>;QKpH=iONXws|KL}6h?ipC0IPgP-$8M)j`nYOk@nTyf~>$Xdund= z70Isp^n;;>H8ff7*T~SwZ1_!a6~%#31(m=8Z_Ts}hI!HXLfEnJczM74#g@^DgWA&? z3!WlTA{V6I!eUBhu!ne$S3e@)r;BDv0xWcMEm#^@ z_YDIsxY{N0%W4&LE5-)TWn=54eD`~^DQ{$Yh1t~Ne~|ouyQxawCu*kd*bn0eKH^05 z-w^&&=ffbS%w_Z2P{Gp2sj!_SW(aGVis;j4sh?Tx(wG*KUs|sZ8RBF@{SXJg*I#5} zqS@~H#go-;gypoT^(-B7gg=7@N~6#Gjxhj?yY$UZpa6^tOT=?GY%!D(`%Aa4qdFmi zb{1-eO@C)@U*;I7kk0h0zOWu}`Yf=y~>5KSHYzLxfa4Nz@cns}H$;*C|e z?_%Z9xQR9idfRm;pZyBH9VS^M(ms^vPQ2jZZp?W-mF3DqHIR0R$B!*%0M&K*Q;NyUaqH-7a8oxQJ{WYK>>ft4O!(``U3Y zf*;EF(dl3nvIgf(>3M3s2DRahts>frhayqUyH{FvbL_EsHQ3hFqoQujpRM)@Lo9!=jB5c_ghR)C#yFPl-v&woYr5{hES4Y)_oZ|+gRaO1NpIXSaQ`aP)YH!{gh zzk~Epop05^0>>$6ur(Ex#E07RwKG;~U@Y3N;KH6}vGZeiC6esViJLyKuU+r>_EeojwnW>j74gQO6W>vvgG*;WAtU=ye!Hy>xc)vWiE~`j*)-IkG1Sr4Ma_C$D)6073>2lU|xTsZ+QL~IwF(t)EL&Z2sef{m@V*4q>>QjPwmJU-j;IoP+#P%ogQo!;D%tofancX$Hi`yk7$aL(ELg3& zQx69!*-{?iC}WMTtFBMImGX_oovz+kAI{tQIg9n1TvnY|n)i0~Q8BT66c&9s4xJAH zZ4?AUMN~zfvL=Q8mZFlFwr=9u<9A&Dzjrp|D@v-lREa-hf753$C+tQE8@>e=L)Z9s z(+bWEgMV6FD3sUP;3sHbGmy%ICB>0QX2s>+<=!+Cgbc}#)($O2a<)(f1kX4Uqlz~IZieN1IZgboU-rwND{*Y;B=tl8 zk)zZ!DYEnPcU6pi@5*RUgz&s#M@6OQN?=1tZD;l-x&-jhx_uf|3B=#cT|(<+CKU+%)rb@acm$(>?k0J^ghZcDosUtRm9MH zkd_3;5flbc5s)q_AT`ngh7ugwNTdit2myj1LI^FC1V}qi5N3aSf4{TNKWCkP&d!>( zX3ZqL?^Eyly4!VMZG;yZc)wNo?Z;IQ-KDTY^aFHlbyD|ir47;SHP4feW(^t5|A#zv zl(cwpHZf3FN3+lJ^+Y~u$3GW+(CoL?;BZ&>)jFTk^WeB9)y-qQ(no!gP~m^&vg$C= z`Js-o3%b*AKVb?Whe^}#bjb-7zR$CjIrV>0S$a!F2(=8SU-sfdK4cu%p0m&{$O;)+ zak%yu$Tae~Q+YZ8q>6W}w|zp!-M%ocmu!SnK!extue!#w9lHMkMbMZqy ztWQ4HwY#-A^MrfdB-uUJE=&fN8E|28K|9Ab`l7SmUCYt7`(jS+FHOQ;@pP5C`QEcR zQsqfIewKLdtAjiA+WC1++#cpI$iWO@>|MD$wM0A7S-Ny|0i;1`t%E3X2)C5wNdxEz z_4O_91TV{})TJzpZUcl(ftt~2pUV@eu8GIKMqC z-Ju`HEfpVZI%nd38gmZzF?qjp_lYHtxImy2SFk<*9NxLrUg~7vnam%W>@iEOLoP3HQJI1WyDr$Yk}fCqHF z+n^>Of=tT3m*_}j`VgrC5&FvOhx1tv+!EzCS2e=yEzi_8->ezSQjJ$@8B5CwcJJse zpBlF`+oKQa)P`t#%^Qe6>6`wRBDpkg~b1TSStc1+Ah~)E_JDI_*#VN*s%wWZW|0POlkSjX_<8G zSUTyja9tA6=8p`c;=c=4mK{U zCjag^9b(DC@A1T)yPHNCn5i*WYu92)-Ht^4|3FX@Ivx^U58kOXoOx3p4;-cK7t&(2 z#JU4te9)han26UfFSn460*l(77ET4SsnRObmI+CGiuSaq@ z=^@jsBOG&rjQu3zgpf##bb8Pb(~!`KoEZagHEzMr0-*zwqg6>bn2WbvGpwr5!pPFT8NRe<(7@O^t@(cv|5IAZf~}{Qs(w3^pL=o} zo@UQN>3@;@a6T_h!!mK!PQ2icJnhpjeFty<34|twAN|IQpeX618vP8SH`d_EJFcHN zE`fa@9Xadi4Zml!{xRl1F1hP*Q|3i!-AZ#Mx#uRn8yNGO^$r-gAE0X}r0`1V z%w!Glq#ql?hqji}-Tk|>a~E`;BmO=VW0Et_)vEtf*$@1HB8I;eSKSa&qpSSllG>`; z?5(q@OGp2YOK5?wDO-)P1{@(dV!)Sxc8!=!w)PA#G)L9g{@*X*Ppu;upN#l{%fhF1 zo-Kitn$G`ex`JToYfR!`TSCKEyHgHypoFYBjR28aarBK%wyLQ@M$1z)4_|PJgT&x=&*Iy2SmK%s80V)%^3e^r8Bd zUgPAS8vBc_H5#j1DkzdVJAGvx_J+(4d%S#`2ZZO|*uJN}^h@V|$TB9?2w7wSvYli$ z(d&~{h#nx|s;;%Wb%j-P{At|-0G;*~eh|vLdcvuzqCeZBYtu!u$a8A9e%V2>Lxlpj zcJ>3UoGU{y+d9dVK2!_xkRQYkc;=Zy5t9UQC!gHYgppW(Rn@84wd68qOcWU~6IL}AeDXxDW{>z%hhhy40mF1099 z*q7J^1Bm}0uZ(+MWLTXtT4kWgA?&o}S;E1V36|dSj4dq7@?iwvNV{|3;(#2I+0mT; zlS^JX#xbGT+K1}#LOlGh{O&&fQLyU!x+Cn-k_zp5z>^Hp&cgL9LFKk1zRtGox<=?z z8N{R+jJD+`16UQ1U3_@uArrD_GBuDqqu4J$Nv>&_IsMf^7ylFft7t=S4U5d93}Ih7 zlF{hNtOwx|b-PDPPZ8|pfOcsZxKun_%ME>&^!@LquJ<$1{-3;Z@Ju-}KZs^N2h4uz zHtT9V^o&vv3$0;ay5fyH5A3V9rwiHJswyl$w}BDZ&l3#jNPvUiOqEmWaFew~{B?9o zxT&{uHSk089G4f3&@74O%J{MWP*r=KK+S+13uH!++|SyTd*KYQNOrhn>0gcW#)njG ze%S@EEc&N0kRw%#$pPuIT^Dv>IU7`YoX+@zBc4-xwG$QjB_*UP;&0#Q0R<=7Zr$lH zzt+JimxK8%(-%^rV##RqP|@mI-*7% zi0Kzsq`CRj$`jG)5WT*}FzHY@)^ne5^EM_ig!VkR9c*Fl=*GumJ$?q{RyObxH_4ok? zpEpmd5+~E5bC*t8vp;_&k@}wj&eXXj!u*V9?cpPXzoWO57Xrf{N zav1X@^Ru?=hdzZ3P(6m6)>na{IbcQe+Pfi}6M6Hcm3xN7#S`2ziseNsp2t|Y3V4h+ z=3}yl6u1|JJ26#+%UX3e?GAnFxi-9+nr~h#m?7}+sbacRAER!TzW26pQK+*lT6Y@Z z2hUsn)Z`dO5|r|9`T}Cn)mP=Ko~%{@mM@kW$zwc#lO1Ns?6m-S#o_lu`er=mx*N@k zfAj(G%W{%+M+Nm;TAMbmf0dMMI5$-T&h7#yKHIMMd1_wd8;`zxirObH<<(o)XMdhL zBn0y3ofw!7c-;#-^9MDEBnq$;GW2iUN;J>)`Q~I!TzZKfrZ_BiY+HI>@8lf~llB+_ z-{wh2kaWqL`@2*&rzl(1OCI-a_p1DuPd$H$_51G5-pkHEOy1+MH>qzt#c+YG`3YHh zyEC0~3-$mO9`@9cejrQj?ji_Sf10r{{aGW=x+p)~ChiFAC%uPxysDj+$hRXLY` z&zs+jG{j5wPcBWcj91J~=I&v6ucE zlmd+qfph4;uW5e%V|RYBNOdAFIbtaHO)5#0HWD8x~5%u^}PM858&FT7lJ- zmHWNFW~K15hKAfl;75lV?@{5r4Nm$J(sSwTy*ggPMt+PyT5!n*S6e``hPTfzDhx^0 zxIUc6X)F2s)dpF(OVyAK`NwO-8xzIN5;t)tU-<*~!=O7+Sc`8K?uXAyb+Th-(Mu!q z1F0bBnVnxQppFDvLKsgmB#pV2lz$R-nly3-LA?5wYN*xs z4L_UTyH(T-3SU5(!Az)P?bz>j4)<-zzsKu|p#u+pN%tx%^f5dO5B?LgVtGZnOxCmi zLa&9jC!W*_KYwMTnr4C?=3U!5lY{O}gn2_hv-fAoan;P;q$Hnv?LP=}NL3c@p0N8X zl$yVFJ3b69jTC$D1;GUJ=5CWZYI3Qf??(z~AEq`%<->jbe=Pl$)99JHq+>;9zE_bB znj+W$9km%Ok2~{~53=K*kh#4FaR$c8F)kC)*0rn?tG(egX2a`zMz$ zN?vL{ArIkWEhsQGOUhukB4Qo91-oB7>x}8@PyHn^w8eD)wcu_CC_LPXAC1}gT7vk&J#`V-y+fvimh3od ztzUL|#>uxdS`8k+&CKdkius7P^?mX%qT9m9vfV$@@B9pmB3yimLKSq4Ie+=y6rEve ze)ImyT+N4iP!f8h=DZ(ab@>uQ@W1mRyeDK=#g6)V1 zTP$_1xDmLgcS!_yXz?jrPVAXsVV?Kr*xk^Lvr-#kecTr;6@K$qes#JZ;ABV}iM&4r zm;2InPkruN0z#qn=Rrj0&)TWBl-V%e6;KTwQX5&>kS)DwDVWDva6BG$-Xj29PXb0q z-u-^yYktQcOOGG$%nST8S2pSxqrve?_9trJ947sDr>l9%<8(4iSf5@#3%@slG--Tr z%HSH{nK(Dk(oL+Ix1Rzq0B|0<%9^?Y4U~7kQA2}DNjyC5voHMj>Nx$W@vCO4!2KZEq zSynq(H=T|VYshC3&s6%YXV-b33ax&(k&lQS_Hf77WUd<7mg&dC^b;Fm^b$)=cBIse z%3!nYq+AW`KUK35J~EK$M%rIH(1_5gZ=sn}9nSa|JJJrXjzi{t4aCFh<$#OnJ zjbbUr2|taUD~qTz@yNF>AkFPNn*@csCC_KP@UAd_)GZM?>y<{04%>ujQ|HQ9y6CET z3$Q_6Ne+}DSg+~@_eGQIm||bgV)+$&MDO$Br$O&+%~aolw0U_P0j6-1xN^!#`E^Lc z{A9kLu)KSd4cczLS*0P6r(NRHe(iCoW`DSlu)voC?5esN^u`)+|5O2F+UcO*2p-aX z!6UiXkEW<%(Q)U!B_<^d?9?mv&cM9fQ)F;c4jD2$beF?`D=f@=fTt=vv^6GWCSlUf zv@AP7y-2d2E9z#eb_Yvo=-lO$l8#Ct+2FB#txUj!&jMgs|y|&1e{k{5U%iWap>Ha3a55JlSA$Ay_bqMKJ#?5PaqH@V6Z2_2UShihxb62}ZV17f&-|U%^+O_S*24+j zSnW+20>Zy1s!D*fay_v(1e6W-)fe9F30qWj6}>iSGhTh(NGj{z-O5Ygl@B{d?l`cqcgDthJCi5wTULM2yD{4= zCu>`?BtY*}yI4ve0wrH}uDWnN2B?7YO-UHNf10?`GE1BJJ zom~-jFrJ(Bei!tnf|{5- z4w724cpTf++7%~3HF(GpNU9&|boqhyAFCAyY!Emv*>P5cXIaIc@eEnCy8$4-kPCm4 zkbDEj=F)XpUm$=3LFCQMAkDvtPtXKM+oZkk0!${9zP}~X z3jFKnw|@$c?}v=H|Krj%(=$-Y);E`)yh^_XDg5)xOKR^Sn}2@!#PbQ?n}2?JwErl- z%fEhEbV;D;U%&kC3;(;MTc_dw>Chm&CoWzsAuVykK36}!xfgAR1D3>uZU5p(ve|q1z0`4=$b$84aP_q^;))!vvc4 zwziLYIl~KKP<~mcjHwpS}%$I#phD=kkK6K{B-*-%>|nBoI(*t znTwK8K32?GTZHfO1MTX<`qe3 zy35#p)M#7OB%x1gK?$OzeWDe7QKKy~7Tb$++}gqys`s6^Nas_BPOH-z<+g{SYg)+X zKU~?PhvIV?Z(+_9|Iat6x(PI)ea^6ch(g-bpRez}ymiDdNQ;|Leb}v6HXD~Ych#WN z%HxQTz6Xc4g_X}-ehU=ZAKgh5?1!3KVj1>Zuj?HsrSp%aY9!o}xxx>ze_5#8dg7~6 z>r%m{fRmRQ>>r}uJ!Ckh{=U7Io8J^WZtRBy6h~3pQ?)M`5{c6A4y3@KLA!yvJylzq z;*;#D1s&MG|71$z6O_0xB-B=MYN45i+&+#H-qlhNuKptt2fe9oWtMOKna7)cUubsL z8G0r)&K|VgmaM9So*Iyob#o;OHBrE@zD(e2x>box`bR1YR}2Y9rK0f$kq1I3V+2S% z>PGoZcK%AK-PXK5wR@^Tqi+h4Fm814q8B98bUF+kw2^RXYe8nLt0f@x=o>9&&s&k+ zcWA!TQ1j8zob6fOD^%wn>pXI#^+l{`7WJSsO9B!dID~Vsl3HwfvTxaG_*toB;#sMC zbY1R*O2nL3D*>Ymb2I98cwFi_6U&%-{0rl|?R7kRJ%eviUXmKNKJ`chDI6t8Md>h8 zi9y`KWi*W1=DM@}d4p3nw=T!gI+8YjzSY@@`&+=`J>xhnuVRAfF@|oPegtPUkaC2m zosWS_3U4bokDdLuq56vaRFnwCCGVu8wGlbHygqb6Ey#}LJs(8GB4^w*HLdPx3e3To zEHW+-L92u54OYyLSnH*iW_SukQ7+V*Z|lbm=Tibr0k-c~?tRt1Bq(o6!D4M|Th*uZ zG7)5y{#?1Yj{#gqN@{b`SOmvBv*C=r*i9(CEbB6OP&EG6?OWth)Cz?*ALk#_#=5*) zCNiXuL2;B~^;=YC9_jN~sL;506=7}}wUjx-w|LMwG3hbi>5*85*VevVLlw6|YwLuW z2;OR0rT4<&%MWw9yBnwS(Ry!=+LM(=L!_u?_|~-LYVGklD9?}_@QJkk&%I2E377h zhvEJGOLz}kW+f(q$py-6qlX!kp#g-12R%kKIcRJR2o*V*nX<6T)nw$3*O>XSIRreLac&KpD9dL-%C(LmItsx6B5$j z)@#BzL9Hv6k`>hr>3>h5=69fB-IS`<21fzyMgs3ZJFI+Kj-OhPDNyoZ;lva|8$-Xm zB~+~L{>+IboQqWIM7Ia+fqjx;{vA6$CYY+8{ZcZu@#$Pa7EL5dc3kUi7`|JTeZY^j zRCm-dHP*F&bl*2Y=NB}oD5tYT4Go~aXxV7b8iO8x${=-3gW*r{YL*+V*}lYVuW7-i zZX8C7>HpTZ_uXX+Y?&hcEi8cE;8gRab^K|&l^a(tI-Eiud2n}fYCg1RElZ^U#uOqs zt5yc&5Nt?u{-@O*xCRFfDy6zH>w`a|qwByG|5%$CxUstA8h17_3`Ndps2H68Yd>)) zpJ5tNqAX-AVNZ7cp>;$Vulcj@!oHaKX;GZ_rrnkIpzUQjD>Z!TPkn zsPQ@PQQC}LZy7i4YOhi3f&n)0+(LkKGkZl-Ljh4pd!~ z7Ra6PMcl+w^+w1x*M;|^D#t^!T4eZMF@0v>&@g)Hi@BUrF>T?Xqcz5`b*FBb`lGTP z?9dS_ws#TdVD3r9q^x;Yfb%e0DzFeG%!WeOv8?7v>?J`6NM7x=Y18G3h2^rnenO!r zbq$%F?fWAs$f5NQK07MrnsGW_;WUFXM18*ML4+O1)U1t;fEG0|OrC+3c_rz4dE_35R;Y$T^xAUaE+$rAQwTf>dw1I7<3VT>A^on{8=TtL?R6o?!n8?f| zS4@(fBK-nH7uHaH2%(Hn@)m$Nx{A(~ft1vt12roFey7OUk8>Iror25wnl{^53br;l z7^_&_?r07p!Lh1d5Adb=q(6#2k3CQLSX#ulh~i8!Pu2wWtmF~ZKi8|nkkQ5a8XlGU zjn-(viGQ&o;wv9amH2QQtc3p_uYLj!Dv}c+4RO&K%b(qbW3(Izsy?(h;)Z6ksw1Je zXll_MjVzgvF>_cA<^%~7tTPcLJXA~Weh*MfC`LcJi-KJo^;$A;dcd3D#yYmtPE2HU z$xqqQ{y%k?nSo8VNw4UNY%y9U^uc-ixBB+hYH#B3zZ6if1^5jG*Tv;{8Vq_D zVI6$>{r#`BPh0gvYm%ZN2jsH2UxvIhYK=Uxipjpqen@pa``tx~l!(8Mbl;|S+(si# z)m;w~TJMGDlDko8{xQvFO+}*pfQP#{KXGO0T|ip|w#*tFTK)qzPfCqj5vaboMyqm1 zCH^s_fvmx^O1TIHR2X|V5v#dFU(a5XZV$iUXRs-N%oz4%JGKD}_Y5@ua>bDSUJfyA zZ|H#3L^uR^d=7TBscl7R*T7xGQmyBLJwEOCa_XeZFg9j`Z@XJKa5P6So|>8uTvuLr zLb^je3)o}p#1vGB>1ucGEXrK*j%2Uep$3@05FNX&-)A85U`pOmA72|=0rghd1Gc|o1wFMqn4$gVq9aDC> zW)n1sx$cMB8;tvW#?QQ^V6SUGLWi>gxP8H$7%|<86qq}8q2%|(&R*a zzH3R9OtnccmTB)kiBvRIE-^{`=sQR(Ef?93YMh<)t}DVTCEkH_KXzXlzNhVo@(fI) zWcg*MmcHeo$HomdR+`#<``O#?w+)Te8gLux1Q*x9pnJx5p>a8xXE!qJS%It3-aZ!n z2pBg94}($DyRsP$;6VNcyzKxo3I_b?WP;)Ici7NyR5@^`)P_*OJqy4)m`>j7iCH2l z;_HgH%u9;u>};D&%%3!=SESZO6-N!AwQ$)Z!%8RuN%$|ed`{-^YCPDRxM%=v9p`jO4Uvk{WTdh_Ah zB$RlIzyHqm>DF745ckW&equVUHiYIc6vdq~UC)bd7D@de7lIA&rLCVz4A4#0nQse? z{xd)w8CLgD91?{yA{u zRrB5a;E~hep`FF8xYui=Z8HX$Y!_v2Yvk$c@O|V0U&I-EYo4`mFyUj|dvz#*S)A|1 z!M9f02_PDtH5RSz`g|{xC#G^VnM7|kFj5>GFsE?@?>-!PNy4mVzt5mnIyhj=fS;z% z>d7kinAWVvpg8xUG@aIQ)(CUc?Y;X?T|-ynAG;B)F+2Dp8iIX`ePn+tZsuVMDFH@oVKP|qiu=&YCfsgKHMI5jlA zJZkuUNOVbyNM{Y4UEramNk&z-URi{z8EraEzG6-vXn1eO8ve1f2C_^tPLni$&mL*;ihIh5 zLBagruFs7mzQs3K-}iAu#tIrm|5cfBKXP%P3n9P!&cflEw&JO*vUofu-^)BA5{@bJ z{=6@syDzwIOBsQU6xp;SM;@!Bz^FrMmb9Q#RK_wH53NNXTMt@?z0^&m4JGEn0jzEA zGAoMy)A=oW+3OJNeR5F6oLP9V8>WoJxA;6K$v!7ci=ZhKh>8q`)Pm(<;v+?e$O zYsCS`#=4Y!2WE<{H-bMn8$A3{edKts%Ixeb&%ebP_ymLJ7YXX@wTCR&DyhKW$_J;6 zob{nODAY?=)(__$g7G1`bB~|vw58lH6NHn**IFPs zc6Qh6TGWDjk-&)n4@$6O|KdqjqL+-)yaVSle&`1!AGw6I>KDpiE)in3cR&+LxI0Rc zo9AQN7t|QMT*APdPI9J9myr$X^VD!cES!k#S(w6kasgCQeqN#-q=pm-m|YqQb<)4n zZUJnZFduaLP=DS?bRD3;mDEXL-10&<*bz zPiQZ|=q^z7{0trJ*a@*W0;WSCDFJroFmRwuF2wAF2^LUE6ap1915+8o_1(bG)d;9< zUk}ncj&BhgzuGA3zqM7kdJb)txryB2BSlyvSf<{yvN&VDg-|%sxzDVq>w1}lh{%%o z$g>juG5^Uvr9E8QEK8`*muJyyb8>$*$l*yCWpQaL!**Y{HFm)X*c=h7JOEgvv3dp? zl>nL(ra7X2-BGSF30d!3j8uQg){(ybAAS%&31#TOaZz+wb%6Sf4YtFZv2|~snuLt% z!z5=1Pt43H+T45HPx;SF1nc!S;C<>I&32CFfs|?2KX0EAjWQfYVLbiGW)4MKT_ST| zN73wXo(PT!HREYgw`e{oCUO{MO5>s z;u+$tC_(hIEB) z?y#8pzA1yZ80DTn7nGwP00&n}X@>ht;r$c6EvX8Tjhe`T%GP(Hp#KA-#=ruBBR^Ds zFm-f(ceWFJjKmYfZAH##680g(;~zv@+zEv)|9!Fi^*H~O_C-Mrfu>)TE=WRzk`7TNZ-*E=*KyJ}lGMh}*)f*cLecz{y;Xv|x9AXZCG2`MuB@ zx6%DJy&*(dkAVbqziD5jVgcP`c_4iGEdZ5v}GDyCUxYHqGV5FNcW2cIn9Ur%rv`J&(g z9Pi_Z?P#Uynx_twkR1UJqTf}8dYow-`K?7B((Vuc7A$a}y#rs#7&{R^g>sYs^*}u+ zVZbl=q&p=36a+f{8K;*Olh1#J<)!$8FvQ-sQ1efyfb>*+Q>F5PE7$p<-A6`Y6Kt!k zudCo0yZFc4`@p$bNoMhTK`xQwY_(C?_Bz?)PO5+jkae#ql&y_PK;jvp&hZTE?Gy3E z{jzY>OW}+Q6{3K#r2HYn@}F-!I>0xnPUK8PlrXe%eAImVkx9k8u#3=LK9|{ljXsbU zrum4CR}>V68e$pd|2)PUM0Z}UN*cws?v?T7hf4P~%x2@Z2CquYSOUAa+Igh40=_Od z0yUvqn78Vkw*xQ7?+7$;hrd1saXSIV4+2r2(ycYbF8uS?Qu`s<2G+*cwquHYqPWd? zl_7(P3Ce{PS%tu%8X78VP%ho!=Ym5sbpxVI~oN z&Bv3Rw?-~8AQV+M4R9fEXfa=)D`GT#v4uO^yYjgUs*M@&lQ?Nra>v6RnmIB`7-ySq zeS1AoD5|~3D`Vt{c+_W1IG$-!pR@JYCo{=>i<;ovT-B|a ziGVe=l>CfXykcER?L3wm3#xRBLqSnfWwmR$`^OjKfS*#aOPg9U4k#lOcvNoVpwdHL z5pdeKmG`X{hDw2sboK$Qd#(2n9D+;(0RPlJbN%&On6eI#cW4dRUisrE0Hfq&Yn4Zz z1j+mpL!AgP(dL>r?b&14Gm&V}2-1G_Vo_@`sOjkkM-ony;W!(h2XitJshy_gWfk!0 zsu94T(tyRb6_oyF`Jh1cz#dS_ zA`5CKQ|v3|Vv<1weDh;+NcpthSQLN7S$7S^sGpVv9qU^yhhh2 zQ$p45b~zcHF1obOV#W~2<&%V+Eg-kQ0Y*jvsCg4px&7e;642LbnC-`Xj+T^A+Gvdv zgL!?EJuY4(&{3uGGYow}$5s8S8%2HO!J*mMz4Eb?z5$k^BWC9 zlKf-JvD6%y@abIQju#3}&tchNwr<>ia4Y-=t^L!910cMc!&Y(+c{E zCbaDJoe&~}!X!0&`+dum!Q45;cTz!^C1tBJ2V2%!yFu50C9gS@B#fcI{6VF4X%Zh7 zb0GXRjob^jG}ETMy4jVfh0~vZa?DsF@rb}6W#|#opt%jIHKv^#0_U+(>{oQJB*^68 zeZb3?ix-fLI%0YSC=%BqE8LB~LQlbWMgI%C>2E1(U;Co2Y>v8Eug6FyPVP1&f( z;j9!8L);9Q#O?~8UbW4K8%YKHMsM~T0;e+0H9;$16A*DqDm4NA;Dh!S1C;RT&G$h) z=96#x4@AsfEwQVXvrp1q=`pNKv*uOIR8;dgGl04NQz~UBpU3xXPu>G#=TkFyt*pEe zeS}7OwKqbp>)a?P=CH#U6L?#z$n#l?ne+i7{l}%E0TN;LuX|TNKffo^G4O4MCU9O$ z6<)WzeSp&Q9KHH%7+@Hcgxzm*y@az81ET>glmX??<+?CihiENF(!9{v=4s0qa#Yvu z5-}sBv_4FwsGE+AX0HkwtewS&PzW*ce2XW>l@1JzFz(Q2iNuWxkkPt_%%Rs*&i&Pm z;w*dXeOun^d-(~?B042&Uo~*HnaB-_z1xpc&1B6G-RMvSxb%0aFe{B=e?$7J9FKiQ zec@+iBVz)l?$t8jAxSUwNe9;xqdyGJJJr_w{ z0lO(9A*55J#u@aXZ%dv3Vrj9)qsMSeoYTg>iBCMF7$IeiFeQl8Eq#!iU&uf&W1N2T zVFV{6JRpDk(|WK>Zl4FQw9hdUBZErb1+yz~mU;Dl#b$F9E`!&FQG$BkE9R_cYz)*i zTGk!%4|D3DgVsRB_lMh#rj#Kw*yMr8#dobhQf2$79H1zt^9Z%QeUfVf{R$RfgW}Mg zovA1@=M$fe3^uM}FiD{SdCVUH-IOaP`n~d!0R3*+ASmIC17+NA2jK)qNsXt8_}@xw$`6w?nirCCShwgB z(=mWu{B1yeL3X$ta|j&O$9iSuc5htHIx|FhQ)-?Ev=m*@Wo`lHW5F2@_oXVBCED*x zR35qgEP2Y3Ee^#1*7_6n*86I%Hh>pa%(WdJxs$|qIxU1Cfdi_bqB^VPjTh+f`kt;b zWLg|!+J6Nt!#@T@w7O208o?pyUn6!?7+uNN*b7GD2|8X5&58@5&x%Gh11f~krD`7x zG2aFo>_H!FJB%b0w9_Lt<;iFdWtNnW%=&3~uH4lTJ9k>XyLdwl65-uX3}zNc@b{Sg zaltrKfu>u4LNt5!elI>Q&l`{kb<%@+FUh)5qiy@I_+8;2tF;co`tCg5=eqy6B|4e* zKm|Po6oGWi=PEUUCfb5Jd*cT&hevvt@W%DiW z*_GBEcPL=_fv56>n3hbvk zVdsl7=DafqGU(MJa{thzsyOPTqmiq{L?n+=)qCW$WcQWCLbt+vox(=TtYEH4M^cA>F4b zO3tHedIxYX|Pemv6j3YWp{`vexU!-!N~EJ^-ajqpWjKgz=n8byv{was___| z%#+clm|1 zz@iIJvxFzZlKI~7EndNbUIUdfp${r6d#ek@1zwSOUG0civzt8`^WaX?PYjefW|W$C zW@@RB)Q5raAr6)L9F7UkQn1I&f;KWfmz4^!;j1&=rW*X*im4owKFLU`u0B7b{Th## zpr$0ADVT~ofYU{T#s_Vy3!>W7&u;>vU!_JadqIOU?V^x+z`S*J#Sc&>jX$+8J1GJv zv&QkxoIu)~AF7TPl&+5m$9tX029!?T1CDk|R%<>%>Vl-q=^DWkg zEmsh3>snK=A6vK=SrZ1Fi4^uM;6x^Fc64}N`A~CrZN}$?>sre-g}Om!AdtaunHO-~ zab!d>x`qPQH}ui`5#+~L)FN?c$`?z?pVg!&rHGF5UhHO`j`s*xq=3gT=d|x4bUwuKD?5PVw4A zLa;RNpq<9jGJhKGT)ZQfwNAR8t+gMLghcbiQ}PWKdpaRaDZnUC#3)M{6D)1ZZ=QF3 zlj@5D7KFFYUj8wM8bgBk_sN9FjlP_&f#6-Rwv-w&DC?)yUKHHdvwX=b)~HqM)+v3)+m6a> zeeZ^D>G5kuPg5E%MEKrp0)`jKjdY(;KcyFMyxPVf&##jKey%(4Re0Qn0)@s%hx|=n z1_gmQTDY;2vBN%evUs+2!-1Po>_T&d9CN`f;5}=leARwKJL>_Tzb;w%&8YW2(aF54WXzYknBz^9tPYyM7nb5WkRy0 zqrUe1TzVN5q)8C)J*$Q?8&~kykI37my!K4^5M?2|YEMf{S!(;PUOs=KQ^cGl4?~{v zQx7m04COD9IM}uyOW{}q9Cyb$I#e(KANGfNHA(IP&^84JkoGNU2(^@y<4x=ai0h-b zscmEqrQA?Rq)#Qrb*DJ$4Gkzzd3zaHXg7d*a3w zPIJtf;U8-wsg3lBCzCN!ffq48y7aT;-L(MjEXMmqzI4OU972NBLtbMQ!W^#YJ8p{G zKTRX)St3FBacaPAzYTJq8U4rB*#PR1r6fYhG${q;`0xt8-#UVZX>`;FY z&(s7BvtuXmsW4z6(1&JAKG%u?(4Z>N^wuf5j7LU=$NDPqBWBCnG2R5wYVbeqUN1Df`N+rmY;L)G7ZcGxy?B>eV&%mIc-e}1%11n(>4xXeM&t!%K0tbT_AUnSt02rIp zx@v`-S>s}rh}MHg6&X^nH7kUkqKZEtLfXe89+==7MDL-L7quw82zGu4)vjvJACJ50RFtv<4-2$b#cIPDsLS*r$Qxbgm05eE0{QBh6*w#KIMVP#AGY*Rju>Edj;UF8GC!1Gry8a68hAvb)2Uzq)Ng=qMU>)x-tH zY0T9PinTS`Se4_sebmvOmkIe@23(eRM*hP!A+-@0aG%G6L=li#6W%ZlpH9zys5RvF z+%@XD6AHi$H?QY!cSLV!Vn(&(NRQe2M5l75~xZ|SVbueFJ(TszMdwcm74cL7KZeBwV zRr34V!-2SWqYh~Sjxu`;dw5DewUknT6p1S4bhhd}?t{Bgx?l9Ak$6YCX$>B6{EZ6A zJ{e{fP}j6VwQLI)@PB}o3Hk32CHVTW^PQBX@266;*rx3KXgfm_QQ~n#qqw7kF-}sb`~C zdYPkE?6dE9!_IXDQRLbw|1eSy<;+lF?JGnWDG@R2N=!%2OhKA042w}NFd|b*J?t>v zw&k7bq^gocJg4B>wmj^cvu!HR@0(&+n1+1~=Gg$w=n9v2zk56Ns}8|dUi!$?*qRa; zhew<(3ig|)@h$H3ydyg1+uB(;f!=lV%}&&zYw$$!$IQs3_rd{&RNx?aKFD)usWqGi zhqTKbS2ghjGr2ma$S;liv4g75`Ya0b>HwR#8-(2OmIc&vnJ4X?7#gT$4PyF7p=PkP z_oSK!e0_JJHszY6;Y6^hM%ml1=_%}%CM7)%nDg;IC=_@Oy9QP)z*dVn_@Bjd?f~F} zL7Dv0Ji0Wr)*J`qp87YuYw{;>7z`hmrej=xWJNE1pm;em?SO{@pQ_aT)zUO*s;hIr z`r+HlSf9QRX)2YgBbOQdw;%^sAV~u}#@61&h=;bg*-xNFQxt5k@oa16BZJ0$i~$qI zZo{rY{eku!EZ}33qmxnG6gB0=23nhBWjiKtvZKw`Rr!yHJ`=qS0V=a!C(_k@>_X~Y zpyBY$kH{PCwqv|S!G{9{P+bzIkq~TZi%xU{b}Fw!mYbs#$jwWCuMcsijSPlDD=#rd z%XEE`as$0Mx$R02F++)Dce1uUN&Fg|AE4a#r1@ z(+Jx)mxeoOIOcq5$_x-e`C#%dV;#|?m^CSl5q(}`700Yg4#!5Uc~`Gm5~`_-^i8f6 z^P_r0=<|BLv1Ui<9o9=bRLycGgXrS1FYQsMpV>&1%vSx%hw!h-CMfv2k* zHUer;0-$9fw5Cl_z zct94lr`o)O*5W73SHQXDPM?rD!a?MD6>$*sa59W{)1K=zWUptO`M&JHGbhlLi-`S{ z8*?DtM{GQ3=2?6mwYUWf*c)U?Mw+0f7ud;*jK0mCoaY+`DMpmuJfd699im(6IQXlM zft1!f16Th?2Wm18HBx{{(4D+qC+t zflUD}i@LB<)(DyHh*w_->yD6seJlVxVB@=U+=(Gom35?t22vMgA~x!7J!=11pvg}P z2LM9ogp$k=#kow*-k~&DHnHM3XY3ZR&OmoG2)b|wwDq`UI8w1zuk{MZv84Gsa$u`W z1J2nFOQ1(4pLOdj)B^ztFhH>;;BSrt{W<3d)>t3egvY+*V9-nLR=cz*HW3sWNk}g2 zZ&Eh7R1=?Tge|*V|EAZ+P{^^j+7jr~1`)@MUOXi~^=?9?D&9FU0-w*kxV2-rrjzJ6 zjmqFo_u~^F-*Wo!NExZp3%7V*smhztuz*mq?~4cS+*`owCWEU^*eeu8)c;INOp239Bd@%F+x68u|54bt9Doh9wZZ}Ou)42q&;PIXzWcAqtot_NprhDDED*4KMFas6C3If9 zQU{SDp(qF_Bw!?=Lr@15kf5U!4P}(30>MxMggR29D4;}y7$8UnFbTy-?{`1oeD8h# zhCBSoM?;?ToOAZtYpuOEzw%}8g8cGwB3HS>F#hP;aK00}m!vRRy)yqu+GFrQK{9%P zI}Y4W^XCkN3XjJd!UR7LFXqOC45i_IBvW9x|Fg;3c+H(r3lDxXG@pt+5jL8pP!uxg zsxV{6SmbUG`c))NQN2Z`-JaqLGtdAJ=aWjB@@HABse)vKL&MC<%gulY%I5_v7e zyE`Tx#VpK2TAAKk#WEWG-{)d$o-XFNQ)%7x#|&gpE*7 z&!KCW?ZjXi zpVsfiZK1^JkSYqyoaxl2PC!d8++$}n5_!KU6Y_XOZsevJv)Hz?%+UXbFq#_a_dsYZ zeW0~`-)kV$P1jSW;vh6L(+{Y_cs&2m2ZgzBr^$0|4LC zq2~y;E9}tP@Kl&^<^sKxd^q#b&a*BIT8?n4>_>x20V%oGU}XzG1yLNBN9C6;Y5)+; z`Xle-T?b+J#CfckxE_r>4C>DcF}$AZiq|}#m*W+}*NCk$Mi42Zp}no)Owc}1kghm< zJmei21Y44E1+%k@yf6ov%wV6wU^*8Q`XZ_`VbHD)PF(gJL9e z7DxaE_1*=&`O_xA;=#{{GVhg)ijX0pY4=}x$lW|;_w6w6;w%(IYeSF2g2iC-I9GJa z!9}~%_M6{M%o;_P=WQ`?CBG=i8K(koj8iaUXIV5eu4VyJdb8~NT1?0NT%>W zizXcY8U(6)yr~?-`*?9qC%r|-8aZ-_@H%6rO2oFud;;HL0jw`*+^2DOu)qxrM_vwf zXLP;Fxr(mc$hSnjsp}sQb6jphD`7P{j`>Bbn^w)kAgHX zgP?0)2nErHnuI2>%+P_haeRv+zaj)!hTB1%fLrZ*q1{!}_{N@`HuL4Ra69cq=ZyQJ zh5-z-MBMW34LlQOs&xo5&s1;NR+uhgejK{qLYnTiJn|{}-8z=D|2^wg1B+lZ)20+!T7zS~MEWR` z@z6=(-OiQOyH*4eELwkG7iEg-Oxaa zgoKH@tX&!K79>(fD*|sfxW=d#V^(0r; z-THWiSl9+Q=g;Tmu@>ZMHlW|pX*)(e{ECxdy?j_1$cs?^{9odZgoPQPFj#y2`7NEj zp>-8ET)#h|sbYZ>S=72?(;mi#{Jp0RL9d}PnY^XFeQO(vbzwx{D?>i`fc6sx0vGqJ zY1RxFDkFqZ$EnHm2onYNija7$9Hg0rA-uTP=>mWkZZkTFhDoZ)@qCVPf^)*UpIsii zZ8FR26kFuVv0vW(3Q_yvg{gGS_F+6`RuLEi7=LYd0C+CCAsS^nccA{Iu;>sJjg&xf zYQY>y?^jU8R?3p^eH;p0rSa+BOhD|!JZ(-le%W_f*6?`0p*&%I|7h&GCb%DQOSeYy zWQaDJ8Naq?r1+zJjZS~kL;Uez>wTvv?$C~Fkr}R6J%A9&F7vZfoG<|eo`Vn+G~FXb z@aZPv_YJOit5Im&cB~5NB3q{(CXViDF;Q1-g0Y`b z^xS(-R5g_$D0&2<^y4+t7YzY_%4+;VIqDVoUH9X}EZVHq;09l#&ef!?#VKj@QB!UG z9-0#~Wa`I&b|GYwQLsl0f}ch}mn3~G7HOi^#8^uzo7EiKG*Q~+$Hik;R3np~m*f?c zqH*A_`p-dK?bW=omdtWT2o48aIg+}#)J1LK(4V`bIwB_D-5iaOL39)b=o8Tghxm`Z z*?*tQTXU=<`!KD54Ab!3oJD`n@D{?}efI|#=d}hru*kxo4nA<{-Z8=N+)=~J)b{J} zZ~yL(gEXSF$HaO1oR+L?9%zv|dNQrx;@hxL&E9%}6E-tw8!}PG!>zk! z%&HvNHoGv`IhE&7m#p=DA~sRs{)VXEHXJ)Ez40hYWB0Fzcm1+g>HRMcPHtbnP49sG za`T;+!vFK$#n1KN?f0+p{<@@jvEXs&krmV<%lM`T{nofAzcspciWk=UH_=)>Yq+9w zT$L;@NPBxt^hv-CW#Xp2GeXUvg^@3t%Fu z5N3s4#ew9Pi?yupc~@wgjRh}(pW5}+-M4LW>>fB?-i$Q%E4FdV9H}`Uz5adSo0!(> z3Y%0PPJTvFM*TXyfe(cDi0#62ZhDLpu()*LFBqVSdJc7zUSP?{9I(3|vo8z4*rRHQ z{cqG5nTTuPbN&R;Xh4{2#p`-bu?2OXo8ijH1`ZfQl{%$rLsfSw*H$4>+u`%G zK{e8+ZeIL|i=W_9j3;@2MHt2Umb1(BkNN`@Q@uL?=$BUTWxO<_YPqp$v<)CPX+?l= zTzLh2a@LnumyT;KCIYBx?GSL0IQsWF7GAN`iZ@@~eKu|$6w6NjFl>V^~{`(LAU7mk8#o`M5dlddX z3jZDjWCbqj6(d*yB3iaQC@4ZOyBr?_dg45cJ|~XV%lce)-PZ%aGaIpo38zJQc}R%& z{OhJ9bUb&oR&`_+l7@&O%JM9TeKw#*IJV}yy?Y4=GCv3`GX;ds5a`j}3WM0&br-+^ zb^#i1hUW6Kg#O&m|3s#XdeVEp!88}U#wSOzrxAZqC1TF?ocht*3PC+Ta5@l%b7mue zf~rmeQ=tt=L(cj9)PSByAvBF{sxNj75!bZ>|M(ES6|4~FI|KMJtpl8b0=^Jv(j?)> z(+Z80RGM`4(o27Zj(kmoKzw22ms-RmVQ)rl;+W;^Hjf?d2N7e?E>2d3#MY>&Efw}t zS}Siw@jfN#_}XXx$>zB-Em0ON$Oy9B3k8`7(P3{=Z<}NHk@*dSYrh|}WZ)0a9fYa0 zO%2VL*4k^xhF%CV-E8?f3=)f0m?4s%x^@%x1gq4iV(jyPN6i^>g5VUO75c&ywBSr} z+(07SKxpIK-d=(D=l4C5p8Wa5SlOK+L=?k?Sb<|DjP!cdzRL@t_YpGD+B9n+)J`yb zs8cEYjx^?>Axxgmm%4O+2{kQ!NWJPHT~P=;-@Cqbkc}8?G1Qn0pqPpoA?9R;>KSq> z@-=>kVR2@{V-5g7wDv9i$9q;^E=2&{oMm6;H@MZ+|XM5L^fS&%Ni0i4GVr2<3Ezj5Mk@%>Ya*mOm}s zE@;0$Z^(|3D0y0PpQ1NZG9aT7E)*t$jy0g+O9fuyPHsd|T zjga9Zu0j&q3{#|5jp%-^!s)>~i@q)tD((DmF62ViFqY~xC-D>VI!I1mk$k1z2}zMl zHb|+l>G*vq0WMmVsy1_(d@lGmD7X+VlC|MNlx=n?08xi#Wi0;H<%ET<(VJJxM6|Me z@vis>tdnt+^@u>MCBOK17lS9ju5AsOisP8k!iW*4xxN={m1J!8F+M%rNabWjF%ufZ z=BN6zv(=;ViEMg>4a%qe)h=1?XD{wIJ9H8yH##Cgpn*5@X%3p|P4JgXm=A#sx_$#M z;2Vj@YjY+W$U0Ae>GM1yxBEE+AYAd!O~uVta%cunDg+yl(aVMDyoE2yd#^pJA`Atr z5!)H7-Vi0Xg25a9`UqGRE{EFQl~+Y`y-fP!RBYW{xyURGTu1<%#(X-7uB&a3iHFV2 zne=Y4t`#(A$x41lRa7>9@apwZ_TFva+xLE8(wletPX{{wFQeHSqmW(m-Dg-RF2i~L zM*@17k64+&Lk~X}U4*?p+!B*+B{DyZKE~R>m1oiN1nmM^*M+*dPm0b_BH&Y?HJci5wWfXLm_0&~Iai{O+A zVUR#WpXv>X#7wx^K26`|AWokFgNF#2k1bnO%a9f5n;I0p{!ZD6UqH8M}xWBB6 zuM-4{dNeXwrXFLJp3;)nN)Y25fkcpPMOb@1@7*n>Tvu1V8CMx9P6?vZasEM+b*YeujpnG<%D%=TQ-|UIa0gK+Pfy7I5 z;Lv;5=k4`Hus^(b5B;QX(9_?cJ+_Lh-WlnY0(}DcE3t$4ITtlQ)lBZ1zBb@4?y1Yg zgyu||#d<~e95!esrlT@bkwef1A#pvqeOjs!ZuOT7^TP|?bIW#2%*FhH@!Rl?VKxd9 zjT1;AeMn5~wFuuub&zrCI_+fqHcX_$)W+Wcw6 z8vJr*xTAzv@!gnEX%liFtFDLySQ)` zm!-Zjk+}vz;MI6(qE?!&3*Lh4#Y|LDIaD9N`r;wFvU%V*NHFl|q+RqngL6rRd{KB#%E7XJ-s&(AA8V3N5D1e19>=WoCSEiP?E;UL*ySCxm zv>b1;9+Nq@GFKwesjn%SOTdSSu)LRskm=((cEWM-(d*+Nd;#>CJ|N4g{rN6JPSH1M z*Lx4Ekh#LpI0?ID`l|S@^3pMhEW_FFH8`9nV%(^^4jR5Ye>yVQKhyVjM6j2oMp0d} zKv)`nMCtqj8@3Xtxcoqu=x?xbo}n@m+G(X>_$1Qj3!FqnO;f#)pFVbp zajE7u?0ejo!WZ^nVJr#|_k7lBMYgL`GKBTqxK0AT)t0c%3bg>Hnj9y9QtGp?`R98) z#BMi%yQ|QJvJ&hJe_^)YC=a~(bR5OIr)C1gbWek>65e$=1#Uhl?~L_I|m)p$|!B@99JfOBOzVjQy1Gb@jmk~wgt zacimq;nwtM;)_3^ten0G$PE-bLR&|-h{Tkh_wTka$dSXd?T*uqlI)85ONCI3qT#V zDc|KMURvE~tTZtg_nCO40{Dwuzp;W@NGTzEm(>HlRNJO(vZM;tr^<`4M z8=Caq8~k2eETL`lZV(D%(7uONI}x5Txk}ZTn>sh((TboicOxlFW(Ib3mP>|1@u952 z)OkUweg7F-;%y~e(E@q)=^stJ_;^!+fs0kNjA}#Quk_c~03S5e-$Be4V`U-WZWt-5@lS^MrNe<#|{(R!{n4b z3?91IS-VA|gqyIVN9SIDzVp)^Z6P6V_a;|SEvt-NgZWO-7ILA7WQ5d>sTPZ3FMas@ zw;;H{d6``5R@gB_zZB5%)Mc@lhW`DbvzzB|2n`*c>z25*N`%E#+F`wH7Lp=&{%r$~ z&8xeUBud^*diPWo3d8_YL$zo$?)XQ7LLuGdF;5TZm!maCQ69s${C*2&V1 zSZ-#WOAg8ap;AX`4UVw`MbF+_#75@c@BxNDM>~r3Fdj#$k*+3LK1)HkW~6N5^T?)& zt1-c*S-!PXY}eyClhHp447E~HC(j+rxoOH`K`mRU6<-&2Q}M~|GQOF4e?e%onSl?4kI#qZvP=#)wGz<{MGJ7vb=0;sPgbCxd|t;s+}8L^!iH{ymZ5qN6WPM zq`UnzLqob$v%JSnz5?tx^}z4U?hd(^DCPL9VA#! z+hua(j{+^Se({`5S?qM6u>#qVy>$56Wop+wxcV5o)hITuLO`})rH^=92$QYYhy2JH7CtrSKhf*sh;c4CySqvVu8AlkG&sj%?m4X9XPrY{V0y|!frcN zM)%Tg$!j_K_#bBJ0q7ojYivww=`F+Rw7av2#+{6z%@7AZYugq}Od_Jb&Ap7CBWD0M zv0ecb8%Sg-NwWE0Cf+A2)7Sb1Q8q+);f^X`B`n+o9l0pV;H#B$PL{g$%Is+ZA#|c_ zVL-bpRV*1!#O2K>6xTWb+R}dsWDilWLB?>Sx8$|=RPQ3Wo~khwGE1zV5nGij@Q^|- za-7POoL`1Kf}N(gHp59P=BQ!Z6RW%JLXLPeCE-HuVn2<|__H&mt4jx&C_|9>vAxDd zbVm=|$Dol$j4fj3Ho-MNY1*>aGG{}~mdegBdF~nnrsuX=i>q8omxE~DJ-3vSRZJ5k zv{Rxd(vPw1=_ei&_^)Hh)j#qj5Jg2x9a1aav@ zil7g<^yRTt=#?!K?r>kaQreV~HEC5x^ElcmS)<}RmkhDUqFuzc{GC$WiOT~V-Kv+B zxj-{|AfcUep+HfVr*%cc0#0m)pCyVVEFG0h9m+IWroYkBeNDmGH$)Vs@Mq$(Unup8 zSoNW9?6`Qk8;&W|uo=nl9ow9Dfz3*cKTK~VR#`{BC|u(iw7!>txJJ;dJFs3lvX~*? z49RO%x!zXdx|mV@8fj-RI}U1VF(%AdrV)0zz*y*c#2(p_{n0i08&Y%oG2wsC!38%Q zG@v+i9BX7~vz`n!F`SZvaE;&1z3d{`oBP9AuF9*sOSXFE^hLLRy2Y?vr=gh42Y}vGKelP_S$OGCQ|*5*(kC;$ zKL93x=a)|FfQLknGHg4PzSpdSrG;jjbPOL3%^}QX0lIu03}s8-64SU9*{nd?eVJ+m zwH5#cz)`@keGMO1^K0l;x|; z*gakQ1SN!WqkSr?`O~v=jARQQbxcCr@4y*y8zRA$6%#T1ASAL6h!%+t?z2pl8@aQC z=ZBM~Rqwr^ep}tW!6>#NPQZIM zdhvWx&L~qCaD4&tMhhHKJiu3+k&P2s^WbF3*I{mN8+l|ne`(2^(JphuQBuzJ_MCt5 zAF!!Q*1AuRcz@1wP93wxo5|FS>KV$c$mHL7(A1WRQnSkoMq##KvM4@#YeUuevb#Hn z#Cm6Pl%>Eg+|C?B_`Lcxu1x7_#GI-{Q?sGfMX`|TEZw!k9_2KbtnOCI6SC@s^?+<4ITa;(AO$Uq9rFF9$Lv4h z8zm+Y!CK4x{Im11svr5f9f*U9m!`&ur3}*8I_Dm$hSz{B-=cB4IIe&Xt%f&}mvw-E zDLO)i0&Bh6&@9o&gi1Icdu5DHj|u3|)0ykgg}U`@Na>99Dia6>77wSE!ZY4-mg_vK zb(O=7-ZVKZOlBh-)LGVsc1FFK96vf+6PnXuJj~r@6ivQt(I5GTCM8x(xWNPHk^4H&P;oV{#KLvD-DPhl zOjEL#w3eFzUb&EQ4sS$j_dH_YtdxN=M^xF|xb!g{q?BxY_CJ(ha%O*04)BxyNqZU= zrkmL_VOknA32no45o=tfU^;R=XEg9^@!zm=ugC3CZ6`J4GkSr>=GyOlGH;GY@V_6f z^SpGmKu$2Dc#l8FF$>A8FRtrJ`2;gQ|6}uEoIR{-&ZCOm?w2eObXl;M?-@q{G+Ur#@Hk{gw3w6xGG{nR_(O+ob(%UtVp19$MLm%ubu8`r6SZi%STxwh(TL+E5t^Yxy`g$ z0yvsz{QmwVU-NP8725#@sH_yR)IjH!WuNGHV-V`pG8h53!k?%iX&{aN1V`QBZT7Fv@s;o%r^c3)Tm!0G*Zv=@+eg!Q~TAP`sF69J%DIN`MD zT56YBQ}zRs@yn1?q9JS#PRaR!z9;fqdwAceT{7zRXsAEn$X$B-$6n5)VoTr`>1s(4 zX?=I5}x_hX{SJ5UZ zvxe6QI&khq7@V8KG(qf8#;+e43I*3%^dAkFaZEYq=(Wcl^t5%(Lb z{e^NkKSb_2+1Rp>LOI*tnUY>%h3#lK?Du$}2o1rX zmxN~fLD}Saq-YPB+ZRe_ntGWupwCPlX-@ zF$ETAn3coWGxW&s?Yl$0l2w$#XQJZ-g5h?NrZ)tcQQerCubHlJ`K=L8XP#W_nDM!I zvS(U2&iNScWV?BPxIY(Pj5|rZd$W{R%B>$m!rJaUJtVH<%*<@&>ziF24&2{fcye^S ze3SNI@;R}7ChPYSNgiUx5?k$$`a3f_^7yPCPWLobqU7Sk{o$^%&7&nB2IVsTYu&iOk3K#;2DDAx|ZR66+*TwzFn5Yt5y`Mow(+7&Q5%Grg_#mE?CQ zbnR82KX5j+Z3Fp+Y5&=n|Ju9uPdY|0Ve*hjxCbA&u`;d%(W*cjfP#*Mm{d=s(!#GR ztc4HErX=;f%m?~QH3Kzo^JI!>-%#D-rj6J${wk&CxL(VEPPP@l&6zd3 zu&RS6>r-wCRWbP72xG+69@fbX0?F+y1TzO<89Dld%_86-wX7w-LrRg{$QGp}T0T$DmInl|K+BGp zi9Ga*Cu~LPcldHhzk}>%qXm80HnU>(07PE1YN(*W>UdH+lAYfGS%?BA%2yadB;OGyF)(dHERd4b(2)L(xgjp_jCtg zZbJF5;7HZSYzd7a3vTwB0UL8I$BIt;*f4;+2Qgl6mVdDJE{QhUcgN1xWOeDgqF z&sy?Yv3gkTR=FTY|Fp2ht^CjPMM`MRJ8G#yk8|3r*%8(Fxax-!pnh0GeRl(sZnsnC zK^vt{x;nJ>+}P+dIrj_)$480+ho=JLBEiK&lGh$>72nvwEzb0n17VUg$(-Df0{vn9 zI^ZK57p2NcrjlQk7>audrX8$tM3AaKX-S3{>(+nQ=weXZr1B;1t$-+ju3NlqqC8sQ?_^A?DJIQKtzTt)k-`+vY&j%af+J1DL@}N>N#7b z%*ysC0-eEvYq%i#knwY(!{!RcLp4E78g`jn_QxJBx?=WS)hrlKi^D>4R+~4+!2ogB zB1E5JvB+4k@nv7;7GAZ=ejXK&PPC-UeoDyxPGYwtC3K{L@(G?%EPjGki zD+8+Qv?1SClHz}f!c+Lnmx$zR-)3wte`imuet!Sf&Bux*N(T2CO`XmD=2#ULD&k%c zlU=igpxqnF%J!`PPMrS)OGhuduB%lWe9&gO5%3a-`f5+UB(jNbYkaJ^k6NV~>a$Kc z{P-iGK*t=KH{l$%jUma-Kg*{C%eRmD1LL;$`!`48$CDS-WqQJD1a_J65+$*d8_udX z*gcJ-cNBGZQwwcfc(HGQG*pLL+_uy!O1Nj z*jJyWGIPoibw?>GY_dkdJvJ-S(U0SHahKkZZ=3__4hUg3&QM^R&(g_JGAPSEm}?@{ z9gvs7C140hy|(Yfp@s>MSvU2$mZP=smjV+~FtDH+5*olbxTFqzoB|lmc z4k_1FZ5T&5^IBUb%*~=-Dn3IEIoK_^yDP6IBthA-As1SIyF4w>2aekq<0<=%_1Ri z4mXvshHpwr*<-()5B^h!<8z^uGrR+=8;7wjL{kC6ZAO3BX2?ZE*qIs zI-e@D2BB}6UYH?GqC}NJiBXpu4JzMd+*o2us*-pSX_>5|T5EhDocrvaV|f691j4RI zY?+#IZTpZ;WzM1ZTdhEN6!TnruQ{|;bRn6coZfriwnimhDtu83#>-+gr?N?@Qz1@u zlamt1bQSx~^sj{^9ccGwIP>EB!z80_#)~k7c-WGAN>K=9<4KNxt!5z6He~gYUIp=Xk6;Xc!qewT+ExB{G zBLOqiEIYAkZf=;&`{IdVTrgvqpLm2pu%XwH%kLHP1Q1nkD{Ha#+w2BweL?P)&j|6H z{cCi8+S$OvIfRt#%P=aJ0JDByelE`F*%2MwfME28%%-3%)p)TPLn%-Jw0R-Ok>1Ig zPGv8qZ=T}9!xNH=YdplH6#+H`j4byZ(jg7405xzGxC7PC z*D5dBcgD>N z-EtyiT&SOjI1K%qihHC&?VTK~Ez}hF$XFstFtG4a|WG!`+g?sV-TJFJiYucy+}3dp)Yc6NXBL zkq8`X#shW4Pw# zH&QXSEID7(&qWbqqBak{ARQ%tE=07``*5-oZti`OP5~1_N9R5{S$;0RHljI)u-SxokR$dlRY{pTVB}ymhe*W~tXJ4v%!yut7CbG3v7a zuVuV+T9{oRp`FhEmi~_)oS_39H5wauuL%5l+yU~E`V82bp+n%dBE^LW6&BMw{EsaT z74aKtsed0z`q)rqLbMAz6^?&_hcf^Th y2mb3f=g$25Phdg*T^D3m{JR+z&ql=G3n(!(3b}@HI*D8&XHS}+pdGt-^Zx+7HNLn2 diff --git a/app/src/screenshotTestFullDebug/reference/io/homeassistant/companion/android/settings/mediacontrol/MediaControlSettingsScreenScreenshotTest/Media control settings with configured entities and icons_tablet_2f22c4ea_0.png b/app/src/screenshotTestFullDebug/reference/io/homeassistant/companion/android/settings/mediacontrol/MediaControlSettingsScreenScreenshotTest/Media control settings with configured entities and icons_tablet_2f22c4ea_0.png index ed637582cfa240a242c0efb3099560302198994d..abee11b4170641c09836083dd3a019b29137e4d3 100644 GIT binary patch literal 41688 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 literal 36896 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
    mRa?@?A7(GcJAM8{|Wl7`pfq169zU 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 li8VlC9`F4ky!`h2fyKw1z`q^vu{}&`X{+a*) diff --git a/app/src/screenshotTestFullDebug/reference/io/homeassistant/companion/android/settings/mediacontrol/MediaControlSettingsScreenScreenshotTest/Media control settings with configured entities and icons_tablet_landscape_62cae397_0.png b/app/src/screenshotTestFullDebug/reference/io/homeassistant/companion/android/settings/mediacontrol/MediaControlSettingsScreenScreenshotTest/Media control settings with configured entities and icons_tablet_landscape_62cae397_0.png index d571cafc0db99091f2bdb6d32a3ad873465736e0..43c403eada02b67d629eac207531cdfab2661ddd 100644 GIT binary patch literal 41122 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 literal 36335 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 diff --git a/app/src/screenshotTestFullDebug/reference/io/homeassistant/companion/android/settings/mediacontrol/MediaControlSettingsScreenScreenshotTest/Media control settings with configured entities_foldable_c908f502_0.png b/app/src/screenshotTestFullDebug/reference/io/homeassistant/companion/android/settings/mediacontrol/MediaControlSettingsScreenScreenshotTest/Media control settings with configured entities_foldable_c908f502_0.png index 298a03a48a869dab92e67bbfc6375207f112433a..638b8bb7bff8c8b0887c28078d8f4d0d4c7c41a4 100644 GIT binary patch literal 57377 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 a8XFF8SXyM9_EA6&^1QnC=`7WYH~$M#riGLM literal 51237 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
  • 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

    S}Zfw1~AY#{**O+!F9mH$@W1b4|%ZgR*ifT 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 literal 48002 zcmeFZXH=8x);0<%s35pp7L;m5>C%yELj(;yR0CoRJ%B=h&@G5ciAoa?kPZnDYS07- zf`SGC=?MWMB0V8UAPAwHC%E_8`+dJL&hInM`2MWHa6z8j^Pc6J^Sb8q%-qySNI+D8 zhlfYV`1(~#9-duVJUlzk?BNIgC1vZ%RUV!w9^5{*9HDNI7tW*YfoS z#-~%Ynhows4$CEdPS)XlHfULJL$R!$$e8#JzrNY)DUulmuIqNbAuzu*lLXzV@N-JOWSpRu5okCYi;-2Q>r50wF0Ki*%Y^I z7!?O^9}Qm_>5hzC83_ukHe^w0n;M*MR7A}S9v;?MqM5!-%~s@EZ#G?;&pGUuA^XE_ zDRN|%&QgZmzR~5b(5<6KAXv2-DW0T^XFP3lSYj3=e7T=eQk0c0aqr`SX#SICBF3wMocU{R(RAL=$g-+c(~X zhR_vP5lDbV&ZXiTXEOsV*_}E}GGzJ515uu@MSVOmt`d^rOWo0M=TL?^finD-b~U?x zE_-ED`Q|RIsQG;wO_iZ5^YkKv4UZgU_g9;nD?}=UeJ5qNrBLQ!tr+`x%`t2TIp27LHM&*mndn;`$Fuue<|Tfuc>=TX@+rUh_frWrMcCY@ ztIrS131sWgD_W}d8?1lxne_w?5MaY&UTz$tp*PD>AIBgq}(wW_p1mOqcS!73WO|bbU{IY{0C1wzBDVc-7`E)@)iT ziVZw3cyo11P$)`L$HN3w^O*B{Z4S$jE*Op6+UQnZXZS|850p8kHvDQ8qu4r!!!+g8 zXD-5fn5gcMGrkSWHteseU2$xT+ZE@KnS!A-Wu2gT@o+^m4d+^So8K$tI!b!g==I>S zXpyQIsR*smrEa5Yz@sXEg--03)V0&<1a7ltAxNTbarMjDZ1J+Gs)&s>Z`Nc7l&U^) zPtgiF0kLznE?*LuGLl5zt%)MD8PrE+g%+bRoWYF5%MNZ+$+k|%lIQ)V^4YdeWYDhKpwVXThkN{zjK zWOnTr)isjW$UgIotUCL(a4>SjW;F7rF-@Z9ZFp}XC~vJIkTKM)ZO;uNmkjO1r3^Uh z@|5g41SIJe&TLo_$S&iQ51)qhz7j>_} z%Si8r+>;L$#EWSr4AIJuY}F9ogBm{t^skua#;#)o{c1`C5z-wx8@Pox9?mk&RWEw< zXSEg9v-CpQWRP?ZF1xtb@cl)dM}mItZx3nkXb$^58p$8fTNze;EphDmNxPW_k+pNJpVMMfiNdM8)C{ z-Fb#=i-Pl+e$9I+nL(pzhw7^`pAQ7T>@wKWB}}G!Rh>%Ey5qft#80F+UYk0bJox_R zL}n1O$>LGD)Yk8|XyOJCUmDrvMfhX$;}3RA9^D}DUj|PwKc7O0BP>q{Ei&JYC(zFt ztbQT0O&k)9b_zi9HI&PcLqYap&F>dU2ZieUx6bc7#GkK4^Ic7@E?)#)j;<+Ri1Fx0g9AnQa8{V! z<&~*`UoHlY$>oH3e5HFx;?wp#OUCYLW>UM;Juj;0n2XNGYYb%NRNfB%SONDJcS6CpKXCAug=>}K7U zN|{fs(zve*fl+zwx?LU`{oO`VdTdHneufLamu8bVZu@+~u``beN6)QSBQ9;UGQi$C#~5B6fPL~Zw&n{>nc96I~y4F1+zZdy}&TZ4VtFNd4ej?vIxo6f7$ zQ3kSOSRe(K8n2BK^Q~9bVSQC?6Yz@IeX=#s6Rg|l4E#y9Mba;l99EoR8zdIF+U}eH zXSEq@R=()M3m)oxTq!hZC<3wm9XfJK3DMWoDjF}SRDYh+?!2jjhr(F4#+g_8oB9G} zXCJp*e?R{f%}d;1Q;mX*?pOqL$fJKC6s?w%gDRPytuora&<$CYZIXlq8h+1yY*?2;(5J(;hvxNv8c(6;m7jWa^nQ}{>J2NeUpyVi zTf#o!d*krY&3Rh7jU6QQi!n9cdbDlCaEtnh{4wQyd7D0% zQ-|;L?>@ChLkaBKX|T0!K`1=_+I3;*SmV$&)a}}C!^UT}H0oocO$y$RBvW+rmWVv6 zzL);Q&#?nneCN?&lk@^hL(M&l@Z`3{X?*q`WRhTw>N}no_rJUaGx;qL7A?|C-hI9i ztc>QMVE~vwGhggb^cpOe0Hq1nDZ~a2J;{q3T*0(_t0@lC0jqROR#dCjI2#^<|9pqO zkGUdHSIc?xSn;;0-f~~_=5lbncEpYN3ehb;NA+8@ju*GwKdwJk1*&;re z2iJ~a{nI>^7fmHvoVV5nyGLSn?iP-V$bclCh;DH2Ow|5ux62uMIPkHHWuyM)@9}Q8 zOz43iy;yr!2UdV``%q1m99FmcR0R7SP|OCV<=Vmg-WfT4hEXlTN7RF5GZxW{2Z6_s z^Sh2xd5p69Y~928ZlEIEzf1aHWLCf%(H*fWkg4d-@OK~*RMv&?c2gav_|PcrO+HWu zrtSsxZbC$4XZJt%7z{-drCzc>{^tZrc}T*WRY-S&su6MM9miQIJb*D{myd4 zI#`b??n4Y)y-)b^kn6+pUcDiJ4_}2}eV6GfV{LJ~Ngw5?{F59v^O67tv;UyY7 zK3}zUn944U19_*#_7mSsZR#!Ff}Q+o&{2$;CDxp)$h>4(TYeL*u{udvDO@BG?I7PA z48e#G>>S`fs?0;@zSLQm*T(HAV{6LJ+VEqTigf&xaVKs9 zhCFA`d_0!F6(RJh_}3n#b4f*&1Pso~BElAN?m~yCfPqM;Qy(`~>oEH&YxM?>hIW@~ zXI|dPS@4(X3ZB)B$?hI`{+eq+MXm*P7w-<1L!z03&_viH(u;6izaE~La5%p3=wM~_ z-c>M=^Hph2>$g=_%)?D$`(F`z;Aopl*?2aM7-0+bpu7n$?QeBVO>-0Q+#I z;9Cu~r~6hM)e9~dCejXBo^L5H0<%3YXNW+IzX&=?VI-}(t*63tgvikFx3+0DZD}Er zmdl9Y62>)?tqdx@1!max|#?^7ZtrN`{4Ef<9C_j}53;$U|cW_WAl%yYf=BRw@` z3#y1%+D{x@PCv1%BszuBcL#{YAZr#841!kIWIBx}omDs4woCe?*nFMw&f9KfANj*^ zR?pxEq09jfn0q_mHt7TPH~QJR_P+P`7}(lQ`H%fb#ZwRbw@q%{|8gdpIQOQ&{qKDh z;fC}b#X@|mEgOZMH8QWpaBfMNP^wl~vnT?vswwuU-X#GXSTaL!47RRv; z%ZW5n*t_AT+Ce8T0~OrnHF_QL2IFi!iEk+F8IRF*Y>y>uP;IK>;!ysl?A7J`X` z|HOfa-wL3p#3(b(dY8a?M*oUIfZ2eX7M9sI#f*I)UxE;}q3CbyJ}z9}Lvo#@~% zaTv@qelD~CFLFhO6WL;$3W$w(X}}mV^m}vmErrd=&y(v?Y>T)c1LQwikdBL;{F5eB z;-^S*X3cf)-uQQ3h$ezPxECKSA@AVnTg&qX0wyYgfitVEf^240+clJC12RPdUGQY6 zY>2wwW>7MUJYJCns{#>TdWxb5$@u`xQm@E+|*~ zQm4N*Dy_TNg;88e4sxlu{H4=r4;9)_U~%Z%9@>Dr+tZji-pprI z9XysasY?mE=5-ue=aF%z%Y$OtvA7l?){O#5WmqS6$|md0!`f3QAWzD8)q&es(@$J) zpRB*34j1X@O)rXt4BQ>+1Y&-=zi5nB(`fbQhRK3&U(D-fMy$<1+cICF`MqS)*QIYf zs$ZzC%n-iA%6)F@L~i42=0&gJ{df(8NYHvxevOBwC20KK;4<+9b#l9o0FExnS^3I( z)7t7Vb?VKC*bRZ{l1x+kg{o)Ls{=+fs`cRN6j)@9q{AoI9C-fCOA+?LA?bZQUK&Q5 zb%*6_~P`4E`Nh~T>ALcC9SXWYT+Rb{46 zEN|ed`$h`ODf|`aYLkiX^VGpfBtjM_ul;IM5VQxuJ!?Q0La&nU4dfQlNADJVVHP}YsY-VWw}k7;#7g@;7Bl3_*isRJK#_2Bntqw+M_o`p z%&DtVp@XFh{&T|=4NVxg2H0;LL~VplzAs=#Ece?QEi*qJG!y59Wi6SsR~cc4++X>I zFEzjs$&pTooUVF7H>Jm_ip_PUnj@0LrG)i ziL|>O3r8aYUm01~vo3S?I#Wvc+Wp&8m7ISE#Vg&JGNG>^?4_wdLsIzb-P{_@d>eVe zrmVO98*wPudgT53V!ILCD_GnFG}>fQVBEOey%Jae-$eFD>$4QYSSU%D1wnqTbDg$~ zUwT0bAs6}38pD^EV{2j#O*Mj}8&{KY6FV6DWSeq|Geke?)@GL9ElM9+5srzSdHm?L zBH2`-b&k`*hq3-Z7|5^o`~ft)j^rYK6o@=!2NgsBSHB(BUfW^qnznuS8h^sN|A+ed z8~vw`-sT8|@}3S!xG;PTy93+Xe_LS?Nav!{PqJ%$LqAjMpU#|8YCgP`taiH}xtGa5 zdcR$P4dru!Rl$M49!k(D*y`90Y!OW41#T)s9>jC7_(PJIweuUC{Pf9;Alh7xF*m6< zF8Xw3=|w}k(?!`rR+UC7<&A5zKuJ-j|6NYZ5xEkOgNit5n0Ws|Apha-dz_W??-pGs z5XfG!tg?E%$QNj2ypFAn<@!ZX9zGo~SWYhWg%VgNX`0RQ9c z4w0;C04FZJ6mi6P%Xnkktm(v=E!$tRiEyC7=?xr~+3+pz;C4868|~Xgow|qiA}3!H zbQ8UuwzDi3yQ&qJ(t<*6KpPooFh)RCndEvh+P9D7X82^z*L$>{5|*2(zxGVp67cL} z)=^iiVw+`h@%}c0$6Lv!S9IZA)6c=3WPwd7N9IB`I9 z?+T`l^idl;_p41xDXd)n6`CaBBjN~qFQo20W(^WLZzZY&TJ9mdV|95rIBn|Q{#S<@E!ciJ!fbqhK1Yy`W5iIaL(Nvxe69%?)}VB;J#f{2EDSLjQNhskn_ zI)x{u^9J3n%q=?{w{T%&R7FGS&KgOOue!PGF{&tkpDCO&gT9G_1IeFyuV{(*UITj2 zaS~0c8Qg4G)V=lSqNV_5KS>@Vbv4&5KoZKC3)*4SMh(;_rl27B6ivdE!6&v#SPZvk(DV- zrSavBwT7{XT2H@Z37x>Zz{p~~nT;PWoN-VdbP9#L(6qD4xjk}pxR*pSnb}_A(v9hE z?kaU^81m8hK`D944Vd^p0R#K*ZuN4snJBmko^cqPxz$Z~{CkZUgRw%xQZ`pIWSeQ#A<4q(AMd zI;bsk=wIz>{R{gxC={(dB$g!Fck@}Clo@RO`i)ev`%X(e%TxIh!G~gst9Y#&F+aaO-w6}j- z?!MzZmp4-^8b&2m1TjauYcLDHj+NcZxg7`7sZ{~eiklXr$x?_+^(8{c*hTZ5op}k` z=!!DPhSpuCcL@|Xm8-y4L?^Z3o1P+`N`)B7_-)ewbS@0>vo`gs&?ozXY@cY9&ycPS{fFDsVxdhP1S7oqG}T$}DQ zvhukZpEnHKt3fNxeAwgwZ*Vx!{l6yP3!X5vV=v~@l1OOMTw)!SI=4GcO3%o>0E+Q?0&L9=_8Y71_pCa}w%yKXsYQlWDLWzg(yDu2!7Guei4 zN01dT#~z&y?`G>H6|KG>U`4Q*z_jH)E_B6*K;Q$684Pr5y(vK@h0D42Tp*4q1+lo+ z-01MZ<_qqtEx`Y^cMC#0Ap9NOS;mkfDMs}vQklN50*c^&SMow%A0mI5yXxIk+`rL( z7F>z6D8$xR%-PGRXF3cc(%#enJ&8iwNd6XlyFn}61egj!r~h6N#6Bynz<~((Z4DUx z4d8_T8c{7wKXtKb#xJ_&SvUytPD^Gz@HMq5pX ze+@iQgU-M99(}Je(;>5*Xi#*?qx3-R8KKYWp!QLPr`?9}8(~?a!Q(;%BsBdVwCIWL znFhvfp#BGH@`VTdDcn{-;hv1$F5Gcd8VoKTuSt0!eqAV z#efb%_B3~JdTF=T-L1`yyz4nxP}$hqavl{N-@fGmCb??*RJW{3!r?2LU4(LV+y4usk!cr$(@n-t{!nRkI zR z_(aCW%`CNdeM!`?wL1RzF`5+e=Yi_F0F9;`T0Ru)?0Dqr;7#G>gANxAqBkIjwa>8& zrg=v`dSNgs6fl5qDpCJ7jTr=B--rRpQzt;r29G+RWT{5;i}^YO_%Hnd^f$R4jrI_B z13VxtGQ2aa9>Rz2zY+gXqd=oIdR-i;z?ueFn*YVB5% zaJ@{KO8Ew+(xNBGrmRO7q}vHQc%_rz0RW!u83yv_vmr}8pPWXcM`8^-%9(DS{WO5G z@z2BAR*N5gYnm25Xd~Zrpoi5qYnF6YAS9_QbmD`YQq6u)W@lve!vM&_xy10JJ@-Pn zWMMYzvwtlZeF}(Qv3^?!&urx`)OekAN1exXsEF#8w6YMg?sfgzvtjf0Pv1IjMeXF_ zS;|vvQjVp2{e^e{u>XZSd4+j+zL9kKwVG`?9?w;IcwS3#r41M5SVz8BV0VPkE8FPO zJUq7#0Ng1LPuW+is4IeGIa5D!m43|DL54olf79;n=XUIBuyS<(CnXeL7bJgZv#`!_Ejtgp;ewJWv@ zi)-E11b*Kt>d#*RzDt?y$B6W7bKsAb0czD1U=Dw|mkIG{nCh?oq>sf&bqY&p-__&; z{_5fXzjO^dYa_Qdy_aYE1wF=F;{y-go-K7IHk$iXYH@V{L;K~)jp3oV`x7Mkuzy#F zsn*zI`fF&ymlQ=v`Ut>kQhdT4jn3aGSMTu6Qt&%74qveG*j$WWAmS}>pqXy3k<58|FZ$1In=o%>^gV6NqM3XD3f#ma44#UU>n%!Bm4Z%)vD(2b4lNK zqDgr_!gW+p(iM`S6563YcnD|P1C`Mn39w=h5;xTyEAJQv0$ng_mg_-TkjRbYKoNfo zC?YQn>6K^M7I5WlTdem&4cz?lvg|O*HBs410I|n!i9S=5t*8qvGOc=E_(&4bXAzKl zG;s(xpX-%g9MnMwcN;OI-~I1;uxk;-K& z=>}cU6@dw^o4OE(?eA+Fckhpxyiyh*tu zdiqX!z>}n$F|Xdhn|UX8Y29^46nd<_u8WPy@d(i`FivaO+T;jw27eG)Uv-Gx!@%W( zT7lyn9|Hs(4!=R^#|AzYf-(fM2YYg-(59nijFoso=#p5sl(@o>tjjqN|PL{=|e^SmAGGG7QW+2(Yeb}FL7hQhyUt<@6*RJ&*4=tnJ0d@7BG%CjphC4tQi8#xY_bq zppo%a)AWV+l_typ{5<$K#7O+!RY1z2Pq2Tmqr50H&|%Eq;q30~>hE~kK0MlOBbqUKtgp@b%MvoZrGfLq_F7H^ zyM!YJ0$Y-E)(rjTDP7{)ET);JzrN7&J+XgD-0?SMo1f3+$|mTmQ`udc>^dTho1rJ7 z6Y_45Viw5k`4Pw8gw8K=*m{)^ew(&RKvZMlWRrPN{WYND5mSG)78lV1$Q7u@SIMW$ z0-2+k4GYbJ6x!D2O838|3N!mKB=byTQl#w?0Wqx2KT+AqxuMjc=5WsUZ_@5eoe5UU zeuFo907*)TRca&$NBf`xzhqSx!ejIb&tsFavBb>~HbBS69qFS231s2RJ;+32jgVjQ zCOX`zVep!P_MyS!T_BTGBUy11$84x||jh4ol1CIl~N2cmF24sk3M4~ev; zuvYeg6niRdYkkVVnOrx@|M#Xsiks)DMPiA8doyMuE8n*Y*^h`AOslE?c_gp2XgasS zDNe)ll?u41T^W+5KQySZ#9z2jS9a@tkB{X-pOx8R+}1KSvfJNIi`q@~BwTN`aipygq;Q_4G4qgGC9-SG zmrRV@nqG#l(mM4ybl{$B${fICY=rNz@FLNP>~Vf6#$Y|iycOQ#C8X}>dHK;{LdJ#ZhT$AQ{>t zCuO)(YNS$Vi#=tq^?reJYjE{6PJW>KHW*u0(2A%U$kpVEU{^9%z8aO53z}e^Dhdg{> z#_?E^r2tCT;-mdU@4w^;7D@W+b?DBD@_o^G`K`onJk$s?Fn%6Cmm5TpAIa>VBhjbY zUuj<%DZ%{cR#ca9Ho-9}+JM#wUN@q_zED8+8q{4h_O>rw1Vllod7u%Iy&K- z-)o(X>ljz;3`Li>#|-U9L08=6=E$^3gcH8>6ln4Kmn^dq+3N7!TDn6_MUFIcJz=J* z{^y$PoDALv%kX8n=i%k8Ql?%j)*WSdIkF4Ut*4d8sLzrB=xahSPBPj!*`$06;D(Ct z#8_N1H12;p9Km7aJ%!0PW5D6<=bn4oGQd4c=RlQ~d<{RI%jI@o((%7&eQe3wEz5g? zFr6DK5Q*YDJF9JB7}G*D`2GD+G_kFIWi&Lp>t|3<88Cf0=LqOpT&UwH1AU-GwqHZu z8;{p?b<0A!jxkMEA&+t1QR6@@hWz$5tndF`a%%9xg}Kt|)<$PzRM~X0<=DNc?A{C3 z4VX&uz0lD(ZtH5MPI|{85!vX+_&+pTH|_!95&`M~M9WNT=xpqoZ%zd$~HF z9-8#**E>5a{!vVzcWYpi)ZSWFl*Snm)I6vzC>b_^b$5I1Nm=1+%I&U>9paLVpuzCOpa@4uYU(X1m|nCI;Mr~GmdfqS5$QYtA_2X>T1emzTZ{Oheo#IGsAom+}LvM8TmQ)JVfhUym zK6}3_6a87`5fGB?5ByY)pIYj(c#>U0fS$lv4w+i3DmC*oZHpUd(0St4X0txDtIv}- zWczMpB#5TR-gs`wZ5#Ujilz=2Uc->Nf`ONx3X^9Dhj_UeDrK=I@$9qODI@%_+;W<#|WRj3> z-@T!rDzCK~{=F%S4?f>=BjYU!>!*TUh+)1oT~Nyqo?rg;21fk&(7%XB5*u6ikN_T#-zGxO57J%TU5&+Mfg*Z`+%k#so3Of#7i$Z)5C%hIesfcOI{p5`fM&z=!W{=nlh*=qaf~p-nJzVrq z5KPa#xGh~cZ7<)HbKLN7c#tl_a&Uh-3 z$RCP`g&-#r$yG=5p!-DVJMHG`FH$KjvHf>yuHt)ml0 zaFyV;`F@+iryDrMuGk=n1BCFAZ8O~vvioUSx8hFZOlRn_sMYnssmq6)7zlbDqW>B) zRfefNatDV^G?%ylfM$WVSG$v~r<&8O(;t*oS+-S29Qb~;{KIaozH?yp!1qA8ez)+R z%t}iC^p{Vb2MBS9PsqS(_(00O_VboDRc zjlD%;J2C3u`*qi(vFmI_r7W0UvYr8?b}))Lp!ICOF~r52LMxn~Am~$Vz&%T_CN;h|pI9R1<5k{{2yINp7tN0)g-ZDWE zXfhB*$1>U^r}X;sC-T~%E1q&z$W5I7?7vSg!y9YPJ$aBAi1VL=+lJ~15fzdg3hUbf zVn-SSFR9*ZhFUbq?9-Z7&QE$9AN23)k)+O((oj6u{03sq2Z$Xsdz&x^4^xX%^a^wB zg;q6Ss^atv`z43+L+tl0NqlC|A$~1jK4|s(7X3oUYrh;z!$;8i#h>{9 zatBSN2K?6?>wIc6-dD99!>Ga+?b3nk4o})|d?65vQ%Rokoy$wO-pi7afoY`vU9qRY zo7o>x*InbgNb+Sa{;(ggLe>uUE>JI*{OhW{M7+(bzc>V+V6GWPLElYEH@W16fkp}C z*Fb{3=Z01RcJh$+9m0aS{i9UY?A1>;19qpaE}{G~>^@qm6)4iKb$u+XLWSmQ@Y_%U zm5e&X^Rf1=#H(Gtt-%w<@0`n`GG%L3lloK+^}<%M2g@tUcoDV%n#XBa8>X*pm>9}Q z$9wsI922Gn(;7B4W;6kc`Lr7JT0R#e+|1BTk)F~6OHEv{OxX78Rq9&tsh*`U6O*)# zf?e{LWvHRGG#H+qQNKtf)CZ?5OY08JefkZDByGoj9TrjT}nIp%O+$nx8%VO#m3k~T=Q`}%1a_46(u$EX%nv*ypsz?|CZ zw_|c&r+IqPiC?l?;H0*(M$2qkIdlax<)0y78*Y1{V$D4@9VY=om7usm+CIHPA*j0a zL?NQ%ydz#-G@xwlEsZTE|TOJ(q+K`57}VMDB~3wTI{8hE@>sj%{PVSNMH}c z)+lx`Gx*1|=&l%JtR#IF=@t5>QoC0Thj z{3OaPNK-SKI*QroM6Liw9Wg@wlATMOMmMlG;gZ}C)D&WPrPAlTYA<@D^=G+h_GHrm z^PkH=1E%0z1dhQRA(=n|&bi51iDVWZHa*xE7e5Su&Bg_0`VkxU2wO9nGu>Xpr=`m} z{U&$tC#5B+^L(o1leKeOVEk*Jqj@y#8D%a~6U;UMRv%hNE9WVS6aVF&)NgOEz*qn- zSK1Z8I^-BxEc4$7V{YFeRXTuTQ@FSW5AQz!OgGLHe4U)#al~eXTS}I?HIYAqq$WOL zN`p$^p^R0kZhO+y>rTm*JHQR5pKj{@gTZ%c?NF*;xa=Z!_?tGavIKKmGP8Jjoz*3R z>yonSR;^qmLI84c(#mkGS%>)hlM+391czGDj)h%268!q11Yxmd^x8ljgLI28x2s0T* z?UXM|-f9$z|K#Hgv;|QugoyBk54)q`KKL1Fg7G2Vgil6Mr{2!^k7>wcRv*dVYhX3- zeF7-$H2qjxU2iiNx7kk1dA^ZuR2wI+T%9T=eG;Fy(O( z*jHKOrj>vksW~D;I7xon3#Cy7KrZPwT78l9|5DSX!V_&HLQ_RDf*>i&)=vM&Ve^=4 z2w;me}*m!MAbMbxd_k--oyn zNLW2;c&Vk!>x8s=qYPK?-s2`~1%gJk$eGb2xLa34{hvN<4xsTbwj&Oq4-kFLo1NNo zrPGxTV{0lV8JfO|>yStNehx)P^luz%@*FDVXRS^h67Q=fr2J2hg*Ln8sf(4(zMp=> z|JPUqKma-sj8Cz(pc54!$s38REHrBIgiMLqZ; zezQLfaEIWDXRegTocMefh-<_Pt43Eh)@)p%2t;QPjrh2O%Y*MWi?|O*z0gy zTmXa%_p%ss4|eXZ0)QyCMmNX<&~60}D0N>hAH!8HCiSkMI|S=&Pd0TM0N$dbchmU5 zP#rBIbSX&Pl)F@AXwcHBe{<@Mzv;cACxz%}D&{3RHn1o#H>GUJ1ekQDkCY~f-Vi(8 z{qUNAD7h8N9Bs&(DS2)^MV&o140NT3aW~Y#W%fb>7ei)GHjUX6KkA1RMS~c~zDPMHqmgwrDlc-E zR-E0>GGp}YZ|)Elpt+OIDv0I_Uq+?am1Gtd>?z$SPx>4(4XkP?m8!fsYxrQfzCgBG z;_J^DV9Jjp+|U3__3K~Ew(0hwRHxi}PE%Y~$jIgXXJ>At#D$x#CK_A`1NyM|jg6m)W}Uz^7ammC^rug!LjT5YgEVs8rHL7U zzkz7+_p9ri@8h!~1&nL|PgetRk!NXdn=h;MALPj|e;F+b6rQwvNRm;z z;>%LB%7SXo;KRYILXVD{$k~)uWFXM7fS>g%S)7+iL4|lF?T`_8LB0<^$eXYUV4FkH z)mB7O4{+!#I536oi;CGQcN<1e-x-;gGxM$g^<<>p;;biSs>#ykIgUG6PuK87)yjLE zH%}p!6kcdL;e=eIS9c9)B$=%FOju}LFGULiZ3Yl}CP8+0BrN4U%-_m9VRstFWgV>R zHNw2Ix!UDid#jZI#F_^XYgV17vOlJLk_}1DZnyzXwwAghauU8>ad61trR~zGrpLu| zCeFkTOv2CfH``EEnpe;RA3pdmABiGQHh98z4*8h6|4h>f z$z{2sumnCB)cBG`2WjtCJde>90L8yWS2F4s^INa>4lK^Zrau?i+<0jusT?ZTGo>c< z)pW*cHus=Vv=!!%vd;~xCbhB(^usxTF>gMUab%#cX1CTyIWx8M)SUm_HwVvPy5Y`Z$ZOBwD9if_pkU{Z2?N%{d;%PyjC*ktaVR7KPW?kf-+q0 zSKKy4Vm}P%w`>t=2>adv^^OtK)s95PcL5KQs@~bjZr3FZR7MuJ>q2R8vrozltIl{3 zaeDCQb~mCfWT!Ubq&wu>#hut(fuy81wufXYQs){YfPDNnN*PiNScErby;8a3ru*Vh zzXpDv-%ot0^NEh1-`-bo+7l&b?5kZniY3f%%dLw6&LO1O)UBy!1d!BS@jLj?PiLQE z=2g^kNQ*yWl>iON=ei@uOc=*S5=F183v)Mo)YsR95b=|xtj`CNRYA+(({?-g8*CKV zZ_sDE7HN+gt(LD~fAxGf?DFv{*yx)MJ&gE{jub6EH#1zDHq%%1$z7-LM7H%Nn18U$ zQ4=j9`r0$3WW`r1{nI(A65Sz^#~9eCa5b!O!JVkbDQsM%V(M?k<^UrEn917FUPO1J z=SvF-w^U-dGT`eCF2*SE%;8!RG`vmz=U^$Ylf1q3{(raMdH#n9n)cZfBf@bZ%d^pH zj3S+wa>Gf-|w z2cG+_Cal+q=k?iLTIW}`SHiV70m#ke`5(mR)xh5=OPO@OT2fG^cg z0$gHJ`1-H5z}{=XqIGHmt5YX$Lx1Vp70TN3T(#zC@G0(!HKVXVSW;I@8>bt-Hd7Q$ z#6WxWf&2dw%_P?&S>!;;`bAJzTO&Y5QviMD%7eR& zJr3X*I2-sTZvWoL7Wbv%ODbF2-7*ED&aQh-*6~gC^eX;}xg=-Tw$%kQ}pI_3thvwY0BY%&_Yu{;>f1YWO!8o66qws%mdB68b+ zwG(9^s$CHVXVP|L6W6C*tSfA=(r@dmunzB8e`9Tn>@^}dUTXt5jxN;f8XhrsZQ|_L zaao*m&4hQ)qI;LGw~#Os`ji5^6=C|#7NBmBV%T!(U~+U#OX{ii&CSAzP~{=PwEUYO zbZlccK|h2k_1YGoki4ll1x}09<_n34-(%6OIyY~mDt2i247(dR7z+^?7rlFE>SQcb zCk2p0_%1QCBR7$OfaKvWz=MAzH?jiS73$(_{$i%vHkORry}u7*_hxSfct;|+d}Ngl zv)(`8fqC00=4>Yh#BAjFjIr3SZA$Hw*Mbn=4K{zF1S2`D?5$hBy^H7SUm5SuGYE1wnfVccE;h=58)phSQ+H^cdta)UI*>S3!6&Y7OE;ii#@~YXb<-^ks zY#2|;gObIMlF+QA-DngDl)fK~_muL6lnDAw-}x{QQy-z86OtIYDMI`my}>#vq{4Lp zK(MN1KLtn^WW}d|w=#HX9+RWFgjxs9d!xN#78f;)sdj~PI1}QTb#JiFF+89f5y%## z`km95g)eY0=o3;Hg+B8I}VP*eU3?QzP4F3M0 z(!}}C{&q30KzOF-hLQxw8;l=&B1ZQS@NT;gu%$3=XU9&=Ucc+@Tp7UX(4<04Kc1pp z6(U3B!|OR3NzhxN>Vgt)xho+n0@ZGRc`k+US+Bh#ICWzE{!*`v4{};qg0-{0XB# z8|6(frnVkM;XG{sstpOH9zX?Z77x7&r{%{M>^ss@A>-*kfLKRSn zJUWeNz~L@Hv(vb{ym`VP4tVMi!76XY7v|lT+iDP(k`3(ti%~>o8^|HZ9}B`ouSnsE2u=BpLM>qEc!XUP zo1lU>uM!b70jqi@*^c2zMMoVQp(3#NK$Fux~#%diJ7XA{-CW% zO`=TLB%m{ql*>lX0k~G7?@R$%{t$EVwPk8O>XK?8y^*^q-uHFzB64?29Ym19*`mS%=)JXZ_Slba@Moq5()p`UBP7|n$7qWz|77#ouwG(@J zTJ_zyGQgpZYxRpKrnnZovr}AqbHS(R6@P!F;FH3D4{1!R4{a&}*Pqa`&w~CR_TDq9 zsjXcbM%joP1RH`CBIak zJBKO?&<6C>0rdBZVorY$rf|1gxih>{0?=FJs#(fnAqt&(yAzg#@Yb?gS2?1%q31hP z_|ubx>uAgt4}4_(o@pb@uirjk(jeE+Z##N?>w5sLxt`PV>8;3bp$YdxM%Wg^KlchV zahAXK)0HZQ5f3LRXFXJ8mu)mo*U~fU|J*z3D3bcCL!J`z>w-qKn-%s#tqYg7kAN1OW)#PwplleXH^y51?u*IEb`w7@Zsj~SyIsCP!DqOC5?oPcTL zX->=Ejk*d9X7qFAd*{Y4-%GuRp*D`FnY;D*eC$MjuPf$!^z@4&SiybXb%oQzzVrC} zAKA;Q^@=EhJ6WlBT}arwedDZa${@eDJqP(c3zr<5iu~n6G2$DTLYg*yrAd zuP3jd1F_;AkK)j`@@FsSz&G6rm)oXZ9p)YfC&%j&yj8;@1ZI=bf3Mg&IS=;!gwF)! z&aCVKfnM0Rs8o;CfsK+#+ApvEQxiY0xYu{Y=MDV#p~39&+~|+O+)i_x9*Wv&G}tVZ zaAe`Z^aogE8IQIzy#tZcC5MIv8fUuqlPKNQMqC}HEO3FJD99s}%^UZ-?;qe;Q6DDX z(Ww-u-<57SVQg7*FweV0mSdONB?7+RBR#nTcm%%LlWmu@cqi_TKc|(1{!}{RI9buL zy>|9bdYQLcC6T!vCtF-l4MRbHyHcVH&~1rCFxe$2AEARDzu=zu)sw1;dmZm%8r%OI zKX5rW6?jxECcU-|uKhdNpMH8)NB0;p;gLGpfF-4VO~fd}kgQJJ``LiBwFV~l$#JXx z$9C?{f5=vvzn+D#%#z7f%x4m0U%?gG1HMbQYqf)!W++&vEUqx=hKj1Y_}30vQd7<3g0w5eU?wm{5S@zDbuy4Lbv9;f0S*Kenc zl(&t%<#iwS?ibf%571FV(K=}*k!$7iFfgfgtXPl;<{&Tp^9rBq=yCz#goUZhP9-** zIc((qA6BK$vWhLL*r~j8nd8U!nI1l8rpHD8^q@r7`nz`eE`Jak)=<3Y4bQrK+`CCC zx1^ZU`Ds>ceM&Y@zKgH-{(}H{&2s6{`VN?Qj<_Fhh(pROa`^MtdSH>v#Ery?2lOGXsOSr-j3t{k|oEFTHaWf7;dd zFj~mfIrFs+C6o`$`o3T*I@)XVBurGv2H=)0g=rg2#b#x8lLP@vWR}~k|G@!x)uKrm zcRt^R3-0&pVc`qTiJ$!Lf=(KXI4g$7Uz+saEWc&2o|Q@h2VP9e5%eaGaIb=Q;+L3_ zuJ@SyOGgA7kwU-WeD@G5{?%fSbJC{LJ48-W?z=^|0`~a6)YG4u`#?&QtkxdU17Cim zuMnmQR0Q4-Wpcrw%6boP2=@B>*!ok7N7Gs_@}L@?3NJk|iXAR=d&ztC&ngx^qcUXS z{XgJP4|hKICW08_dP^ZRc?E{9Ep6h@T?C)|{`dl*$%K8NZv*qI{fz)K%?+GT0n*w% z2TQVN$UWBQ&LR$@f)l~3ba_4fGS_`^CA`}dzq*RALj59XzClEnoBDO-3<#iL04l_z zU0{CP<4Iz^pwgcDT2buO!D19?exR5l*MF;%Tj@#Zuc(|it39Lhs9X7wY<}Ki00pN@ z9~DoqnFZcY>z(}vVLWozhVJtD4gW{?Kv2c8GgmK{8|660wsI-3E#0~*5#+M(er|F} ze>w8*n!IL^lLvc{iHnAr_3p%=N_erTpFg0FQ;&WAoR;g%T1KRq^I%g24<_g*Q1 zABXhf&xA{p#=Kq!XU=DhdvA-3WR?!G_FhToDEtp;JtgjteWX~_r?mLlz4QTS{+vFG z5@Hlrt3xS^hfDt?FFUw;7O1S3pq>T)-d!PS<%j|uHPO(&YTa9#!c0hepUo`E^6rb` z&8i=dA}MAq7kBMBm?JOyET$Z{UI{4{)#8$KHQTA{_GMrJz>gEl4;}?3Cy3CR)O7OwqNex7b~Rh+-&4i) z={`||$NSzU8Rlvs?E;+nB1ZX2|8u8(-;rtRFh(iuSH$A1nbT^v8XRg_wD*#Zp^22We4sZ?Zw=6Yx2 zs&2p2<=((wkbzqk62OybbxiMBXvsp1OC!y=(BzDRUHq8mu@Jp$>VFOsfXAd_w^hNS zu~7Wwo^zNXPMwI>LjA#7RkM(r3OLOAPyE-hLITbO3D>wit=?-Hvj&EXZ|0>&hUrD` zB-!yE=C-yMNpSox`xIi$S`jPy#`!U~G`bGKl7+zfbV!JC23d1HMUTT1lzlF5rrH4_(*qS^ zVB;-r6*mm?@g5$|=pUHY6OMgjn4}cjf_@GB>s4bHo&Rqm00l;Gh7K*&+VQ049P-+^ z8bDg9T`CdXx9UX?mibzBa^C5U5l8^85hIqoON$rEO0v#e9%8p1cv#?0bq)L&TVDs# zrFE z^Zfeg;lzU>L6@{12Fy)oT{w|Da;ci3EfImVU8L#Q3N!urj=23M*>`#mI(>~Zw*MW1 z_4Ag~7wwf#BLtNgwTutNC!p zOAd4Ec2+r#KS{{Hmx0JqCRz<^9BkVjhgc21aGSUmzp+$f9u8%`Exee&;Pig5(3E34 z|B&k_kA82BkA2(8tm@Hc-dgQ8xT-&+SXs@7Xh6!B`O{mUa@DGfhYl||E3*#rD{9}?oX>kX#9WqX zpoN%@yi72rA8y3G2c}0|abMOAVeI)m>jbPvKu!UjM*qI+=YLHRE3$g5$Dmb_C~e(a z=+n`1O2hc96gaH;LJ&%tG*$NOj(oz=kbEsbfd`zT#QHTMK&56g{Ev$#)5xYE^+=gN zeb)!T>bV)1S^R@j=^zJCT{ncu*#Gj;Gj1-XT}fvAS>Ywy!i%i{By#noOjxg1*a9GD z5nkQ2dEzUUue7fFnAA~XTPzQtL6&3RO*Brq1Gf)Z_VR9xQK_xYAS6U zs5NER-e*VNvv9cW+y13ZB;lTE!TOciCot@HV8!zBCgi>lBJA{K46H=94op`|F~Gw zPBpJCM%ZQ^(^B^6thaH!wm6+rDC*7uPt$F3aHsw(_TCwIoC8 zk!Y}VWfYrNwdbuk*0xKmgQ9kq?sPtxzcu{Nh#K(X-t_|C?y^Ji$eH;BnV-Ni#pNpL zy{?#5^f5?WD&%qQlk-O#*Z%b~L6&9wjM&{1e+5PfBo=_hxKSaDsxMm!*R}dow+@`# z8u;^L2E&bK;v>@e1e8r2{gSZpwKIrghH{14981pp-UfWsI(Tm_n1ag$#EkB+eZilo z-&T>$*2QBNg@Ic4+3iSITFViI+bp+S=}v0DWOcd!Hu}YjO?k!c5;2G>Crhz>I|jDg zW6j5-ecEc?La%qt#nzc*kO+Y`T>n8f&yL9sTT1%``uPJ80TUjrocrpx778rJT7|)T zt^uxP+1N9NtEaMm4_1wFpH&^3T+_WHmErFira81bBzU~iRo35kZnw-iT7eZDqp@?2 z<(J{mm3&yNnqS7}66r^PHWII^H45$W%v;}CW#L>6I1z*E66}(Z0#?-vB~NzTfy_F+ z$%H?diH2(^;l|R|3F7z65*|-lnppoMTrbkZF-yVjS{)W+p~q>(fPzLwn1Gno1%Af= z9-P)Aqabp^d+b{C`L~HVP8fTG2Q1Bl@3SqHW@K`Dd~zRzd~kBxeJsi11HcvQU-=!} zDc)j$+Q~u>W%|kJ(Uv?``(zSPKA>gzzMZ!Ax36Gp_Z~6S; z&8Y>zrFOGi%(>5w@L$tQ_u{Er7nFOoh?AK!E}CX>>OPWi26&UTrYbW^c*b~(A|IhpQ;VFc>pxc*{aFgdZ*KCu z^&eC7TNPEU`g!#We?1B(lupls9Oigep+0LAE4mQ))AO1#=cyyG1mxuIfL({x zQej|KnVEe-;qS$xnrC~*bVXS559!krbl-|=V|>|1ha(>4(O=J;D;rC|Fq#RITv(aIyY)4Pyu9VGS3^j-2Km= ziuu;x-_d9Gar)i`kXYv-fY4;sdYa7BHp$MF)o;SrPiAllG<=_eRO-vC`E7qeTp2&P zyn*eHS&lxmUJ?tLt7iZ(+@Rve8m{g3mrsuu`mz_Wbl)n?-FzLN1#<%e=N+>qgM>{j zxWgZ;asRWwvoXE^^$QERo6{*?SM>exBf4)n(62(RnFD4MOk=kAn2{bE&h73v&$i}IV> zmy0K}>1ufWEGwOj(I6bSJkb)e&3_hTSRXi14iM`g+8?3;0o1|g7%zl&2Or5N5bhj& znkWAErvDv+|IbqJZ~}kJe0#9v)@UOi6-JZ~D_3T0>{Z#{BQH}>jh#M-T`M#tl2{JE zcq-!dTcP~R#;FBpV|Wqner1hwz~GU>%TT=tvBTW5jk_wHDwIj&IK?^egx-bMce2|w zo#O`O3ZtPrp3`Zx4ioH0FM+4~1YK46DERu$#lFV^m4nU|gFZl*Z9yXN4oB^uAM2he zUI=jnZ@a((f~D=oXrnQ#RSLi2&&RJZ^;g1~nzeq~%$ z<(B}|oWP4)hZdQ^|0DwdY-4SO)P?&Cx~|$gcQ+GUemZ&uEpx z{0r*tiEf>z(@R8F5E9XZTIc+BlWCNmu=WvD`Dp&ub^Gb`1SzbX=k*N{(3;nG;C($3 zOs293^eWq>=&qbASR*(^(rr01)9z;l7KLE zwP?ZIN%1de=uYKFW@GtM+MvE13t{z;3b_ODz5pa8y=-mtcewQ;1)Wtg(}(L8z!N1M#II(`yX&h?>Tbb8dfs1j@OYfr^Tfy0r=wqyqptz4%7@Q&S|6EL5?Ckl zEeutW9I#3?@bl^0x5h`{cfM#XhJg1-rh{SwBhufnM)Aol-w}KIZh`1mAYp5gQU-r3 z7>npJ(rO2YQHq@6{4S}ShUn%R_0)Ik^5;LzIy14eO?GuHy_zkvB(2ahwlhBBPDT-bD4_u?9CH3W4;uY9P`YUHJcyXeIxEh{+kUFSoDfWj-`&gE-yJPFa8bk zl1gPoX*aTQD%7=eo)L@Y@&`!aR80i53UYgatC)zCRr$tk_;&Ujw~Nmz7um{hZ!Hdw zMHBzyF&4->Nv`9{_d{Uqdpx7e0jyDQX=czTSHUec@T6pwkUu@R_k%_%NDF2*aTr|p307hk4ZM`~q`=6~etW<sU zI*M8C_pL6+=lP0fYf$YkpHj~7oF8h)A`VLJ;|EdpwAJrb71BY~XJeEL);2ZB6$IBn z2{Mu|DB#nIe#VasE9!dKs23kn84Wk@^DWt%l&4OGP46_(&;n$eAO#K8`((ZCIu1f_ z#$KuU)8feey6G?i-(0ufYq)D);or1UC(_T??8>+gk2g=_%eCc@$;y1~RdSl-M4V}UZbQ~h4$_* zRK{Y_?fn<+?_ha?^r`nJIFLJ+@2Bn1o=ik9BkM^C%NTjpbL8buf?Jx<+=+v^JBD~> zkYk?SvgVGg{>p-k74I6~S;jA`Hd6UeQG-RS4eCQdXfY?ENTM?L6fP&d_9wKeD@e}wOvg{nNl27(N2l|GspH&t0OYo2sxg$ogst2 zJ_j{wzU)@2{h4!|NjlzjuZb52LhV&#Luby3OOMvP0oo$Io7_cR(T+XOODt?urCyhB)d>zHB=8{D zJz)Ei5~^Fd?=xE^HaCVVC&EGM;_$G-675&a_?Sdj!^~F(?8hqw;x9AN4Ljr;S}NGN$^Q2W;60o z+R%@DKVcRqt)No1U-pcc6C|P)xM$ULS)4z$s&|#PrAneszoI82eLH$>uDz;<&Eze> z8TI9;bczQ(nf6MvQHGztt>LV)zF8 zLP*38X`nufpOTuT=uGb}8G5w3zM`!vhQvy-7g2gS2zdMgE{rUFWXi9LR5dtDlHVRQ z7FQ7Q{Kc149&LDDHCIb1x4x-_0ecgH^7J>OYzsYHM;O~-bP=wusaUZA7aScu2p0Dyv|XP#Ihj5 zny|n4Eo-ms6-wom0&?SgsOq*O%M3YYOL>v}7PB#&GZ7v_-b=33Z>lMqQ%lQTi-}x4 zca}q~rPN3r<0Ps;?cWtWvh7RMMlDSf{TfNcrU0YqAe442%B7|3F2N=3NCF=+{?abh zt~e=h(J21hmK5_YC#Q+WeptWTs*U=!j&I46XYzi|V6Xk>{I17#t4a<(uk5?g{gyrU zk}76!HZ6&DU@2CB_0hTv#Vo2!MUY*fi=5wj;RVg{TCXbW$3?~+Z+NEoJP_99ib5c) zH(adc-=AXko+C%AsclrBU`%pJm)p741)~u*>#;hKXmj54?0!YDh{2Sq;#&CqUYn#~ z{>)Qe-(GEm%QxOJluvCMV^A|2$xZ)z5JMk51St7jK{75$v8^<@j zSiY5T{FqW=w|GsJl%UEWDt34H(vNR8Pi116*EGGT)EHh*ppi*!F$Kxwp1Qur{|fPui?H;guR zvQ;IN%vGav#2c;oIE;R}^LW1F!0_nk!!oUAgJE?i88pPE%=x$qIy=x2PL!>(E$`!c zO-<&BVtihjqk-P>)z0dHh=XRs45eW28k>?&#$g}7W{xpXtvHdSS{xf2vacXpSlgi8 zB9-q+aIq!}4j`$XFLhP6E+&}(xnioBI7_Ney#9O41HhPvFEsBS?~;8`-0$YLKiMSM zHr*cU>8&8bvx8wH?>)1!%2-&-Wj2w)JP$Mu6R$A(r@6X@9=B5r__);1a4Tj9^RtQ< z;-@xW?7=;?zVHsKUNLO^}WaH=v6VMznKjj|dY*1qwL=y#@Eb4&OD4VhA(3 zcN=^hB-+@xE6TrqJjabZDWFF2tS9!7IbkAz5==$T;n0s?Ivf2H3Ow&rN>-eYjaL5_ zcUfbPz{R~ef8Mx)lA~9O=fV0rnde+T-)AGkOHkN-*Hoy<9D@!GS;}JvofDfO?X`%m z@|``+oMTdjm?>anbc-Z+;h`xP!vuf1kOhSHLPe4tQ;d0yj;rO3i2xF689{tzLy3%` zr8_F$i>cjM7+SNUD)Q zn4E!8sk?8)fQ?x|*L>t%`jpWm&Y+RTv{8`Q*{^)5hW&w-H`}cNneMJluTbwx&oZ+nMVx`oh6dz?5b z$R_R*G6G@KkApp@WL}I6|8Af4QEArg=}%#Sm9dg;RxhE+#09x+b(Z^p4PY-II#k=n zr=yn<(rQl_GZ&$ovpF|uqT92o~q=ig{UotCxFMB0xX`U)9%|LCoQCK>3> z5Fdy)(k4(xwz*85J`$)+8INJpjTN51*Skx>gu=vJ%hqW-M7+X8H~FXC!O8%=k|T(E zI`!9QY9)nG#X*bK{n;lmIJ-0}rWhv#YFBoB+nywoK{{^rJ!o_;G>|2<&CH{ICrou7 znS0P4mb~QPX?djOF$RrYX$73P<2BQ=r*;U!r61%#SeJ37wl4aducUG`!lyEqDMlz} zz0r;*zCKnQ+mgc3%|w9b8xR>}ZYG!h)zFUD#5Ys<1=Uoq75MPs)>NF2Z{KW?BAj-vTm*I{@3(*cHH28IP6ZC z39jQLf1RQRWr!bAES`6_Z1J?MeW_7&>ov(B;>rXPFj^i{{K*HlbRyjRX~n5tFYDe5 zB~J|b`g10d=SXi+u7>i94R!yvbkC6?4D5Pei*mq-#Uk&6mX3l0IV#-n19haTX0HWP z{U9-CgZAZp6^mY5tkdQee%kh`N<y4P}Y9e3`$p5j+> ze%i(_W{ND=(AABhXGUV5WipyP8L(Bvppvr8exiHNU*Ytdv`1|d_TgVXhENS2wX6~9 zFS2iRPv5i@xJV!l6QB6o>Ldlj-V&BFhL77wTw;IKJ-x)fF8k>$bBrp*{J&3}aHTby zROH`@*_-FM%fzn-Evr89C@-v@(U0FSzS`rK!pX;co;R>Fjv~B%p7p4_bIld)hrd^< zSsa6grPQ=)+K{EF0DHy$&{*#_>iKEYRfUxt`UR4Wj}6kG)45Bux7yp*q5Gf*8eQD& z_V?3jPr3wKl4%^lo&`Ex$zMqvQ@ib?QE=?s?6Qq0e0e+nv^3XLjgzSS)NUg=v_bsBHQhRR z<}HC{+ft!@Ey4a2r1#+F65WazvlrXkkT01yitn8^%psohbZ!@d zGiY!~^=HAABf;JS=DU`9oY5xi{ZfGMd+S?~#bCuo9;}dU!+R}jAUT>7`7kki<{URX zR#|1RXBy)~zI~N7V+m#_LahVJW5;xP_2E`z7wbcc^7Rbk>=HVg5Ldx!0AdO{&N<~ZApM_Ouo2_h@ z7O8HcH!YRdec5r~n#kzQ`WNgLEhlO05s)k{=X?z2UmsDGqm78EwS)EBgKhftnuBY) z){IotB6_v;X0%_~mmOkn%ch+)xGw<$u3o8_mm8Q1y0%!~SXDH^Uw%}8?*BqFB z?EfJ8YmDvcOiOj=D0DGs>~~GEz45ht+}kXCHX->>&qYLc3Rgl27~&xk=hA~23T3B^ zAcKj%LKyyLC!#P#`0GHA?`AWF_G(pG>V%jYUM$>`@shSxk>82_nZiomDH=9!%7k$q*$eB*yUwBt1^7f&vOayU z75-)+v;Fy|VIhS@X-T`2-;{C-L;YD2TxW^8gcHy)F$i8AA6PT;#?hnMP!b53v6#ty zT85p8Chsj@@#CV9;MED2OzZ$`$d7>P+1Q>_$t{N};ALmHrB2Tfkfhueg1r77LfUlA zU4NhJA|$C5DN{@_cXUqnAfF^QA7f31N9IqMtreO+Z{{(FadcfD^yr04RDh2@qVytwz7pc)w0nlEa9mQtlaT~yC96aeHdDh&c z4qo0*VEh#^zwCixe!y#S3c_I z{P>s4$n3+-7pDkscI4Hd;p*u4AgpkKHt5ey*JZSC0d@Dnti8b*?$L&?q}@5H)2ib&I(Xhpb3BdsNyG6Ot_lHq2%XkYS1$~dOwIMTv!WRjB|KI zC#k+~@%{&Nqp)fudg5bw-&=0FV`b~U$PSt-^w>M^%{Lh|X5^7~!OcQc_`x&V;sgvp zrxzd*X|3g^)3)BXI6)JH?*BT~@dmUQx!<1|5K9}L*zHjjt)b>aT?ShGq z>r1N1-G@r!TZ#KSV-g3~<+aNv!do+IBpNrds}g5;=ps$_V`2$g1uRe}+A;+!JnluP z`rGVKG6R}icfXu{dZmrHxieNW0=3Ben)y0|MuM5Ps<^O=I^*@4Dc>ji;=Twr=*Kx6 z3>w-&q`anho>=o&Y_@Z4#KoO-o~AlzH2z*tZ;=v2?r+!(Ek0SV>Q*f{WG0=lzmmDv zlsfJE>0k(Mw@5vhid{hN&8w1vHu`808+DoFu}pt`%CGOyb%Klju2R$|{yI%ku` zw6E)aNi?BmtLFAu@Htl7>a5`&0;(0eM1+B?B_f4Fpds7=nr?*$fbJS1#cMx8 zuyk4UpGlUFG?85Z5(PLZ(aL}+GXOx#>|w6#OYnjuL7vXZ6A;xMfCxoItzCi zg+$~5EQ}2551*X|5aOj3K)FG=@-7nOj-#twN6RrmIBtNvj9#e_ zlKhbT5$!h>amgPPdew(nTKxd^Bx6yyIZ%mvg$M9KM|;B2098AF&N1!#lcEZp77#a~ zgSCo9TONMwIb`lAyKU_I^?aBN`rIr4uo2y>07zBd&E>T8H9I-=E}`9lJe9#}L|VU| zV)0tCV?r<#GQ)gjq{dZ){0J^Gv!{qQuc96sJ4ikBnO@3j6_&Nx?J(uEA&RK3n&(V_ zyPry}-=JMoS&Pt@+2+^=LxdSQQK2^VIN2EyC42cl?vig@i>AIktFN;AHxeERcy;T1 zKmU1224f7>0D49NG&8Vhsq^fd#j%lUw>Of-93CtEYNn?c8BBRTzPciyN`-iAkOV)= zuf1(WhESRL=CfP$R3ef_j>d~ZnIc(#9rg51*sBJ~;FVH>?Aw+AehSMhi_zeojAR%5s-Px zi1`7inWLqoLimY=rbY`65wLd>lamN^WpV$&X zZFbimDlDF=o=DFoPuecfvl+>%pq@8Zm3^7Gx;Q)TWiX(3u9p)0)ZG;xdfgr5o*Xi; zoALDaYno(K-MIm?WG75RuX-t_Fx5T|V5BDJd~_#k!gCjAC6InZdx-#Z+TQ0T>K2L% zmis_=j40NjN_gM{c*m&{?SKaRlP^FZZbI-=Ok?t8sml^HZVs&?DmUuc-Y_s5w+d}! zd9fEiJT4+i=d!4PqPx+aAV@6kaHf^en;?N$&^D5|YDZ(__GoUVWPloV(VhZeB00(@ zszEvt7fhtgL_LYjDL|AKQgF~olV(%9p3}+pUVQ5MPh*t-U~?m?X6`MfIus0!ugPpC z@uD24#zD}~FYas4&K@QBbps?^tQZOAi}4X9KRjg^W30CRs^2M ztaOr{fWo`}*_-#)k6LHdHg-b4nYi7XTANv`aC;N{mqWpf-2*cN$;B(BYY*IbRU?4^ zIo777jB}QLA{6M~?-cl+7RP*mhNlP&PtB9zy79p}uvWRq4&5E7jZiiQjUQMj;s4jx z15pFtEr1#HvqggZ7ni6*bjjXj6EgtD+@}8h#E0kM3=$i18z;$JCT^|6(`z$uhp~$c zEf*OyssZ~OSvquM2Nac)!RTEe0uQmNN0It2-IMoBF{QbBXUvUAijnKRzRi?&UjPW)E-2KkXj zCDQ|B=gIG=z**5~skjajY9jdtXxn*a)}i_uY9I=%{&5S!-q16+DrG@m9wUXHO6%I| zmF$RAa!BizCj{E^Nv%i#gi-DvLnNP0?2> zpv}Y2E$mXya7#ZdVQh|nprT4J%XVA=$;Fi`_g#uB7Y7(RN>4Cg0TBFJX{uVr83%wDA7AJo^jP+o80RsPg|CbxG&Q{NguAW zUVv}B$X`b)5EXyUs6*aoY*vUuz6=pid z&Y0k56Ze+bE6?0*Z)v zolEadC8b6)s4d~KWQkaMIw7n5X!)YFozEPNlIWRmJj`-jPAoBn>kI>S*~sJK^vf4e z5toVW68Dk4sU*)=T#R?)ez=1u9;h?1HQpPvUGbhV*F5k-Iw?i%&vKv}$fDsJFXZdr zlYr%1kJKDmbg8)O(OML;w_V2M$!k;{P_ z(*F0@pijO#lVPOB{aFe5Ai48eIpTQc+`Sujh+1{jn`1b_>_Cj2-{;TwLcPc*FuR`3Y+rjkk9kY`!q@0ODvj=em7 zePcxE6^^P-)M_yZ-{qx??aO)iwSt@1|L1#5a;<;+FL0*Scm@oU;i3vt(UQ)SUz6ob zG9R3jR(ZiA<6hA%M^EOhQg9Tr-g`S-?_iq>9DA)7QnrZl4$`fA9DbJJMuCf@(|LT+ zdkm*~Ez%0^5*!9vNHQdXiAPjGhF$8Om(e*A^EI1CvO(YHq?nz~GsoPONU;Xh0%99n ze?f(52KOk3>AKz+Fu%Yo2$h*pKlU54Pj^LYd6%lL66Yl~TTV{7Pbi_60JdpDs5OxF zDR#k72FL&lJ*;5s7_K#MYpV>hCb?j>H^k+LG|$@Ok+7US!Q z@73;DrOn+XxaqQUdk(%*(ta?~E0|Fwq*~y~1^;9~1k7k|QJuU2%VpyLJ5=Xfm)zYi z2eZSGdl@w1jr?>{(}8tiTPH64YAPVY?j25$sZPn^{N=|jCrwrJi4rB2ao7Q%F1pcA zn__GEfwpv!I>ha>*De|9H>Ym@CivYFC%5<74S!xfoWoP!1k&Kvny7+FRt+zm@AsUC z;euigcK2X*sY8!4D% zxiB7|k!GJSOz*^)-a4n6rScORU$NItgp+g|-tA5>s*apBYB$w-N!l$PJ^?ls_PlK0 z%U9XS2XkU$)#4Ga>FDu%r&LV6O{nPZev|H{>#mD=)Vn)(zTNS3SsUieF^YcF_6`2k{G_u;3L zesx#H8a3_Rv2>6nsH{+WL52sqrqOEua5oHB4~|8vO5HAxub{0?Y}}q_;`da-Dpz+O zmpqUzp`%ND31vT&$2r1GNsbV({=Dpf=ex$ei-6Avghnj`+5?z4J+hpwcAI4mJySS!3YhI%oU{-Us-8{SX-d6zZG2WBw=(S2s)M^sxBpbK1ARiqn zKbU_={bOvmsbjck+P$jiS|yiZa=J;&>*HUiALaP*eJP3wh7I(Rz@p+hOGZ~Uz?XNO zJpZyFH~@>^J?h-0%=NoAM<3(J$C+Z<+f*C3D45yq#j0WEb`MZyS$_KvUFp5Y!t#p( zSVIL}0S*SRKsAs@I!izBv+n@;%in}t129(~K!7BJW&!*uk73I~e&lx($x?CLbovF_ z-|t4ykM0FO-;xvWi1Bv<#vF$XI&(89&)j3cov-pJ44umyb7Iy2v0rWS7{}21>0po| z)tr{dke1EphH7Gj4e12+9HL8PGBt2YiVW838gWZCKdE+;*CL{cH2tU!vV`tR3A%HX zK!y#1C9aBvDdwE?!l7RmYuQ-5x7sekFzQ=dPjm){Va|bg=Ab@kh)yo%eRKtSel$KT zB^0=mBT%uB0;stDrfBWQ5Z1S$)p?9OPHHs9qbi5))4K%e1ki4@NYw;xWmU610*Nr! z?l<*9%187HXj?F3+uNAT9L_3-{29ZG0vfKFq#CoC5AUulSBu3kgY&Klv$Kl>7LB?% z@^0A?jq`%abQ!mkKD-wnpBNlTE;C5aU0;hu1`ZCBz{H@KQO6kT2DYN zAMkof!J(MR8uxJ3E^fGS=&Vr{C`pOpBv&EHRnd5j2phJwKarIbuJK}vnFk!#oTiFG2M z?Y@6s1c3QZ2J^wk>1@lw3j?A=qE|7Y z01A^ZVz?oX5*XB+iKAiQTyFNs(vuFC_eQuXY4~+XLi}FMX!uegn0uy}nn;^(gN-mB zop`@3awM{JU5<_}(tJ3DYt%5k{p5#FX22yubKf$^!#egVlPrm#vhOlqTso+dN&(Ap z=Tg!MAOi>*TF#1HxOfJBOS}-*n!G2syA9k*cYvgtTi2I1#)9&1MN*Br2b2F=b<`U0 z;Oxz+@g~h8Q0>9|4n0M{D5S?@T*H;bTO|@9CA|;>uV2G7Kv-ER@kn8ZEpm9jK46y^ zJuAOL5mlHIPtu39d`4YV$^YO5P@X|+yULJ+woSu@F1RrqFI7j8TiY4rg z04=?uEZNb@GDuE*>mEUH$nER22^N@~UL2+x<^d~}jH_AYpyHYwhMrE$#6Sg1?ThXo zU)8&3!bexNVkW0{Y=NBxXXBPqycla=4?;AMQ?OwP)f8k0cmE`=b}Kbdl4~4Du{?&Q ze>N!3%Hs!6Iq8?oo?k|fd}w-chtjO%pw*gV29xUBS4J&>;nHj^3ftR;%B#aH!_C=K zfhOKOqR{pcE@D-5Bwcj@3EU2{<#cc7Kr=T^_nJ~vL;!uEKTHgqy=>T<1}ZZ*KZwX< zKr`+3f#(uGVj8ZUf#wNVOC7&l^`lQne(F}QcqjL_Patqq^HP>;y|Ips1-=Trsu=2} ztCCBPn)<>cjQ_BwI+G^F;n~i%C zn5TTzSGpwK1E;yjMtO@isbC|-^(c8=a7df+OaKewdvFX5jWt>F6YR5@7_2|;C zSD$hg-Xf2}VwE|8TYx>)b5?!WXgTbh@uTE+DIu!h7})24jud$3Ew(Q@n17{C`@5u$ z7^@MSqk?CBCF^kwVbIv)d3CF^CFUa>{`$avbaK>Dv_hA_7m6Nxw(k)w>Tg9o{7} za6qy6L;Q&_OHf3t)1Pnms|F{*-98nLUa$g|d-O`}{jZRqOV||WE_ofNyIbIt#Fbzm z5SGGCyC81zx-;6qt~ka_TEO8+E7}jqcHg6PuNBAj{Vxpe56{apPx#w#rv_JcuajTh zVs%>10tz$|NyMsBJ&{8i;j&7CDbdnBpGe2)=tdVs16FFO~6c{ z(g69Fw(H`B6_S(8o_@0SXg&5!37`|qDyF`4Sjya+S`7EwzZp)M1CD{BF{PmVi2e~T zCn*jqM|%kdCe|aZQPG}xj|SA3EhQ8zdyWDOhyH##Uqv~fACYlz`x`Jq!eD|LU3Mil zIiC5~fCHY(zRhyXd)O+PBB2KTURaQi@>3%KB08G}bq#K{`EwiBoHV8WiUfcQ2c!LB z-lZcYC6BTUC9Y0Ud8GH%Ebq(f4KFxDS^yhY0;ot_S4PXZ)6yaW+zX2Z%_{s6hbKUx2I5qDcx3^=tPx4Duf0w7N3ox;APL-E> zM$cOQ{Wl6YP6L2nCoP2w+*mkj9k4Per0`+q>vZBN2F6=Z*n)D7#}hFN?1Yjk;QrrI zfjoV{_H*CVH#J{e`3tn;?I{-_uyj5%OSnc^XdO7Y?-yr}+j{o0U58uA8&vphtJP*Wgw~ntM=A<(h5Woja zL@dMjmLNBILkR1&kG_EVZo5a7wm%Lm`>_$9c%Ym#0_sZa7O4zy!;+{}BCW9scrdnE zK_G8jjl*gn0PqX}`&V1MCR^1Z$;xNJ{WP8zpn@AjQT63g=yJQZm*bk3(g*N>V9?-m5956h#1xsz5&jvZHQD8Q!NLnqC_ZgrZi-p zI{|jgr&4x_>f(oL6+k2dIItCGUftrvM?s7Nq$)h{BXd<%Mx5i3;^KFR2TAmq&OcOo zobu9#o^(}c{SLv-(9<+6gLY@5DWM7p0>^sra`CAr6#p0w3w$Fy`(% z8HfEw4$&5urCX zb_}GYrpnQNf#F6*>m$qH)ZrcxJcz-DJ^_rnd+u*KN}cXpm-kF5+6yRHlI;M#NncPE zW$VDvIGiW^f7-j&aH!X>t!Tl+-u2Vo`~6?<`|bVsUVmTsFy{I_&+l35S?j*< zwbs|Y#Ye2uCfrFqUv?#V(R!d4a(jz$Th1+ju!n7OG?o|1iFVELmIX`o_HtklCRC0(aCu5kaT zEWDSg=8spqt@PJL$!sGRvGwgOtO3mHFOc|6 zg+k6giFDzpg)>@SQYWL1PEH2NL)jcONv|r0bY->=LV<8fsM>qRxf>KXYqZ(8TsZN` zX~3Q4y6v-*L=RufPf;pauAuORG*%1C{L~7DON2oudNez1VVu^St~ulEDW8s1^jUS4 zDXXmvJ7Sv|V_MVJM{}JNX3>WL5zhGN(P$1VjrmN1dxJ=A0MCa-<`WdV7rEcR78~Bhf34S9+m17B6`LSFwopE58^&09 z*nRM@F6If%hTlm)i=yEuzqJ#CmwDS0~ zZGm9%-Rm$tpM}>@5e(WM;clMWc2w^!8i-KVS=E5cgJ#G|4O}HeZ~H=4l}p z;F2E4VgfeJ?a%g7+Qs~(XZPAG{fXulp(+dClIP#`Qz(H(pwMqv8cT6wke2EInC0~g z1K}Q0oYRr(4yIg^`PpBag#TW@(nuFF>c`ad2YYRVKpziwdq8l z)NqM4R_XHk-k4aA?}TtN_yUKFyt1Kl58@SY@0%o0vLQi@iVSTZrk@JG>n4BPd<<_E zeSIN-%DopK8o82Rx@{yreg9&(MGTL4FM%6bv;a$%w!Fxzk~6G~$zTPM`&NrX=qDLb zbry8tD@6o8#@k=gyz!kkb-oPA_YZE&*#|1Zb2!Uc2x{UFwY@YDM=l<~H9b#K?%PfG$u-X>IZW9B%yI{Ak!3Yn#!~bsNNDODOXX zgrh#V=K$3wVL&0;^z}u6ex=)`G zPB;|vr{@hE2HBb|?bvmu2KX@Z`E< zzp6^A5<<7;Vw?6RAkIFX<0_G0uCy46Tph2`fzWx4Pc|sFl^*9J+9}b&X2k-0cvheb zsupU;B+)E`cANu!=}Loj^wxZKP<*zU7j2ZI8kWFGyCCp2I&mw?_`Z=*Uw8{^$EGp! zFeU2)Ca7EVPN?44Z7tHIAQcqyWD;RcgWSC{E=U*OGc4OzIA^ig=%iB4>vNV8ig7{c zxJ6zu=i^g9gPGtQD5 zqPvfRRhEYt^pBlITS8gJ*hxUc#oB}V%rzs@>GqE}VbMQaMv@lYPgaDh-2>yQ7;>Z6 z`LQ{3;Aq2UyeaC6W<$&SGoh66Xg{(O4^8*TE2tPYH?K;5{}=rms0z0B`+T)FnSIr* zQ5|S7iG<_LKipzH5;WyfdEH7Q-Ah`zTYE6I@wVG$b~1u$BUAZC-lvUSYw9Nk{q~@- zhi)#)zi-;v%Ly!CWBn~s{C+`V_3#F85W2y&P@!yU2H zIn-154$W5Fr`?jYNwIH!L<%SLSi`{S;IkR>I&4H!B73a^E~uSTJoe*e zQ+obh^yX(uGin^uRkx0gah5~VzLSp5Q&aK zmMzmskB6hibui0{Fe_}J8}n}~QGu*+uIsMSJ1nKr8q|{o8hQ!)zN}4HukxsQ*J4om z{9tYS&5^sCl_FCwHdxD1(rDpF83CR!;80#3bBSiAR$MG?+c#N0{j^b1w48i(t)HvZ zDQ-j8Q=*gRTSw-lo}Il;mN>-#N;hK}_M;;0U!m1nV-9(gs`brI)KKb3inYtc^Y)~p z*wf7w^dTOvdxxx3Awlukftl3vwQirbipKx}`|4Bc${K#iTH>Ma6&Ciit}MZz^|hpk zyHWP2y#5{BF7WPUkt6Dj|5gcfA6BgWZ>waoQ=!n{a(r5 zFM3all67OtSeNbl2l*L*LuPqn2 z2`5@?o2TI}Gc8$Pl|fTdc}tI6vqDh!W7`EkAq*_&2b#kFwY1%^=(&x`2C-WU_i;u3 zjG%FQL3}&0j}UuV4MY9==}*Yz6E;wO8%ME53-0wuiRacXKeZE2Ft16#%^FkN%%W_a zXXcUZN6?n~vPzS?eS#dVKD8i_&%Kjp9_x?5rOw~nPDr=n8nlqF+@@?1sdup|T|>7q zK!|H%%;gTB&8K~ve)S1TM`Y&#Fqst6TxgtZfgAMs_Qp(~mTSk=bGfg4}0UOSL-J?p&O`fdiv@xp2|H3bAdxH=ph zWwCXf=<0^S!<5n4aQu}96x>c~eR+YeE}qfR);e(|=A9!Gln=qkR3DPKyPwl%NLT&c zry%3gE;>*7bmb3~@$Hy{BG)Q?HYNF2s^>MW<(1vtWW9Z~BneH89-qG^Dk;C4Hp+g9 zAVU?!9y4Vt)U3152j6Zh(ZOkuIEt2!9}|bMVPw5olmpM!ZsZpOFp7TBo=T;)&G`p; z_#0c+C&-BP_RfOzv#gUC=aIj_5!sM)By=z&rfolSFKRMB z?7)ePiH#DP>zprcAEoO|@gP3!UBbP(RY46FP7?X8c`wj2p<1K=Ea7;3dZjc;W31SI z%IHB1mlkK;V6B4sGv;rK0iB|m=qHt zaH(B*ML6?@-zIQqP&mvP``U0<|#eh(C6xt0m@_xGf%&caJCnQxS)2&c{} z4t6*UGDrU=%AI|h8r)zp*FVmy_R)Q7M_K5FQVM_pXW_mp63e@CNS+Th8b(itpj#g# z36|6jPru4ny_L&05()G4tgvO^c`xEDRFVfi-w($>@NL08;)S)U zHA3prC4c7?I2?=3{RA=$LyLGsS^Ac%D9E>*{M!%?J8>j`VRCqe zdQD-n7h9!CWM$C&iHa=~t9&7dAW;w*xUdd?<(;-eiK#1{n zP-cXqTop@+SPTe8)UM5>>cOosepP$p-Wk3>(dn(BSE^&}*FmKi9Q*Eb*}?9S^3T( zXfQ202=V#*m}ic{t3Z2gk=LJ^d-WU%U#gd;L`144fYEk-tYcuDC`)|NfYyty!*JP+ zO*hXW%-J+FI{b>T@U=Rf=m(^bG>a&xKcSMG)3ss~PtTNj^yK#^$=fm!NG;i=L0U&_ zMe@$(+S@%Q@+{IJ4=iSX`$9x?&nRE(mjeVLl{Ku_cdCU|8uE+L)Gue@X5p9?oGf7m zvf_hbD4#c!2-p@)h+QM{k1IVNCxUV1gKgcYUXriMxM7`AHy1c$1n{gV4q{3&rt{|x zLEB$JO@ma}Q`8R2NukU#x^KFUU7L2y!-?qy2~JCHYtt7SqUT-1OTWH85|-i0>=qGm z1rGf^FoZ0x%S~dYL5gecU2fYIAAx&Ykn^V;)b~YQj}NF}Z2{hQlln}BxyznxBY((u z6rD|*_C{5_JQ_#7xNW>y`{D>ItFIDYFIzuFHAW(5Q9_Me9v{ zw#8}KjJ$aM##C{gx6VYZUOa^AHIst4&CvT`tXa-&3PV^BDES+FT0FD)w9oHHB@KRa z_tp$~uh;FRfGqP)P3|fY(`c!4Hqc@HE0bEw^kJ54PQIO~C3hdaQN7xW6MmyqT^ivRIc7oW> zo|F1f1)RAF{qNKNqr{!Qz zsbik5))i+JK~X^M#ow%TUI|lxl?1puc$oM*TAO@qFH1MESV895-lB?;7{(w-Z^H4| zzQc)|gO&jt9)KH&UuVdjG+^iug4&(e&@O>|FrIF$58IP?djUm{i<^)Ot5L?LSGaf^ zQo&e*H86dDFf|^CC!|JHfQUjeju1?+Vu6W2V~4F0*|AASBRixe(&Y0#5O+8L3;*V8 zvh$_$iHaOmLP%f=eIFwm`cZ6sbk_}0(T1Ld*Tb&gWVo9XebI%tRq`b__k-%A$1vG$ zAzo-dQdVOXb^Ttdy^Po~-j}b%B;lk$4AV=JI@oe|y5W>%EfXZ5iewG1pY0s@0~ZPk z70L;vtvl{%{j6IkOgZE8yJM&UiOCZLE(@4-69!k|>g$&0wmDEQf8M3k2)FtZp|x-= z6xvjXcY-ZKBRDu0?MU&OJSJLwAJ^z;SaIBLw6WpMg&=Zs%1lLM7=n6ygV_C#=C~M- zF`AKJN{0wYYOH9}Y!Jo1)nkX5ZO7rx)pTf_KOk?0)UXafj!>@j7Qh>;fg*HHYxkxpZ!wTEB=qi|duli)GZri~z)I837@ZW($! z{e%pJ#yzr@BmSwByKhWr4|XfYU3gpC*fd$(Zfuei8CKWSaWh0W$%C=b88Ex-5x*~Q ziRZ}LI;~&lK-;9G>h-FpJbI4Mq1VQeok9Gv*7SLiYi)UV6;YzwmXg~BEw`5G-+7Rp zno|M-p#9bu z6TudpfElh$bn|6aX$~i!GoOK9evsC4|#AR ztukaY|I%Vq=>DU{cygYoEhENYg4m8PW)D)GFD;^pS|hd-=+(pDx=&84d^iKjf_do1l@$C{#)wcV+ex0(+S7krZfm7W=i2Kb@>(rz?sj@KZ1i&YlapaAij`X&U+ z4{KeY)A+nSzU?(>iEFQB_Mz@FYcDpmMN|@f{~7RJwbtHtv(QuPqRS z7pzcYP_lE_0Bd!}#RuuS98a`}UMZ*)zXFmCU8p29w^A-oM7~MnzBbV_&BaFvqK$t( zrk=U->Hqu^`G2?t3^yLqHv#z(C$DtdLH>;S&!4ahOLhKJ*PyMb$lmRF+to0&9(B8gb2;aHI36dhiU-!spvR(Mp4azBTU6T+POM(}k(T$RQtERg&h;`(5c}MlUHm$4A~L8NMX0 zA9>d?3vZMO6_CT}-V7|>yRbTsr$q#8u*pq()#0plb~$g62o_ z8Q#uwPH=s>FaS>6NLgRXQqgVD5%r5AEH(%+JNTaa^O@A)*U_$`Y1&iL@YS6>rDs9&Hb9>8-I(G+>36R%`HrxBQV;V0@fL#_~2l3m70UDUBvg; zF$hoGy)<{t6KS{_?dcNl!G|ro#S`yFzTIJW@LQSh3jJPRo@LX1wYk@MA1325e?-bY z|LxJWDai!6nzgQik@pXs2s}IwoA)t~oW1or4@Y!Nau-kbvK9A28+W>=KXJ8D}WAL+!ZEAFzYm}mc zvnl2wl;qGCQNLd;5C5CrQfHHZwXaR2wi=^VQIUin4H7~g;^DJ5Z5KD@uDv0j)SF{ixZtB+P^vPk-Rc~UE3kHqrBLWKLnwpL|2j)keVuO(9o zYevLEQ@szn=#=a(xK;d7Y}+}TtE0Xrl^oet_Yzn0DhD3!-2&6Rs!~g7Qzf5WzNcR? z9UKAH|Jen5aIDYk**w5ntB)CJ$x)9d&apU9L!VK@Bsw9w4CtSWAI__e7S0W%BRPzb z^$Mv3*Rl5GA54nqo)NfxrGZbwsAioavz zVIly%BIyEa$j$i>&zUGHjp)eVE`DiqOY%E%0)KAF>1~9i_|ML`K{1oxRY=H^@yrC5 z>mojL#qI2oX#3tAv(2M0)89dGRS*^xs1e{fP11jzJi>FAgHGY$-P`~9~mBHV`)#=yl zIf9Dzr$zmLywl(D_Nf#HDiqeda>cQSS^lMB*%DPWc4RBT_vO9E{mT7!A|-zdfysq< z_jjL;H@I-eusg1Lxz9=^I~N>~OJiLpwm#mu!>9M9Tg~o(5j#E_HC&o5(~|t7OY3gL zSCO~-UzUisoG%kfr2LSux_UIU%xZAVGUk-@*Dr>V7+DFU12`RPe3-=hb#z&np)PmWM?1(l;8<&|`3 zs+G)d7r1jbvf@~IgS3*Y@JSx8yG0gl=UE90QyMCZ068bg*tuXi&Ni{#)Gf2M=Y6m* zP4IOeUWNbt7~!009j#dxtCE{DCl+-llgJX>Sn^P~U)cTYMGP4=lMzci{o#llEYZ@? zRbdqbAEW}$nXnrHs*Y29o5(2ZI2QC18RJ_CV8=h`)tz5ksCSNdf~@Px6-iKX3A4C= z2XcjHq4sWJJQvsQ22w#BDuK9y0FX1QB(nX_{T+i8_^eFCD%LpVm-SsY&%X_ig!{6oR1GZqlrqfZ6p-Ycr!{6*(z#gP{Q*AB1GwdqDQv20{U_R8ccFj$!4ttW5&RSQi zuZ%|;BC*v$&V(S&x_ZcufJqD@VyB4L+md0ewb27f4tAmTSAD=^i2#SD5uA??lWEEOp+_@>;bK{2Uy$BdlKB=7S^moN>UtOU$*vL)TV#pGd#Ul zKvvJCawhX$XR3BnTDT@LvfymEonVVJZGEL9z(dRALzin8ZmK;gf$-ydXkGln>NR>x zE0YYuVe1rRw>LP|YH;%vFIp8#EPzcS?=X0nC%y>t8htjt&Zg1w7+G2zN%Tat1%#~p zQf1145AGcGD%xwjDZ#ZGqrUX@auWf~fRKFYP2!5|+xA6Sk?ZHQ%&KiA3lHy0!p%6A zEU|Y?pv2G!;(PNCwsagro%DMQgOH3laKft4i~m&6Ak&Z z)9!qt-@g&MFVYoNx-*byRQ7xn0bhNvJUCh@KaoGLa^b+(T+?p|mdWy}{u>+ivnZVe zB_!U4d{{nA3SL=U0^hHSp%@eUjg@ksx04Q5=#YKFIHU*Uk;*(Aef6!dR_D!ANi z9PY;VXjfG9g>ZrpuBL>o)OtZ1x^mjAL!ADSQYB(ExGTU4sU{XU&*ERUBqE~QRv1&B zM>wQOr^EH*+HY(~JJno*cQ0TYb#4gvXEh9d+3uCSxNC2NAR^Hwl7E#$3m^x#>&K>s z>5!OW0%LxS(Lq~-hE*qf@6}?1ddRs?HnURDWh_X@WqJ*&dUi*2jYD@P zYKO-O)Q;FYk94u?s}xpxKNf&WT#G%}0TIW*OO*{1WS!C;^<-<~8z z<{UL!ZL?uq3LHI01!)r*Io{PY*dXLO1T`%5JgRiJFjudy*X0wPNQ11BFH-eKB2-lb zO*aVTWJ4%g#F(Q&$t&@0zE+V}#UwWAiYJ+#HueoDp>qXZmrFY1|T>d3`vUDG>Jd#ru&vq8WtG zI3bUeoLAA5c4#6em!Eos5;{=7v2USb4|WvCS@;ZwbDWbKGYTLIbBj?I;pWuz z;fA+osGcTf_G@&=0avu}UiDeC(b z^Fex8v}`w|8qLpB0TLvFX{}1I>w(so(&|w=!(uO4z|e4ejij2Mj5excbKh{bOYA3U z@~o_z2wD{xfM8`eU(g<2ISua+-%(7ZRSZ!M7P2)|I=VD(ti1CrW@BWVclI`7XTOB{ z&pL`Cp^|$Rx|Xxfg_oIPh8((Hf>fB)Y`T*J;%`ZlBV)vecGx`TLFZfeYiyXsFgc~G zDI4nf^-;5A*3y+5`$;Fv-@UpQ$g46v=uxAc^sc$}H~{S&wgqDNY6(B>9P8G8q0vPl zw!ipg@0F36Ps<vq-?e^99%y~$-a4ig^ z`X)0AXfMML9lE358~gSe#=oS1@KyJleS&k0u7ILi81dB0Telf1LkhD@H~4Kv}1Q_p(s2K*efyZps%E&krx)Er!C**=7hX;P}hZ#8Z49 zO)?gmh!=4r7yLY=@>{%W?jJe{cb-0EeuLj>9DD~UAdhF`t$z(yaTxHZpErpv#_GUy zF>XoOvp+*>!Pr1!4*sQA*k^TO%SmQAS~wQ+S47R+Mo=d%K-l86wRRH(T36Yu&#q?} zMj}skUhTEaJlpXQ>L^9*&zZY?29e^2)9-pGX!6m$QP?w4KcXegzf7h!m--V>$k=eHU093np2sd6XR+8-)dVVo~gzem}n-NN%11G!{S(pN0oHR_L z2Ifl#ZY8+OT=0E-tEB_LD=>e7q`8?{ikQ@n;lbyYjq&3tMc3gKKdu_88H72js_OGWb8 zPS>jG)KG{a`l+F1dZ>Mj&?m~R21h9xz4{ci>jhI`uI(kNA6m|K)fh}uVB^W00>!FD z7d*9(k#u`0Bm$JW?iz`zjlaGd&!SmZ1o23nV#0F43n)g%6 zpuCSh?hWt|bbsFw%Nm0#|> zdaUY*SDLt-ne~D5-yXL=3wGbP&WF4Dn|yA6P1Ao>cb>fwqbr2SnyvJ=Loe<9-YLdQavAVzW)IIqsG2jIrGqv4 zG0py0=V&dtswydz^UUH|*;68R@`X(73y!l$W5zr;RPwX^Y%slZ8l$VD)lOn93yLxu z?3xWB_$Y%{_(8JTX}HMwEgX)yXVA@8pnmnHtkZ zvPz^SGZ=mUbFP1xWUUiFu{SCoZ_+CptWzCqfnj{X+pyK}hUgkK=-h>87Mi+qD_34V ztnNQ0!ty~TJ9xA&k!LB(KD{i;`P`R-e!aGh@i98Er?V~~NX`g+%W(RrGBOos_e${m zt4{%8U~$vm(`BwX-ZFhNo0^4kzCxRbwH`4k;(w6o+2;8Aa3)p2Qi$Y*_N#%MA=OGK zbXObRBK6|GI$v3O+wgl5EUwSR?dY+d`J(#$7%J$XMw7M>GTvLEW^HaOyQ2;7hB_m= z;JNv@S;FOkuBA{SEY4hfAID3$<(A1C&)I7r=5z<=SX}t(>a)RNQD>h4@Va-_%DC>> z$s6@i=*eiRubGlNY}|Du(#*T&ftGVyclKE)XAN^0I(6nc)j!2^1pT4L41O1sP1Cws z(_5bjeWBrMl zfSP*t$}djLo;X4+Cs!xHI8HG1f<$C}sZeqJ5Uq06I$J>{I6vU~2fuK2fievnNYcH@ z;aUsJV#C_~j^)koBV3a=fjI>gAkYm2GV33C&Sqy3PeUQ2^nqjkDCPR^np0r%z-0ZJ>gK za$xUUb;g&_C>{1)%5~V|SbD<_>)g5A>f`O#c6bHvI5_&GKXqpAmDc(XgVMD8d+-@a z@&giJdW!WU-ii0sFO}H0VRa$4LUM&Pi}j~7fB^ANIDI)#RpW4Cro|X?=a+1(u&toV zb@RgEFL;S0MWY$h)Z|`H`zFk*4$2btnLOa3S8G_pE`?R2ffNVm7 zV4%w{A$`S$7ab(yMV9)kT-(wuOdtIlm{d;cWr+*y=#0F@gw6%Z-u!guH#X??6buWH zA0}d+O?+Y|m6QGP`o`Bsc+6FWc6RQ5m2~Ekfb44UjA|9#7UZASbTr@@krA>Q`h1za zCVXi1=J9jXt9hABeEYfuk|d<45}X|%*+KOg|1f(!E+Bpeesd!uQigpxPd0vE?)7Rk zv#OXtmn)RzR-YdPwi@FO2%8G1GYkYWx|Ay4_lC>550c+&cZag7w6{w3Ba7ZheUJg4Qg~38<6OqlRNs zJx;l%*fusNqt6siK}-fauIW`ZwM}5>(oQ+B~+5!@ux*r#FF6!!GsdFaSwTdYSMb)8A4OHb>&Ll z!bbgwwrk zge%V!&JK*G-jy>u34ME3tt1u_ybx@y!HH+3KRc``^LA@;|A|jZFc^7bGQripn*HL` zt1rGI;X6h~y+fMY?9_zW9J85wXOQRk+j0cAh1~xpl>DoNA>-IC(tt$G&ZOfRO9jIZ zG}s3Ai=bhNZ&yo-G9T_&XW9qNy6@x7`?%a=dBg~oJ$$XdQ$Jaq8>nQRoYg^~vOUF7 z4x4@(`7A1F*8S`DkhoAgCWjn9S@y!^)pN?HcopsRp0FB%F>?zV0@IKtok;m(N18Q)9#XoY<~bF%WpUG&O_a=G(pdVQBo!Qmgsk7h$HGt-6mU`eCK<`8f_CbFk?s% zmqs{$AQGaaxXCg^SlVYQ+Vn!dLuJaFIBz?~AgJ(;;a>K9paCGA?I8DE5q^VhG_h?) zN~zqHJ{$?cQaSaB&c=8&d1T^qNnRtiF{^+{WRws36_n_q!zr1Se!_i#_lRe!QCmM& zs#t!)`5ydBQ7P0SO(wM5;X_++8)1GogV7|zLvES}orY-3*M_-yP*S45+Cw#* zdTRNt4J;Ww`OJbFm5zSPfY>#L?WqjieeY`DwVhtUE+?mhpB0@Omx-qv99)$T>-=N; zUIohj5SM*}*(Ra^YY!7n=Pc4!*U1~}EKG;;iCKV31(i8n9@M*q>MtnsF`y6$l(awHcH)BNc2 z9Q(uaXdBAdTL&LyWtVsZ6Y}Kp6BxW}9)ZLk%+2N$lx*n#)&CcOd`hI~p|noPFE>n2=2V#}@Mn*3nMNqBhHr>H?w zy;^e#u__B8nD*d$lXOj0ODMuJe4-atK3e|Fwk3*H;gUn@hYa+)XYYG#LE10 z1C9XL0~Osf#puyq%>i|TZG@hbK{8>`J^>DM2=O{4`t6LPx(IswO}n(_$3NbbOFUYV z3s?yqzS02N`6x@oL~}IQQ?|h(L2}vl7|2}xk<~K@@7tP_!Mlwh8Wa(39l)jr*d zXPz5!83{JfQrW6pco`d}4~ti4UahS^poNUA0L74V8~&D=tNk6&`(c(tW__g+j~KsM zMsxc|XdlrF@EPOcS}VGfZo(x;J&IJP2O94DmU}7i{R4cl;_pi)ld6_A>|vS$WmY#_ zoePj+^g(9QZTb$Px8pgzZr9^9GqGGybrW%9d5&vN^FX>DhrtaTxp}isl{mgt%Y8SJ z1J+mc;>DucRB6?!F&69SzGq@|*?p;=qkMxA;wti?gWhovqam|@@!`O-DW-A;j`OnZHc2}C88#)S8k^e*v zx?>?}fpn=D-t2QnwU_E7JhxA_JIkX(iHlyj6_pu zIdhSoKU2*BQ?=v$5akVo#@ZK&P~j<>UVc$*%lMeQIsE@#7(3 z+K(-+2{@Zcehe)|w}1!GUtSdSCeu6M{#pITL zwxZwP$*yDoMk}i_uWa!adP27X%6rK+T5#_3o!=-r-EW-kri*`_2mM& zXy~&PBjIe@z@dWNgx6@>)i!@XkUZNfVBh7SK>_>Go<8GApZ>qVLTKir{oT`McObfE zmKHbl`8I=uRglh4B+P?x=yYbMzN}SdJ(F45Z9rMmr#@O$^?R-%*WKDOGc`NK*4Ng` zgRJgel-LA>7HT3P%K5m7flQK%jRx1Xrd*OH*4F^a}R$rJz(2nm<(z0Ke(Aq zF7Y`V4|=4{YNDs2KP6N2;M_=&>8Kfdfms|cbxMA-!lkb{>-QX#^ie;P*_vs)6?aK~ zri!@WKRcH~pp)8bs{DEhchZllJ;=ew7d{?VeF-%0y|RnSY#u;z}k7&!m-aD zD5=?kiD=gmZuuciBAX40(|jWa7{N!2sjkUJA3*gnLK770a1Rr^V^MR;TzE4+RC3#X zF+e%{O}YYV&tU4wT~k$$EwFcnnk(sUZg;_?p@Tosy(vM=qU4FBac5>eb{y&@<47P> zTa$RTLj7VL1wk-4N_0)yl|kxJi)z_J&MnBgf0i`xNu^dha67kdZ9@y>I;$%FJo)Ki z+;;q9RyG*@6}BP*qc%5xufy+Ibyjh5@;7Sgpm_>4O<0qD%J48cWK}djyqpRun$r_~p%nR=&KwfY`FB^)i3|~PnN>SkG(tdqV zezrtSRTS`2ouHaOz6G|IUBO#>!x1mVX8TQddWAXSiKfHUMrm@qgq!|2ba1_3PE+}f z;UOQ*gQqe%R0PNh*Ptw)dvWR|CFf!8o!Tn8SChCq{vuy`&qo})6ilWoG+Nap8z8mP z8GqzRG%T2Hn@P1$3*zUu?>2?L(p;Tx#bvw)N8ca%e!o_Wk6&|9v&RehIe+P{lCyYg zTxU_3K62X~rCST2bR;Hv785-b(*WVp3)d%laDzMO4%>Y_zFyq9oea5!se^TXF8&H$ zOP&JlN!BEdAUIf)mM3@TkJtFBr=k5ZcgU0CXEQOW6E1Rs~ z)aIUVcX~#>`y&cAU?>qrZ0(uJN*UqIak=?*C~m+ubRGe^#TH+ceTDv)W@QD63C)II z6v;?Ip&pU+5Mt-owH1b9Fek&hUDp6Zd-3^v5Vc=8S+XH_sbTh)wi*$gOY6`Dr#3w|oz!pAbG-_sWs|nG>nwPf}l$kb}XiLMllVF@LLJZZ_x-VwM@iTKl8zQ}|CG z%?(~v?%e`os=m68CtevA25j@3hek7~A`z^2?`x#-hWg`?Q5RAq4t1|H6|b|r(_gVQ z6!em-I7|`-g-R+-sbqYN>8K>`EJkIJji)>fQiFFbT+e>eXM(rcLIix3qJw)~{}F6X z%NrdL%pi_m8T1;iJF7x8^Ao7Z5Xh&axHpT_zc_PazX0zM!Yg>5$`mvYH{5!EvkZ*H z2}>8Mck0hAlx#boe(pzK9Z*|@$iB+pPVHLvN!(T%racpY4WM~D!T-NjU;M4xIVDBiXq<{4Bb}0e^rBV$z&nOp|E;&wmL=ft$MfxCJIc+^Hk;JyYui&-lCrDUOx6}1of73)J*c4aUgO%~va}Pu+rkca zmySvw?Hvg+?3pdUrH^akoNJdgx7Ryn#@DB&20rPf;LspV~q`TKR=q8Ti3ijRp=;SVe zNZm@fVtC~#?Qkz0j2Tc`{YpNg2=CN#1MRTbeimtlnWMMU@{@;(wy^EKq+QQQtxhjO zBwolt1D1O&Xye*nR8)$2A9UWW{i+LZD z_1#|Va&yF+lAjbR!5Q$)HV(QB_m9k|v#*#x*Uj{vdWI_jRe?u0s5)@N9qsCj)_L-> z`y`+*gz{Fbne5sBkqi!*Y#57>Sgnkc5W$*>7^?`oR~N+ietjbgamc%j@pVe2<=^OC zW901BpBxrlUwG~Usgk-(#ZIer*T~&2l_+_Y{9-S=Ctz(%G^ysfKzTV>S}Vj1&Eg9* zmEi`6aHTh{aAKgTk(%SPEiY^myr+^pJvIs?S&VAZda@X4oPTW27T%C9KamxT)q2st zoFKNky+cLP3^)893l3#8XdCz!=eeVUe@hU~_?rkH!4^unvYAdgm{r9oBuMQUz=m}B zl#O;>`5O0D6qoc$9)sWym~>Y6ImGc4ip|FI4&8^;I+<>El=c5JI~X^vT#@2t zhbWL8gg3K;$v5+gKP43tKOvCLuJT&^es88L15-meM(4_CRG;iRb@*Gx$AYV>(46Xm zdV?w!;F0V#Q{?TgvPz1K`%i3^h(IBeiH9ohLP?WOG!X9w@>Y`erOb!FyDH@yTQIWh zIM^VD+ww~AESD+eHV4jl%!z;D6jBq~W;{^EC(So=g?w?~i6kX~V8NkiBhU&|c8V7G z03j0bv@qxe_|WgN3_dPZR=lg@tWpZe9FnU)LkNF6$O4l`bot~+@^4)FH!>miop_r+ z5UnAYW`4IiDW_~VTY~<}7%rcnKQRo-`h-CNXa(oTSUA4q)J)B4fD_P;4WkMwXLH)g zO3Ucgaz?vaN1l;BALq(Tg^80fh!uyE<=Sv| zbSLyrx-;63-Y%Za@I8s+v?)6NOat}fmR|YSTM{q0ArJKv7Pte)PE-XDM3u8YtiE1w z3lj*L74;4?ecaz7SCe>Q+AQm3x02_m#~gpf&fgyVKFNrdwy@U}y{b1hvCQEPt1C&S zrLH6Huj(bh_V1A+ICVN%*$(a+;4?U1CpP1Nv=#amSN8{Z-UvE_-i8Fhf8G0Rd_A=q zRD>$J1qy*xfKKu_o}NI_w%zGj+`J}60Rp(Tyxcm+jA$O zDp-~czv#trUd;rUm^FyWFUw7o`4y@cUNSuJjQt4civ~|;L~~ofeiOaT!k^&+UZiGL zeGidV5Xfe07zx8#2e{*(0FrH}Ol5%2Qm0Pav0kN4!>EHMAO*yvh|%+rKF8&$_phc?PC)bkilC|-#QctP zXpcd7EWEEb_lQi#pPQbydZMcH1Ytg1`v6Z`;u|n@HgzA3LWiu$Il40j>Oe`Y9=UQS z`urNfI^E&0JU0V4HIzKSA3NUw3ey7$l(r$2tO<$eAtNy^)#oQr~vgy4i^h zL$61stfiN9++K<@-sfX$#k^#f3=|;4tOk0sR!8O6dn3;T#O&J>2S5CXTCd4G(2-`R zXtS_Gly7? zTt0fU05I{7mtboX3dmlpy~)nTIY_(_3P=mC+qR=JH(5jz<&+js1nNh>iSuJQ%GsgU zabmMCqBN2Znb@1iZ?Sq8w*+(c;^RbG`1`~PbYMkVa;unY&dGlf0ZBo;3yzikN$y>` zfA4(RN?+kwD|r+kII5MQlj`&WWPk-6e5|f*ySVLVTuqp#YvBkmlN zb}s8R$DkNnc{KiH1?0{z0yYnU_)Rzy4+5RD!oG9HTVV8DYmSs#tzBl?-oel`bm3m3 zGuN%fQ?m6- zyxK8>WRDEnYNs#>1c$7|N7u!|M%-YZG!K7ueIU@X|1Rndo!RRRrp$_zY}YyQOfphR zZthtykZBaMX>p;Tj{ff$sRoUZdwKRCvU+7wC?UO(OBb>es;{~pg)`dlw6KZjfMnFW zCc@splG3LpO$VfEY>vmZ8+HXyPF{tovv(J6(#&3yRymsi;yt_tQ4tm@S3Mxsv9JjY z?x3Q7S%~IeSE7IY{~+1eY04*OE*eW}y6sS?+X>KzQvD{Y60u;`&qf&yUTq#wFL%G3(8e38DoL$*`u2hEy+nv-L-{qCIbSX!>QqJ2Y6Ox{4n$Q6J&!Ybz=a@MO-@ zpFFcVL&hvaR<%M=_IY0>1oDl zQcO8L>3gy-eVFp5A0{;KZwO1CfxM?@h(;@KKl7Y2^r%Hf#qzl)%&YVOu3%~JLIemM za*-Z@G?GiyKd^xS`q*)<4$WmtZ`+pbj|a0(xf{RR^-z6)ak>ghk*yqJn|Ef@5U{+{CS|oi2%BO_E0{YFc1+ZI5y7>E@ zsdt?$xu>6hVRxRlafm&kl7G zbf_bn{RrIBi2?={e7tLO+n)nTn=~4TOchDJQQ6)n&-yk?LU(M&8*iyL7n9B(jvd-? zJ+?m>KApkOS2`II-BX^wQGMK-ntk87=48BvU4k>NDZRIvcUGF4s~DFIO$JcQ3AX5{ zCL1nQMWhX^Tl|@y+}I-M0*I4n)YssIhUa}2)_&2g7)9|&a}yH^tv+XS0?!?H6>wXW zJj)UViX&HYh{W!TMnzlTlaq4_LJ?Y{+zvGc%-wI8IUKMh8MVM}^`<)gBCr1c9$4FO z#{YM~%JnnTxW=+loSF{8WkI$Q)G4tNw2wmId$Sr zD~lc5y&Q%B0ND4s8vF8fRU@{*9s&LMGJltQ=Qk%H37)TJs3#iBK}~msW@4?XebJM> zCudT31vp#q=7;I^Vu_BqsLcKrzHYA!^=fMv&9+@K&jIjcAC+r$)ZViQxZ zag#Hq(Pb*4fb}TuexDgC%l}@ccl&ndQylz`>!ZAL7aLWW-*1g{--O3p6gXwKBvhN( zvNY3;N1b$ioE^GlHgZQWRW+e`uZF%&e_O((fY+5R<3)hxz|DDL*2_UK0vrd6NojZM zT>CmrL3eB}3M8vS|2n*W1eSWW*Y7%b zQ2&LwhBJqAtIl?Pa%JS5GG=ZP7oT?^Gn&&`_v@>;LN}(AoPN~u(VyZBS#F=2jrZ%_ zCt>qzTnwW_i!7FFCcFjq-K^$Hox94e-$Va6&YzchoFBRqm-4&?0zianJJ&S`E8FbBmWIPPe`mLut1O9lg%_g_dykT@}?!qq|l;TS!v z7vzkzRhv`@+|Heo5~Bbi>Z^G9Z?z;)@6rUy1>p1;neriQq|WH?_rDg0Rh`fDur!Pv zptV>5&2&~f-?qy4{Of*kg2r<^=7GxkipUx@SEJ-lLrdYCu;?{XyVlPa4DYoRqud9S zs7*}^vj*NMRt$QcDh`C9zWnv_fo1gx$bBOcTn@P}7g?R5zB+=PZLi6ky##2%fKcM< zQSUux?-Y`?|FH35@u6ZvZ>e-pWVJ?C#NebrEcO2V@?npbyj;e2Fm)I|`Le{P{GjX@ zq_EBfScBfr8MD2~GBh?Rt!vvMmgja=Tc;r^V;8@KtB*l9+`@_NU znN-g|W}{DpG|REq4fGRK5$%aj0tNKnd4hIn!XWo(h%@05%0J+m$?QzDB>D~Jwy7?V zXAQjHA(r9n=y-!Sg33fbKmYP`sDNj(M=|-0Y<%hhpiGN%C%|A7*?7mJ=s2tq`%+~b zgb8x%wKDmC5p|#EEuzbgyq5v2mZF+p^i#IR^gs+ihGenxMuhA!3CEB=cgG=6Q=Vsh zFu>(vx8351L3bHhs{#E&vR`LvmfF%hbD(-)z2Kz&xc2$(moEGkW`GIF9e$zQ%ZB1M zWYkn7t$>DG4mE+kW}@Y^FW(`So#Z|n^vqzumf|D`D&3qCT7GK#np2K!I)Ncec=4;y z`;1WYQO&bfxK^?3Foc#7;=_wx)0M^6axC>?w1?7RO-#1`K4wkd+0^Eh`&*)$$Ao8&oCtm|locx;i=zIu3dIxQU1 z*z6()RWb=1sZRI!{fXZw0=3<%Nuo4Yzjs(coi1YrY8ok8^AfkF$x%%C6fZ-J#ceHr!MV@_esUVnMhj`NwY&Q3_TQxjhmDNpuU|nwBKxsW$)*k=7O?w5@dXz+ zZI$TTJHr(QpBfQeX~iI8n1E^ncO7-5TQqmW_}9moJgk8LrvYE5%Vf3a6;*)CVN;;J zGETcK8{#!dDx%hzf}Pb#(n;3)ejYCxPEpM^niI&(8NPoR7Ura7Ql1Tlmq6%@TgW-( zteFh{`k-SyJDVHzo#h>=We7}!SOW@GTDZsjtAF1LDeDglj`7`(Tq@!0orh#z1Ect3 zdw$;4#y6R52Lei1Ccb~Wz+v31@StXA+6x{z9-f;`r}wWeU!PuL%_{%nKu>c#L|fj) z@;Mi>Yhf!7PqZHKt#yqjvD9IhjK5pAHR11f-o2+stP&aZKXCOh*J%DWLigAb*XG(} z^IW)(lg~{cbO09Oy}v*HlwHL9=8tav`J-Pl-fjSkl|EN8Fb;&+dhO@OUf$dEQuYbC zRMZuK&;R-BoN>d-=E}#O{#^O_1FI>(rPS)WHx`t{S}VYVHYfGhyLnE*6MudOgMU6K zJ1cosaN6ktI1G`Se#4!Az5VEgG2cR+3Uc7XOI!>6`*C2A)SqlmB0*!$TG~dw%mb!{ zGZ%n4N{t5V|2+W6TCa0S_HnT465YRD`B%HnlPL%1S$7kE{aIo}K}%15_aL@}yVM{0i}FOIccFx{r&$ zo5hN4q5kXj3S;3sg?s+CKtB%QGgOyf0kB0zH18UyJ-wKBBl7Woe2OmFm!YrVx4NWv z^Yf++nfu=Kg@XV3-VNZSizw@dsX-(rK*4Rei9h}xgje_$)^{yDx>|d+s(DiU-1Yxh3i-<~ zUVhx;4^Gc86c)fiC7kXDqmdry)L6I{PL##9;VY6E;HeQ$H*pDbT?RP(D6PFUhAo=x zxyaqMw{S?yNjITdBmN?wA+jC4=Y9hani*>4y^rV4n;G1Ev(^8H{eLdbfAWSI8VzH7XTy^ zr$MQ5iw?{j@GjE~jy1vS;Un-}#DP866AN7OdLjqt%l*~}CMl-Gre*AHWfXnnxw>oh ziai}vlV`ZbIRu`#4u~3zE(63O50)p!dQ^_|(fW)_*MNyq$ z+Ywn&o_o z{m9c?qDVJfqO=9NfnlUP$mER49@S2~q^sDMqe-XMxKp@2cuz7N<(*Za87 zEiY%DVD!6w#k}aokH&U#3gFc5fow`0^!VwRJN_1HDt0)r6tsLSq$1RRDNXc@p~i9) zRJlH;5iBB;!K!Tj^O=3+vS@R_HlRW3#P;2GI+K;;aa;BEwMH?{+<;xUvQ>y8as`JT z8-(?kW#$;)C4%AVFe7O+wL=s=eh}|?fVMha<@e7+tGy?f%~J@BTHaHI7ukCN| z>F!9p&@DFe5O^Hjy9>dc1t03v0{<{p->Q-fQpP>bazD*d)zwJk^Ub$)JA{y5OZ;oJ z>-6HC9bP}&y+HpWB((4lw9RKMpeVBr9Q{c2BFdf(IC0uupRICU5p5tPL= zUPMVwR2@kDJqtj-3NcL3-eSOQkFkK_@!aUkBUa#=El~)%-iHjEr zlr$Fe@3g_g6A4e>N>Ea~;dSaxi8Jq^9Zngc_Bg?Np)$DXOpR}kx6L&QgVpo*xDVJo zM+pc?{Im|OsL=>~$PcP_?I`)>?X4e6x((D&)nlolva_u*X_n7Ef_n^R3oj~NZUw!w zPoEl?Lqw9-ndMC@Qz>MIP?^O2dtY;RYiuP1wRK<#K(+7N8YiE|rlI;Q#V?G%z6>dO zGQ*n3w#aIb`my(#4&etyz}*!dSm2~V^pPIa^F{)hF60B44@Fo5_YJ+>HTAHPj5NTdD+ZWTzPqk--2G{~D)tP-w^v?P7QTDjI~fbPs_NUM5} z*Nc9~LxOq^mmx?XvHBoXl>KVxny#4|RS{Ux|GMjd={Rc%?EHAuS^ziGg!CJV^nts( zWq>&(OP`qWE%+Q2oLSdM_fNlMr1M7|%;fxxk3vOnWUZXb%;*4cgX2v(X1S2M{WiC^ z!1VF{&!xPC@yfa$^E% zyoo;1qE-j7x!v}g@-%A}Pknil%h(#Otbte;!SzO)#Fmb?U7Cc7*v&?;H19X4;Hg|1 z(37dTeG$;OFpZhq9bT63mU7P#uc&MV~^Ep(I6T%YjkkrTDrm z>$h)Ut^zJxv%~x^h@~{@0QsEf{GEh6yB^@gV~ELpyIdm0O9#vFgl!xxP;?zpPspQy zjMu8w$(g-z3sn#2-V7fbFvBlWdj51hVL0CWKu z6p{a%8Nz4ODAU#tILk4EUvPjI9eRs@ofJ$3Ub=E!$bTLRK#X#$tXAF!ZRt@us@>g6 zqtZqE=f28aJDwMRJuZFyODrEichD$ci6+ql+R%;Eem zz=IIy3&z^Cf^r~_n4BDy*y)9y3gi9pRhp_~ck2yst)43x0iMPLA@|I?;(ng-1{0GY zJC!zhKP^$5VUgCB&W0Z{iB)IS#SC)C_pU`I(;z6d<@Lw#6hascxq6?min%j~v$gr7 zgbKO~dFch=Bc#8JOCBD*7_Nb^Reh9q!C$fTJ}!1sa2*k*I#R*j;NBY3q{d(SI`ab1 z7S1(7FqiMH+o*M%hNcFWP|cOHH|j6qFxq_{>d{nE0u zx1fj!?nFrffE)vqdp6LJ)(P){?CI}y+M2(8?-5gCK-;hU1uQVMM`*JC{3aI_3!XXH zGW0K+j(R)qUdT~&B{WBgZ?^~{`}G*<44xJqS?=^<{}W^%Hz_>Y0>c70db;`pdHf=C zto5uc5UTlarWM%ma;Wv%$ASpJBdcK&W`R4tNWbeaUsS{~mAj`@&V2)WAvF}R{oPXs zCAMiE*In?S=IVvo7B$zL9ll>^{w#cJW&A`VWF|dQ!NI)Xjzi?Q_vkYL?l<>6(LtAx zM>V;LzPd0Or*}*^>!>sDUn_2lIP6~ztHCtlHN9O$|5@)j%c}~t6s~f0WUY^~h`jj) zjPNT{QUHIHRO4_2v*fC1-#U%v8HGpkxZ>JH2`o)YFh?)qPR?>BsSFia`Hw~IBku9kr0M+#?SpIm3gp<{G{ zvu`A`L6%c<*XpP2vK#ajD&r}PBP>dp)OR_ZRL+eiE^!%L#l2RQPn~Oyfa)^tKk`}= z4~Rd@g&3i4+@vze09;BMd$23xhFXBh@BKgs)W509gaDmuWs0!(^gB#PUfkO#Q>(2i zAo7F7%dDzSf?C+Gl2TaKcbhr(1`I||x(4n3;RWtDQl!AVXEHDyWgFZwK}^4QVoGZR zZBK$t$RFmS-KL&bbCghVaI{XpOhEd|7qRuP7@@;`}81`|G4@MhJ*$GvLKoWHbu zo8_`)jGT3{F6F;27P|$;y?v-swRTym7$BmO;W_-(aHASbc3L6vZBD>DJlwId7#`rh z?hhtw?i)C8P7!@geBk^!-T>iI9;gz&)gK2ALxd*>B$Fz><9ygByVDMR1FrUcd<*Yt zqaQ%o%{VZ{lwz#Z?G#O1@jdz%3{LoJkICZaY_;Z{hCpIyF+E#0!@WqyQ&fpW%r74y zV(N-Tf!TN#i}2&8QMdhb2*p|ekzB=|$72${?b)-+RSgy1=?+-l0HUFiO3EEnuUS$} z5-8G!YXDn?whx1GLm%!J*BHOpMF?#Zkwfq9b;t zyO(bkX+KaKz$13tsu7?-UK~K05C{mhgh1+5CM$h|Nh;em*?nQRRy#-z#tvUK8w({X zKft@SzTQ{G7Y34CJJIa$NvS2TjWfHf{wNbm{Fh{tFQb4}M(O<}PR{X`$a~>s@8UYK zkPX6#>Mz>Vk)ktaW^pw?#tA*BcL0%Si9SKAtpK-U^bq`vTRnhVQzksxF&CyG57s|4 z&`3-YlKH1zb$mdy@~1)}kEwg=PmRE^dM<@+STql@qI%VY|1Hvv0pDJZ0`=G}T#MSw zibh+Awjmf~3oB3zUnx9F19@Z7maI@Fmir$TF2>o|{9B2z{bw5q(|zqASlgEKHf%9N zn9GYE7I(8*l*M#MlMmNMyf5AuP^20{B}(SYg()${|ToLWA~ubR7USftyl88O&>KU}OU9nbAb4_iT0;6icluq145 zvI0&q_CgY~X>0SPWx#!D`X$UdS*$F@W?{B*PsnkeOW4Cpb{qS^#oeHWAPimjQ4gT7 zYMW_A^^b$_7+>=G$>L@6{E#Jhj>70P1$_rKQY~CR4}2bm2pLPI26^uNuwyL3P0cHd z#L|gh*k=X>-oJYO&KX>p%bfsaAtm#82xRT~ZHiN6mpc(TaAPVE9ke@<1htW&HA3Es z+|OQlGXWO{@izayUkld}b#$5kQ-~@k<3N+SZ_t%e=mFHRunR??j<+qPi4vo5M~o0$ zmGPmR9`>vgTRgQ1NyofP%PPCv8t_ltZ$&o0-W`!`yD_0d|Ih4i+8%Qx z@6w)Vcif}oOTCPJ%eQ8<-Z#Thkv3ar;>9>yT6y}kb3J69$Y3LrkJE3>i)G#Rt5IAv z45Ko{IOALHt}Kwde#UlLd?Y35tZ3;n)B2-%*%$7Pw(9n~@ftflQE%1-HGdnR^^|0$ zT82T*e~iy5t=WG=6|CrD@HDrLcEowD7SE>|9z>iTH7Gyk>zlk!ro zEmNV#7xaD4^|t$jK(*wn=`H7r(gu;c0)IaSw;92!c!h`QoM~gKso!UNoYvuYz zn|K5oZ7*P@DKR3%-41p_0@O@b3@Rpt4qC?IZZ*v|t7Y8;R~H*Ya7W6q;&?W?M$|T$ zentFB)f(+n{98n$K)N^O=G?v&2XUR_3qUU8BU?NnELID)EIWJWc>Z8;EkL0?Wo)Sn zclrAkcQiX(JNd-(=&M~3c}Pg&#HE-zm-*)#T*r`YKbOHqB#VA8`~-3jPiABv+IJCe zb=kzy6&`A-tjm%-Y%ElqCjm%*nseA!QM+lYNu+ zVvJ_73~$W7ym2GP?YNzsuhbYwShVwIf+qka)~+QpxF68KKf|Jx5})JzTCaPxJ(0n& z3cZ5zSYbd6yM5eyWoZat+9;p?(Ba+Kb!f*pAh&(n%Qo)a!zw#?c32Bf`AW+NQ$hiM z7Vyp_isHnW<%2lrMcjxXzDcGVS6z=thI&t@4H6L|TkbSJGS=?=4PnjY@IOC{S!=Ef zwu}Qx?q{FZKHDGdYB>X#AJ9fz$^7$+C0qhfj(rN*f?Wt3&Tn(k}{vColx0rfvtQ zCqq!tHFm)TQu4>$iJSiAnF7F}5BrX(FLqn#2IfI1w+;F1M{5M#ZRijr>QXoT<^No9 zDHP+NgN+0^3Uaq~9&1OZYwQntgSNrGcR1thuPxoR%i`Coh8<^Y zvQIg0IrXYN%1q+S%R}$pzJBW~`cm5Z)oetLPn{!$*EyaXEpvSOrp}p>haa2faLTq} zv{>#-XVsRTl#-P~4_rVs_(UGK0KcsLYn5U{ul>IIpVwPBUH|zM`Q@7WiN1sXH$-gm}#DjYK^fmnG3vILPeCPLnWXF3#FCV7jt+O>km{D|Ew-=E&Z&WwC8){ z8fd$Z{-pD35|(8tYWU&^i#=#k>``|)0a2Eh=z%PG<*dOh!*$O?*ZUAvcD^X9v^yq| z%_qq6Qh_iCP9N>Rdb< zSAT57_xJOULYmxut|qiF$3d=dhW^5{;JkfpMR>eml&Dmg<7sq zVHs5Q;HY%DxBeT=`Mamw%!`bRSmwv=(6pF+KOcWhMoOHWfSj;l=Rn93%Og!%%nlOQ z&s`p9EshnM>ddxvr~7-dY@!MLzV44>C>^Z$aZk^VG2IrG5w??P58X-^zjd$1riyS7 zdfR&=k9x~3?^kBY{*APo*0cT*J!1u|_>z(mn~0bq7QV#xTCoz2~E&AYrGbND#_RnP3KTDL-}r`Q>v$etpW zZ&F3;~&@!y|xP8Gr@d;-q2_3O|!mg{RxD{@gcoHNKJ+B$N#w3R$f z-S|@3j2ADH*Y!W%yNDh3(aoFao%uMXo8|4)G5ByEhdatL^BW1#6Kns1oQ-ArT8YG% zA{XCtI;EkUF3Zkkl!%*ue~~8e^P3l%Z?|FD(D;(p$fYmEhV36xmP;gUan5yLEtc&} z3J>a^Fp7~SyAI4SVm5D;u{fuc8BZd*5Tu7uPLcE5*4_s%wvwV0vf^iq-Eh@6IPkNK zNL@`a!c)@o1+&as`SK2pwD>xTjLYDj4t>q^PqT5^`xHi=By{xD=LuunPH{R7n*_S_ z%wNy+n;1AA^z*UtU(zY;gr~*PD<6stzb|e>pJ*$MUCydc+9ucCqM_~g&@Y9XyjSxb z!7Jm1wpT+}`t#VMol&tVUAw2ol*F7pIQ}`33!zd`*j69np02E+knx^)qRW)Ldv)DV zLGk2BM{S|=yW^LoR=0X>c!trUFmiA*0=?k!7^I0zmCKWL2lhr=m&?_*w=Ht%Rq+dC zNkzS~VmLcfdR=5#&iFNpXSdh3>oO2-;ftEgH@!96{Zu9l+tcWyYacNA$GSD0O-bjU za-&6j-wsQPbeW3Ew!zQ|QNdm}tujlD-*Iwt>54SU#a_oP@0z^xf!f-!61MARjmqq4 zX~$(sZ4~;(e^?%o)3vyuxX5L4OEKX-v46XSMyzg2X`!1zjkD!HyMzlBU_%#+m4vO^ z8h=nB@Lg-3n<+fjWh$UQ&D(S4`wDql(|JD3ki08)aCn+1Qj?=9;`b1_(n`vl0z1J? z*F$98mZbQx4L-z6_Os=%+ljszmuVtTY!j0)*K||md0y^RRtO2DB9|V}_0+CW1GnT$ z4VzQ!lC9BAI#Mqz-qG#NIKTRE9WPl7c9jeTjTY_>k{xj6FL>>(yX_VIn9jr#9UsDY zZ;_tm5{47DB&BUGg#MJ6y1SQw7r>M7&Wg+>jH5;%%ECp06cxk#K308DV6Zv3|0C&0 zt@yKIVfV}`iu7*|D@%jc+f0XcKF-J zy)a&;`VF-g228HIl+d$p(sxgF64H3#s2w@*u=}O*>4zV}H@+Z!^kN1iFRKI^7vJJM z_N=)s-oh|TrNqLSZh-Qw(EpC&m!6JnUUl}V*12eH1UFF!R_bWxv8H&Kk(8<$54CiU-6VfPlwot|N& zh+Mp{S<2@+b=a@pnc3P>yBr}fJ2g}v`fua!%)WULYJybwTpahqWG-}48czF>;PqPSpYv8(PVeNS1d_G!0k|) z_<+JXvWoxm7Q;@ECX^^Gu({`rRtXTyZj1TlMKvAt3m&ms8t_tlxRog&En zHoh!6oWn0XRwhNHPUQ1)tKmAaM^$^c=IhRoWRH?}Z0K>fbO+qmrE$rZIwknTc88;| z@1uAtqWfFLKGb7Th2~bZ{~#RRfx+?KIv0zuc}IG?`I<%XTp~&< zr_IaW6-Wmwj6FG6Tj(0Rzz8-DudBE*S%h`0; zz5Hm%OGrX#ZU4JJ(+5NPGw90=-42%*n&TutMVPcS&V4?~hGv?Uf1-Xn_f*>Nl(~Ot z{uzsfj5h86a3GnHa3CSRd76i|VISqVDh}7k8rT^Z7EI}xeSG8bys$}S%EPqb_w7e7 zHnwED`ZK==CT*dZzdWGQ7f!Txc||{VRisg08&@Xg=WKR9i6HKQt;-zp+U|D4G*i6t zj{1V99-5(Y5${gTZnciY-vL?an=@H3I=a#&KeMR4drH*gH+qp~0(rBewB04=(tvxf z=!K#{x002p&lG8^g|?xB*dflU8lk`}d+r)GqhO;Oqj zrxhcQ)u-dWsOu1H%GMi9@}L!T7eXlJ!{Z6Y?$rj0v2^pjM@`&rU+vHE80)nRLuI6B zc{P;g(;wP=U{MvwXt}bmusnW(5{kt!>0<*oF5{lPoQw=39D-(1#NvUb1X%<`kou^hV%IsUJM{==0dTBgeGsbP%kAEuQL*@%- zf-vs>c%8Q3>A-t$=uya4YgBahwu=T{5*Z=ZSZtln)7?E~J?9wY?Z419m>D|k=3>MuJ~ z4J1<|ypKd4J@29(5EHxdEo#&kyHGDXQq?p~8TjpP7W;0e&8i@*2coqjI0(V~H_IsZ zA|!a){5TAa4Dg4=F_9(=le?;lGDj}^S0$#oAC)`TD?~b8^nPWaptQIWorErZ#ZK@O zbAD78C*gcX44?cOc(8r)h|!h817@6ZRS6efAiLsEe-(?Nev2qo8uDg3JglWB@Ybuk zk9%zQrTY-C;4w1C*2fL_)4(JU6Zh9%VPojMzfZJZ&X=0!j(k?XJ$ER=WpUAaB04g4 zv$rw-V)EUE+E=Tp`<>s3KAsArg&foOtazq29C?4#h^+&zbjjA?LaA1w_@3*Wdcz@d zo}KnCn6a-E8Bh;3ZG_JDiquJ z68tHwc=L;SL1(5joX2KTj`#6I{^`*q5g56jQ*z(@WV-ut#^=hhA_Hv{T*cv|D@VIa zoGvlP5pG{LvNyWkoj{30ueeHE4(3+d78&X8y;eNd!BtB`s0O`v>Oa{lQ*KJ^1n09U zJzl4m2!!0mlG)0}$%$zp`)ALi=i+Mui`2mICUG78ALpC!J(}5oY6+_!C4+bx0I=5tKJGE!zN$aSc%I{uiw4tSBw6@o_ z{j~b37hA|m=8FO4h;=r36?G0C4d9o<9UC~5#4zZWomKLk-`A3&usW=lO zYpHFH>f^cZIPBPSoj)<jVN#H{S_7B^-;EV;7r9(~$V7x$l0q9h1gr58HufbX?SkoyUGKIpPfTOaxbr z7=%3YhtQn-!}g@PM$1sg@Tz5{f|Z%_CQwgYs6On3R+T{fN)J|3n0!0H^er>XNv`~! zU##CX!KuYS;6C783ZWi*Vhd$1F8k&CM9}IYaTr4SLJsc!a+fXH{m}OTA0ozn_td(> z4blM9Yi48?S^fl=lYC-+ne>q5DSuuO3j1*@oWr?ScY0f@E`6!87^3IZyuU&{b6r`N z8v1?IJx;xm_%|V#0U?xM2;ub~J#FNS_lQk2jI?X)bsi7vu#;&JH8MNqG%&Nrx{N|! zpoC3#zdzPEI+xfvSmR$=rAfm8jcGa!4zx`Zb>HVoUa+occcbu+RdO@sw zPJV@6@00rkAyuG|Vp)i1G_4N=TRDwIvEsi~={Bomx`f%0K2ZMbNC~U)svl^mE&LGf zvNPab)Y7<2UcOYfknss6Mz2;1f8<|VC3j@a*;d_qlBlyvF+ApSeJJ2;s>)^H&1qn^ zk1KX7h13ib{#F*a+v%p@h#mFeYsv#|qWWgP&V!D0S~S9l?s% zP$rU6t(C6xo9#;>DC0q~qW6F>`ImzX&QFmGZERM6u!6DjA&+z4I)L%JdofVJx2}o# zpgCc$|C`ohSCbm$!ZY?xZIOJYT|zM9i7SvOK4MyAf@sC^F9~GXy>YvTngi}zq58Dd zsNb=JuY+nA;GlhB727W#DcP=z8$3v(Z6y{D>PMPWlU%DQi^pt|I;j zB3D9d@M%fKa1-vx*9uc5s7$tSz=%fjb<*?%C#n%zFRrc6BR{ZU%`ca{-BDIv?ldtrC zco(eUrr7ggbTZQRLYp?N*F?!!wh3IE+nhUwiIv{ogAa#0gwUv?1tgXHv4_-8BD&IT z0y7^&%Wcy@pW_-od^If-yR1KL?L1!*n1zG{hLp>ZfP(X9wyjwg>T`u_MslVRwbDvx z+G>ffUHKl23o_26*Hj+6O5KTqP(?=wIbB__<@|~<*fs+$yCSbB_DyW`y|hERN<)vR z6gSZg5~)ngX{-=Ham$XM!xs( zr62~uf;M8)SZ!My71L^6mV)cb#^QO)b(3W|UFun(DD51I($@xQ zyDZOjv0*DGB;ch>8oRX8*L$=O$05PDoqf;Ln2zOTldG;887X==uGZpN9g_vjI%0|s zM#62L5OsyfqSGY1^VFYi6u89p%~X*iO9+gxX6W-RK_8q7`Gk6kO4@0;-^DJs0kaxlz{wMMtojJZj2>!>tH z%~+w2$JX-=!K-&Ue~wdm0*!SP-0H)U6=LZuSY(0TTm}@W&OPSe@A#{*w9}( ziMb-);T%3Ozy7c2v6AH9(c}JWK`hx9Jd!G10@uCP+*p&-Rn6XJvi@oA{C*`C&T}4- zl`aA6zJYyf$xe8!+e^K)a%DS9#jm7;>-OK85DQkZv~5@HQidSQyLLjuopqFzjGpQC z(KRtK$z5#y4w3U?&*mo{|9o_^9rAHD656KSU953uxqYzY#6Xei&*#S%wuZ5xuP(jv ziijbw@SXP1<(v5V>4DaqSb-_)+|{`J0?Q8Rl9J-3ob_S-w6O(HD+w~3IMypW|5rZ2 zL9&krq3T@f@b~SIa*&`I?;ven_jIi4Ab1RJj_xM8^oZ{v%Pfz!(*$;qHm?85r9t4h zjy4(U$i`!_m6l!}v+G>NueL$;toTDKpGt>=N~jy}qgj;1lm`d1dT*~kBf~v;Z0Lr8 zkd+sCGZv7+;e-rM6_TFWLtXzS_dzds)2x8BU6(IO@sru%{qL;U*XN}|4eoft`!0KEK2_D zZM~w!4zpo@{8-ohoIZV0eK*oM{P)k>!)!mB2vHV4>#1HQa{e4?{WY8w8j}D1@rgSA z-G0*Y zM_-{n_1QSo)pm6C&gN2~z`8Nlt|uyW^g%`;NnVuc#c}tOWX(+|4R&*eiZlx--nE^D zR#y@7Yc!OxK(MSra(uDuIlyY%7S%`R(@;pC%*StXVl2qA+D`0rIcJI0#57 zv=sZRD6fTj6JgBRKiE(8PRGveY+QapS`yYL+L>cZvDz!k+iH-eS!2MS=@@Bv5jK5% z*0~2u9CB$BuaA_lUou3XiMOi6DdO(J`v&cqv-Vrb2)JDsYVBKU6s5?xWJnsRo2h5Dwj-l>HX>jQc{_5u;!rO1?Mq$cg4*J4ZDEu`$x8BoY9VYaGn|FicnKGIT5H~n&B zQ~PQQA<4W0Dy*-~D^*+kT8}ZXLQ6}Ew>(qvLU2~3ZQ36zJ{1KNLVZ~x%oLU!a9k_s zd-Q-+!rC&vl!R0YL%H1YmYS7TlV$D9V7DTu3*TB=!PhH_-(3ftQKRK@6VStXQ=JEJ zXwm(Oq~!^hbw_ctEU>fVIcc)Hz%k3EWIATK#-7V#4+{$#ec{Zh>m@LiZL-u!sOJ^r z1pye-xPLFwx0-qDkYTP(Ez}^#mE)ikH#T*x|KZyKHuTrV#ucx@%%Fuq^BZpoev8&M zKDtIx(*l#O=a_Q6GwCifCgmCLpxiEXN_HSLZusZD+$u{!>Hr%PHDWsLDQ#)Xd1(eY z@9uOV;9h%G9`ni83L(H=b#qk@?bNmY0>GLC|+lqVU`6n++!iup#6- z(DY!zEqwWQKHOCn+@G+%!f)g9-b>r)lfDU;B6rz^7}q0(pj7DYs!NBWM=BIX*CSIi zsL;E8xv@1HH$7qllfF6t%j}En2$Y33LRVYNQi(zuoMQh2ZjD3HBC)!-h8u9+lRJZv z4*1yAwX6LGMO+8H7b3m&WnDOnrR)uh-LR&*FPpq(vubH<1<)9`g&g!D<=tG@cNojK zvu&w|v}`;`u77&8z683ac*WKAW|5|ThuQ+V9LH}J$1=>XE-3!)th(5iSJJ9-o!Um1+^3sM}b8Z{1}FqdCZ7j@g;e zy)Yxht*R_}@_00Z3(`$O(DKv~eprir@2A6o0uSrRM*@F;f1*)#zg%v_cIX!B2-8%4 z?g@-cW$FvC6U>OoOSE%)9nNG5+XIkC2Z!?1y`crJ1MC@QH92$~d-KETNbo#SfxoBG z3)p{CaH_(Y@l7C=>2~%9*%<@NI$lS{+tOL_TzjN<`emERX4Op@{l)re$y^q&2t)rN z+&3S5bZf8N*Kv?5UK&Rxeclbu%zt3I@=R!{kE1r~)r3qq2SFL`nb&!Iu~J0&Nenb4 zb-+N4NKaazi4Et_5YZp$$CR^2?=?{tZghmYRcZ7blrk$R0DUs-17AH~O238Wn+mve zaU>+gk_y1KIHfTzjJ8ZS4{#L!)hYkKjzcE46Ws(3Q2e;iy@FIiSAs z7rfXe0if-SPnODBdhXp0H3unCW=YBPf>P%4WM22oA-@pixq_yH6w0waZNbLf-{#x< zlRb9VA$`_xPUO%Wz~IMlHVhN1F^0VlZL=Fq1gES6`b%_5@qAK@kLQ#_Q@1;8u67MV z^wVBm1$}4&vGbjQrV7i<^q5Y$J|1Qpoy>17leeQZZ^<#3={??=Q!D?2^nAWRy+nN7 zOKn_a3JhUBfT7b>br3=e>q_ahhahD8<}rk^+oT)fR7&4h=uqcTpFe+wrV_O5oEooj zcxtU7z$VO=%oXGBe1gbML$qAhl!v)Y3R31xIc+p>+*`$Ap+QGgL!DMwm9R*!;gt6H zT05P`KgBBTpy&WrZiXbH8@?3?|j(U@ikeCThf)A?H1DH zH9M;5U3llREX)ev=#~^?FFi~5Q0+EZX@_$6-}PHY5q4i$#53jfTk4?H+eFsxC2Kwq zE(S(xqumeYCKcM3ax-<`FOc-dtXI zPrPN`SHk0!xB3!uxXa(M6nG9G36AQwT*Q5(LSu<$+g|7#_C+}?RMDe!&YG8D4j}Dw zHp`1MwFNH*93ZvWs6UKi(|>>CRDZipslP^?cRU+^qO%}k6aoewPi1`Ep$ZoA!dZavUgXsZ3p_`;MyVI5Y!o%@cwStmQmV%nr4*iei!mmumz^Xvut)gfN-! z<865AEW;CEKDT02R%juXpsOyn4Oi{cTzLkHMNa=jIQ<|~2ai^=CT|CSelj(yQ8d~G z8bW-#rrDnN16G1YB`tC8cHc4fb{6hkd740G{V)cPvweuP8CX#Bq%d$(7ON zp$9L8#<^VUCc$W}=q197zezKKmrcDPC&OHKnoN5Zr4n+fqUzv4UCp*RF9pa0(Iam! zeN9r1=vIC#&*@sFad}~8(woW1LSfntP@)EM8t^JhQx#z-)di}hN|*N%z@f}mKkmLA zqrx}EU*gK8viK!rHg3*bh@r={-O4L|q?;@QI%3FmZDB(Is5n6dSD>j88qIBJ168%- zF+1kC=XmG#%$bxF8~#|Oj8${|%IY$Y2bnC?=`MP&G}wEckV{XkTXqJAq;z?fQtAmp zu_4!{BQ(`2VH+Fzcl6+rB(zsu%@m$w6PiEC>{M9@Q@LO#beVHY)i%wBK?EK~1S9Y1 z#fIMR2%TxW8kGR9zq(1Hbcz0JvG|WQmVGwcwa+g#3YrI_gSX?V76!fOb9+MG5YqSj zSX`cIgERK8eN+G@H->oqQG@HQ4dy4U z-*5kOi3RFFw5e?Om2V;^~X3h!XZbEZR-VAe& z1A6l>R{Wtoflw3C$Wh(20YG&JZ>o!7cTa6uwfOTth-bM#Z`#hbYRq-?iN{+d2=DJu zp~vZY>ge|cF4v%Lq#N9OqFvyq-|p!-7wC!-safOP{nOw8$=t%!-Pifu@4a7^l?IPP z$vwZK0f)-L!$Mjv?1YQ&I1M7ypC3=Sb9rSiInLWFvm`=vuB(<6Pj5WyPR%%H?wUeK zPxY7pMH3Ly(#z*fN8Ub$!GFt3bV_p?;W z>H>{$^ApfMdbhtc4ma|Ai0>adW8Xs$h|9x#6l*-uzU(x3M;8o;YZjm1*?{j5#2UNg zpw7m{7olB1(g0lw=0xFp@s*<1J6BsC?LNUDdHR#kiKjqOe)s4#Uj185&V#rYw^+zY zigmLdbkRo>v#nYZ5pbTPdmR^sBSk1@2bb6hXYFRjT00a-3ytNTQUcKHR_nI59x~SL zBL$#}_IzLJk?-a~s*#})^&@yQ@-}H+4%+N#28Xv#KTu&#t7x`y#RHMMm0_TND5yVX zsk6y*!m$Im*og0PKuo6aDcWIZe&X0oR1Lt@@y} zx$8TEGhj*AYG}qS4T*3F_)x&Ubsdj(EvCfBI)`U=u93?+3~0$8WdRL62SN^mfZ*39E|}>jpBbo!;b7TP@)^dZ{CBxg*Y^ zh?;qc*@Sc@^R@-eKr(M;VGxm)GR`$nxJPqmeD+rkS0v4Q?!|t+%9XKIZ($a!O&LQ_ zZ+A;FHDX9U#75k=SN@?y#aP{l`p`9lX1`4PV_idAp>H4 z&3OR_D|Pqz2!=oqEB+2ZSKUM~b^4#_DAS*W+yuBNv87ZH5a5_zaBd6`sHvkw0gPR! zfJ5c4wbOe(BHh|Y!3>paIw|h}!a+f#cRyn1^m}Q@4Ts+p_;HD!y(FDbpRedFDW*Tr zQBI7|llhEuv&a_%sSs0C_pB z)-+e)ha0MBNdoHgW8#epV}}wn|HKw{Li=HWH@O2jKj*(h@oQi8(Lq=+h5(>#hI&Fw z0Tl_n?KYRHg}S*fVGmaj+MC5y`cN=G;U?FbVBx&^;m?f`euU~(u2nl_ zWJZIYxYd|Pw+@1mK?NVgg?WdFSR{Nq#PDk-j?V{9)DRY&^q~6w^c!V?UWn1meBXxP zH>k(Rqx4&(pe>IIW9D5==h9b=pnouFv@0LCA=WkL9j-*8f6JWR5iXhw|cGqfr34E8RR0V+F81G#J#VgZ*gSQmjjtlZ%ef^(&bhjFX-Y4+L5%BCk zwxt`ti2kQ{)-R>*G0}B5a(?F#2yX>2Ov6s4XM)sI0zRszcCS76q@fZZRn=b6MH@X# z_qdEd-dE)Vbk*Jdg#zKPTh4$_V}W!iI>Xye-twRLJBGl(gUx7voA85`#3`WfFgH+$Qk z4k5zA_sT2o1TNgV0QuRTJN`vcex0=`L~-K!rD^XMn6T!z7QuryQI<-95#0Fo-9xXd9=LySl3e30?=yM55iSW+57U2+)iunTV^}0dQ)eGvm_kv(%NEuIRdM z2zbv{a%~%Of(SwMb|;dcXYvwhQ|`xdw_Oyo>$aZ2G~UrkDto zQt0Ej{hlUOjCh<-hO$>KblX=m6neD~YtFe2VoT4MuF z$VY}%oyweR+6$EsZz7HHh%Cg+9hma~*gu&zPV#*P!3wa(!KQdAegWyQ~@qj zm?QO3%yLh)V-RT+30ThO@x(>Yj8;}AnO>E|-F7u{l=*@mVY-uyO43vF3Day~FuE$* zfm!kV*SBHFHL?1Pysrgy7mcV`27vMy@tr=5NH~7g9S$A<@jvNKf`Tjoh?1&q>y@gy zQUQ};?+@)&M--nkfE{g@GuojlK@(o2N0vrMzd0N`sHLf-J+F@|OQ}1ip~Wd~e7E*s z?Q%FEf2c3BNyqG{;A>z6khB#2;d?0DUiEVV*z4wZ;-T2;iwBq4p@XI3Dp$T<^f-@T z@GVo!_aza8sZ@rjUwIU!35@<~%nl))1;=RDfrqsYY1eT|9ERL%8VL9V({`ah=3eC; zW5;DAAbxSKCER;LvX7fNVg8W}GrSJ%eK7|pA}WTZUY>W;39e~_bK1(%66_@dq`Mw| zQr^4RE)F}6KZ;rCskS6Rggi!Zf&eKA8FxVT3N`0wPIqh@b^Kv&_%!}iN~@dSfc4k6h5)`*RXJ>c_ z<{`G9kCSdMvefVN%ga&{J-4NY1ak;y{PLkgHW zX19}|1tSW7iqj?rz#*40NcQExTo|uH#&FZ_qR0qh_Mm5k(1w7yPcR1X>E1mdMIJ_C zAeCOV4RK)2$f^{%AHKM6?XNBi|uI^zZpnPP> z1w4Ge>7t;XN%lQ=>jO>Sir#k}SF|)%CjOAKFN2{bBjqsrd9%5A2*OGE-7!l_FjJKb7bl>m~bt8;RuM=o=99^ZCQTxEwA^&?Ck7?iY7RbG$alTB9y^j^s#ce zrtCw6E?QrY8`d5BSm@3c2!ks|@}VEr?9zI`Ha>xZT4BD60UshqqRc~-aveqs0kFhk zkBptoUhYV-N0*9+n^2$av=ma7mQ<-w8EX+p=2rNl>c(}Wl{Cf6&DJNavrX>v9kc2c zR6XM0fm2V($*8}E>ne3F#?w_#;%FXbWW4OH=J*SLQ4u?doL)F#`O^DM8vC?7IGZxpP9G= zkfap*=E1vuG`C6$|9z+7{<@KaT8370a`kuzzVRk32;x4ZC*6Bow0?!gEY8;3_{9-UQt6h(IUtAhKcp!KUy_dhCXkG%42yLRXbtHmL`mkHt5b{x8L+qVA7 z#ob$cbFW-{#VlJK=_IAb^aeyF2H+0Zcd z?CsZ~KQ2G^V@D7UE*=x*HT~1fHpx!nOG8q7&f(LWdJOU*QD;0}xG6XO!=JLj1I~6| zo+P*E_?Uu672$ZH>5T@9aQUICsPFQS-c;DvTqTZeROT++H8vmn`C(^ z_^-Zb^JpgSE7z^csqRdqHF>W%7K#5UT9sj{tZTLDki41N+r!35!Sci`UG-?gjEZZ& zlr*F6R_!pd$!Kqyd!Rv%MaLOEcoNX0m6WE!z@3W&U2^dw<|`{6Jty6pVD?e8_qo~a z^h1rP!f(SlU;5Lv{PVA-%6%za%U6EB87AL{1(j<#S<3WENIX=|QN?srDJ+XesUi8X zB5C=7_`zSdeXMyi-J(YlI`w#y;LwbfPdwk(hf`OQ$}V2z_q)i(h23!M%NJpxkoOnm z(K`h~0w`+F4yWzL56G!;#D0&ymVq*-J!`&Gf5zy(na?mdgDH>vH!bcYcH}#lTX{Td z(&pa~aKotZtT8s-GA3#hb!afd)=WND%ubHa`0L_w?DuYBnxSs;VNtu{b}Pn52&E?} z2~OU23cH92Xr2_pmZcDjgTxJRwo7Q|twqDgh|OzB1P#--|K2OlhbSjSEVz@|6!Se9 zPKqeda?ZaR*BG|| z%FLE}&exE^*rq$`Dw=C8W~U1Y5SORbA_M$q%0z`Gb2pl1B(^xpej>l)+aSOEy+zEC zah2@Wmi%yBDvA;(KxrWN$K<*ct|=HEo6#!BJlN6cCuVbsF8&V-xzm8 z&eN^9^wZIn%1K%*cXwhmzE7@&`lUL;x4ZHbp%P9#)35`)VdrH4lF{K0EW6-DtF6&Z zGthn>XHev9Tcmti40dScDQFlq9OsXO*pJK1T!5~xz_J0ij2u&g6X<1j!s+fvk47XU z%Kzdo%#OKNdM%>``QKg#b`E~=O_i1YL>AqtdJ>Dbl3BeV*^+@>;Z2IumlG1_?V4W5 z;E$up?u$xun>LNij6RLa5U`ZIJP*+Z?UAHr^Sxl65f>6lC1cWYB9JgX(jaE{Ts{C* zab_j`hsA%gWwYzS>Ma`xi(@GXk54<{9}e!ml%aa%uWi>e+5lPUVjQTJJrU*?g8t~^ zxfj%$qH77k#v9H6o142q%X^t(Vu+-c4e(m|Rs{CVt~{!8meCGpt!!SWpZYq2vPw!4 zP;d@!JD-Q!JL1T*xS4h48gd((tHx0Z*i;1=NYOPIliQs#t+X7=&|}4$oy&L+CR5$g zb+<>{yQePZ@%H4}8YU!$0U%7VltiOdIL6O4aXLeD(Phoqj?yR-lhoO>*ZBAQdf@=1$;)m-a^T?Oul#8Wc&HHkv z#q6^9nl36kH=u~wDhTGb#l*3=l+T)*-bRAZ(oh#qcR=fQ_u^eY(Haw{$GkL4$;vuq zVqCpyNqJ5`R$HYLhZ_e6)nNCe@SiSKj)!`auBPr5rvK}3xh$$kUmm6i;VhG!QnKWG z?)m*Xby30J80wo6CN$N)s3q%l9qpD9y#EUUf$5%&hER8bl=Ktg4FD`0FO+i}$yN^R z)BVMi-b4b9ts{VxeHFLkio_~a8)YyI99~od04jbNmm1la!uUZB-x*^z=bkk_{|KVn zQD5NwbC>3un#^g72MC0ZPkMz?jzrRF}88ykH)T(@X zz$eK9v-s_@i{f@GPZd(jWI+fI^knQlRqUadJ9C)~@*x_I)hR?wSyxOa_3c-uYt+ZQ z_=-GMjh_3IRJeL}W=ZT4LrhRo~LtE(`me)uiN$M=?^(UU1 z*)s(yAn#&LIQwPcMgAjt?_V14>CYN%Ny=jiV)it`y)QrTaT~=dQQCGYAyJV|xTT0j zCC^00a;#UAXR43xA-^vJvMsc~MZlJ-LHx8))zd&)QB)H$p-dF@M$hrJ_diBo?JtDi zivMIms)RyTrR+7Wo&A1#C;mJzs^jxT>0Q2#(}{~@vYFjp?+j(GiunFe4c2G7Pu$9` z+5ad!nEbk;5fJx`4e+}8Ry!cYnp^~S;B8?(xhXcedsusZ^yl#CqW8@6;ABh|W64`Ad>mQX@ISs0uEkJIke)Zk7 zsp0vFBx85bp5fKzMOj)JatTU;hLPAUkIy`&0IHWgaTvs}T1~u}y3PJ)ZD&5d%jX)< z%Nf*$HUz|m?;_wF6U1}t#d;Z^4@aZE5ckEdLctx!6LSNBddB>G%$70uV(B7sta~QJ zHSos;SBWY4yWj&5J-TCH3>1=MDL_QW3}RfIx^ith5aU=b>ESk4wfRXX+^}hSc*8i) zavp|-)NNCszIV2L@Y`U)Wy-(zH}(rFl4eJ+ZjE{WIK_46+Q>i?03hts3GUW)R!Ickgi z67I|&_)^P&`|k}Sa}5&Yz7(esQSYXeu#LrUb<4zTy7M!z9#xa#C2wd7Pn0zaVAsCw z{NJ-%G{gjm;0uNw)z6Hdu~C9ji;mrv(O3CHa%u{ND$rS*e_DLkH=rLDp7Pl=2$D)P z;Il@OZSCDJzrHp6E9Exiw-QP@HoN*d)o0uNG35lDpUaE|2DeC~iLw*^sD#Y6u6FQ# z6imcOC$~MoAR`JR+Wus2$1S~s(*wI}AUzz{c+~ZOpCsqpqVe6O zb^SItDj7VJy6rV-S}b5(_)U?~B7ywJG1s{sm%Ln6b+Yq`RMd;_MQfEp>L*4wpw)N2 zir=)gD%Yi8ULh@If1wHw5iur3Q58FD1W7a?=qO@=cZpx-TWiwwZ!~|!1wX}1~K!E1mP55z;sUyBqD7Qot%;% zG)AitBCUAnO|C_R-_QLzWwsBIPqtX;w@@IG+x8p^2xUu`qGJIpx=uFil8uBb!l5r8pDV@}h2pHY$!V!}a z!nLNMOi#uv6=rAIky_>_0SWu4J0wyK<~*RttOL?$oo>#7{pnyBTyI-T-tav@mXygs z2&ge}g0Zd^U_K{*J+S~Tf-q=tgJD4zZbQ+t=kQKzwx7?bO|Fu!gx$+9z&{Z_O^}i^ zh>2-75XQGhIUuATz6TNEpVCr5^8ff>a*{Yf}jG z7%~xL@z(Lfxf7Qt&-e#=(@jd14I!+Hl!vZXry{2BEtq%mjInkYk6_t9E|TS>>gJzu zYpL-6e!%kIBl(*){!0wVIsBJDR;l6tbHt$jn}Rd-Bb3?`X93Gr+uCOl!7pxB$hlb? zdT}kETXu$fD(V0-3I#w3N|{7w7;TB}SjZtKXZGIQ*O%jh zgI8oB!T&C(i^yv77&(#P9tWmtMJ52|N-)6V6P+Ga|0m`7j8oX63d2C^B$IVUiosZ0q$5j) zjBO~BeNU)_=eiYjzR&aL^T+S?`aS>kdSzxl%Y9$>b-l0m`+7fEF%t6y*#r-OZUQ8R3)D{#yCwE1!;Ln75#SRFp>CtNL&U>H|YuFQl>@9HjqQMH`;UhPr zB_6s?SydgVA;MOlsdg_8mos~~$s+%PJrh{&rd6m%25N~@FbUgrBHd~_?ZdJ1$dKM< z@|Fd;&@n+Hskao!fK1OCBH-$>4SQcDWaGqCCn^5S)WLK9Qx?55GtheK%@64TBZ*t6 zokH^j#6zD6EEgR)lST7trBb_x9D%|MD7$nRf|ibDsss8C5_)g+HC7;G&><+HGTUJY z9JI_+@9F&Xj3-zDoESxtj;rmRg6s#^1qvT9P)Y0^+pw(1&uYZdCs z$2 z3pK`5^>e!YAQ5ELlUG>B1G1&q0^fDCo$%3rcGABIsN#g%YLP;_r-3U-&%n&|m(1YQ zy6?K0TgQSRSt0uakT!G1Jq3;;vSZ{6L@TNIY8mKllU_pZFHJn>+i%fif+v_P5qq<9 zU|h+m**L}<3@Mo!VaqwNdRi))^YdN+#xG09)Vze^@wP9tqf+ayf?h^Ot@DyYxnt35q%d{44!-v zTdfXr)Uk@G$Xe%gN|J2oc7ik}HXSu_D_Zr6fr!Io9l~g)uNzSvE*t|bQ$Yp{9t0mJ z+}NLie#KwjWSaIBT;J3HOf+0Sc{g<&n5V6mgdAujikS6nGZ|GmiSwoW5uDY?DF3jXoF^W~PiL&i{shcS(-Y|_M*E}}{Rz%KXXxIDkb%M! zPB9-|J9I|IBJ%SK#f}@0Nqq`37tiA@U9?Hni0)b8K`uypOz%i(&11O?~ZEQi>G?;dhF?QtW}B>S~C6iS4~+u zasbIz-ABv0q_dbdn2Y=`|DZ-XGUZh4+8dn=b*vTZotuueX2w zsxy`-T{AJ*f}`Yf3*7O{$%2Vy67ET;P!C89Bt?}G9_;i|)`-4WQ9g7UgzMw5_$jKCnqLqu@ zOBXr?&*bo8V!qHmU#MmxzMxPx1w+oQ(n9Ehyrv^0*ZW>piDLMyA)t9@IPSlF2Lwu~ zdk%yHNRwWF`6Hos;=?v+PmUGokq>BffBjB2&{llPb(gnmqHd>rtS7>P$Y znSSHxP{OB(wT#k8;;3CtQ$en5v z+D!e<_qSNkQaC!M2fkFHlF62VC(wb+z6)TVNuS2`akXCxy?&XssYc?mib7(GD6r8V z8v6s4*7&TTDEBej_WGb`7$^Wum9whV2Ob!e;+~#!AQ%K*W;5)OVF~9%YkB+%_pkm4?Z%jc^E~o0)$74H0Rw2M(2a!r_2A-?;MEN61(z zuc}+y{V_tx45Pf@#MF8BIPX;KMVb3VO%V^|CKVB*CnaliSA23i{YY89)(AFUEVhgt zvtN64>gqFC>TvKFHQ+=^Y!UP%$+W(P%V|B(k>6G|^=_Ge30OleSj=gMmCU|1K$=*6+SJ!1sY;CG z^NvZDXvFEY9ANG_12>gxY_bI6Lgqt)`xm_t7np@_FhX}T<{ zOY6K8K@E-FkL>fNe62vcPhmUL5f=)^v$eF*tk8QY&iiCUE|JrZN&q>S=4ng8>J)vb zz^RwG*7q-4JA#052V(4qm8>&Y{K*rtPob3AIBdl^f~SO)Osz>e$A#nTr;6}o9oPHm zc=O$J*ZLaEXrkY-_`-P4pDA=4qZu}6sdl;9@IFhh*JZ+Wcs|Me=bVl};SdFCNc zcLh0#-oK;gNWd?^v8|J z@{OJK0QzoCl!6*ojlK+6^=_>SIc|yWf_A6z%Z>y1+QB~XW2!(I_a11avSVNY%iKMG zVDkv5qkDbkxv*(4q+zVLRiZ3by%e~=!$)&2wO9{=#)ueVqO`fjEF3NaGAzI73jWN*!Is=y zru|n$=usVN{YBjJ_-(O14b9jLVi8MW5^NW+Az>eUw^EPe1@fqz;!rqrgzRaq;IT5> z5E<6nS}&Wq-|H?+#{YhuCqJ~L1DbhpwS!C&P+T4ui%G^Pkawn_CIe?0>?e=fipn1i z%e=$lkKO-tQx?I-MUT8ohvcOKnS>5$<)1rYpAN`D2;N&>Ta=b(VkggZJJ#P1mjoHj zZ?t@eYmUalM{B`<_tso0RL?Php~qElBH(Y|S=))0ZM^q9A@rD^H=z`#^=necS1=oS zq)-fbqE3&^aUc_uGS{_qW6FP5?MbM}q8KS9>^{8OuAV=`AammcGXO8o+=SrbqunDY zAveTNe(tqH>0rJ?DG7ex8JN9IaL{xb5*)|Ya6chii_`E>{3q&-^m8u8y!%Hce%qT+ zrMDQHAP#v(h9bh|4Rp7CPXzXbYsuRJ))rB7Xlrq%^M<6~ldnWkCan&}oLN{68Xk0fEkJn+E4!)~ zw%ZL|Y+mm~A#GTvcm`x9 zk5JEWAd`WYhnDsrf z&o)u!7bHQ6D*;xI>DhxtGj<{#+U{vRdXWX7_r)qwv<_!^Y=HI=HUx!)6WM1B9ENn2 zxW=h#-c0>1Nblh4lMEdi)9R)q;ADA907%)&`zxTs+d|3<)=AW{DHr}DJ|rx$$t@B( z(TP0!ZeA_4nf?^lG5NwJi85CKQb&%u_$BXnjr@QOt3Y>6NL{1lSYm2933XBiwBcZx zoLT)o<$fr(3hE>dR*|c9I8_;$P-fN#drkkdcElW5W4%+SE29lkQ+ZIXY@vpJNS>9VpmYH5P?gdarC>J>=q>)N;U&RB)VyYYLKPCL<{hjcdPexVxd{AYDT@sP z2@${5&Sa^lcAO-A;}tU{5%pN8>LxR^FI}Th`>SIV z)8UBt7TOR!L}3^tOi*FCc1GYMyV{_xj)*bH)I0(F)L-636@R2nnAg5>%8)nUCcR69 zG@q$Jocw%5domk2>nJG2Wo0`X55EGMmXW#p)Wl#!Og$h4_!uMDfm@aHAb%JDzf7A{ zM$2$j3IpN-Wq4un>{sANDLQt4`rh{@$xTN!ZHk=VF_c67Vpb@Y5yeNScRr%pP+=BQ z(_S-i3udPxk_?^IJP!7KXOSAlM5Bfy=jR^i-3A;{9RgNFit?K$EU4?w+GTQGNNR1T z=022BPXo0>tRdePrd9B3Lvy9RaT!u6?k?Ou%{Jw+h_!*&&}gf33zKdfE?C&{NfYRv z73Qh%>>nx&gT(kx+Lqux-|HJW9h2@}cq7rqZPjb^OL0jpS})x0fn(VLnzJ$57p!50 z?;%e?TfwY%)rYmGdd_C-IN`IQ{ATs-r4wlZ_&~YemEQ)iTM-Ok7*+80;%_=RD0lb1 zk|pIh2ISHd6Mw+nnW~#;im>@S9Jt`8^vL$iR-n1o)`F8Z95`jLLa6 zgKb4>Q;@_N$GAef(HLcGbvNqlggwgkgv^dx&6=o&!dnRObh;q=_Y`zEtzrBd1;i2Hbgu>*n%w9BLpLPXWz7 z&o(*7z!EZ2>M3aXVHT}d^+X@0HO?l9T4`-3;D#V4n)uqKr(VMDs6ZW_ay-j(f z!|(JAb?*Yn)&A58@sdy4oyydMqs7m|+`TGmZ{k8#Uhq7xsX%GfZc!f9aK$5+Z7b4S zu*uYhXiYL_EJ0ED3l9p#xH3MFN zBPAp2Zc`^!P1T|Gpk$#hH*D^deQxRm{<(~dsGuye-nEB^$e5txhg}MCQ58=gIW*&* zd!yXr*`}=VRwT@;aM6xRQEndrw@SvY8JG>Q-5d5dwx4z|XT}Z&(ZM_re09Mm2~=)3 zb9#`{iq=&!J5^HPY~3jLHew2zs_n(U#$Gf;ginOx8PAn+`9SZ*j!$3PbeeVQaC<}+ zoa+p0FD~eGj8oUmRc`GI6?=?bh8_{%2)%a6%#<+CUUSbp(k}O*ia|ISz%4c-)2@w0 z>3@XsqX-HM%#o3sQ-$i>zO!{_)Po|GBfMh}=$(T#tjl|^hzfc_-fO{;RS$JWNTCzR zULNTw-8b{c3KTwtc^4MF3iv~TS8Z@LH@jQt9jNfih;T7;irG>1R(;^*)ON!9~Q_w%WB+%7ijKPvTvBT~6_a-yJycfmHgu=pZY8v;%x(#8m%pxG1@q7clByu{TS+42(XhHUO0z_WHPK7nt;wp4!M)Be1Vt4 z?rV)CMzwN^CvpbhEO4UudVwws*S`|l=N|GJFzKYBmE8ZtlKg?{PUkeo21C&;cMP4k z#tlnE4+J@_9h3V5sUg`Oj+7WiR51?qmj`86-FwvNr$GOPwe0;Ve0}xrK?&WGi{*g5!F=s{tv`2bi-piTGI$-9iacbZF&>q8;7H_%m%IN27pbX*e zRM;ij@s~f;zZR0Wmv>L0bFEKM5h8B^DmEy(R8IHY0UAOxDot0OLC)ALqq4EdO#kWh zH}-M_+vCsttUA23lt&QiN7)+`N*J9ti`or`gJ3! z2`c>C8-M#KywKG<7D$XOM01@CeZO+$;E#@#UBN9PJ``WRpnQorn{k5!5}`LBttuIH zH{TucjIh7-w~0jy@aVqqGG>tNc>NCZ-fes8u)_)Yk} z50DVrfoOJP%UtH5o3u>&+U^L$YttSOCUrPxP$s^%4>8M|IUf+&*xqMX>e$Tu%Da!b z9Vui*`zyom86iJq7IvuN3EVPI-OEcu;LF*#gh!Atvpv4XGIqXM;vo|Cg@6E{fePa|3_6Zj80PTOl) zgGd^YNkPqiU|?0c4Ky00O1xq^wE#skGN<|-6~}mqMkh3=APy*fl*k|PNv&khJGlOI zpF`NLy+CcFLyRiXC;%J`QIrsAz>Eo`2%YJNPK^)m`4--c3$Ae+Zi_{n(I(W+8Mv~} z`6V*)YuGsrHBGhKV6(}I`)7dglmL7!ddK(>#qk}mtIl%Di}cEa1brDDD*u#7_wgRX z?47)EpYq)lsN3xki@vfy2_Ulub4WOtAX#z*eedAuaX^3K>xXMRGA+I?+qc)>h0u{7 z(tb}l5?qZ>zE$_RnsrLdfA{w&&{*(%c2>eOKp)#0fhMRlOJ;tW`DgWzaJc+ijO69L z2`<1qwX?`|u0m>7!}HRLa9)`nm+mSrjzfHI+7@>R){{%y-b;D7{IfaAxZ$OQ&&ZP| zs2W>$^NBu5@VGWt7_ZG&E}x@Z)vyC}G~YcClCOf2;)8lB;Lh<)&}K5et+}m?&!9C~ z`6@8kQZKB}mkw1<#5f<}{NwvKXVb;qWh|j{G)3)E>7781a`O$m!j9R|){T8?=s5^W zq@5)=$}_VBHQ5?Crjy`&^GDi(ik+Pu)7Mofe#^_fJ0dZn3a@aEl(#~;=Z^!b zwfDNAeoG6cJOU+pg}XQinhG)dj&xI2NCx-lL@-39v_!eCY?aug?ifMizAJZZ+Thh# zohZ4ZJVTVcvmdiq>t^)cu4r3qd;1acG98XE5LB;;&w@Dg3_jPYZRjW0bgxVpPr`Pq=LHl$FbvBu#j*_vF*C1#& zw+;pBUJi3-u-!=kL+W4QLW<;;xb1@iWKhQ1BNA(Rovx36pcLZA8|toiXX(ibo_Pw$ z&ui5vp)F-u+UWoQT!;4^d)_GUZ-itqJ|oz;nK}ag(lr_|I-=ojBVz~iK92E*-cs*D z>)x1n3GXN&-Yv$xEwvhBQBV6TN{>HP|I1n}Ay7Xg=vL~JRNowwNl{p%ngQg0V=Q&- z`X7#!Cmz`yu_wyJ4%I+T&NY{2__xM4Vs|XEa5yOs6t?Y4`}e9zw0pG0?`K#z8kl8- z@L5_0HCFFn=3JSW1~2jbGk>una}$ z{brR}6UD7#IvRm=rjSC0UPaD<3%#n8q)C~J4qT={aQDuq7d)K=a@jG~aorEw>Zj8WV_V57uSn8MIjOiN*@nA4?Z>{a?~^`TU|6#164cFzh)EPWymGM+ zmnGb(r#6`F=0qMmQZ8M3BkWMLea3Lu!y|#xAHG27NKhayeW>M;VzfF{R-`5AUXbd$ z2R*FtutS@+NNh(%+0h@Ol&FLSQ3_u*5~aNC`X)*N)VUzL`bEgPqdcIaLW@^`$5!mq ziO>J&m7FMM4%FQmk+Hp3r)NHTa}$G1iR((V9r)xhPx5TUS@Uv}+u!e^^b=af0wf?P zizv0eW`xnJ;hzIdk6Xq;Xq*;o1+>J$Q9X+Z8nt|#YmjZ($>%V-4(Dnls{Bv?pKFh& ziaGZkB8y=exp3<0RDr5NsrDUKLch%ILfPO10)E+_;M#>Ybn>`NhiwgHuirs50Gkla zF|>Eqq)v8&C2LA>a^gCC)?$;uUMla|-Wux?&1qt;&GNMB{6IJuiq(^i^3Ee^$wGA5 zp<$%))?}dJmY|kue(!@j&Eru7w-XNAE~?dTmECBSbJoP(?<}B#gI|PZ;ck-0Jsk@o z{Wrvc{t&b>nE@3KpXrJ=Y-NaBtb3rydvmT7_uTiNZcCRk3@z(=o}kM{s$y(h5JHI5 zHxOP@Z4qmHXNvJ;jN9&)(`cxjclG8dOZJRUbhiq1GC96K(r*@Ah>cQv?LhKOgFyj@ z4`rQ-e)(g$dvxz^kr#YhLNP&)Sz2ddz!Y!&;OgTDx z&84|rE}&NGkx8k4wP`Y0xf@1FI{Rx>j;$}7s;i+K%^hm}Stt_6F<`9eQ0=mf|LN)a z0sS`Xsc@FM)y~5^uR$WfY?wpR#)SB3<$w2Kj`zy6euPmaxfhR>4gT)kyUKZO*#1RY zkU%-rsDQjq$5xCYVwz!Ai}WDd+{{!_BKl1(a#5#f=>>nNUE1Py!yz=$4e#5aP;=Tc z7a?4Pbv60`uChA2f!1)4^*=p9MBFsIVYA%xt?Yr-Wi@q9Z&Z6R$5Yoin=>6xbmq;? zzyaP#69{#WO5CC<&Iws6`3#~{NDl!TU{72c&3JE%hPOVz;k+au$`DfLT~Xt7~v;DO;}aw5t=jK6C@u6@&hbgT-nmdbnr z^vz}pa8?|AS3SuT>VF?!0z!`n&pFA$ei~6QU$blkbz3<<*4;$>?APS%hB$R^tYU0Z z3+07M$c3sMH%oqO@HyGi94mWe66APF*s=a*ptw8G;b1a3i`E^p6|4z-cjSaa#&xJBj;P)7xxNrcw@x7cg{&VPR&zSc`|P!R^u|3x0IqBXYd;bp@h++ zW!%ah2K6bUKFRABV|KvdAv)ewP>+KPFKNWC_(RC`Jo z>#jLBTZF2nyE{Mx_EF5Z&;G`g*s!jK3^Tb>b7PlhXvcJKH%t38vm+l>b^yX=O<4x= zxevFg&uNbSb#XlyQ`Eoq{+bvhpB6lMe|6w>J;Pp)H2gjqK5wfCPP;tyquPtKjks2Y z6u-q<=ZeNnd!yOQE48dH{qozYY?8Fk9<;98ZJnf%xGp}yaC_O*Zb+))S_EIX{e>nu zdRGI&uk%x+lgU%`=XG*#Q`bGJ4^Z=yy_YE%+LQzku$)8jt)f#b%R3>68wlh zP;MEet|^NVn_f8ggTn&wiFh-~MKWaxhaFRy7dk6+2-gB$!?>H~95f!xVK37T(O8;! zSw-f_H*^FHf9*33jN0W!gBb&+U&4dff_J3PMK8)DRD zUnXAL@e0lRm4jBkZOT@0?nUNG%U+afnW!m~fXJI}i zp@zPM^A<)x;OH(;;hUait$6`bl9XG{=T`s4%H9GI!!c}4cl?G!*ial}Kg+asNA+%{ zjLGC`O1~Y@G9vz)_M&QjpoO6H+lU?+h$X4oXWmEKhNcF}A8=Ii06{>`)3v>=#sc9T zK5WIOaB5oc4BSy-uBpEmOL?Y?%06SC@M@F|9~6|LXvAz#$pzg zbO;yO<3t0;KcnK@4U8E3M~Mdyr9rQZ=ga65h>%)tY&naH>-xZsX{d26%;U=%0=Pr^ zd(&Y`u$z6X-V5(I?PnhT@cf-^URCt8Mrs_*7fMBQHR$w%b@|+-q^d2`3-M?A4w*l5 z3-!2R;AI={e9Nz~4R1taL8%ORlv+fLHPtq380sx?^L8aunS?~=dv{qM7EDmK6nl5*J=dHlZd~YN{>d12UrLsfyl|mcA{_W9wf`uj%siV-M?N zho@a`Hw}!@HfEFmzt2FNdS znYQcd0X(+=d@lfh*UC>17*}Nb_49yD--;2N1G+h&OB{=i*LSS@1m%Uv+4=uXkmujN zr5&G6^TC;#e^CkY@*Yo{9@o<)zI-FYi=T@<~w|zugPm6KjHh=_u8SijdV^N zJAdrJfdeP>bZ?j(IB?YOz=3~!`tC4zWp%^@a^S!(2lQ_Ie8~M17*-D(BdRS|iOMQ{jhZC2tWaj@8W^R1vhW71z?#pkkbuZx=zGdm{ zmE>+iMT>Fr*z9yl%E6`7`{foQa^>xnF?$K$fZz4kAJw@%vesY!W&f-8*F)0(^2+DS zocMov;Z2tA@<0Cm$}dqD-*No?g#)T#|MMaLvnKx!#7Pm%y2_(_7z3Sv9ym}w*%HbX z!U%4Q;>Ufb|K9T-i9VvY(z1gO{33I;hmbv0XQXtM`}*fj>Bg?%66*v>XoGs)hbJ6m z-*Rx@Cqjc!jJF3*-S=$Ra>6tmKqOTvhI#QHXi2VE;)=mFntd)mO!n$zEKm@qlV&;X`Ghq*)YdquFnnNNGV&arQmedC#A+Y=>xxzmzRR~>fZ0}(J{f5 z+Q*{!)#CY;AH3c5|McF|LCP;Zc%0I9zi%ThcK4eD3zx&rIXjv_`h8PfH9gOTL-Gby ziyA&MD4x=TA!RcWay@^b@v9xQ;5}ygSc{=Sq|#LPUA{O~^ub@O6!j)V@AosRj-iHs zQ1jSYOW%Wszxl@WK1E@67cFppOyL)m)3d%nThI*@TL6y2RtkT7BVSzNp&D-{3>^{ zW&zT?U2ir$I4DCP;x4*j+pRA2b^LkH?AMiwS70_oO= zl7=tU%%+uVALvTd+tPfQT)`@lg`mt$Y1JWzqy@QBKhUS6wVZ-?rUg09=D1nm{k#}k zv*{E_rPIiH=>tEdklv*^rKV_s-$~OEMBNYXKE4g9XlL%Mjcba;u%^_CgAe?q7WOcr zT&6%|vaUxWMJb{+*C16jaAVAur^CI^k(XF(6{EpgA0S^pr7_6#s_7xi^{UI&Ej2J{ zB2MP1enQ>FmB!fVTD>=IcgP?6YW1vCF-;3Dia$GbAG~^WLi8FtAaVVQVd@^Vf&EA-W^SXosb8Kv*Vru(JiTm0xwC;=T^}rF+18n}H+fLC$+DPY67B4k zs`2Ra?F<@N!Q=&Uc^fyC2?8v6fl}4G>+j~*#y96w5*fx%goJe`EAeRdHid8mhC&PC zrJ;7Dp5IPsx`ZFl{e5HtIdti9`gf3#UGvvC&7z||qt~7!M28wK_si!d*gVwBcw*x> z8A9fe#{Z65es`q4iw+Ii5>^XXcVS2S_(X!FwfSX?b~GGLsZg-{5yHV2g!9Tx{`MEw z7+I2I0CP{Sn!6KqKvy30NZrxrtHbG3FNDb!N#=XbfzI7<)6aU*;GjaBIdm9X4D6al|tW zExq^iQeWAD`J#adWMB5<^gsUd8wGrN?R+fmI+-eJlv3JyY~7s`l6L`}=W5ucQ|}KE$mOu4krNHnP2Ccq zh}K$3x?gVp%E>B>CM@3n%c3U{yiy_Ww--EvDaj|UKI0U@G;Gf|ZSyI@OIr_IN{Zk0 z=x?}X$X;=Rrn}A86*pKmA=IJdvvN(MDxJEMnrf-TCFR;S5bNo)N%1F7A5gzaDsoO@ zLN?a~lKnh`@1Cx@$ZSp6{iggW;{fDdiiUM=!PtkosOUfAqfl#S@>IwIRcETaOKn_N z$sI9R5k>XDuMnDM18CSb_)8P^nY7o?XxF_Z{g10@u5(Kw3(S`61r&@o8%?G zt;Fg>m|m?t{B0SJdb+vw{Y%!^_53!)|Knq^p8lU6>w(jS?m{^#eme3|`S48$wR(|? zX_R`5F7Htl2XU1zY5wNv0LaYv(s3Mu0+%_UU}zAmb7z?pM7d2t3GHa)iZE+XDfu*;gIWd zF&Kinb_}EVIAyn;P&nsj!CTev@lz(c%_XxwEnLwpMb#{)-D~VBq5^{)^_@V4^qSKj zWhjmNW!>H#amS>_taSznhO(k^mP{uD1lrz&FSwzL7GC+amK3PYo>rq+2LdoU_{EJobgL2PAxNuX_%34lZksYTU)F29*x|48eD7tZXdpsdZ7I(1t?xT0rN8R4YZ&pUnA5Y+rs(z!?jWAqIL%`Gg zKfNBGh`ylmY77K-J=B!6Fxv^>AyFP#MZ`wT@YktNnnX4P(YYHK8;yHo#kP=Hr|QVr zv_SNR?+M(^p+^6;PjuDF-&KDD7%Z>0G3tG!!(C-MLM|W`({Mlcvzs9W?H==>81Inz zZsV+ljZA6D&e~Y;9*Z2xC3@vZ;ExoGmI}G^7ox%{x$DvIEKO<7{Rvn4K0Isk1cR`!VB#jNJMArVBSEFf5PEy%N<$ zA2GgUk}6L_^akU(>y=MGqP+UEIuZOw6Uuuv)tH^oT@w{^bpMUfYmkk4q&%-ypwvfJ zv+``yRS3aoW)&$_ziz@@JwRWY=UGEO>MIJXf5QUYi*m6tf^zHl!2S9cFzPKX#N1U# zONkq*F1GSW)`)RrP190UXS^iG@P&nT(R2y8MS4|)PO|#3X&U*0v-PxHBX4ed(9h~4 z*@YxZD~``6eLgBKIVz5{Z3&aw=EX9td{W>k$;u3D5?UzDQ3k_!c#cU{k2Wx6$FJ$l zA*;$5AHJ-3{6zQA>y^%;6P}sDg?A^U3RVPi3$|ammxHJ+tH-5xmq)r~8l9MyL331& zH4JAs@(M^-9^JO)6+U41c%?OjMLe-|4w4R4U1~<^L?&FTJ;jI4Tat#%J*-PApIx-6 zGMGABl}k<0p%q3I*}{XJHwt=u!*ZuD;Z6xWM+E21*hTw|En#IknG(WhMs(Jmg-^X% zlQHAMp35y@yh{@|J8DR@aLA#RbPd0@SKDPk}`X4Bc0ArNa`SY)roa90(0mlZM~H~`CL$d6wiI4*o2(S8y4!JOG2Eomapc7HB;syo=cv;Fu&Ob zB5*bnjbvH+x7_$mEp^XltPHj?)p}6wc2w<8_RO#{X<-$VO!Weea(LW(&_qq#44W>RJm4l)_NjpFley>I%ZwEJJX%&q zmqfNFVo?Joii%jIl=>dN3Yy!VIJ?dv&QcvitHJwt)L4bZ=vWrfgu5z5XCk?9Zj=Tct~ExWSniygF*iC(U&7xY43atErz?xZ5r z-gRc3@GJ{njq-ghLN!2_)Cy$HF-C$EqZJF=Rbl>7)Q8@E4a2bDJDFa3yxobM@pWrG zYKWI60<#uGPJHb+`V*~2EdgZ27Kr*h2q}}1?<8@J<;>Xa)FvS#2j&MaLu$RiO6`QB zW3Hw_J0a^;cGJv|1ymC5nJD6DoZHThs4PzW8Lc6DDgKqRsZ&vk8CSxGoZrqHr54Yi z>lO=lrf#=wOayEF{@Q=se-H+|53Cc2Hs0ND1Ks+B^tmN0-|sa}rD1&A_s3fw)3|a;;i=5p^XQnpj#jr?qbLdp&~bKviV#F_Jqj8O z-bz%_Tw-`G6NkN%S~K~KFJK`_>e^?bG9x^{!$p5yHR(mNAH7~oeagA_Tb91>sQ0_o z7pXxfxZ{W5)>)+cl9Jo>naj0r(-X`h+WH=8onFo7!NOUtnUW_I_^U)l4q96v)ZAi@ zrU&nCHBn)YE;J!Kwhf{cRSr+n_JUtmdikIWs7moVjXww=`m5OyTGpE?4V!JSC~iS3 zb=ffF95%{}J;=&RUNlDqTODEMHY6}>MFvOhV&3lut;K%O;@LqpOg1GYL^)vgS%K@ zU$8yocZ_v+!?%%XJE@W8Hx>G8SkBXOP^xVlwz4PNzplhaCJ>oLre!B0WaSXKIUr`E zND-fnBY#z`FD)MXq%5CrTl>h>o|$yz_CY@b{xns3Y4Q2mGU&Z<1bh|N{z|wWI%=5| zWK7}coabo1YS$(^Y|~=I-#&0lYpk&?M64Bytk%}3Q05YbiHDuR$rZKBsc^mSsovFB=LyWEGsj> zc((9ln>gJTO}QwAe3$}AXEJl_&Yn1u9iimjbE~5bI$hd`Tb4#p*-nNvvURr>ai=aW z(`ZzkIetc9WlfU@?~u2vQS4iLRV!k?q~0$VHYh!`UN0=+?tDvk=xa>ksnO1(*+%TN zS=jJQ@3xykkvfxB9)g%BR{n_Dk4J#e;Y2zgCg^88<&qvk>Dhv5mnB)w+<`iM)tlV= zVyw4p&B-z)SskErp%7%D&LWVvnOW|iF7zruT{ySrlL;s85)N;{w>YNdPoR`H_z~%r z0t=NJ&TGY{Dn)uA+smP(7tgcd)au_(C<3tw+hw6j~nY(AX< z<&{(T8JFc;=(n>oL&}tI9!gbSH?%LmPbWo|h4-r<{d|HS^)*Bw;1!p>1MXzyL8qTK zRu~JZ6vxn2C}`xfrXKCFHYgWSwvlr-!`GV&DxxnR+LaIeu5;dk3#LB*QF-BJF^*B!zH0%e@W}zZMbmaV z{XHgxJ{5A=@5m2y=IA!cF{n zZ3oZayoQH}v(P8AbM4!RM=K>U2eLopX zp39OTk#X-+J9gmo2E8kXbdXU6Zb}^tF`r@@uQ-;D?Xua}&tZ0Ptu=Fwf}H}tsUox6 zv56pfvS{TB{xPHADhn@(f|YV@zO(#jHDbJ1nqB6;^~&Wf9#8Rk`7!#hi~WT8rD!ywE3 zyA<*)5`vc4;%kP$pCsUSRy#w&5Im_j+;mNx8788qcc&~w4Go9yZMuJBwp7alg0Up~?J{pDQPiKhtonI+?c zAt_Fg9K`b8``j2u-l7H49Kmi3CF$tt^f@Ie<5#olG}X>4+g+2Y^S3)5Ddc+F5^DpB z)g4ypL@3WVbl^qQcG>Ucrm6cB?wFb`XSc-Z_&#}z84Yu$BTXm0>Eu16*F_P6e#=Q> z-Fm;l^B^o1dwKdS2a~p9JiwSI9aXWdBk${}>uEk(|p)#~+rr{+_u`~6~bDTk2#g{EYOZ7C&qa1%6NOk}#W4P6j) zjfP7uZ$;-8_86a($GZHywT9c zhUJaK*Twa{7^zEs5Qn;X|3z>*l6_O%g?tKFsbhJGOJ~NtI4MV>9Y>bvx&s@5@UGZc zcfmSq0^{X&hP_pny5r;!KsaF_6#6?+e|fd&!1>x(z7ODA@^?O}b!FPH*bKpeb7V0S zXuzDXb#^SPlKNaQ$R+&vol#l4CC?*wfJkx$uNi?j9&2eKQVAj@d}Y!{2bO#{KodUH zKp}iutXslq>yu~ci{teaZZ9=<#u+P>wm|}_k8L9asR$sii=J^xqE5hS&kxj~-EGy) z?PUA`X?H^qPcm-uTT?7zZ7&pEhyKvCU=A^}5uT9?k+-buB@Rnp>>ydn3yW|w9$!#E zU~&oFonrPG#i!N_V|=t6qpyR^qJ|rLF&FH;4@HrxdwAT^*|lCxX7TcNskGmZ{G!78 z9}T#m)h5%Q#@Lx9eYWNUzZ%mWS0FBzTCK=lA6<2Xq<@B-6vdibTt##m8(#LO0XL|Nw&-A~^zwY&8a zJj9_RuyPWa&A4T^!az%>AvNMH0>?snxx-5KamfRkd~eBp{$^0(U`AVC>uB$~W@GK| zA7E7qM;F|9dTcS({=^zZhlG&{GV1)WVhDb}4%C4&-60+I0@yaMQKp8X6BcO(7c33l z3$o6RCt3Pco>CFER~m1dOM4XLDaEaeY)~hoI zcZ72wDy+Uho+cAHIk*WcxACuR$DVVxFyM_L45!~IKsJT}z*!2)h*T7-9Luk}HIC)9 z7VPXoektmbYrTwA7}$|QA(=0kVh4^$`6o+p;KW^%nW-OHRyARYV*CP$JiWC7okjJF zP0k#x!(vNbV>VS7NU2i$Y;QVrGnfpQf#Ls|BSu2JiQ*pPY-9nd7Lw7fwqL)s;2L2f zKogMnZ*)#cBp-TP*d{~>iwv<~-s_Fqxr=q++GXL_diavQd*KF}P-pwKtreyiTRA>f zAOXDZIPa7+zmtoT0E6^|d++R4E;L?}wKa{~0rM+%-+)=BG(lNWYqXvp0z zhdXjn4p0cb?B3oB3J?N@NUeo|a?M8Nyi9`&8c!}kb$Y2%14D^DNL%U@b~Q||+V;dX zhn(XKIMmq33x4jz2l=`jhb^Grojq(F@bPx_nEh{cmSXAc{SlIrwY5jB2!xB;Tv$>W z%pfBL1&_h+Zc{^Kn;X;vhT3ZZ>p(B~8h!-}kHM|kN)!eZQ4ddcx)>*y)S|PK6tme_ z0hv4vup%Rp1O#C;^rlh`JoO}n!d$GwY$#QBZcVHUFalpY+4Vpzv;^fsQ2dZ}t|?<_ z2mj%8`=qes?5|<)!(E2Em95ryog}D0m~--l-@JS(V`W_7EU|(6W0)xe2ZI#+w4D;rJt@#hs{F9l=DDlKn%T1L~Xc9JNgIV6njqVX{2$QI(y3;wa!Rf zwL@%Ph5VHnLUaN(c+yKkRcAEN$y7$ASdj%rigv5vc;KA?-ler74!~GR=$_UZcmLMz zx}M6@b%VR;9!>wYeY#3wRCQ&KQeTQJZA5UDFOTHMgZ|AhH*aAmJ0UP^YN+VC!{}RL z8U8@d^D(=WSbGTber38XQ0WM0NZ!p?-ZD{ypq&nK1iQ-gnD|Uq7Ot!Y1S6ClOERnq z#lZ1D=hH|(K69rtL3#;;A>GAcLlM6e9p(Uqjd_A2Pm#Nl+!q+=Z*`nG8?#KjL$vj^ zovbuA0m?Y$a-A}_Nnp`8_s%6G!bl&a%sZURXlu=M+M=u?w^>qD2!Yey_DV8tqepFt z)`;HD_y#v)B}%Q}!`4<$n6W(bdq^$AHO8~)Z43=ZsSzC}N7;kE-8r6OSfibrzW(UQ z=Ri}xmR_oji?|Qt$x~Kb07+nJw5EJRN%+wm&%)NkLdf{?Mc-7GK+asyHT8LI3Cy;m ze+$H9OKlU3bdxoHgvEHzNSP^nh&)CW5&A1 zhcI!gGj>iNc>%;j<*$V@4PU_Jtj9k2`9da@OKA%*iQZoBhDBtQ?)*w@qH1!u9_g4_ zTou-}@I)1UTQu5_lISVv zMPfBHVKxQ)4#(>zI@S$g8=XA|?g3HvaJ5_M2c(1}QpE>b>m!#{B$G<56|q$V$ghH& zzcZs4V5}_L9msjD;@mzX8_U;H zwpBG6E(b&Oj>7Qs*@Lc14oI)YqV0*_5#EmMIuwAvI&O(~Erme9;8*o06I5a04Ic_q zhbsml`k~f*D9^&&=~<*y#aT6B_mG8qo8tAQ>9=1mKY8J_)&ULtobh}+IH5J1X9G$B z?V8C-FF!h0|0BQx%!03_d6gsKcLIMea?`n<^io_RaQ$;%6IE&Kk?CG#nPPdQVhvD_ z-NYRGW4EWR{t5$)Z9oVv)txe1xS5J_6Jl4Xm%WF+RH?Z}DZ(?PwleI-ejEVBp++stVwC2iF>k|%Eoa^yn#fr+<=ZEVLb)t{r&o(~U9OG5`zeVi zPz8n{*YX5nT~+^#gJ+VEhFOWE&_kHfTUx9^=8%Wwukq|Aau!De?$wa3N8JLh374~f z_|-m}FiF4}2~$S<^t~rZ(oD zn_2(-YFPt$I_qc}>qdS7Xn_^&e#B2ZQAzoXA1sEVo;?z9DNal{A^6UPVvXYNjOTSO zaEp0vpJFQsGdyn{jHm8i2BdK0GY^m|uweZ?2FZDf4#GH1f=k`k)Ss$s&;c4@j!VWm z*=`f{Bb{gL(o0IbZ@_B`r^RHDiWYIDFtfM~w`T8gR*Vjwk}qwCL|uSX635fKv)H9( z?fV8ry<0yX+nDRq5vfEIz`f8T!sj>{GZ7mPHcRHlZk zQ5UT;&HkvJ0Cw3;umwoD@yqA=`@8NuN%+ijnnC2!+F8E7hh!D1KZZ1ZMwpmQ&(L>$ zYU@=8em2LZLd>3@yAFNYgoszTVHVqxfC(n>ICG$_1u@B35IORD69EOC5o0S0RvxObFRB^t{MgEx-Yj6}P{Z zjQr?O5-nLRYL78M9V((Co+5!^=gSikkO@= zUJh(y$XENqr~{}HLGoXnN%b9X_gNgZ+Du0OxCAUJ9{)Hka^;;toNc5>!ywA$d1}B? z%q>kZe8atWPj=lW^~Rp=s|wOJA7AbI4E-R_W`mUvCYyE@hZ1vd3!T+8u;>k_+~wo1P17af+Fy}ISn+pZAd(})kCM;n;PRZ0`3nLnz4xK0rLgp6Y_Nb z-6|lTCMnFjW~IM)X|m7w6sO|%MS}Aq4XD73$GeFHYtQ=1y((Z#AQsbuKh;8I;|F_NbecgJG6jPuS;O2F^8Uia5uh^aWKtAKHnR2*gj~ut%!fzTD75J@B$t)sbRKe~&*XHj|nVfibC^!9#QG=!A)^Jog z=Dn>4?S^9*L6wKu%iGEh=cO?l7R|3bP00sq z_5W?Bc|4uIszQG3&T>Ir^8!Ir^$M)i88r059k*rqUs%yXQd~XBIo%G4)R2 zmkc74eJ7}5B0*{F!_DF8qp|fdCM0~YImnpbuIrEBp?bfSsoe>mg%Q|reqLnIMQy|V zLVx6iwOim1G7B!c%riYdyy2Z)w^dG2u^&A52u->Fw*w7rrEW+1Hhv(B%$QIjYndPU z*#e>%WWNalxERuBKG2EOvgb(I4gKHtjZU) zQcO*A7;*3I{bZGgZ$o;Ifs;IXNP20F3al$3vhKshSZ#fU*B=x@7Yb)<_&Wc0Ro#MJ zG$~LGxya`8pizJ?MGI8A_!F9n*g~Px&?(owCaTfh^@I1aU*{i^hG_E`y;h>h95bVR zxMh0e*(1*9m{XndB|^Du9^dW9?O}1S?HuF&V+Pq7@iJ}jq|7kD{bLj}QGSEpCIKru z+#l3HI;`yUh2JRve&_d<-wm@FJr_cB6z$>ArprqsH)PVL5_2D&>TEgw)+kNg%F_7@ zr9U>ub9wT_W644$3@*`8ahhXcEriF8B#nU{c{W=Sq;0AQdH6?>(J%s#JVc}8_JqxT zPKV7xd)%3JGJ6B*yMq*G$?ZzR~hZ zcPiQ6s_}i2lBZo`ij#TIUde8KA?UEtMDc*z_ij(~R@v-te11;y_x}D64Gi?ur#(#4 z!-;*-ukLO~qI~Xdh4Ds_pKasHA`gujt;(H|xUT>Xj)^X@8?~@cwf`SVIX}Ly+Fzt? z%)ZLAutip<#%@%5peaO=$m9=0pz0RA)aoMp&YhED#vE^+FFWha*8Qw0$R4)t_xIzC zQ3%}#$PQ(TJI$Oc5|MH75>_UbRTAI4-#_K3dI^#3;`2JsXY5dPGwb6*h5*ucfa6X4 z!gAu==WC3qd~Rm-_h!Y*NJv{=j68weptrXkj{R+vuGt+ z!umERSG=iE{~=`YWNe+=gCbSyzF30&!3>TKea;GYqIYfmGttLuK&S z@_Dbc4yOVa30n>RyTVgw6v!5XlRQ)=a)T~=ZLhmp-~UDGZ3y#~)=kd~1zu~5fsX#I zy=yiuaz6GC*wWCmsy;3MR!Uui-!R?M?kk$( zSndHf&Q%jWfYEz#;qkrFsRNS{e*~nMpDp1EY9z`UJt1D&$99Ro#J(Z2=#p~i!f$Od z?i&I3_cgxl(?w1i#bpQzt|?&4^n^t3m$F{WV40J-sb{M*-Wc2{`Rqp#sdrSip>LrX9`UW-Z$H;<_ZUfLWrGGb;TBT1JwA17}TCUejJ*vG`iS)N(&x- zhDNE9Rs+7o?U}fcqPew>QSV-j5QKYh(rOFWtuwe1=+RhILrTL>B{nr>r9InpDgrA& zAssK`GN;{pN3|r(JJ1}ED^AbY;9$jW831s2E!ec+Rtr=f_}0!^FGut@{j&3|MLF|4{)N*#HV=NbPc+k+5i2GFUmBJPKq%ge`x7^285#~A!7Ny?y(uB+<)9FqU?%F3hVqoaZ2G5jAX<&6 zWGK|t3I~5JdH4IC>@!l*jXPzMcasqt$^Xn8j??e&k3K|>{6_MT&t{zre$6W-gR0g^ zz7X!kfJc?Hal-j8oVb+szfu3N`|98F-}?lKPfKpY{i78}8A_l};EdOxhWpw^PY&4y z1}R$WB%y&ItlG;kD~C{Tu9a?&vZJMCZRb_8M{U7vT(RcNdV||q)9PJ<-tsFwcMFZ) zu`>c*T)nEqn=}(<9e^xeQ7md%*$Kc#L||i{gj4Ow!s_E$wcH}FTzMHE4>HL>X3=5G zf}kKM14wzzO1QIVPrDMBggDho?CpL=dVeUwG|Vgf@}t>2J7Ls;))NQy^C6RG4!kE0 zEqr?q(wi5a$@sVhoa}+3(9KO<4a}W(7jwgDVIUbhzoZb%Q(J-RWKKdmdN~4x)Nqfod+6X=;0v7lV&8*Hi1Qj?p=XfnC8wOMsAAdJ?2Hi5kOaz$$&5C!yi}9 zW~%0D8aL{4NdGi~63`)Qy7ay2W{78!<)i?Wy=JvQ$!};PWEzr#{92nd1#QALO(mjL zRgCIR7a1`5DSP^V0+KgVK!#Z35PUh~wY$7##rjN_=IT$TrW9!eaxgU6c>>^e&^Vin zSXa84+1pC?s;@-=?`$o4+l@GYDNLRs-(vSL)97t-9yO{9Kf~4B$Q(s?A4UG~?EgkE zv71ipV8Vk6LT)^b-dcxlTXw@}Xn`&g=r;LRVpLD9vWB}@Z3^1 z$`3BkJzK{;)Sv{&a#DrQ(Ap@_N|jcMy%8-^m5oJpx6<~-ge=>-V4OTue$yo6k92>JTilX`Pt8opsGXIz5S{Rk;j%lGwh9%vsoC&cqBz%p-;DY= zv;i>Ke!9HbN6>AYpx_#AlZZvKN{yRS;lCo~ZK)@eM&C0ZW)XreY`3;#YKI>lzb?}q zO$XHAupQAG4qBluN|`Q#@5aWkL^8%I-E{%W>|~#e|4d$Dz=#b{-;u zU8byqJ-E(uzVLIx=%lJl^kdx_5HN$`mgDSzG0D@=b=A49dWsg<+Ex7fnhRTy+--!# z6UZtUs*)Y+iEr|yf`yx7s1E;D(5k%PB=xl)H5lm)q=zAMem$};hEb-^m)^bhCr%}o z#u6FrSEdTcN)G{yNSwD@k{m6SHOzYiPl( zBmDDaD{Z~YI6DdqaM{<{Y#CxdZVLa5o2j#363_}rK;DgQ1UR`2c97DKB`Uuu#`FiV zD{r6jZ^yANwO>QU_&7qK7l4&V_`5{XA?d!iI=t&R6En&4qpr2YbE;VR)|4?qsrHGz zd?O*;N{0e#S0(i-jQ=J%^P9?CdO5iU_6SQxr%TuQF5y~ZTnP$ll}q_EIEqJSlz@ht zk||rTj8cJ>{;;o6JMa{BD#>L7#WK8hn9gRj8c_UvXAyUOmBX2nPxt$k$Lo}HeaJ>S zn(&&bF!6xKbEUj1(_Ozi94S3t?3!fH9EXKFaISGE^M%`wgoSA6RDR|OEl4Vk@kzfq zRN{rSZ!~3241N)+8dEkH$r1iWz13BX5BV$e7s_}P332ED={u|hisflFrqvx^$Ilk` zCIhx}0tfKSP`1;MZ!MP^?K^s@QbQM^a~)XMAogR;&reY<3i(&Go1Jq$1ztCW+^(U?&3aTEL(Ooeo-W>@IZnhxrNrVJzA=p!`7ZBy6miQ zmz_qIt{_@6fvu2G4&(;_LS~jaj)%Klo==LXzB4dNQSM{rRHs?k#oH%J2Z-bg@Mac2 zhWwUrZAJmMnEx(3_kAG98wPo1$6FQcGDIe{vc>4@f5h5*4d?{`Ki>_7t11XnQ){>1 z;Z@FREnc6ASGVaQsOZOiXF>uboR3pTEk0cZzkR!+8ZTD+Jph@;*Dt9Ke=|r&AGU{zPUWQ)f)Q{nZ!;&%;($8BcbvF~)ef9E6KfqRcvr%SHHTX~Y z;TiLy4(T}vEsHoshtoasS$wTX1vAlPHzkK|dQcvtu>jP!!G%3qOA7|3GN)XR-H*&r zSXeEUPOY`ikcJmH&YmmqDo>&XQe9+&5UCt0OQaB<)6ZB*o&DNH4+N8Hm#qoq=`Lk< zEpA1-egw%%jZ)_6fv8VSP^bBX7f8Q~_N=QtY29A9884Oy@qXib^W@lmkHN7#SqMQN zK2|8p^Y5WC$W9Uu6BV_RHJGBke$SJNr4dB>6$p-qKq>aB z3JXlv-i}!);zX~u-F9^^pJd$E~ydhIXpvK7m`AM^)C>g)0y0(>S2+ ztAV?hDvA)Pb->CP?_SnZdA2Tg7rm%y1p!8@RQ|T&aq7!jw#8vEEnHwvjiy`#^`8nA z-A36-ELqC$+Z;sR8PE)2`sPLFg}Tc^Z!MR__H6)v0^>@VYzuvfWY~G`{7!+_7~bD| zNuz>Q_>FxGKoP6>q&`EdocRNEjsTbe;r@|RS-+++AUyBsMQ0IOj85BQC(xBB1yDk# z6*M-bi3_yJwq9yO7kzazd_2unnUmCW2Nf+f^>}+O?|ORbf;MXmu;T&uK!wD?d+wGZ zC@$K8;UH|E9DXSMvdH$uH_*Zg(AXGxmh0Z5Rqm0d_%6!`Xa9;p34~A8vr=@rhRo+K z^sTq4Lg^vKroRNz8WlW7Yu|75z;+0IA*60$OwdK80(xec^C$sv>JzXOtIw%B$c9hT z?A6f|A4Rax#3G+84s6nJP_C=DnT~^BMS|@lGV0NmA7PojV|lo#1v6-^LqE_TRD}@{ z)Fc;ZT=5$ge6_syTg)2uV|z?}TbKvAEQiOjzRjkEZCgSwzp(Bp>hX6gYUDu57?u0& z&q(}%b!;mG!zyoxg078cr@j0M*VHLTC)l?=1NG&i*%hV6>AgSvA_fSInMvWUTdSQ5^pE1My#ep#94a7_Pn9 zTb^tt1FKybm@iVWt`9)sT>3JboKe68K)dqS55khZJQL)vA7l%nk8uxbK>xWMOx?Aj z|D5%{YMi^Z|2+que)*pAr?$Zy$iT0^HpGMRN+ zUTd}W9gAaaQ!zMQ#3lH>c)v7*@?RK#1|GN=VNU0XMdm=>E$6k_Ug=9_kJtNjaF*=% zn){{y*Z1y$DQGg;Ih{W>maQJ_KfAV`WY+JcGI!n7`)mtl`z3TsCMy0OM21?NcsE`D z;!$wYOmyFFg0Wx3%YSex-ZY35t(BayN&2>cp8W5Rl_1Bdm=t&Z*1cER!=595zXu^# z@TgsnF3H8*P5oEBS9cp-|9-JTV$dZ&6(Rd9tAdq7B6@DD-1@&o>b-4<;S=KAKwh~< zAY(njvynB-Ek*|u3UuNY7`JtY3OoS&(Zsx<`55%O;ijFK#$DC*N_Gjtc~x_NkWlg0 ztSk1{XF%bSiukuF!H%HK$>-N<&Wr@Nde8Qxl5-)+WeLzA750E~`N1P6Ntr^f6HUF0 zG2aRD#hf$K59)zgdIQR*ls4^lMX_;b)xcgWT0rBjpKTk9wK1`T2wwZtO$NP--@(Z) zzMU(zum|SU%Yp4sCJ;=i2hv3&Rxa;PE>@K|PY>$^K5q6Fo2@?u14GLswNHFX9yEjn zr3&f3x65Lo!Vu9C%q>&uhD`;JtWoOugq~C|3aTDREved0*IN=CXqd(K>MSiB{A<0O zI$JLJwSUWF^ZwTTYGAuu=sfr+2E|UTNHF^78GhVvI#TJ_Q7*8KILTM6-Hk@+*sY1Z zU1D&zh|3+xiN|Y@(wWJld^%AV+7}y`i?rhMp7W%e4eFa8ehWbrWIla?qz=PC;@y3V zTh*2c26LzR!zt~@L`mTIqX3>?qO3C1CLR^;h{(HT@Zad!)8s9myKcUi84x0 z0-q;d1{m|w$#)fo4hoCfKI+pxNa;#o&&!fQZ@|q$vXs8^+Bt2GRbQ~JJa5zCzjWON z%y5(Ya}18)vb2}HCr}%7uFyyDRpMgx^vUuZ<>_HhKE7T?W`U|%0_Q;CR1R?>a7m+X z{=m{&Um)|Z_4$P?Ykbu1l=|{dlTOthnbDcAaCcIs zRhWaTPi|~AyF1~-g~DmFCr=}X+l*&TdIAM+EERo}tn(me9?ApV$BT7f_>~zmr)aLk8-IJhL^W~`zB} z^9jaGnz5dkzFX}~y!CcCwU)cckxHK6s6ehP6>73$IzA*n|`SyFxMS# zs(3wGfTa-j>gA{2bgj~Hh|*Xr3;ft00s)^he(lZI))UGS(4KwyLBT`a)W4M=@>s&M z^v#}U{REhZ9Zf!A*v6PI!U&KW;@LpfeR31bf|qNDbDte%ONeCv2^p_E{u~8*i(9k8 zN>~fVeH^%ts=!9*ExQE>wunT#_4zCUhnn5!B47%%BzN>&BYT395x=vCi0ee4Ix~@?|B;*v`(jyfoZ2a2DB4g(ZC6N+Ouzg9%OS{xIK$yhIt`bP z&I}fq;`|suBHMU{Y${7qaT}Z+3fx=tZ4@tF10w42!Cqj|QJ?^>I%(5yqR8>u7ZstB zfZzC84o5~{Z0m3dHuvYMp}u3tgELeSKdS;dMNLrvc_jqWU(co@;Btf>ZmK_Eq#Urg zu6Qk@fz|)E0K)p!?Vi85569cDC&~tT+lC9!6(XDtade(EFnXb<->&eo)C(kolaM># z3#&gZKPrZ`x6FJg;K}2`ln&l9kXCU#hiD6Wwr?V%zFr3k5-C>rv5R?*aS$lM#-|0F zk?boL!s!}&J8OEBDmn`ES#i3qs6n_>*8DVpzf7uQSIx)zQ%S<&qc|t?^V-qk712M@ zK)lB+gy^J(A$K-cnj##NY_YVLH9uCWOfo%3D%!c{{>y%Xi8DUN+|+mtuur)+>dF0Us@@(_WQGAe`BGPgY;#9C!G8Hkq9O zp~#~5sLZDHlOsh`-gT-eDo#!V#!2fwXFdb01X9Jmb2$m|BB`!>^l^Wcq2$Dc=jC#9 zYkTVhw?c>-)U1{igEZznDor@SMpm9Iw*D#ElY5w|555p~rO*^h>v9XY;dWMd<{9<# z=@-Dd`5(zy*w57|ZTavfn6HP2uV3c}W=I z)&twrgTvw&yvgOYegkO$U-H*)SC0c;D;52_J+3mU-=c+5oi1nfcJ3n@2+*q9>HpF1$wpsnXG+{UpEY zo$7*JP@Iii{O8wj;5ujrZn5ZKS#auG-Ymb>s_M6VZzc%x@JWI%d|u@73)G`*r!DNd za(ijlOCcR_GXmQ;RGg=?8lwJn(I0?Y1$a6>E4O}j`?}g`@&@Lc;{iKPz#94QIsWBQ zJ8*pibz*0DdIfIs2Yciym<8aB%7T>t@iExC^xnI-j-+t_hPzbfH2+V3w5_#X%K12= zPb!tWy+Fb?bGL(jTYoUCtW&C7+QMXXl@1yO51FesME(5RoKl{i>Q?4K*V#88w$8pv z?bYV7y$==84~0+S7G&0nqdC2${1=-6S}`$HucufMjd$WAigrjh8~v&NEdQb0M#hLc z8T3w=1|)|2itcil%6}xV*B{P`xVvtF-9Cna0T^@vgJnD2G(%>uLWF|ts3mZ4 zT*+w~fdS#W{PFbv`iNj_*p9}%!_@-9KJ$aXo`SrtwZ{ZEB5_b%6fs+Cvm4O8)lTWa z;9!ubw}b0|{>?#+4F$;?DQth8d9FcIV#Pid))`MHYOx3YkIMd-oOo62>yDoiMn9#F z=->+Mo?|8+4M4!EPMQgN%gnx-)qEQ5f(M?Eh0g1cz$XdLsbM*asJZ@}5Y~HISkgPM zb9EEVJ+R(2WBkA2YVrr<=JI3{M` z*t>ms|3O_8^LOar)_}ToRwoJPG{T8*DKcsu0hfZ<3l16GaTR(e{^{}hxaMDhc@M|_ za2G=Aj>slEMJ9&2lOp5*-&{(l0p~6-*c#kpwC4%j@3QX4!`N#nWaf+OHhn|1O0+32H06AnOe-Jk>{wzHFagUgV@7MuQLuQ|; z8BIVTcN;-hsjK7ZvHd+4vv&md8-&Q-6&>D3gpHD_@iOhh3>Luaa7mLw@LR{R1F25~^>_^njn-=$Ao4c^@essZB~ByQd}$R@`(uscsI z+|(WY+W^b_U+leiR8#r(H;k7VyfXsM3?fZn9J>gJH0h3vm8K#fB|$-IC?XJgaTrlR zz=j|Qs5GgO-a=6bQL55HXu%*vAP_lW#{MjvVihIsM~NrDn*3&`Z^F^xG*%V{h_863DfAwe&0;P<>)3b>4wYp zCQUAtncv|$mnTKUaH@h6gMJKY{2H7=r+b^OwBsK2e1}W_H?itHALlY zwf5~seZ+!ya`a$do5RUQ_6jRDNqPN11dqwV#uYerW!(@P`@-en{#UoqXIyI;;;nDG~1%h_U&vG(I+fThY6?tO$~Q1xBdOS+K>O7X}N zL373hPBj@Rzdddh%3%Wq1izD-<;gwXU%cSPUo?yCmCB)4%js9Q6NMe9>u>kmEI6Ad zGH+^xQ=Gk2)(S*Cy%EI&oMTDHQxa53TV#O{}@_9KU9g!fa)~?lrlTJ$JEbCVqaVYXoCPCF5+IvU{yec zTmeF@;zGZL7f|{`zWR_^k^SYGxpJ5Ckw=3CR)p{yq}W5I_r=w{-?`)+`(Y<`yQuV8 z^tpnE_n*Ed9(^PYvwXjvSx|!^?YL#vYK4KYymr z_<|Xk`5wR-rAignvM_iLj1b<0E`zsc0Rs$>%{;JLDPbbasrf7d11FuJRNz3P?V^sU zLY?&&??=_(^&hIzTQ%nHN+TSaU;o7YB9J^}Bd`PPuv5gt_7vRf`Ojr9S6_fwzXO5R zxW=tziDe9;_G7f7PrVLZ1<|egOR7? zW{_CS(4GU#oVs1$L2Jt|efs$>*4!py+@q1M9$wR(-zNfJw7(R<{JNhXAKtkb{rGYuTq^IAhNk<{%*f4}*p}u`0h+$9mb5Uv zBfB>;YNnIw_j#Z3*0z+du0MBN-`gF3FmwO52M>Q~w=S7GD!oUeCt=Aw=HVTEn z6rQ>h(SP`X#+Y=BQFuTCghuOSmH+!)1SO}QcM$`?3V`y?9lw-X@4iE?0rbwNvhhNx z%ok244@<|BPbJR+7*UXrol4Zx1Z;Pgz@!WyK6D7|WCOmlX|2?3c%n17@>9Fph2!@E z4n5o6Rf=>MnUog)g*$K~9B=WsG^ptI2Ga>>Uf+Ylwx(?zw`4$CNe~5mQaQJ_F9jPHwY=t-i zBuW7#c5M>osjiH{Dg;y7LcHFQu2&+g+Pd;TT?xS2i-P}(p1Sa-vA0u^MZkO)+0Z~E z2HA+dVvNZGY=#|d;P5eot1*IHx%ckBp*A~TZL#05m0Xe}2EE07CIck1O}a{l_a_{cBR;(?9pn>`&sLf?2r| z03ig6v4wWB)+GO#w{$oNZTet`OrnVh6AH z*Drth{}=S+hrV6@<^TNmCjT#A6Vk7~xf%P>zEv4L1?(WF-d@9;AW!rB(HLifyKL3@ zLqW_)tFbMv+uFEZ8d9qi1`UU+6bG$`tCR-ahpUtaLx!s^t;xQi_o7hZ;N0pdgC_8cBZ-518%fz^`PM)<(}^k+t&L9;#oTDuhr=s znYjt)tf4^|kDZm}Y!Viu%KxglWy5ohKWbJ2Va7>E!z^DI7`KZ;@7V`Gw;yJ z>s>W-(qLha1{ZI4`y@J`E=_d9s?XbBgfCR*W_XtnV&}MC?s`?JZvE=rkylX~LxO7Ahn$%= z)wy_YmaXDY8=r8OsmWGva@Ce#{lbV1`|YrMqIVNcxdi#7^*?;VhwFt;K3oynC}gL* zVz|)*6@H{SPuw=Y0R>t4fJrH`8Q1tOEYmk2;a`5Y&eDY6+jC+H#li)aFIMSDwAQzE z6mxaz_%EDZe|&|0&w*eQ0|T$ALBT0Y_64Q>`O#pK4sy>untoLI4PQEjhJZ_M|?s4kIzV^3X+@N9i0p-^3zz@fp%P)PJ~7 zx7XN+NQgK-bg-uSy6;Hw>QoM`Kry5%%spz)BtCFfsoL0o<$Vl+^FU~uWo3|qTi=W{ zIsW~xJQa;Nf?8g{A#-gnx5p|K*?Emqq+3>1;##b#%ydJ!-4k3-n zo7lEZYA83ibn~TQL&JEo1!y~TdVScO)kjNYN~8Uf*E!o-j7NCeZ|jeAKQuc}bh;N` zyl>@sRl=PGaXhvPi(Tk{ts!OE+|3`e@jeY&ML7kd&ZOppNr9YsCse8YkfJKVZo?Tl zQ)gtt=dHoIz&YWkEYhOpt%okzI}MX6CR*Sgp%vR5=m|B3q{2im-O!GMpuiO`Ax z`rMACp+Z8=JkAz#lA9ZyV(7np!}BRvc(w$SCi*J;Sb2xzy{1(?#_!X86xqy}4z&_B zL$$g;zHA7(h9Wnl=u5C$7o6Q^>duqkWUV&X3r~wCs(BNpyKBm?pJdD~W%RMhxKX2| z;WUH1wkWY56NUGV*Q*eJ!BH6S)hep|h9^k<@B#xX?H!=N>mAuDj^})M>ls6vU1KkY zQTNS~i~|?mQ`8@elcEwHxyVHMEt09jrCMD_iSM^cOS$;lx-%x#j_7uVxtGj@kh3F( z)1@aoS&c$sTG34cgDZA_|mfMHvh*J(%|Rvj2Z zG%Z(}e`)f51BOMe+`gUS>tVwj;=&C?@q16cagPjgA0Y-(cQq9#Wz|}F0uP%_sFn)kzVN+YsYoOU=sROxSH)x< zUh$T`#nGX+`!dvxe3CL+FWnQTG@_&|_jBxzdrqgsXq6w7tZ;x;$aLr5Ej}HN3J+Xs zU)3~R!>(B0Ca&aJ@~VFlu-cb7SDjFeU2As=u*5!AC~QlN3tgVac-2Z_Z%M5M@O=zW z)D(?hKWvR%GKNl{Z@XWEOOfzbs!UGrsmjJHMMXY)?J;m} zl`oAO9i-y(dlOAGNN6nIQ!shMaoNpx3MD^OybyzI?lN|Id2~)NhIXNPn>9V~Vzn~~ zV`oRq*zW9;vM3wCtHiDhi{2iz+(cX%(97&Pe12amIm)9po4$3Q`h``Jn51iekgxec z?D4+gV2Q7o1R7qw1ocL?+34soGj7%|njbN$IBaRj&%?v>#WDvExm!dzGH2|qX%&! zjWy4z;nLx*!tgqVWv?(#q&SEAOU#&cZuX+?2CeIGbUc0&&PI0B@@4d2rD&A+xUd7$ zyPbH{BCy!QeI&pB?kV5L6>WpXFAGLpr%+E4GaTMx*Oq9}M%~0?XMAcibGoLEk9`(} zJdawbP^{JIeJG)*Kzmbc&E|pP{pLbeWqa9bx+D(nqi1wtiP_|gpnh_BLBRrw)G}6; zYlyQ{<3^9|+1ciMNXx+6f4JL;l`SlMmQ=h8j>^uwYINz_rqZiz^F6n+WB+jSs>QrW znpm9-vK+fRploKbaG0$@(6?}N@@YB8=DTUkjV2nHKdQ3ycpxY%I=$gN`3ykLVZ4Us zg~51wuY5a|nHud@=Ko=k5JQ{^J78dgu`>~WB8LDcP@oa91Js0Llt|$l! zu<<;+SN!wt$MAaxELGbTDC&`9$qzMJ`yRQz?N$ufD^g8nbyHAi*-%?J-Q(r@3HiUN zoigN2OpEQUWR)v>1&nu2D8GZs@ymD`sqVG*M|I zo^C&sli9o#f87WTQ*~>_g1)#lFF)i-Y7{z%sT+`%$t7)zEtbNuacMh~FxyA!tU5?l z_Y+g-py*2rIDh)MqOEX-ILa|@bcmqZ$(S}FwdZM=-h2Gs^DMP3v^}wZ+}W8?rr zisJ`8t{hnuh>erlTJkVWEr4B9+S=Cr*MkSolCd&cD(}8X;VZb}u!)cJC)e7E?6S%Z;i6ikp_JuQ(uqg`MRAUdYDu_ zTNV2;#jUn!&&HVH^J{$8Isv=ugLQmhUy9|gb^IWgY81F5x!V0oN%{d96%({r#>9uEcX=!xcuMk zTW)|2*teC_Wz5Gdgf=19gMrod!%x@NZq8;`q7?~k=DDu4H6qBAbq0Z7d(8dztC&%K z?aVc-p=a5y`d|a!L0Jk**G7-GFBNlP!^7kDluq6rwVv$!tnn;qC@yYd5b*26h5aq&$nV`?@z?{Q2bEACcy<%ude|Xl} z?j-t_1sC_VasSffpR^1}-KM;DX>C_dty;ZJZ}c%p$bWu)WzA>g4!zoN!;;FEXbsLd z2Ps_fwI151aY{{fewj~U$a5{rUw8&zo?SSrP%J;!83jT?_{nhjs9ny=z{sgSk?HYH zcfGZfoa-}x(mmH!H6jX!U!UXf-F$y^Xnqx=F-Cm2!Sxf*{M(rx3EA;10Xtn0_%@x+ zWV~4OB)x7d$9X$ymyDLS&1-zz#`DEIDqi45%N>nPny9!MmxoI9Ww-yH;!!*Crw`^} z=~}jw#DVS3ZyDK{1J5#U@M3GFrZVuFJkPerO4xxJNc7FCF*P2@o!BaqY`hx#@yK1b z1H`$q!(ZjKYO!L|#^`mrQxOo38aYuOd_~Y^T*#E!MIZW_3pK@=L3jTc($!Q=sC_Gt zrt_|a{IYnFt&@$@+wmYN!(p(26dvS8E^1u%h@e|E&q15^ z=Ei0AKG_#J4tBNK584#bq?z6V4rh{ogmO+ek{jwiuGDS-U=-B9#7ZaYf=#>_LxOde zR+C#}$1Sk38U`IW2x|}#v?`sjHIb1M1|JKNim?Y1g|ilg`zgO4bmi|BSo7ib=B%2KX$V{{b{EMHb-ktet`?2+TiaMp(HL^PBb0acJEnWP zt^e&6Oy>G^mSX7xseKUdxlWDK^VhDw9d$wlwTs`hdYbOP!Y3`m$J%GovcHp?;gtKudYBh@7fhIyCo3x)b)#ue30U|LW11)KcOh_)-3G@3h5 z6=71!7@DWt-;`8}){r-szdLM3-~Ui^E#Y`o~-Q+T0FncD1Dmu5>uoW{c-{kcuOeZD|<0S}Bj2@@huIIOU2xi!udX zOk~L>+~T1PzKcWIc-AHysYH-0G&zu(;5F^2_+)#fXxao%yW^>6!V(8@VLI={y@?&< zicT8C)B>F7?AY&|zC;{XQ#a#Zw{3T6#@-s&q1VpMZ%%TyaFo+%J697p36%Cdt3ZeS zXAC<7V=K7A9(~)`woq0*KOuJ)7O!<>0W*Wjxu6w?s_L{i1cjXFpO?{Q@i>w8<|D-- zD3t1IUj%38-%*7VQh=K{F}CN1rXH^dF%lP_y;dF4fs55h&czTbamj`%Z88sRm3VG9 zVyHDW%r`UC=)JmaQ!FHs@Sk`e6X}Uq?PhtUr97zD*Is&L-TP?Y50}IK@GM zd&5+V(Ah6>t?$pqJ^xIw+Lv=?%WPt0Jj4?}f(Amu_C!XMpzPI&<-)=s?G%SvDb0`# zN>Q}6!lf2dm)%z&+h2J?nK7hz0fAT=Y^ZrFrwC9yOAs<{Euo3d}o&bNzHZMlP6G*n}IKKs)fdO?q~$QbET*sv`9RsDkC43~PI`NZ)`>Ih0K_Zo=7rHjRrF zg&{(n=A{6K&r1k=R$lW(vYPH2w}`DR5kzGeP}q@V zR~pn^Zx^-Ul3nLX{N5+b(G%4ueDJcWSL^s^0du>$xY7A3jn^x^H@(}*6tQN>tS=luz3}P#2wWclaM{~! z!s{R1KUt6`IUU|zT_C-3L4pf=(!XQ_I;zkf8U6*I|1s9_yUVxh?auy(&p#DAYY^JE zTefr8Uaq%0#|8Op<;tzMJL!+z_~WG~ zM?hXIJ8=aMgt)kGxBXa$TE9VRg%V@{;+^{|q*snea=mUaDNU0UTmO7_SJrv0A;GHY z_?@y`S=7Sc*FQ?FP~OXfe{M4P>A<6^xS&^CYkPi4{+{{x*Y$h___CB2s%sCTwL?NFuIsY;*5dyhuR%k!t2fVZbIV( z6Z|wnR_yGve{h{_$cimh984J2FkAm->iZ{~aKCS_`woYHZ-{>h8L+{x8L;IMWv>;p zUaNm@3Vs#FYWFsXWOaK-N3wdo+ag(L?u|Q?|7fGH1vk%f_?OV^{_f0lk&O}dnfs~n zwi~?zSZ&An|K8;PVohq4**D1R&4KgQwSPC#JxvdE9i(RJn4ZY`)Z!NhxYyek6>T>D81H(|Xy?OCe|PK!#~=Cck9=PL z|1Q^8IsE^$bXoU9M|s2#0(-Z?%qV@gnYa6dESDNh!l9_Ti4e9g>CzJz)k`1zJs1*A)eI zxSDDvNWXBRct>)%J54D{Z7lUcL7!Qec$JlMUe9^@Ujq7XTqNH>H(jE}XvGF?V0}?_ zQ9&5S0eE4ne~P`XOXA_zcW>xyKY{$o+Pwlujp!7>S5oNNj$u8eHdn+k$=0Wl{WC@LP&5Uw@-`yK_ zEkY`<>^F0gg6DW=87`CSsM2`&z0mXzU zD=}}&80P%H{J_Dj>TIe|%^Mfj&ojt2WnP1lV3Y2aBn>rlcVzXTO}Dw#2l{#KFbOU- z>;!oLX+ zfRlWvu4@3&5US zTqo<#{PFumgvUQl#ohJ7h|*Z-v4ZM;a=gB9=1OkL9IG!D7chy5RDKK0!x?c$-K^y7TA$D@ zI(3|y;y4nw8ncYDMT59Uk_l`$=m-3Eg#4@>JL29@at}kwYw7-4m3sI{;C!~F;^^jh zq|-ENs}EsmIIxi=7QG8a;)}1-*H#%)gwj+ey$;yRf$o6$eHwO$hm7RiTAGFba&)wd zD8ttO`lfPlKCiKy0W+_i2F{7W<7LmW)P!L^mVp~IIBiQ%c5Q8KdeaBoXN45Z%h0*{wjxZg7m7^YvHh_{kY_F!L5rD0f1v1!qhV_fgfK`ejnoNDlq z9U;cMJZn5-IDuaEFr$x2&CEz@Y;AdScCGc+1;Ez>p7>3b$0Q^Cy5wQuJ6nSm>tbdJ zB}rqVUnSsV1B||oVEEJ2$WM*j-(cQ9KS7pL+to@UT{BUS@>U;{^Hh%8lnGeTcC@n(=igZ4F%| z3)tXE3#I%49fe1^X2n^bg~+A9tf3cZ34m(v)ma85*aQ-;$3P4SZ~ER-7|iOKN*r^mXUP3S_^~{5Vw4)#X5-3pQ_5t$c2pI95aXm>y-uCLm*EfH0>jrivd}r=l z9JbyK(GZ31{9V&Mr^T9sO)O*W`=N2Uq{NV#W#X297l;qYP z6CKCw=fP9kpSb$<_4&3jqrC7btY4xgePMpNRP-*HrN?<+rSvI!x$iCJR4D%BY%5BS z2S45xY+}{=M1@e~(BVsvJTY5Rw%2~CyC-a1+N-CP`^1jrofUivH)ZR zilG;%Td}YI`XN%Q5d?9cxw7z83DTaA;!K@uX@Q8 z2C!@xsc>#-twOp*mRUh`FB^_h3x_6>iVsk6eF&Kc=rkE6oHa{iJY6k)3GFbAlld4j zw01|p7>&F#=-iJ$cp1yqI4coQ+b*MKVu&Y0^KNz-R9lM@>l0@B%iRkpUKxCZV3VWc zFH#QD!e}vhV{I^SaG;SHi^7`zy|>F@;>F9oZc>2~g+GnS<0`6OIxo2NkI(ih9-N=z>dfofy3xFf|v8|nqn(yfWC-PT$|py_HJ>hz@{nu zfxc?yb%)oTtZG(O!ya0@`@){kD^|qkbLu;>+N$%NhJLqhRxc7{7Y4U$D~^@(VC;fw za^CEUZthOC;$m#pTKt^}oDN!k)q2o?YGQrq5Qo2gc=M4?TJ(q4Gx>;{GE9@J z_k8#JW*eG|FHMa?7UoDLOYxMoLTx)0ydBpP&3YRd19fJ7iPjLd8&N5qK}|FV8sjNU z^wuN5c{{J7$ziAcEqWP?=qlWYoU$W5$0#?5lld|lB`W=j8y16`&rCdMl^N65$KG5? z30wgbNLy3x*pavuzOi6Zbl_YH73n>7KfF&+?Uyu~F5#yhhm6EW;(d+qKCh^th@~|- z%xD%ThaZ5NiHl2%Zo>^Wn8tL2WHg=;z-UUcw6yw33TvU$))A}!L<~S4!e*E~E?_~Rm@{p0Xni^MU@(rF` zDwM7D;mWAt^c|UHe_dIM`=V5COev>wqm$WmJE=-+0Nq+rsulVJslcCqKyz)WO_}F< z<3t^FizFtN9*Q!E4x7CrsZ|Z)ozQh-vqX=dId98DFU4#~GFV(F@b~A#7goR#*l!d;1{wDnjC3KUq{Ew4IhPw7(v0N{-CV9=$DlIf-o8`&z1v7WM zK#_f*FJKv^UBM=++TK8JQBbUBpt*F_=2mVGGaL8pnf6wVqU%$V&_oSa?9q9&jp5Vg zcaV4os)ln+3lFv_V++l|e=Cux-y_q+5{RYH8GO6ZrDYc_m*O~~(W*WisHfnr(s$Ec zDs~Y4#OK?ddM0L`c`_kS7^Wo5?`%+ucbv};$i`UO+>kr)$OOuSWT z`b=-l+Dc7ZcadMsSg;BGO($vk0y(y3b)?Y^SbJK!>)RSJnltyJ=T!b_yghbFN>ceg zH`*{mzXh8)KH(*RGv^IbBuzr!_vhfvGZPuQ$OvRr`b9?!^qWn_b&bttK%(+VY@Wl& z?OjnXc92^6J(w0&hqHWic@L#yLfg-6^+sXIHZij(qys3v0NQUW3OJx>8oR$5&36IR z%7yCCvgIT3UQ>>u&B2|}Q=7zR%%`wlQ0ze3gm$*n(_$$NlgemHFzImb`%O==Me_E7 z4}$XrOxz(AndcCH_{#AS{|F)3)-Nwgf)L?huEPkl7~ysx-J(}9?MWzk?ALa^CvT-8FaRAs<^zIhO!$^%GCf_Xk9oJ;`&LS^7hcqnUkwGko@D3DS5uJfDog+$M_p|cj;lRp_Sr*me8nHC zTnhc%=nu~$WU_K5CXPfVuk_P=N%d>`u9D5{bV$J5O3HKCBYp&#TwSPmO2X%=jh;oI z9IB)78n5@{ZBWmG6C_+)>%g|?LcHdnZo6VYn6p?Dv1D1pV|i6gbtq=a))PYBs~9tt z=~`~T=&;1M?R~e9J-a#A9t(qE8oU4UE|kSZ1kwKXNh{2GefWwVkS_InmPQZY#J4L= zvl`tkp7SFxM>KUmVuSP467|D_y?Tw^CA%~X5XT+d;?um|Y1&7%R>*AyigLS+&>a*R z{mFg?)LEugo*`g;#^Ry5s)n^tcIdLNpXIm`RBy`=w0dq}QN0is`$dz1d8wdpa{;sp zvLu3PH*LOJ>h<|81UpJbhN*lC@ZOf}E=#a$Y8GjwThsJ;y%C)m>o)8ft7iXI~o0T zLw?~#Kf|k$gsP`+(ien3ISxw1-kxw3%D_&QLZbkeJW+9wqtAHbchwO0)u$LqL&aRm zcB*~rOdOC7EupRqdpymK$-n-%!QOx6)mz=DR;X_P)*d#!^Y- zjKNd4bE9{L(i$f=$NxAv$7P(+2KV3_1dV-Bg@NEs$EJl||>O{}|q<$qb_}RCiv1M4;6{ToA*L zVh%=PuQ_QO&e?|zYA-%lI}WBLI$uiT2T-78MFp=dw_XWjxuOdF-r}(pcl}RR&P;{_-nZo zQ%m-^iCDsTDl0aevDRS?Viqq#=X!S;)TYt)wb}%XH8F40Mzm%o1~6uwjsT`IP4kYk;yn1{_=XYdz{NUATTJ61c*XO1>_V-TLiz%yUhD*Y zx>KDKBDs3GB)x;CJXCBgQ}O9}V>!%>9avm~cJ&Hv+&2_{UWk&AvWsf0zPFojGx}GrO!b$OTDDtj&mKgx!xTrpfN3Vr;dpj_K4aZKfhq-xgKeLUMVeK_ ztC@iM5g}!0($1ZjTjKMcEb~~Lim+U@8mUQ!V3IEU?da-2AdrilI*V8zz(oqJU&I6a zq%<@SvriPviM71mdwNBR&H__mnp~}+W?m+4Q_5G7_{s48h$oYh8yXRB+xmoDw#{lO z4(erol;gdqx!|6>VgaRt*aK2HgjPhXrpW^ZzCl9xuBfBWuQ!7b$LESg&5BL;x*=mF z2O+LEnMxUZ8p7Y${q1a`07UGhT{8(%^GburTq;5u-KxxNRGFW4XLg zZE6Z6te*K0Lff|aKrxC{Y);R7mj5bDr+S>bCBLZ~2;?kH#bSG$iesoi-tu^IZjKop zgr{sO(@z5NZVe-4`%CH}l-MQPzgm~6p9_DL^N-=bdJ~H*tHQ@F$A!Oy!U4=VBsLYU z=b9A6S#px*78B$~tBpgX^tN>Xj-M35zkubuf<^_<84}Y!B18Wc)Q?*fFt=DP9%l*# zF@*>KAhxf}A|Z5)=Pqc(vI;rj&+ld)8Cw?FD zTPY#RJousldv)J*zn9=fzb%Kw9dCl@?UD)>@N05>H9T*f+>ju`LSY4&hU^_3jkh%C zo;7s)j3jq~%1+nlNG!A>=EL>_vTJw;09?PofTdniweca#YIQXOOI5c(Sc`p}lZbj~ zWbXjCoUHmyKDA-<3H%mvsWB4r!fyCPe6IlIZ4ls`EfBUoc;X>FDK`}Jq!La~weFLn z`K+>@$%9o@THpg+54(Wt$IY<6;ya0{V&dZP#S=yGM#gHfip}PS zdcS)2L&?_QxgF}xLnY)&C8+yccYCw**44Jsv3J^Ar2$OOqnBa%Mv&u#2cF-W>spi5 z3tu0!v+0-hYWN1n-%5I;xZYgscE_jwJ{(j2nZNopf(HHBZP~51-mxs~~nz+%Q0rqeA@HpPA zQr}hBsBN6s0}o-{aEE?9l6e#g)-l9*Kr8&nFT10BA(2rq8-0QY|KhgJp};X6%Y(pg zad+TR_~i89QmfYjztVq%7-Zl7&VBwD@C{H8nHwQ!WR5kj$=02rFFMtVPCp`A< zppy$DfE*^p8BUOsQcssh`wd$j%5(8b;X#VRh;Tjdif7bn$3l$dR1WT&^08#W(VN_Nc5ZTXhk0UCqZtr zksGrpDvL}KTu`*)eJzBCDqaWGb*_W2MlLY=4#!- z)6ahk#Sbo&l-h7xuvGwT3x^SJwzO|~@n9@rL>yvv;5%$^n!IFH8_^7TCNy9pnqnW% zP696+0SNu9XfofHJ+vP3esO?S4VhH99FiM4k&Ljx^}L?|FXI5e8vP{|!o>XmtGWtm zLBJ&%i`g;JaqrvJyt#-Uz>P*2atb}I!`4$>Pq!m7?Np1Q)`yWR^6S^rZ|Ani+cv-9 z!6OVoP6P0W-`owZr|JK@QGClL$kdltI)wVT@mIP%S5WAh9hhXiwF9ddl?yq}`F>1u-M72_P z{U?3{o+Kk+>$bu=IRlYl7x?q$NEJ@Jyq!J`kHANWE9D6nnji*08)ij*d_WE1yR^}AKH3+o2C_U_qR2E$A!4!TO(!rV`s>&dUbJOTOA zHqMGY_1=BR_(vD64dUhkVmDas(2J_RqS2pgP|#%`@9Pv;YxheZ0_Gm1jH0;a=D&Y? zxin~{)Dc-hgmz8*=(VQ^iRWkFme>W9r=*HO$+blyJ?MWwp5X7q%rUv?a zwprt&10`1Cs@F`=K54VX9mB_$tM=rZ*pL$5-}ijsf>(tCQ58m{3wAOd5XzR49Jga`mdTr_kIHFiR_psZO#;>Bo2acwL=dId0+QpYzwG-zZw4=} z;V0cSdHxmxicG}8M1!ludMMe!bUl)_OcK}XO)LXhNfei)zP~e;pP8l;The;QQa0uW zX&V#L(jJ<-i_xXexR(oo8LZpR5z@hAxvyTQt~ekO*)VJ%md*M-94BO{%w`y#(ZGsM zGVc_lqaAdk6XdKLb#g{4@jv%ufT3YR#{yv}` zbpi(J??p_z@?c7GYwK?sE=LIS!xIWME~{dJzWo=^MJMicA1V%5S)j-DLXL7}*(~J@ zPJ|c#qd;4;E>ULqXUQz@k5_yL?u&Ty-Ga)xT!2KYW7w@xqfiW$r{vuG5Eb$M?*peB zpaq#)^Ih4!z_l#@@*WAsSr)pPNDmtL`j0ip-wjubNvq33YiA-M46zFWkNe_U5@Ykr z0c$*H$*0=l-ZvqvFO;7?jYA#e#*Mj>@=#q!T@Kx=SQ4p!D!x9_NROZUTTL9EpB${J zr1c!+tRVD&?))b#WE-r3l?Ud4e4%R05|R*dRK>xDq%pJ z84V3=)?~RoN2cSek(pui_jiVuBp)qGz8Eb>xI3}D8}4kAqvlfutjlB-_U+lcit#LZ ze8-i3!3O#1@%h^gWoPt!=}+tRlG<^uLq<=vMZBE{@#UT_>Z39m>BxJK0BhoT3 z@@=+ne|ABATuvj@VmUzmTig`4e6sR^$(^DGwVC*-;k?U3M%B;6ysIG9lrWO14 zry8A>qc2}bF(Yg_ESRMa&*6fow{C3Mpo5HQzpf0s{e6f zhu#j-gldOPzaTHZQTZV^4j?_JkNpM#Jg6Yk89=s0qVMOu#tV*yVIEYNf<;S0`#X7+MYS>AItdOITj5mdRk?HmN!N!n-}bI z;OzPci1P7`&(1Via*l`Sl6y`XJ>UAD+su+u~lc)Z%JOOa&XHJo+N_z@VjX z=xMvj4RoyXJCC8H@e}2zluM`gR zpHQ8K`&DKkW_Cs1Qy}C`AmSsjT5 z9knBa82WZqB9-C(Te8Df19nBB7gT^=ISKylhfhipp!#+=d_JpYg|>Q1IpazX!!yj_ zgsK!mmIy@tbWQaQlNOX>UrpKW;NWn&)LvYW6BRN4or1-PCgNSjZls! zx>qk0<7{xmfxKm(9O~1&WPUtS`*3GD13tJ^3liGqE*K#3_v0?Cry`Fqo#$otO!^ zOM^t#YA*&?+!_EA>asfY)p9-2{x7Xw-VaRlwq$yjkLJsjg)vNh>6_iy9z#YEJ5i+! z3~vjy)qae*Gcby&)-^e$%e-AH{D)$+CD7nw`@IQehXN$!D#EWA`_lhN<;I!uK83+f zapE=53@~1p%yydS@$S65I+aT7=9%{iGxC@%gUnMYZSC?P;;mX+D=Z;8k$7{iu-zF1 ziC>3!iRmX&(=?WU2BcURzYyg0_%9B z@Ufc-9Q+Pg-P@Lfqi$}r)Va8HZ}t9sqC}snojNy8#eLL6TqO;eSJ&+W74~mmNWKs* zY<{9r=-CRDhXuo$w5z#1T_YI3M&q95Nb^D|yXQ<=BH zTV~u5SXmNTK;Cw^bgnF2cuSg>w0XYO39NumnGclf8IrW0<5*xfs*YEYh2}A zT5=4$jOD(nKJz=$r&g9j7UAg1&#gTES}Qw*vvPvdI|1mvc%z%i3!=XDVMxn5f`LIzRYSQx>XSodVdx?&+k{gaL9qt$s*KV{dA5%xJCD;Hl*o?_~Wy zY)PaL=TwV-57^qyA~U{e?BJ4~?Q_1XR_6x4LBuhwEXfSgv$BMtY zm2kkU)PI)j^lnD~ulBAitjTj*)8pRSUFVHhR01khv}zF%P^O5rpeQ(tf`m${u|&Zb zk}xBsB31~ZRY44>hyzHX%mqSd1%lOxgdrf~CP)kk37CY$goLv`MB8(2&&|2;CKq|0 z|9Sr5`_@|TyWaJ^5xi#PV&PaS@ISMMbS`@!9FPT(9Ro+Q?|f4(-gFNFcv3qbU;Z1E zMOMnHKfs0Hm7^MUjp+-Ns-`#r1l3GTlUL`F2jRHN24z}s;LQVB#!1G?mNN9s=h>ur@k964I@wS0+F)1seeAAK6zI$}yFjJ9ivK_3XyS{%=Hg zx2~iOUthW$g4{0^12w0XvZ+HAJ^EmY=CMq(zXPI%q%!OWKZR=gH)S_f+T-$D4|?Lf z9jA&Zhl3z)<}2JQ_U`^V7{8%aV5U@Ay-zm2B9*OSI?qF0duna8ephXPJ2JbliyW1< z>HvJ_+O_IrYW2O02`HCb5s|~4F{oHK*XCsqu29g`$#3v<8UE$7{R$3Oc(@|@)t-1Q zN<+?Ar%70M+KDDJBlp{_7BT^cARRjUY6Oz^9ofI(RPQG0iKYoCcVo^@o9!t>9uW*E z`qDysRnX8m#%=D~eQe}lO<9JwvnMMY*O`7_P@NktxD92@%1HLLu&4k9@lMJ)BF-Vf zQv8msbb6Wo#)rGEjYy?cAmE;UZo^Hw5eqFf0&BKbYm5o2)fR>0#?D?cZ{i^d zUh4Zj&f0kw01`#EnhN$xMcu@&4Y!AiPYj_)2V0QR7st!cC!?vMR!RI=<@(zDtEL|2 z$)mAacx@|Ixu}bpyd}g8@)SFWOPvKU<~XuvNNs$w!n*JIXC+li2a=;tKRjqoIQjswm!#jDoqI@q*jF&2%l!EH~m@QO%A9~*Y=<{378rzJ>)OxclioZncx z#UG|ZEd?&%vLq=sy_O?qU5lCKXuKf4M)>axQ4J%BkFQ$?;+0mr>)B~;0oWPOAUATj zBz5jU_EO@=ajsGm6B}Fp4y^ln933#JP%!d~@Lc*Js&(md52#LXeX(2l}IkZhdnaJ#>1c!bL;89@gDzd+PL{m9H6ftPH(e4N_?WS$2P5sSj2ji<^ zOiSW?*35s1+(9G_r&)4y7t0xGGE5%B>{whylcu%^l1RAPe3>WbQk#%F7p$4f{7Yg zkamB-av}b!U#q&ebEYuPC%N@CUg41=W(K+&XW!P2LHMmywLL>0MpC`160l9nzpQS& z)RLtgr7X%04hP#+b38XZSesbq7K7_!(sT@1jUj)7K7^MFq(Vgj z(fdpBuH05h&prIK(=dzl1J@!K1xK>+Eu|zU(DqX1BJ|zvPhn|Z+BeAUjW!OX;oWgq zU|b6YR;b{S)>H7(E0d2&ccVMW%2LUJtADL>y{_psgFR&_%7XrKyG?wRVIORgt_OkX zz7y$x2R86d+ZeeLJS_7CI@nyx4X25jkx1u>Lg=Mg`F(|1=9fLW2fAE)mgpbWlu4di zWtoLX!*o%;Kv>vuGX3zP=KuAa0xvff$!EqDz!*Ig`h{@^gIt*w(QoH3?>BMq-NxPX zA7+K@PkMgs97%xTbpUWB`%AqxJBY)7ug+V0&T;sck?o4HVEj$Z68jW1|5u1#zSNx4 zS}6m}Q;07|3$xLt9@h3yYdEBUr*!c$cTWID3Wgl+TC3el=`|S_z8up6zx9kR=7Rpm zPY@2_+?Su_{%_YvE~Yb)G~?aeybku(bAg%Y|%rRGgMpHxkl)MT!e)=fTN&2b_GTEx zrM{3W9|H8(;t>5DbX2;g)O>`dZ$0~^n+8~#F! zUn(Ts;sA|W2u0EVD0leWn_jBFq`%T<{}@DrgmB>ct+dFqJ0<6;*%1! z3&PF*H0{6Y7yKh5^69c`q0!^T>Yi8*YJEs<#Ez?D8|b>l%q;qiyZq`^S2-va`pNO_ z1xK@ELV|2A=|FST>PUkkyPX7RKFRK@3q3iAQOPH}>mDLtj+GDC3F$aUbchsX$o;gU zF(?aDF^ixwV#WC&6enpz>Rx|&k$vL(r1_!FH+8qET6nUvMFK+DMp?fq+d^MoPna>VnxUx|+VR$Tw0qQV>@g*(cRaJB(RqxyR&y}+EEzTln z6b&Vv;m@rDhtUI2MMmdyhtSN4|M;FnR{E?GR3-#%NEl7^tx{)NfZ%WP)$nA%}Kmcj%b-KZoOBg^v9iz*!j$RpQ;f28X z3ft%gk_S_3J*J6HB%_@6Lbp9-=199|4{}=S+4rGer&zjH55&di$S>sYP}uCt!7lsGUE=qTJs7k&Aeg_;`O3lfUFZVrpv`*S{EaVy5BAd!6G}VZxxV=c|j=yq4q_1hl!l&1;RNGFv%R*JJsd1@Mu zGPT0Rv&X|4=piOzzu%KuO-Fi75XP2zll6%syPW^DW#iUBL`Yj{o|=xkm!Z)wlC(eZ zx~vaB?-a1cw`heED+7tK6xfG02}FY$dDvG31BXTIHR)si$RqbD7SS@cr(`@wd&BDO zhrN*|LzF;LVPDUsCUV`A`n*^`{gAsCFAA&misR$O4Mi4VwV21=Fn;xdK@P-h$h_s* zgc^>BAh9d(tQEdR2%ni^CS8``V1wIcA(XaSPP`7NN4vt1$sVT#MK!)Rdvhv`UbVudMLi z3rV%-f@Zqi3oi?ogBP5@S>WVDBF#3jVY~AmN=d+Y1eGzzvM6i^UjO;itg(J8$nCrD ziB%9Duv1tUyLYd4KRTjmRF*wOz)7*owP_M8G<i$sC(WKD_!otTkJ?$6mIO2P9i= z9z#p>PNyc_>Bs(d{!%-B;A2R^C?&1`@zH2Iu2NgUx&2~NLQ_Drz z@o>>MM6uoSpaQJ*h(3|ji&%D=^M&!xk{fnL9Nq>*+2mbU2h7wWS-(4Obk=w&a&j)1 zD+sHZNkUoMpO&^D?DsjQ#E%W&y}LWNSYdoy>_fV5V6Y4N%EdsZCwuaR=XjupE@*7s zqSVbRIr4q)KfkU1pt?FEUXiJpw=*w@{%|Tu#B7G9LIJ#X-3tA`_F4Q4{OLD~h+g}g zU$0^t)~*}=X$f5X{^qJfO|o<0G>Mq+g-l;^zezw(8MxF3cfATfag2l9rBAf&hY_%6 z1(Mm8Q>;z@>tlm$2Lbsh=E2le6uLC2aw1jI= z+F>Hx#~+#s?bQ+>>v(jG{Z!oAe|+rHp5fODF->tk8vyE1rE6{ee#1sPpl!Rlek#sp z%rj-ta&#RGOfiBWKUqR?a2YcRzKn)Tsc_uJ(J3q_lN_Cb(@g(Tt9=&+0(Ho#D6AwN*Km%d` diff --git a/app/src/screenshotTestFullDebug/reference/io/homeassistant/companion/android/settings/mediacontrol/MediaControlSettingsScreenScreenshotTest/Media control settings with configured entities_small_phone_66e7bbf2_0.png b/app/src/screenshotTestFullDebug/reference/io/homeassistant/companion/android/settings/mediacontrol/MediaControlSettingsScreenScreenshotTest/Media control settings with configured entities_small_phone_66e7bbf2_0.png index 229918c7dbd71aa993f1258c63bf412f4c55113f..db41f91958b066497f5a7e319fca1419a05451b3 100644 GIT binary patch literal 63016 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 diff --git a/app/src/screenshotTestFullDebug/reference/io/homeassistant/companion/android/settings/mediacontrol/MediaControlSettingsScreenScreenshotTest/Media control settings with configured entities_tablet_2f22c4ea_0.png b/app/src/screenshotTestFullDebug/reference/io/homeassistant/companion/android/settings/mediacontrol/MediaControlSettingsScreenScreenshotTest/Media control settings with configured entities_tablet_2f22c4ea_0.png index 8b68a85a385f6902701ced842e60e8ac1f31e2e3..db5b036508dd5caa50f96327aae9c360bef46544 100644 GIT binary patch literal 40152 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
    mRa?@?A7(GcJAM8{|Wl7`pfq169zU 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 From ad135f5a40246d603628975fcb4c5b9cf4bb5c7b Mon Sep 17 00:00:00 2001 From: Fletcher Dostie Date: Fri, 17 Apr 2026 04:31:18 -0700 Subject: [PATCH 072/114] All `handle*()` methods return a pending `SettableFuture` (stored as `pendingCommandFuture`) rather than `Futures.immediateVoidFuture()`. This prevents SimpleBasePlayer from calling `getState()` until `updateState()` or `setConnecting()` is called, which preserves the position extrapolation anchor and avoids a seek-bar jump on every button press. --- .../mediacontrol/HaRemoteMediaPlayer.kt | 31 ++++++++++++++----- 1 file changed, 23 insertions(+), 8 deletions(-) diff --git a/app/src/main/kotlin/io/homeassistant/companion/android/mediacontrol/HaRemoteMediaPlayer.kt b/app/src/main/kotlin/io/homeassistant/companion/android/mediacontrol/HaRemoteMediaPlayer.kt index 2138e83b670..56c55e88818 100644 --- a/app/src/main/kotlin/io/homeassistant/companion/android/mediacontrol/HaRemoteMediaPlayer.kt +++ b/app/src/main/kotlin/io/homeassistant/companion/android/mediacontrol/HaRemoteMediaPlayer.kt @@ -11,6 +11,7 @@ import androidx.media3.common.SimpleBasePlayer import androidx.media3.common.util.UnstableApi import com.google.common.util.concurrent.Futures import com.google.common.util.concurrent.ListenableFuture +import com.google.common.util.concurrent.SettableFuture import io.homeassistant.companion.android.common.data.mediacontrol.MediaControlState import io.homeassistant.companion.android.common.data.mediacontrol.MediaPlaybackState import io.homeassistant.companion.android.common.data.mediacontrol.MediaRepeatMode @@ -51,6 +52,7 @@ internal class HaRemoteMediaPlayer(looper: Looper, private val commandCallback: private var mediaState: MediaControlState? = null private var artworkBytes: ByteArray? = null private var isConnecting: Boolean = false + private var pendingCommandFuture: SettableFuture? = null /** * Updates the internal state from a new [MediaControlState] and triggers a state refresh. @@ -62,6 +64,8 @@ internal class HaRemoteMediaPlayer(looper: Looper, private val commandCallback: isConnecting = false mediaState = state artworkBytes = artworkPngBytes + pendingCommandFuture?.set(null) + pendingCommandFuture = null invalidateState() } @@ -75,6 +79,8 @@ internal class HaRemoteMediaPlayer(looper: Looper, private val commandCallback: @MainThread fun setConnecting() { isConnecting = true + pendingCommandFuture?.set(null) + pendingCommandFuture = null invalidateState() } @@ -198,15 +204,24 @@ internal class HaRemoteMediaPlayer(looper: Looper, private val commandCallback: } /** - * Executes [block] and returns an immediate void future on success, or an immediate - * failed future if [block] throws, so that any exception is captured in the - * [ListenableFuture] rather than propagating into [SimpleBasePlayer]. + * Executes [block] and returns a pending [SettableFuture] that will be completed by the next + * [updateState] or [setConnecting] call. Keeping the future pending prevents + * [SimpleBasePlayer] from calling [getState] until the server responds, which preserves the + * position extrapolation anchor and avoids a seek bar jump on every button press. + * + * If [block] throws, returns an immediate failed future instead so the exception is captured + * in the [ListenableFuture] rather than propagating into [SimpleBasePlayer]. */ - private inline fun handleCommand(block: () -> Unit): ListenableFuture<*> = try { - block() - Futures.immediateVoidFuture() - } catch (e: Exception) { - Futures.immediateFailedFuture(e) + private inline fun handleCommand(block: () -> Unit): ListenableFuture { + try { + block() + } catch (e: Exception) { + return Futures.immediateFailedFuture(e) + } + // Complete any in-flight future before creating a new one — orphaned futures stay in + // SimpleBasePlayer's pendingOperations set permanently, blocking all future getState calls. + pendingCommandFuture?.set(null) + return SettableFuture.create().also { pendingCommandFuture = it } } private fun buildIdleState(): State = State.Builder() From e0e43d6cd9eca761d007f3da5ff155cafcc6bc4b Mon Sep 17 00:00:00 2001 From: Fletcher Dostie Date: Thu, 23 Apr 2026 00:39:05 -0700 Subject: [PATCH 073/114] Cleanup test structure --- .../android/mediacontrol/HaMediaSession.kt | 5 +- .../mediacontrol/HaRemoteMediaPlayer.kt | 1 + .../mediacontrol/HaMediaSessionTest.kt | 69 ++++++++++++++---- .../mediacontrol/HaRemoteMediaPlayerTest.kt | 6 +- .../MediaControlRepositoryImplTest.kt | 70 ++++++++----------- 5 files changed, 90 insertions(+), 61 deletions(-) diff --git a/app/src/main/kotlin/io/homeassistant/companion/android/mediacontrol/HaMediaSession.kt b/app/src/main/kotlin/io/homeassistant/companion/android/mediacontrol/HaMediaSession.kt index 088ccaf4926..21ec3af49dc 100644 --- a/app/src/main/kotlin/io/homeassistant/companion/android/mediacontrol/HaMediaSession.kt +++ b/app/src/main/kotlin/io/homeassistant/companion/android/mediacontrol/HaMediaSession.kt @@ -275,10 +275,7 @@ class HaMediaSession @AssistedInject constructor( } } rawPictureUrl == null -> { - // The HA server temporarily removes entity_picture during track transitions - // before sending the new URL. Keep the previous artwork visible to avoid a - // blank flash; clearing the cached URL ensures the next URL triggers a fetch. - cache.copy(url = null) to cache.bytes + ArtworkCache() to null } else -> cache to cache.bytes } diff --git a/app/src/main/kotlin/io/homeassistant/companion/android/mediacontrol/HaRemoteMediaPlayer.kt b/app/src/main/kotlin/io/homeassistant/companion/android/mediacontrol/HaRemoteMediaPlayer.kt index 56c55e88818..715c9ea499b 100644 --- a/app/src/main/kotlin/io/homeassistant/companion/android/mediacontrol/HaRemoteMediaPlayer.kt +++ b/app/src/main/kotlin/io/homeassistant/companion/android/mediacontrol/HaRemoteMediaPlayer.kt @@ -228,6 +228,7 @@ internal class HaRemoteMediaPlayer(looper: Looper, private val commandCallback: .setAvailableCommands(Player.Commands.EMPTY) .setPlaybackState(STATE_IDLE) .setPlayWhenReady(false, PLAY_WHEN_READY_CHANGE_REASON_REMOTE) + .setDeviceInfo(REMOTE_DEVICE_INFO) .build() /** diff --git a/app/src/test/kotlin/io/homeassistant/companion/android/mediacontrol/HaMediaSessionTest.kt b/app/src/test/kotlin/io/homeassistant/companion/android/mediacontrol/HaMediaSessionTest.kt index 687f1da970e..71344740a8a 100644 --- a/app/src/test/kotlin/io/homeassistant/companion/android/mediacontrol/HaMediaSessionTest.kt +++ b/app/src/test/kotlin/io/homeassistant/companion/android/mediacontrol/HaMediaSessionTest.kt @@ -215,11 +215,12 @@ class HaMediaSessionTest { } /** - * Verifies that when `observeEntityState` flow completes (WebSocket not yet connected), - * the player retains its last known state rather than resetting. + * Verifies that when `observeEntityState` flow completes naturally (e.g. WebSocket disconnected), + * the session stays alive — `observe()` keeps running via `awaitCancellation()` and + * `mediaSession` remains non-null so the notification is not removed. */ @Test - fun `Given observeEntityState flow completes when startObservingState then player retains last state`() { + fun `Given observeEntityState flow completes when startObservingState then session stays alive`() { coEvery { mediaControlRepository.observeEntityState(config) } returns flowOf( createState(playbackState = MediaPlaybackState.Playing), ) @@ -230,10 +231,54 @@ class HaMediaSessionTest { } idleMainLooper() - // Flow has completed; observe() has run its finally block and released the session. - // The player's last known state is retained until Media3 releases it. - assertNull(session.mediaSession) - org.junit.Assert.assertFalse(job.isActive) + // The observation job completed naturally but observe() is still suspended in + // awaitCancellation(), so the session and its notification remain active. + assertNotNull(session.mediaSession) + org.junit.Assert.assertTrue(job.isActive) + + job.cancel() + } + + /** + * Verifies that after the observation flow ends (simulating a WebSocket disconnect), + * a successful media command restarts state observation so future state updates are received. + * + * This covers the reconnection path: user taps play → REST call succeeds → `callMediaAction` + * sees `observationJob.isActive == false` and re-launches `startObservingState()`. + */ + @Test + fun `Given observation ended when play requested and action succeeds then observation is restarted`() { + // First call: immediately-completing flow (simulates WebSocket disconnect). + // Second call: open flow that stays alive so we can verify it was subscribed to. + val reopenedFlow = MutableSharedFlow(replay = 1) + reopenedFlow.tryEmit(createState(playbackState = MediaPlaybackState.Paused)) + var callCount = 0 + coEvery { mediaControlRepository.observeEntityState(config) } answers { + callCount++ + if (callCount == 1) { + flowOf(createState(playbackState = MediaPlaybackState.Playing)) + } else { + reopenedFlow + } + } + + val session = buildSession() + val job = testScope.launch { + session.observe { } + } + idleMainLooper() + + // After the first flow completes, observation is inactive but observe() is still alive. + assertNotNull(session.mediaSession) + + // Trigger a play command; the action succeeds (integrationRepository is relaxed). + session.mediaSession?.player?.play() + shadowOf(Looper.getMainLooper()).idle() + + // observeEntityState should have been called a second time (observation restarted). + assertEquals(2, callCount) + + job.cancel() } // -- Artwork caching tests -- @@ -263,18 +308,14 @@ class HaMediaSessionTest { } /** - * Verifies that when a second state emission has a null artwork URL, old artwork is not - * retained — the player's metadata artwork is null and the second state's title is applied. - * - * This exercises the branch in `loadArtworkAndUpdatePlayer` where the URL is null: - * the cached URL is cleared and cached bytes are passed through (which is null here - * because no real image was ever loaded in this test). + * Verifies that when a second state emission arrives with a null artwork URL, the player + * state still updates — the second state's title is applied and artwork stays null. * * Uses `replay=1` for reliable delivery to the collector. The second emission is made after * the first is confirmed to be processed. */ @Test - fun `Given two consecutive states where second has null artwork URL when startObservingState then artwork is null`() { + fun `Given two consecutive states both with null artwork URL when startObservingState then title updates and artwork stays null`() { val stateFlow = MutableSharedFlow(replay = 1) stateFlow.tryEmit(createState(entityPictureUrl = null, title = "Track 1")) coEvery { mediaControlRepository.observeEntityState(config) } returns stateFlow diff --git a/app/src/test/kotlin/io/homeassistant/companion/android/mediacontrol/HaRemoteMediaPlayerTest.kt b/app/src/test/kotlin/io/homeassistant/companion/android/mediacontrol/HaRemoteMediaPlayerTest.kt index 39ce3476e7d..d04044c8b8a 100644 --- a/app/src/test/kotlin/io/homeassistant/companion/android/mediacontrol/HaRemoteMediaPlayerTest.kt +++ b/app/src/test/kotlin/io/homeassistant/companion/android/mediacontrol/HaRemoteMediaPlayerTest.kt @@ -601,17 +601,17 @@ class HaRemoteMediaPlayerTest { } @Test - fun `Given repeat mode Off in state when getState then repeatMode is REPEAT_MODE_OFF`() { + fun `Given repeat mode Off when getState then maps to REPEAT_MODE_OFF and set triggers callback`() { assertRepeatModeRoundTrip(mediaRepeatMode = MediaRepeatMode.Off, media3RepeatMode = Player.REPEAT_MODE_OFF) } @Test - fun `Given repeat mode One in state when getState then repeatMode is REPEAT_MODE_ONE`() { + fun `Given repeat mode One when getState then maps to REPEAT_MODE_ONE and set triggers callback`() { assertRepeatModeRoundTrip(mediaRepeatMode = MediaRepeatMode.One, media3RepeatMode = Player.REPEAT_MODE_ONE) } @Test - fun `Given repeat mode All in state when getState then repeatMode is REPEAT_MODE_ALL`() { + fun `Given repeat mode All when getState then maps to REPEAT_MODE_ALL and set triggers callback`() { assertRepeatModeRoundTrip(mediaRepeatMode = MediaRepeatMode.All, media3RepeatMode = Player.REPEAT_MODE_ALL) } diff --git a/common/src/test/kotlin/io/homeassistant/companion/android/common/data/mediacontrol/MediaControlRepositoryImplTest.kt b/common/src/test/kotlin/io/homeassistant/companion/android/common/data/mediacontrol/MediaControlRepositoryImplTest.kt index 8f72f960659..462a01a6561 100644 --- a/common/src/test/kotlin/io/homeassistant/companion/android/common/data/mediacontrol/MediaControlRepositoryImplTest.kt +++ b/common/src/test/kotlin/io/homeassistant/companion/android/common/data/mediacontrol/MediaControlRepositoryImplTest.kt @@ -317,30 +317,27 @@ class MediaControlRepositoryImplTest { } } - @Test - fun `Given entity with friendly_name then entityFriendlyName is set`() = runTest { - val entityState = entityWithVolumeAttributes( - mapOf("friendly_name" to "Living Room TV"), - ) + } + + @Nested + inner class FeatureSupportMappingTest { + + private fun entityWith(attributes: Map) = CompressedEntityState( + state = JsonPrimitive("playing"), + attributes = attributes, + lastChanged = 1000.0, + lastUpdated = 1000.0, + ) + + private fun emitWith(attributes: Map) { coEvery { webSocketRepository.getCompressedStateAndChanges(any()) - } returns flowOf(CompressedStateChangedEvent(added = mapOf("media_player.test" to entityState))) - - repository.observeEntityState(testConfig).test { - val state = awaitItem()!! - assertEquals("Living Room TV", state.entityFriendlyName) - awaitComplete() - } + } returns flowOf(CompressedStateChangedEvent(added = mapOf("media_player.test" to entityWith(attributes)))) } @Test fun `Given entity with STOP support then supportsStop is true`() = runTest { - val entityState = entityWithVolumeAttributes( - mapOf("supported_features" to EntityExt.MEDIA_PLAYER_SUPPORT_STOP), - ) - coEvery { - webSocketRepository.getCompressedStateAndChanges(any()) - } returns flowOf(CompressedStateChangedEvent(added = mapOf("media_player.test" to entityState))) + emitWith(mapOf("supported_features" to EntityExt.MEDIA_PLAYER_SUPPORT_STOP)) repository.observeEntityState(testConfig).test { assertTrue(awaitItem()!!.supportsStop) @@ -350,12 +347,7 @@ class MediaControlRepositoryImplTest { @Test fun `Given entity with VOLUME_MUTE support then supportsMute is true`() = runTest { - val entityState = entityWithVolumeAttributes( - mapOf("supported_features" to EntityExt.MEDIA_PLAYER_SUPPORT_VOLUME_MUTE), - ) - coEvery { - webSocketRepository.getCompressedStateAndChanges(any()) - } returns flowOf(CompressedStateChangedEvent(added = mapOf("media_player.test" to entityState))) + emitWith(mapOf("supported_features" to EntityExt.MEDIA_PLAYER_SUPPORT_VOLUME_MUTE)) repository.observeEntityState(testConfig).test { assertTrue(awaitItem()!!.supportsMute) @@ -365,15 +357,12 @@ class MediaControlRepositoryImplTest { @Test fun `Given entity with SHUFFLE_SET support and shuffle true then supportsShuffleSet and shuffle are true`() = runTest { - val entityState = entityWithVolumeAttributes( + emitWith( mapOf( "supported_features" to EntityExt.MEDIA_PLAYER_SUPPORT_SHUFFLE_SET, "shuffle" to true, ), ) - coEvery { - webSocketRepository.getCompressedStateAndChanges(any()) - } returns flowOf(CompressedStateChangedEvent(added = mapOf("media_player.test" to entityState))) repository.observeEntityState(testConfig).test { val state = awaitItem()!! @@ -385,15 +374,12 @@ class MediaControlRepositoryImplTest { @Test fun `Given entity with REPEAT_SET support and repeat all then supportsRepeatSet is true and repeatMode is All`() = runTest { - val entityState = entityWithVolumeAttributes( + emitWith( mapOf( "supported_features" to EntityExt.MEDIA_PLAYER_SUPPORT_REPEAT_SET, "repeat" to "all", ), ) - coEvery { - webSocketRepository.getCompressedStateAndChanges(any()) - } returns flowOf(CompressedStateChangedEvent(added = mapOf("media_player.test" to entityState))) repository.observeEntityState(testConfig).test { val state = awaitItem()!! @@ -405,10 +391,7 @@ class MediaControlRepositoryImplTest { @Test fun `Given entity with repeat one then repeatMode is One`() = runTest { - val entityState = entityWithVolumeAttributes(mapOf("repeat" to "one")) - coEvery { - webSocketRepository.getCompressedStateAndChanges(any()) - } returns flowOf(CompressedStateChangedEvent(added = mapOf("media_player.test" to entityState))) + emitWith(mapOf("repeat" to "one")) repository.observeEntityState(testConfig).test { assertEquals(MediaRepeatMode.One, awaitItem()!!.repeatMode) @@ -418,10 +401,7 @@ class MediaControlRepositoryImplTest { @Test fun `Given entity with no repeat attribute then repeatMode is Off`() = runTest { - val entityState = entityWithVolumeAttributes(emptyMap()) - coEvery { - webSocketRepository.getCompressedStateAndChanges(any()) - } returns flowOf(CompressedStateChangedEvent(added = mapOf("media_player.test" to entityState))) + emitWith(emptyMap()) repository.observeEntityState(testConfig).test { assertEquals(MediaRepeatMode.Off, awaitItem()!!.repeatMode) @@ -506,6 +486,16 @@ class MediaControlRepositoryImplTest { } } + @Test + fun `Given entity with friendly_name then entityFriendlyName is set`() = runTest { + emitEntity(mapOf("friendly_name" to "Living Room TV")) + + repository.observeEntityState(testConfig).test { + assertEquals("Living Room TV", awaitItem()?.entityFriendlyName) + awaitComplete() + } + } + @Test fun `Given entity without new metadata attributes then all new fields are null`() = runTest { emitEntity(mapOf("media_title" to "Song")) From adee5e9cb93364f4495b87adcfadb08ba5d4ff5f Mon Sep 17 00:00:00 2001 From: Fletcher Dostie Date: Mon, 4 May 2026 18:48:18 -0700 Subject: [PATCH 074/114] Remove unnecessary SDK_INT version check --- .../mediacontrol/HaMediaSessionService.kt | 16 +++++++--------- 1 file changed, 7 insertions(+), 9 deletions(-) diff --git a/app/src/main/kotlin/io/homeassistant/companion/android/mediacontrol/HaMediaSessionService.kt b/app/src/main/kotlin/io/homeassistant/companion/android/mediacontrol/HaMediaSessionService.kt index edef5714918..3298f4becf3 100644 --- a/app/src/main/kotlin/io/homeassistant/companion/android/mediacontrol/HaMediaSessionService.kt +++ b/app/src/main/kotlin/io/homeassistant/companion/android/mediacontrol/HaMediaSessionService.kt @@ -282,16 +282,14 @@ class HaMediaSessionService @VisibleForTesting constructor(private val serviceSc } private fun createNotificationChannel() { - if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) { - val channel = NotificationChannel( - NOTIFICATION_CHANNEL_ID, - getString(commonR.string.media_controls), - NotificationManager.IMPORTANCE_LOW, - ).apply { - setShowBadge(false) - } - notificationManager.createNotificationChannel(channel) + val channel = NotificationChannel( + NOTIFICATION_CHANNEL_ID, + getString(commonR.string.media_controls), + NotificationManager.IMPORTANCE_LOW, + ).apply { + setShowBadge(false) } + notificationManager.createNotificationChannel(channel) } companion object { From 304ed6c8d8c7fe9d41f23d2e4282e245ce78baf9 Mon Sep 17 00:00:00 2001 From: Fletcher Dostie Date: Tue, 5 May 2026 05:42:26 -0700 Subject: [PATCH 075/114] Move media control service start to LaunchActivity Replaces the MediaControlStarterViewModel + repeatOnLifecycle pattern in FrontendNavigation with a direct HaMediaSessionService.start() call in LaunchActivity.onResume(), consistent with how SensorWorker and WebsocketManager are already started there. --- .../frontend/navigation/FrontendNavigation.kt | 14 ---------- .../android/launch/LaunchActivity.kt | 2 ++ .../MediaControlStarterViewModel.kt | 28 ------------------- 3 files changed, 2 insertions(+), 42 deletions(-) delete mode 100644 app/src/main/kotlin/io/homeassistant/companion/android/mediacontrol/MediaControlStarterViewModel.kt diff --git a/app/src/main/kotlin/io/homeassistant/companion/android/frontend/navigation/FrontendNavigation.kt b/app/src/main/kotlin/io/homeassistant/companion/android/frontend/navigation/FrontendNavigation.kt index e520026d7bb..119361927f2 100644 --- a/app/src/main/kotlin/io/homeassistant/companion/android/frontend/navigation/FrontendNavigation.kt +++ b/app/src/main/kotlin/io/homeassistant/companion/android/frontend/navigation/FrontendNavigation.kt @@ -5,12 +5,8 @@ import androidx.activity.compose.rememberLauncherForActivityResult import androidx.annotation.VisibleForTesting import androidx.compose.runtime.Composable import androidx.compose.runtime.LaunchedEffect -import androidx.compose.ui.platform.LocalContext import androidx.compose.ui.platform.LocalResources import androidx.hilt.lifecycle.viewmodel.compose.hiltViewModel -import androidx.lifecycle.Lifecycle -import androidx.lifecycle.compose.LocalLifecycleOwner -import androidx.lifecycle.repeatOnLifecycle import androidx.navigation.NavController import androidx.navigation.NavGraphBuilder import androidx.navigation.NavOptions @@ -23,7 +19,6 @@ import io.homeassistant.companion.android.common.data.servers.ServerManager.Comp import io.homeassistant.companion.android.frontend.FrontendScreen import io.homeassistant.companion.android.frontend.FrontendViewModel import io.homeassistant.companion.android.launch.HAStartDestinationRoute -import io.homeassistant.companion.android.mediacontrol.MediaControlStarterViewModel import io.homeassistant.companion.android.nfc.WriteNfcTag import io.homeassistant.companion.android.settings.SettingsActivity import io.homeassistant.companion.android.util.getActivity @@ -80,15 +75,6 @@ internal fun NavGraphBuilder.frontendScreen( if (WIPFeature.USE_FRONTEND_V2) { composable { val viewModel: FrontendViewModel = hiltViewModel() - val mediaControlStarter: MediaControlStarterViewModel = hiltViewModel() - val context = LocalContext.current - - val lifecycle = LocalLifecycleOwner.current.lifecycle - LaunchedEffect(lifecycle) { - lifecycle.repeatOnLifecycle(Lifecycle.State.RESUMED) { - mediaControlStarter.startIfConfigured(context) - } - } val nfcWriteLauncher = rememberLauncherForActivityResult(WriteNfcTag()) { messageId -> viewModel.onNfcWriteCompleted(messageId) diff --git a/app/src/main/kotlin/io/homeassistant/companion/android/launch/LaunchActivity.kt b/app/src/main/kotlin/io/homeassistant/companion/android/launch/LaunchActivity.kt index 2bb7b12658c..1ebc4339b12 100644 --- a/app/src/main/kotlin/io/homeassistant/companion/android/launch/LaunchActivity.kt +++ b/app/src/main/kotlin/io/homeassistant/companion/android/launch/LaunchActivity.kt @@ -39,6 +39,7 @@ import io.homeassistant.companion.android.util.PlayServicesAvailability import io.homeassistant.companion.android.util.compose.HAApp import io.homeassistant.companion.android.util.compose.navigateToUri import io.homeassistant.companion.android.util.enableEdgeToEdgeCompat +import io.homeassistant.companion.android.mediacontrol.HaMediaSessionService import io.homeassistant.companion.android.websocket.WebsocketManager import javax.inject.Inject import kotlinx.coroutines.launch @@ -166,6 +167,7 @@ class LaunchActivity : AppCompatActivity() { SensorWorker.start(this) lifecycleScope.launch { WebsocketManager.start(this@LaunchActivity) + HaMediaSessionService.start(this@LaunchActivity) checkLocationDisabled() changeLog.showChangeLog(this@LaunchActivity, forceShow = false) } diff --git a/app/src/main/kotlin/io/homeassistant/companion/android/mediacontrol/MediaControlStarterViewModel.kt b/app/src/main/kotlin/io/homeassistant/companion/android/mediacontrol/MediaControlStarterViewModel.kt deleted file mode 100644 index 7f0927cb4ea..00000000000 --- a/app/src/main/kotlin/io/homeassistant/companion/android/mediacontrol/MediaControlStarterViewModel.kt +++ /dev/null @@ -1,28 +0,0 @@ -package io.homeassistant.companion.android.mediacontrol - -import android.content.Context -import androidx.lifecycle.ViewModel -import dagger.hilt.android.lifecycle.HiltViewModel -import javax.inject.Inject - -/** - * Thin ViewModel whose sole purpose is to call [HaMediaSessionService.start] from a composable - * while keeping the call site free of direct service references. - * - * The [Context] is supplied by the call site (Activity/composable) rather than held here, keeping - * this ViewModel free of Android context references. - */ -@HiltViewModel -internal class MediaControlStarterViewModel @Inject constructor() : ViewModel() { - - /** - * Starts [HaMediaSessionService]. If no entities are configured the service will stop itself - * immediately; otherwise it begins observing and reconciling sessions. - * - * @param context A foreground context (e.g. from [androidx.compose.ui.platform.LocalContext]) - * required by Android 15+ restrictions on starting mediaPlayback foreground services. - */ - fun startIfConfigured(context: Context) { - HaMediaSessionService.start(context) - } -} From 30073b4808673a011a2a68f462d52c236e341c16 Mon Sep 17 00:00:00 2001 From: Fletcher Dostie Date: Tue, 5 May 2026 05:44:36 -0700 Subject: [PATCH 076/114] Use @ApplicationContext in HaMediaSession constructor MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Context is only needed for Coil image loading, MediaSession construction, and PendingIntent creation — all of which work with application context. Hilt now injects it automatically, removing context from the @AssistedFactory interface so callers only need to supply the per-entity config. --- .../companion/android/mediacontrol/HaMediaSession.kt | 9 +++++---- .../android/mediacontrol/HaMediaSessionService.kt | 1 - .../android/mediacontrol/HaMediaSessionServiceTest.kt | 8 ++++---- 3 files changed, 9 insertions(+), 9 deletions(-) diff --git a/app/src/main/kotlin/io/homeassistant/companion/android/mediacontrol/HaMediaSession.kt b/app/src/main/kotlin/io/homeassistant/companion/android/mediacontrol/HaMediaSession.kt index 21ec3af49dc..b6f7d16bf7e 100644 --- a/app/src/main/kotlin/io/homeassistant/companion/android/mediacontrol/HaMediaSession.kt +++ b/app/src/main/kotlin/io/homeassistant/companion/android/mediacontrol/HaMediaSession.kt @@ -15,6 +15,7 @@ import coil3.toBitmap import dagger.assisted.Assisted import dagger.assisted.AssistedFactory import dagger.assisted.AssistedInject +import dagger.hilt.android.qualifiers.ApplicationContext import io.homeassistant.companion.android.common.data.integration.IntegrationDomains.MEDIA_PLAYER_DOMAIN import io.homeassistant.companion.android.common.data.mediacontrol.MediaControlEntityConfig import io.homeassistant.companion.android.common.data.mediacontrol.MediaControlRepository @@ -45,14 +46,14 @@ import timber.log.Timber * Call [observe] to start the session. The session and its Media3 resources are created when * [observe] is called and released automatically when the calling coroutine is cancelled. * - * @param context Used for Coil image loading and [MediaSession] construction. + * @param context Application context used for Coil image loading and [MediaSession] construction. * @param config Identifies the media_player entity this session represents. * @param mediaControlRepository Provides the per-entity state flow. * @param serverManager Used to resolve artwork base URLs and call HA integration actions. */ @OptIn(UnstableApi::class) class HaMediaSession @AssistedInject constructor( - @Assisted private val context: Context, + @ApplicationContext private val context: Context, @Assisted private val config: MediaControlEntityConfig, private val mediaControlRepository: MediaControlRepository, private val serverManager: ServerManager, @@ -366,9 +367,9 @@ class HaMediaSession @AssistedInject constructor( const val ACTION_REPEAT_SET = "repeat_set" } - /** Creates [HaMediaSession] instances with runtime-provided [context] and [config]. */ + /** Creates [HaMediaSession] instances with the runtime-provided [config]. */ @AssistedFactory interface Factory { - fun create(context: Context, config: MediaControlEntityConfig): HaMediaSession + fun create(config: MediaControlEntityConfig): HaMediaSession } } diff --git a/app/src/main/kotlin/io/homeassistant/companion/android/mediacontrol/HaMediaSessionService.kt b/app/src/main/kotlin/io/homeassistant/companion/android/mediacontrol/HaMediaSessionService.kt index 3298f4becf3..65eb5bb2f35 100644 --- a/app/src/main/kotlin/io/homeassistant/companion/android/mediacontrol/HaMediaSessionService.kt +++ b/app/src/main/kotlin/io/homeassistant/companion/android/mediacontrol/HaMediaSessionService.kt @@ -197,7 +197,6 @@ class HaMediaSessionService @VisibleForTesting constructor(private val serviceSc val toAdd = (desiredKeys - currentKeys).map { key -> val entityConfig = configuredEntities.first { it.sessionKey() == key } val session = haMediaSessionFactory.create( - context = this@HaMediaSessionService, config = entityConfig, ) key to session diff --git a/app/src/test/kotlin/io/homeassistant/companion/android/mediacontrol/HaMediaSessionServiceTest.kt b/app/src/test/kotlin/io/homeassistant/companion/android/mediacontrol/HaMediaSessionServiceTest.kt index be5e2c4e85b..c5f025736de 100644 --- a/app/src/test/kotlin/io/homeassistant/companion/android/mediacontrol/HaMediaSessionServiceTest.kt +++ b/app/src/test/kotlin/io/homeassistant/companion/android/mediacontrol/HaMediaSessionServiceTest.kt @@ -1,7 +1,7 @@ package io.homeassistant.companion.android.mediacontrol -import android.content.Context import android.os.Looper +import androidx.test.core.app.ApplicationProvider import dagger.hilt.android.testing.HiltTestApplication import io.homeassistant.companion.android.common.data.mediacontrol.MediaControlEntityConfig import io.homeassistant.companion.android.common.data.mediacontrol.MediaControlRepository @@ -94,10 +94,10 @@ class HaMediaSessionServiceTest { // Each session is created without a scope — HaMediaSession.observe() derives its scope // from the coroutine that calls it (observationScope with UnconfinedTestDispatcher). - every { haMediaSessionFactory.create(any(), any()) } answers { + every { haMediaSessionFactory.create(any()) } answers { HaMediaSession( - context = firstArg(), - config = secondArg(), + context = ApplicationProvider.getApplicationContext(), + config = firstArg(), mediaControlRepository = mediaControlRepository, serverManager = serverManager, ) From 275b4ec813dba7498fd479b242eab53de49b5a5b Mon Sep 17 00:00:00 2001 From: Fletcher Dostie Date: Tue, 5 May 2026 05:51:09 -0700 Subject: [PATCH 077/114] Encapsulate MediaSession inside HaMediaSession, expose id and notification builder - Make mediaSession @VisibleForTesting internal (private set) instead of public - Add val id derived from config (matches the MediaSession ID assigned internally) - Add val isPlaying and val hasMediaContent for service-level playback checks - Add addToService/removeFromService to encapsulate MediaSessionService registration - Add buildNotification() so the service no longer needs to reach into the raw MediaSession - Change observe() callback to receive HaMediaSession instead of MediaSession - Update HaMediaSessionService to use all new APIs; remove its private buildNotification() - Fix pre-existing ktlint import order violation in LaunchActivity.kt --- .../android/launch/LaunchActivity.kt | 2 +- .../android/mediacontrol/HaMediaSession.kt | 84 ++++++++++++++++-- .../mediacontrol/HaMediaSessionService.kt | 86 +++++++------------ .../mediacontrol/HaMediaSessionTest.kt | 7 +- 4 files changed, 112 insertions(+), 67 deletions(-) diff --git a/app/src/main/kotlin/io/homeassistant/companion/android/launch/LaunchActivity.kt b/app/src/main/kotlin/io/homeassistant/companion/android/launch/LaunchActivity.kt index 1ebc4339b12..ac3103735f9 100644 --- a/app/src/main/kotlin/io/homeassistant/companion/android/launch/LaunchActivity.kt +++ b/app/src/main/kotlin/io/homeassistant/companion/android/launch/LaunchActivity.kt @@ -30,6 +30,7 @@ import dagger.hilt.android.lifecycle.withCreationCallback import io.homeassistant.companion.android.WIPFeature import io.homeassistant.companion.android.common.R as commonR import io.homeassistant.companion.android.common.compose.theme.HATheme +import io.homeassistant.companion.android.mediacontrol.HaMediaSessionService import io.homeassistant.companion.android.sensors.SensorReceiver import io.homeassistant.companion.android.sensors.SensorWorker import io.homeassistant.companion.android.util.ChangeLog @@ -39,7 +40,6 @@ import io.homeassistant.companion.android.util.PlayServicesAvailability import io.homeassistant.companion.android.util.compose.HAApp import io.homeassistant.companion.android.util.compose.navigateToUri import io.homeassistant.companion.android.util.enableEdgeToEdgeCompat -import io.homeassistant.companion.android.mediacontrol.HaMediaSessionService import io.homeassistant.companion.android.websocket.WebsocketManager import javax.inject.Inject import kotlinx.coroutines.launch diff --git a/app/src/main/kotlin/io/homeassistant/companion/android/mediacontrol/HaMediaSession.kt b/app/src/main/kotlin/io/homeassistant/companion/android/mediacontrol/HaMediaSession.kt index b6f7d16bf7e..a20b5fba152 100644 --- a/app/src/main/kotlin/io/homeassistant/companion/android/mediacontrol/HaMediaSession.kt +++ b/app/src/main/kotlin/io/homeassistant/companion/android/mediacontrol/HaMediaSession.kt @@ -1,13 +1,19 @@ package io.homeassistant.companion.android.mediacontrol +import android.app.Notification import android.app.PendingIntent import android.content.Context import android.content.Intent import android.graphics.Bitmap.CompressFormat +import android.graphics.BitmapFactory import android.os.Looper import androidx.annotation.OptIn +import androidx.annotation.VisibleForTesting +import androidx.core.app.NotificationCompat import androidx.media3.common.util.UnstableApi import androidx.media3.session.MediaSession +import androidx.media3.session.MediaSessionService +import androidx.media3.session.MediaStyleNotificationHelper import coil3.imageLoader import coil3.request.ImageRequest import coil3.request.allowHardware @@ -16,6 +22,7 @@ import dagger.assisted.Assisted import dagger.assisted.AssistedFactory import dagger.assisted.AssistedInject import dagger.hilt.android.qualifiers.ApplicationContext +import io.homeassistant.companion.android.common.R as commonR import io.homeassistant.companion.android.common.data.integration.IntegrationDomains.MEDIA_PLAYER_DOMAIN import io.homeassistant.companion.android.common.data.mediacontrol.MediaControlEntityConfig import io.homeassistant.companion.android.common.data.mediacontrol.MediaControlRepository @@ -58,14 +65,34 @@ class HaMediaSession @AssistedInject constructor( private val mediaControlRepository: MediaControlRepository, private val serverManager: ServerManager, ) { + /** + * Stable identifier for this session, derived from [config]. Matches the [MediaSession.id] + * assigned in [buildMediaSession]. + */ + val id: String get() = "${config.serverId}_${config.entityId}" + /** * The active [MediaSession] while [observe] is running, null otherwise. - * The service uses this to call [androidx.media3.session.MediaSessionService.removeSession] - * and to check playback state in [androidx.media3.session.MediaSessionService.onTaskRemoved]. + * Internal so that unit tests can access the player to trigger commands and assert state. */ - var mediaSession: MediaSession? = null + @VisibleForTesting + internal var mediaSession: MediaSession? = null private set + /** + * Whether the session is currently playing media. Returns false when [observe] is not running + * or the player has no media content loaded. + */ + val isPlaying: Boolean + get() = mediaSession?.player?.let { it.playWhenReady && it.mediaItemCount > 0 } == true + + /** + * Whether the session has media content loaded (i.e. the player's media item count is > 0). + * Returns false when [observe] is not running. + */ + val hasMediaContent: Boolean + get() = mediaSession?.player?.mediaItemCount?.let { it > 0 } == true + /** * The coroutine scope active during [observe], used to fire-and-forget media action calls. * Null when no observation is running. @@ -142,23 +169,64 @@ class HaMediaSession @AssistedInject constructor( } } + /** + * Registers this session with [service] so that Media3's internal notification manager + * can monitor player state and call [MediaSessionService.onUpdateNotification]. Has no effect + * if [observe] is not currently running. + */ + fun addToService(service: MediaSessionService) { + mediaSession?.let { service.addSession(it) } + } + + /** + * Removes this session from [service]. Has no effect if [observe] is not currently running. + */ + fun removeFromService(service: MediaSessionService) { + mediaSession?.let { service.removeSession(it) } + } + + /** + * Builds a [MediaStyleNotificationHelper.MediaStyle] notification for this session using the + * player's current metadata (title, artist, artwork). Returns null when [observe] is not + * running or the session has no media content. + * + * @param channelId The notification channel ID to assign to the notification. + */ + @OptIn(UnstableApi::class) + fun buildNotification(channelId: String): Notification? { + val session = mediaSession ?: return null + val metadata = session.player.mediaMetadata + val artworkBitmap = metadata.artworkData?.let { BitmapFactory.decodeByteArray(it, 0, it.size) } + return NotificationCompat.Builder(context, channelId) + .setStyle(MediaStyleNotificationHelper.MediaStyle(session)) + .setSmallIcon(commonR.drawable.ic_stat_ic_notification) + .setVisibility(NotificationCompat.VISIBILITY_PUBLIC) + .setCategory(NotificationCompat.CATEGORY_TRANSPORT) + .setContentTitle(metadata.title ?: session.id) + .setContentText(metadata.artist) + .setLargeIcon(artworkBitmap) + .setOngoing(session.player.isPlaying) + .setContentIntent(session.sessionActivity) + .build() + } + /** * Creates the [MediaSession] and player, starts observing entity state, and suspends until - * the calling coroutine is cancelled. Calls [onSessionReady] with the new session immediately - * after creation so the caller can register it with - * [androidx.media3.session.MediaSessionService.addSession]. + * the calling coroutine is cancelled. Calls [onSessionReady] with this [HaMediaSession] + * immediately after the [MediaSession] is created so the caller can register it with + * [addToService]. * * All Media3 resources are released in a `finally` block, so they are always cleaned up * regardless of how the coroutine ends (cancellation or normal flow completion). */ - suspend fun observe(onSessionReady: suspend (MediaSession) -> Unit) = coroutineScope { + suspend fun observe(onSessionReady: suspend (HaMediaSession) -> Unit) = coroutineScope { Timber.d("observe: starting for ${config.entityId}") actionScope = this val player = HaRemoteMediaPlayer(Looper.getMainLooper(), commandCallback) val session = buildMediaSession(player) mediaSession = session try { - onSessionReady(session) + onSessionReady(this@HaMediaSession) startObservingState() Timber.d( "observe: startObservingState returned normally for ${config.entityId} (flow completed or WebSocket returned null)", diff --git a/app/src/main/kotlin/io/homeassistant/companion/android/mediacontrol/HaMediaSessionService.kt b/app/src/main/kotlin/io/homeassistant/companion/android/mediacontrol/HaMediaSessionService.kt index 65eb5bb2f35..c2ff3985721 100644 --- a/app/src/main/kotlin/io/homeassistant/companion/android/mediacontrol/HaMediaSessionService.kt +++ b/app/src/main/kotlin/io/homeassistant/companion/android/mediacontrol/HaMediaSessionService.kt @@ -1,22 +1,17 @@ package io.homeassistant.companion.android.mediacontrol import android.annotation.SuppressLint -import android.app.Notification import android.app.NotificationChannel import android.app.NotificationManager import android.content.Context import android.content.Intent -import android.graphics.BitmapFactory -import android.os.Build import androidx.annotation.OptIn import androidx.annotation.VisibleForTesting -import androidx.core.app.NotificationCompat import androidx.core.app.NotificationManagerCompat import androidx.core.app.ServiceCompat import androidx.media3.common.util.UnstableApi import androidx.media3.session.MediaSession import androidx.media3.session.MediaSessionService -import androidx.media3.session.MediaStyleNotificationHelper import dagger.hilt.android.AndroidEntryPoint import io.homeassistant.companion.android.common.R as commonR import io.homeassistant.companion.android.common.data.mediacontrol.MediaControlEntityConfig @@ -91,9 +86,7 @@ class HaMediaSessionService @VisibleForTesting constructor(private val serviceSc } override fun onTaskRemoved(rootIntent: Intent?) { - val anyPlaying = activeSessions.values.any { (session, _) -> - session.mediaSession?.player?.let { it.playWhenReady && it.mediaItemCount > 0 } == true - } + val anyPlaying = activeSessions.values.any { (session, _) -> session.isPlaying } // Keep the service alive while playback is active so the media notification remains // visible and controllable from the notification shade after the app is dismissed. // If nothing is playing there is no reason to keep the service alive. @@ -121,9 +114,11 @@ class HaMediaSessionService @VisibleForTesting constructor(private val serviceSc // A session not in activeSessions is being torn down. removeSession() and player.release() // both trigger onUpdateNotification, so without this guard we would re-post a notification // we just cancelled, leaving a zombie media control card after removal. - val isActive = activeSessions.values.any { (haSession, _) -> haSession.mediaSession?.id == session.id } + val activeHaSession = activeSessions.values + .map { (haSession, _) -> haSession } + .firstOrNull { it.id == session.id } - if (!isActive || session.player.mediaItemCount == 0) { + if (activeHaSession == null || session.player.mediaItemCount == 0) { // Entity is off, no state has arrived yet, or the session is being torn down. notificationManager.cancel(notificationId) if (foregroundNotificationId == notificationId) { @@ -132,7 +127,7 @@ class HaMediaSessionService @VisibleForTesting constructor(private val serviceSc return } - val notification = buildNotification(session) + val notification = activeHaSession.buildNotification(channelId = NOTIFICATION_CHANNEL_ID) ?: return if (foregroundNotificationId == null && startInForegroundRequired) { // Service is not yet in the foreground and playback requires it — start foreground // with this session's notification. All subsequent sessions (and updates to this one) @@ -159,11 +154,9 @@ class HaMediaSessionService @VisibleForTesting constructor(private val serviceSc // cancels rather than re-posts their notifications during teardown. val sessionsToClean = activeSessions.values.toList() activeSessions.clear() - sessionsToClean.forEach { (session, job) -> - session.mediaSession?.let { ms -> - notificationManager.cancel(ms.id.hashCode()) - removeSession(ms) - } + sessionsToClean.forEach { (haSession, job) -> + notificationManager.cancel(haSession.id.hashCode()) + haSession.removeFromService(this) job.cancel() } serviceScope.cancel() @@ -208,21 +201,19 @@ class HaMediaSessionService @VisibleForTesting constructor(private val serviceSc withContext(Dispatchers.Main) { toRemove.forEach { (key, pair) -> val (haSession, job) = pair - haSession.mediaSession?.let { ms -> - val notificationId = ms.id.hashCode() - notificationManager.cancel(notificationId) - if (foregroundNotificationId == notificationId) { - promoteForegroundOrStop(excludeId = notificationId) - } - removeSession(ms) + val notificationId = haSession.id.hashCode() + notificationManager.cancel(notificationId) + if (foregroundNotificationId == notificationId) { + promoteForegroundOrStop(excludeId = notificationId) } + haSession.removeFromService(this@HaMediaSessionService) job.cancelAndJoin() Timber.d("Removed media session for $key") } toAdd.forEach { (key, session) -> val job = serviceScope.launch { - session.observe { mediaSession -> addSession(mediaSession) } + session.observe { haSession -> haSession.addToService(this@HaMediaSessionService) } } activeSessions[key] = session to job Timber.d("Added media session for $key") @@ -242,15 +233,22 @@ class HaMediaSessionService @VisibleForTesting constructor(private val serviceSc */ @OptIn(UnstableApi::class) private fun promoteForegroundOrStop(excludeId: Int) { - val nextSession = activeSessions.values - .mapNotNull { (haSession, _) -> haSession.mediaSession } - .firstOrNull { it.id.hashCode() != excludeId && it.player.mediaItemCount > 0 } - - if (nextSession != null) { - val nextId = nextSession.id.hashCode() - startForeground(nextId, buildNotification(nextSession)) - foregroundNotificationId = nextId - Timber.d("promoteForegroundOrStop: promoted session ${nextSession.id}") + val nextHaSession = activeSessions.values + .map { (haSession, _) -> haSession } + .firstOrNull { it.id.hashCode() != excludeId && it.hasMediaContent } + + if (nextHaSession != null) { + val nextId = nextHaSession.id.hashCode() + val notification = nextHaSession.buildNotification(channelId = NOTIFICATION_CHANNEL_ID) + if (notification != null) { + startForeground(nextId, notification) + foregroundNotificationId = nextId + Timber.d("promoteForegroundOrStop: promoted session ${nextHaSession.id}") + } else { + ServiceCompat.stopForeground(this, ServiceCompat.STOP_FOREGROUND_REMOVE) + foregroundNotificationId = null + Timber.d("promoteForegroundOrStop: notification was null for candidate session, stopped foreground") + } } else { ServiceCompat.stopForeground(this, ServiceCompat.STOP_FOREGROUND_REMOVE) foregroundNotificationId = null @@ -258,28 +256,6 @@ class HaMediaSessionService @VisibleForTesting constructor(private val serviceSc } } - /** - * Builds a [MediaStyleNotificationHelper.MediaStyle] notification for [session] - * using the player's current metadata (title, artist, artwork). - */ - @OptIn(UnstableApi::class) - private fun buildNotification(session: MediaSession): Notification { - val metadata = session.player.mediaMetadata - val artworkBitmap = metadata.artworkData?.let { BitmapFactory.decodeByteArray(it, 0, it.size) } - - return NotificationCompat.Builder(this, NOTIFICATION_CHANNEL_ID) - .setStyle(MediaStyleNotificationHelper.MediaStyle(session)) - .setSmallIcon(commonR.drawable.ic_stat_ic_notification) - .setVisibility(NotificationCompat.VISIBILITY_PUBLIC) - .setCategory(NotificationCompat.CATEGORY_TRANSPORT) - .setContentTitle(metadata.title ?: session.id) - .setContentText(metadata.artist) - .setLargeIcon(artworkBitmap) - .setOngoing(session.player.isPlaying) - .setContentIntent(session.sessionActivity) - .build() - } - private fun createNotificationChannel() { val channel = NotificationChannel( NOTIFICATION_CHANNEL_ID, diff --git a/app/src/test/kotlin/io/homeassistant/companion/android/mediacontrol/HaMediaSessionTest.kt b/app/src/test/kotlin/io/homeassistant/companion/android/mediacontrol/HaMediaSessionTest.kt index 71344740a8a..40fe8c0a69c 100644 --- a/app/src/test/kotlin/io/homeassistant/companion/android/mediacontrol/HaMediaSessionTest.kt +++ b/app/src/test/kotlin/io/homeassistant/companion/android/mediacontrol/HaMediaSessionTest.kt @@ -30,6 +30,7 @@ import org.junit.After import org.junit.Assert.assertEquals import org.junit.Assert.assertNotNull import org.junit.Assert.assertNull +import org.junit.Assert.assertTrue import org.junit.Before import org.junit.Test import org.junit.runner.RunWith @@ -482,13 +483,13 @@ class HaMediaSessionTest { coEvery { mediaControlRepository.observeEntityState(config) } returns stateFlow val session = buildSession() - var capturedSession: androidx.media3.session.MediaSession? = null + var onSessionReadyInvoked = false val job = testScope.launch { - session.observe { capturedSession = it } + session.observe { onSessionReadyInvoked = true } } idleMainLooper() - assertNotNull(capturedSession) + assertTrue(onSessionReadyInvoked) job.cancel() } From c4b17843db41bfa1fa8d75c468b8005f0eaa839b Mon Sep 17 00:00:00 2001 From: Fletcher Dostie Date: Tue, 5 May 2026 05:54:12 -0700 Subject: [PATCH 078/114] Refactor CommandCallback to return Job, tie ListenableFuture to coroutine completion All CommandCallback methods now return Job instead of Unit. handleCommand ties the returned ListenableFuture to the Job's completion via invokeOnCompletion, so the future resolves as soon as the HA network call finishes rather than waiting for the next WebSocket state update. The pendingCommandFuture field and its manual completion in updateState() and setConnecting() are removed. --- .../android/mediacontrol/HaMediaSession.kt | 79 +++++++------------ .../mediacontrol/HaRemoteMediaPlayer.kt | 71 ++++++++++------- 2 files changed, 70 insertions(+), 80 deletions(-) diff --git a/app/src/main/kotlin/io/homeassistant/companion/android/mediacontrol/HaMediaSession.kt b/app/src/main/kotlin/io/homeassistant/companion/android/mediacontrol/HaMediaSession.kt index a20b5fba152..19717a969a5 100644 --- a/app/src/main/kotlin/io/homeassistant/companion/android/mediacontrol/HaMediaSession.kt +++ b/app/src/main/kotlin/io/homeassistant/companion/android/mediacontrol/HaMediaSession.kt @@ -38,6 +38,7 @@ import java.net.URL import kotlinx.coroutines.CancellationException import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.Dispatchers +import kotlinx.coroutines.Job import kotlinx.coroutines.NonCancellable import kotlinx.coroutines.coroutineScope import kotlinx.coroutines.launch @@ -100,69 +101,47 @@ class HaMediaSession @AssistedInject constructor( private var actionScope: CoroutineScope? = null private val commandCallback = object : HaRemoteMediaPlayer.CommandCallback { - override fun onPlayRequested() { - callMediaAction(ACTION_MEDIA_PLAY) - } + override fun onPlayRequested() = callMediaAction(ACTION_MEDIA_PLAY) - override fun onPauseRequested() { - callMediaAction(ACTION_MEDIA_PAUSE) - } + override fun onPauseRequested() = callMediaAction(ACTION_MEDIA_PAUSE) - override fun onSeekRequested(positionMs: Long) { - callMediaAction( - action = ACTION_MEDIA_SEEK, - extraData = mapOf("seek_position" to positionMs / 1000.0), - ) - } + override fun onSeekRequested(positionMs: Long) = callMediaAction( + action = ACTION_MEDIA_SEEK, + extraData = mapOf("seek_position" to positionMs / 1000.0), + ) - override fun onNextRequested() { - callMediaAction(ACTION_MEDIA_NEXT_TRACK) - } + override fun onNextRequested() = callMediaAction(ACTION_MEDIA_NEXT_TRACK) - override fun onPreviousRequested() { - callMediaAction(ACTION_MEDIA_PREVIOUS_TRACK) - } + override fun onPreviousRequested() = callMediaAction(ACTION_MEDIA_PREVIOUS_TRACK) - override fun onSetVolumeRequested(volume: Float) { - callMediaAction( - action = ACTION_VOLUME_SET, - extraData = mapOf("volume_level" to volume), - ) - } + override fun onSetVolumeRequested(volume: Float) = callMediaAction( + action = ACTION_VOLUME_SET, + extraData = mapOf("volume_level" to volume), + ) - override fun onIncreaseVolumeRequested() { - callMediaAction(ACTION_VOLUME_UP) - } + override fun onIncreaseVolumeRequested() = callMediaAction(ACTION_VOLUME_UP) - override fun onDecreaseVolumeRequested() { - callMediaAction(ACTION_VOLUME_DOWN) - } + override fun onDecreaseVolumeRequested() = callMediaAction(ACTION_VOLUME_DOWN) - override fun onMuteRequested(muted: Boolean) { - callMediaAction( - action = ACTION_VOLUME_MUTE, - extraData = mapOf("is_volume_muted" to muted), - ) - } + override fun onMuteRequested(muted: Boolean) = callMediaAction( + action = ACTION_VOLUME_MUTE, + extraData = mapOf("is_volume_muted" to muted), + ) - override fun onStopRequested() { - callMediaAction(ACTION_MEDIA_STOP) - } + override fun onStopRequested() = callMediaAction(ACTION_MEDIA_STOP) - override fun onShuffleRequested(shuffle: Boolean) { - callMediaAction( - action = ACTION_SHUFFLE_SET, - extraData = mapOf("shuffle" to shuffle), - ) - } + override fun onShuffleRequested(shuffle: Boolean) = callMediaAction( + action = ACTION_SHUFFLE_SET, + extraData = mapOf("shuffle" to shuffle), + ) - override fun onRepeatRequested(repeatMode: MediaRepeatMode) { + override fun onRepeatRequested(repeatMode: MediaRepeatMode): Job { val haRepeatValue = when (repeatMode) { is MediaRepeatMode.Off -> "off" is MediaRepeatMode.One -> "one" is MediaRepeatMode.All -> "all" } - callMediaAction( + return callMediaAction( action = ACTION_REPEAT_SET, extraData = mapOf("repeat" to haRepeatValue), ) @@ -305,13 +284,13 @@ class HaMediaSession @AssistedInject constructor( ) } - private fun callMediaAction(action: String, extraData: Map = emptyMap()) { + private fun callMediaAction(action: String, extraData: Map = emptyMap()): Job { val scope = actionScope if (scope == null) { Timber.w("callMediaAction called when not observing, ignoring action=$action") - return + return Job().also { it.complete() } } - scope.launch { + return scope.launch { val actionData = hashMapOf("entity_id" to config.entityId) actionData.putAll(extraData) diff --git a/app/src/main/kotlin/io/homeassistant/companion/android/mediacontrol/HaRemoteMediaPlayer.kt b/app/src/main/kotlin/io/homeassistant/companion/android/mediacontrol/HaRemoteMediaPlayer.kt index e3e18b1a740..5fd3102cdaa 100644 --- a/app/src/main/kotlin/io/homeassistant/companion/android/mediacontrol/HaRemoteMediaPlayer.kt +++ b/app/src/main/kotlin/io/homeassistant/companion/android/mediacontrol/HaRemoteMediaPlayer.kt @@ -15,6 +15,8 @@ import com.google.common.util.concurrent.SettableFuture import io.homeassistant.companion.android.common.data.mediacontrol.MediaControlState import io.homeassistant.companion.android.common.data.mediacontrol.MediaPlaybackState import io.homeassistant.companion.android.common.data.mediacontrol.MediaRepeatMode +import kotlinx.coroutines.CancellationException +import kotlinx.coroutines.Job /** * A [SimpleBasePlayer] that acts as a remote control proxy for a Home Assistant media_player entity. @@ -27,32 +29,35 @@ import io.homeassistant.companion.android.common.data.mediacontrol.MediaRepeatMo internal class HaRemoteMediaPlayer(looper: Looper, private val commandCallback: CommandCallback) : SimpleBasePlayer(looper) { - /** Callback interface for translating player commands into HA service calls. */ + /** + * Callback interface for translating player commands into HA service calls. + * Each method returns the [Job] for the launched coroutine so that [handleCommand] can + * tie the [ListenableFuture] lifetime to the coroutine's completion. + */ interface CommandCallback { - fun onPlayRequested() - fun onPauseRequested() - fun onStopRequested() - fun onSeekRequested(positionMs: Long) - fun onNextRequested() - fun onPreviousRequested() + fun onPlayRequested(): Job + fun onPauseRequested(): Job + fun onStopRequested(): Job + fun onSeekRequested(positionMs: Long): Job + fun onNextRequested(): Job + fun onPreviousRequested(): Job /** * Called when the OS requests an exact volume level. * @param volume the requested volume in the range [0.0, 1.0] */ - fun onSetVolumeRequested(volume: Float) - fun onIncreaseVolumeRequested() - fun onDecreaseVolumeRequested() - fun onMuteRequested(muted: Boolean) + fun onSetVolumeRequested(volume: Float): Job + fun onIncreaseVolumeRequested(): Job + fun onDecreaseVolumeRequested(): Job + fun onMuteRequested(muted: Boolean): Job - fun onShuffleRequested(shuffle: Boolean) - fun onRepeatRequested(repeatMode: MediaRepeatMode) + fun onShuffleRequested(shuffle: Boolean): Job + fun onRepeatRequested(repeatMode: MediaRepeatMode): Job } private var mediaState: MediaControlState? = null private var artworkBytes: ByteArray? = null private var isConnecting: Boolean = false - private var pendingCommandFuture: SettableFuture? = null /** * Updates the internal state from a new [MediaControlState] and triggers a state refresh. @@ -64,8 +69,6 @@ internal class HaRemoteMediaPlayer(looper: Looper, private val commandCallback: isConnecting = false mediaState = state artworkBytes = artworkPngBytes - pendingCommandFuture?.set(null) - pendingCommandFuture = null invalidateState() } @@ -79,8 +82,6 @@ internal class HaRemoteMediaPlayer(looper: Looper, private val commandCallback: @MainThread fun setConnecting() { isConnecting = true - pendingCommandFuture?.set(null) - pendingCommandFuture = null invalidateState() } @@ -169,6 +170,8 @@ internal class HaRemoteMediaPlayer(looper: Looper, private val commandCallback: else -> { if (mediaState?.supportsSeek == true) { commandCallback.onSeekRequested(positionMs) + } else { + null } } } @@ -186,6 +189,8 @@ internal class HaRemoteMediaPlayer(looper: Looper, private val commandCallback: override fun handleSetDeviceMuted(muted: Boolean, flags: Int): ListenableFuture<*> = handleCommand { if (mediaState?.supportsMute == true) { commandCallback.onMuteRequested(muted = muted) + } else { + null } } @@ -204,24 +209,30 @@ internal class HaRemoteMediaPlayer(looper: Looper, private val commandCallback: } /** - * Executes [block] and returns a pending [SettableFuture] that will be completed by the next - * [updateState] or [setConnecting] call. Keeping the future pending prevents - * [SimpleBasePlayer] from calling [getState] until the server responds, which preserves the - * position extrapolation anchor and avoids a seek bar jump on every button press. + * Executes [block] to launch a command coroutine and returns a [ListenableFuture] tied to + * that coroutine's [Job]. The future completes when the coroutine finishes (success or + * cancellation) and fails if the coroutine throws. Keeping the future pending until the + * network call finishes prevents [SimpleBasePlayer] from calling [getState] prematurely, + * which preserves the position extrapolation anchor and avoids a seek bar jump. * - * If [block] throws, returns an immediate failed future instead so the exception is captured - * in the [ListenableFuture] rather than propagating into [SimpleBasePlayer]. + * [CancellationException] from the [Job] is treated as success (the command was sent; the + * scope was cancelled). If [block] itself throws before returning a [Job], returns an + * immediate failed future. */ - private inline fun handleCommand(block: () -> Unit): ListenableFuture { - try { + private inline fun handleCommand(block: () -> Job?): ListenableFuture { + val job = try { block() } catch (e: Exception) { return Futures.immediateFailedFuture(e) + } ?: return Futures.immediateFuture(null) + val future = SettableFuture.create() + job.invokeOnCompletion { cause -> + when (cause) { + null, is CancellationException -> future.set(null) + else -> future.setException(cause) + } } - // Complete any in-flight future before creating a new one — orphaned futures stay in - // SimpleBasePlayer's pendingOperations set permanently, blocking all future getState calls. - pendingCommandFuture?.set(null) - return SettableFuture.create().also { pendingCommandFuture = it } + return future } private fun buildIdleState(): State = State.Builder() From c222e812cd7a621840287482dd77f0b0d6e47d24 Mon Sep 17 00:00:00 2001 From: Fletcher Dostie Date: Tue, 5 May 2026 05:56:18 -0700 Subject: [PATCH 079/114] Remove actionScope field, pass scope to getCommandCallback, make callMediaAction suspend The stored actionScope field is replaced by passing the coroutineScope{} receiver directly to getCommandCallback(scope). callMediaAction is now a private suspend fun with an internal withContext(Dispatchers.IO) switch, removing the need for the actionScope null guard. --- .../android/mediacontrol/HaMediaSession.kt | 100 +++++++++--------- 1 file changed, 48 insertions(+), 52 deletions(-) diff --git a/app/src/main/kotlin/io/homeassistant/companion/android/mediacontrol/HaMediaSession.kt b/app/src/main/kotlin/io/homeassistant/companion/android/mediacontrol/HaMediaSession.kt index 19717a969a5..3b8507dc9e1 100644 --- a/app/src/main/kotlin/io/homeassistant/companion/android/mediacontrol/HaMediaSession.kt +++ b/app/src/main/kotlin/io/homeassistant/companion/android/mediacontrol/HaMediaSession.kt @@ -94,46 +94,48 @@ class HaMediaSession @AssistedInject constructor( val hasMediaContent: Boolean get() = mediaSession?.player?.mediaItemCount?.let { it > 0 } == true - /** - * The coroutine scope active during [observe], used to fire-and-forget media action calls. - * Null when no observation is running. - */ - private var actionScope: CoroutineScope? = null - - private val commandCallback = object : HaRemoteMediaPlayer.CommandCallback { - override fun onPlayRequested() = callMediaAction(ACTION_MEDIA_PLAY) + private fun getCommandCallback(scope: CoroutineScope) = object : HaRemoteMediaPlayer.CommandCallback { + override fun onPlayRequested() = scope.launch { callMediaAction(ACTION_MEDIA_PLAY) } - override fun onPauseRequested() = callMediaAction(ACTION_MEDIA_PAUSE) + override fun onPauseRequested() = scope.launch { callMediaAction(ACTION_MEDIA_PAUSE) } - override fun onSeekRequested(positionMs: Long) = callMediaAction( - action = ACTION_MEDIA_SEEK, - extraData = mapOf("seek_position" to positionMs / 1000.0), - ) + override fun onSeekRequested(positionMs: Long) = scope.launch { + callMediaAction( + action = ACTION_MEDIA_SEEK, + extraData = mapOf("seek_position" to positionMs / 1000.0), + ) + } - override fun onNextRequested() = callMediaAction(ACTION_MEDIA_NEXT_TRACK) + override fun onNextRequested() = scope.launch { callMediaAction(ACTION_MEDIA_NEXT_TRACK) } - override fun onPreviousRequested() = callMediaAction(ACTION_MEDIA_PREVIOUS_TRACK) + override fun onPreviousRequested() = scope.launch { callMediaAction(ACTION_MEDIA_PREVIOUS_TRACK) } - override fun onSetVolumeRequested(volume: Float) = callMediaAction( - action = ACTION_VOLUME_SET, - extraData = mapOf("volume_level" to volume), - ) + override fun onSetVolumeRequested(volume: Float) = scope.launch { + callMediaAction( + action = ACTION_VOLUME_SET, + extraData = mapOf("volume_level" to volume), + ) + } - override fun onIncreaseVolumeRequested() = callMediaAction(ACTION_VOLUME_UP) + override fun onIncreaseVolumeRequested() = scope.launch { callMediaAction(ACTION_VOLUME_UP) } - override fun onDecreaseVolumeRequested() = callMediaAction(ACTION_VOLUME_DOWN) + override fun onDecreaseVolumeRequested() = scope.launch { callMediaAction(ACTION_VOLUME_DOWN) } - override fun onMuteRequested(muted: Boolean) = callMediaAction( - action = ACTION_VOLUME_MUTE, - extraData = mapOf("is_volume_muted" to muted), - ) + override fun onMuteRequested(muted: Boolean) = scope.launch { + callMediaAction( + action = ACTION_VOLUME_MUTE, + extraData = mapOf("is_volume_muted" to muted), + ) + } - override fun onStopRequested() = callMediaAction(ACTION_MEDIA_STOP) + override fun onStopRequested() = scope.launch { callMediaAction(ACTION_MEDIA_STOP) } - override fun onShuffleRequested(shuffle: Boolean) = callMediaAction( - action = ACTION_SHUFFLE_SET, - extraData = mapOf("shuffle" to shuffle), - ) + override fun onShuffleRequested(shuffle: Boolean) = scope.launch { + callMediaAction( + action = ACTION_SHUFFLE_SET, + extraData = mapOf("shuffle" to shuffle), + ) + } override fun onRepeatRequested(repeatMode: MediaRepeatMode): Job { val haRepeatValue = when (repeatMode) { @@ -141,10 +143,12 @@ class HaMediaSession @AssistedInject constructor( is MediaRepeatMode.One -> "one" is MediaRepeatMode.All -> "all" } - return callMediaAction( - action = ACTION_REPEAT_SET, - extraData = mapOf("repeat" to haRepeatValue), - ) + return scope.launch { + callMediaAction( + action = ACTION_REPEAT_SET, + extraData = mapOf("repeat" to haRepeatValue), + ) + } } } @@ -200,8 +204,7 @@ class HaMediaSession @AssistedInject constructor( */ suspend fun observe(onSessionReady: suspend (HaMediaSession) -> Unit) = coroutineScope { Timber.d("observe: starting for ${config.entityId}") - actionScope = this - val player = HaRemoteMediaPlayer(Looper.getMainLooper(), commandCallback) + val player = HaRemoteMediaPlayer(Looper.getMainLooper(), getCommandCallback(this)) val session = buildMediaSession(player) mediaSession = session try { @@ -215,7 +218,6 @@ class HaMediaSession @AssistedInject constructor( throw e } finally { Timber.d("observe: finally block running for ${config.entityId}, releasing player and session") - actionScope = null mediaSession = null withContext(NonCancellable + Dispatchers.Main) { player.release() @@ -284,24 +286,18 @@ class HaMediaSession @AssistedInject constructor( ) } - private fun callMediaAction(action: String, extraData: Map = emptyMap()): Job { - val scope = actionScope - if (scope == null) { - Timber.w("callMediaAction called when not observing, ignoring action=$action") - return Job().also { it.complete() } - } - return scope.launch { - val actionData = hashMapOf("entity_id" to config.entityId) - actionData.putAll(extraData) - - try { + private suspend fun callMediaAction(action: String, extraData: Map = emptyMap()) { + val actionData = hashMapOf("entity_id" to config.entityId) + actionData.putAll(extraData) + try { + withContext(Dispatchers.IO) { serverManager.integrationRepository(config.serverId) .callAction(MEDIA_PLAYER_DOMAIN, action, actionData) - } catch (e: CancellationException) { - throw e - } catch (e: Exception) { - Timber.e(e, "Failed to call media action $action on ${config.entityId}") } + } catch (e: CancellationException) { + throw e + } catch (e: Exception) { + Timber.e(e, "Failed to call media action $action on ${config.entityId}") } } From d3794a27bf93d76c99c79082652f083b973bcda7 Mon Sep 17 00:00:00 2001 From: Fletcher Dostie Date: Tue, 5 May 2026 05:57:22 -0700 Subject: [PATCH 080/114] Add FailFast guard in HaMediaSession.observe() for double-call --- .../companion/android/mediacontrol/HaMediaSession.kt | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/app/src/main/kotlin/io/homeassistant/companion/android/mediacontrol/HaMediaSession.kt b/app/src/main/kotlin/io/homeassistant/companion/android/mediacontrol/HaMediaSession.kt index 3b8507dc9e1..7d92db6d015 100644 --- a/app/src/main/kotlin/io/homeassistant/companion/android/mediacontrol/HaMediaSession.kt +++ b/app/src/main/kotlin/io/homeassistant/companion/android/mediacontrol/HaMediaSession.kt @@ -31,6 +31,7 @@ import io.homeassistant.companion.android.common.data.mediacontrol.MediaPlayback import io.homeassistant.companion.android.common.data.mediacontrol.MediaRepeatMode import io.homeassistant.companion.android.common.data.servers.ServerManager import io.homeassistant.companion.android.common.data.servers.firstUrlOrNull +import io.homeassistant.companion.android.common.util.FailFast import io.homeassistant.companion.android.util.sensitive import io.homeassistant.companion.android.webview.WebViewActivity import java.io.ByteArrayOutputStream @@ -203,6 +204,9 @@ class HaMediaSession @AssistedInject constructor( * regardless of how the coroutine ends (cancellation or normal flow completion). */ suspend fun observe(onSessionReady: suspend (HaMediaSession) -> Unit) = coroutineScope { + FailFast.failWhen(mediaSession != null) { + "observe() called while a session is already active for ${config.entityId}" + } Timber.d("observe: starting for ${config.entityId}") val player = HaRemoteMediaPlayer(Looper.getMainLooper(), getCommandCallback(this)) val session = buildMediaSession(player) From 535cb967ceb24779ec68db7347852c23cb1e6269 Mon Sep 17 00:00:00 2001 From: Fletcher Dostie Date: Tue, 5 May 2026 05:58:11 -0700 Subject: [PATCH 081/114] Remove verbose log in observe(), make startObservingState private --- .../companion/android/mediacontrol/HaMediaSession.kt | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/app/src/main/kotlin/io/homeassistant/companion/android/mediacontrol/HaMediaSession.kt b/app/src/main/kotlin/io/homeassistant/companion/android/mediacontrol/HaMediaSession.kt index 7d92db6d015..a34cdd633fb 100644 --- a/app/src/main/kotlin/io/homeassistant/companion/android/mediacontrol/HaMediaSession.kt +++ b/app/src/main/kotlin/io/homeassistant/companion/android/mediacontrol/HaMediaSession.kt @@ -214,9 +214,6 @@ class HaMediaSession @AssistedInject constructor( try { onSessionReady(this@HaMediaSession) startObservingState() - Timber.d( - "observe: startObservingState returned normally for ${config.entityId} (flow completed or WebSocket returned null)", - ) } catch (e: CancellationException) { Timber.d("observe: cancelled for ${config.entityId}") throw e @@ -237,7 +234,7 @@ class HaMediaSession @AssistedInject constructor( * In both cases the session is not restarted here; reconnection happens when the user opens * the app, which recreates active sessions via [HaMediaSessionService]. */ - internal suspend fun startObservingState() { + private suspend fun startObservingState() { Timber.d("startObservingState: starting for ${config.entityId}") var artworkCache = ArtworkCache() mediaControlRepository.observeEntityState(config).collect { state -> From 9baa5b18dc335630fc64d59655ab6fff7285a82b Mon Sep 17 00:00:00 2001 From: Fletcher Dostie Date: Tue, 5 May 2026 05:58:55 -0700 Subject: [PATCH 082/114] Use LaunchActivity for media notification tap intent --- .../companion/android/mediacontrol/HaMediaSession.kt | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/app/src/main/kotlin/io/homeassistant/companion/android/mediacontrol/HaMediaSession.kt b/app/src/main/kotlin/io/homeassistant/companion/android/mediacontrol/HaMediaSession.kt index a34cdd633fb..f71d3451943 100644 --- a/app/src/main/kotlin/io/homeassistant/companion/android/mediacontrol/HaMediaSession.kt +++ b/app/src/main/kotlin/io/homeassistant/companion/android/mediacontrol/HaMediaSession.kt @@ -33,7 +33,7 @@ import io.homeassistant.companion.android.common.data.servers.ServerManager import io.homeassistant.companion.android.common.data.servers.firstUrlOrNull import io.homeassistant.companion.android.common.util.FailFast import io.homeassistant.companion.android.util.sensitive -import io.homeassistant.companion.android.webview.WebViewActivity +import io.homeassistant.companion.android.launch.LaunchActivity import java.io.ByteArrayOutputStream import java.net.URL import kotlinx.coroutines.CancellationException @@ -272,10 +272,12 @@ class HaMediaSession @AssistedInject constructor( * FLAG_ACTIVITY_SINGLE_TOP prevents stacking a redundant WebViewActivity if one is * already at the top; onNewIntent delivers the path to the existing instance instead. */ - val tapIntent = WebViewActivity.newInstance( + val tapIntent = LaunchActivity.newInstance( context = context, - path = "entityId:${config.entityId}", - serverId = config.serverId, + deepLink = LaunchActivity.DeepLink.NavigateTo( + path = "entityId:${config.entityId}", + serverId = config.serverId, + ), ).apply { flags = Intent.FLAG_ACTIVITY_NEW_TASK or Intent.FLAG_ACTIVITY_SINGLE_TOP } From c6c4314c4c08b10976d9b2746b166839f0057ee6 Mon Sep 17 00:00:00 2001 From: Fletcher Dostie Date: Tue, 5 May 2026 05:59:45 -0700 Subject: [PATCH 083/114] Simplify loadArtworkAndUpdatePlayer in HaMediaSession --- .../android/mediacontrol/HaMediaSession.kt | 23 +++++++------------ 1 file changed, 8 insertions(+), 15 deletions(-) diff --git a/app/src/main/kotlin/io/homeassistant/companion/android/mediacontrol/HaMediaSession.kt b/app/src/main/kotlin/io/homeassistant/companion/android/mediacontrol/HaMediaSession.kt index f71d3451943..f1387f2bb59 100644 --- a/app/src/main/kotlin/io/homeassistant/companion/android/mediacontrol/HaMediaSession.kt +++ b/app/src/main/kotlin/io/homeassistant/companion/android/mediacontrol/HaMediaSession.kt @@ -310,26 +310,19 @@ class HaMediaSession @AssistedInject constructor( * @return An updated [ArtworkCache] reflecting the outcome of the load attempt. */ private suspend fun loadArtworkAndUpdatePlayer(state: MediaControlState, cache: ArtworkCache): ArtworkCache { - val rawPictureUrl = state.entityPictureUrl - val (updatedCache, pngBytes) = when { - rawPictureUrl != null && rawPictureUrl != cache.url -> { - val resolvedUrl = resolveArtworkUrl(state) - val bytes = resolvedUrl?.let { loadBitmapAsPng(it) } - if (bytes != null) { - ArtworkCache(url = rawPictureUrl, bytes = bytes) to bytes - } else { - cache to cache.bytes - } - } - rawPictureUrl == null -> { - ArtworkCache() to null + val pictureUrl = state.entityPictureUrl + val updatedCache = when { + pictureUrl == null -> ArtworkCache() + pictureUrl == cache.url -> cache + else -> { + val bytes = resolveArtworkUrl(state)?.let { loadBitmapAsPng(it) } + if (bytes != null) ArtworkCache(url = pictureUrl, bytes = bytes) else cache } - else -> cache to cache.bytes } withContext(Dispatchers.Main) { mediaSession?.player?.let { player -> - (player as? HaRemoteMediaPlayer)?.updateState(state = state, artworkPngBytes = pngBytes) + (player as? HaRemoteMediaPlayer)?.updateState(state = state, artworkPngBytes = updatedCache.bytes) } } return updatedCache From 486a8599b1ee1410a2c48e3c26192c5d777dbded Mon Sep 17 00:00:00 2001 From: Fletcher Dostie Date: Tue, 5 May 2026 06:00:31 -0700 Subject: [PATCH 084/114] Fix log message in resolveArtworkUrl to reference server ID --- .../companion/android/mediacontrol/HaMediaSession.kt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/src/main/kotlin/io/homeassistant/companion/android/mediacontrol/HaMediaSession.kt b/app/src/main/kotlin/io/homeassistant/companion/android/mediacontrol/HaMediaSession.kt index f1387f2bb59..490520c9bca 100644 --- a/app/src/main/kotlin/io/homeassistant/companion/android/mediacontrol/HaMediaSession.kt +++ b/app/src/main/kotlin/io/homeassistant/companion/android/mediacontrol/HaMediaSession.kt @@ -339,7 +339,7 @@ class HaMediaSession @AssistedInject constructor( } catch (e: CancellationException) { throw e } catch (e: Exception) { - Timber.e(e, "Failed to resolve artwork URL for server ${state.serverId}") + Timber.e(e, "Failed to resolve artwork base URL for server ${state.serverId}") null } ?: return null From 71bb5172dd5a107315c6f7fa8b0584337a83c5f0 Mon Sep 17 00:00:00 2001 From: Fletcher Dostie Date: Tue, 5 May 2026 06:02:50 -0700 Subject: [PATCH 085/114] Split reconcileSessions into smaller helper functions Extract tearDownSession and launchSession as private helpers so reconcileSessions is a thin orchestrator responsible only for computing the diff and dispatching to the helpers. --- .../mediacontrol/HaMediaSessionService.kt | 56 +++++++++++-------- 1 file changed, 33 insertions(+), 23 deletions(-) diff --git a/app/src/main/kotlin/io/homeassistant/companion/android/mediacontrol/HaMediaSessionService.kt b/app/src/main/kotlin/io/homeassistant/companion/android/mediacontrol/HaMediaSessionService.kt index c2ff3985721..425b193452f 100644 --- a/app/src/main/kotlin/io/homeassistant/companion/android/mediacontrol/HaMediaSessionService.kt +++ b/app/src/main/kotlin/io/homeassistant/companion/android/mediacontrol/HaMediaSessionService.kt @@ -189,40 +189,50 @@ class HaMediaSessionService @VisibleForTesting constructor(private val serviceSc } val toAdd = (desiredKeys - currentKeys).map { key -> val entityConfig = configuredEntities.first { it.sessionKey() == key } - val session = haMediaSessionFactory.create( - config = entityConfig, - ) - key to session + key to haMediaSessionFactory.create(config = entityConfig) } Timber.d("reconcileSessions: toRemove=${toRemove.map { it.first }}, toAdd=${toAdd.map { it.first }}") // Execute all Android/Media3 API calls that require Main in a single dispatcher hop. withContext(Dispatchers.Main) { - toRemove.forEach { (key, pair) -> - val (haSession, job) = pair - val notificationId = haSession.id.hashCode() - notificationManager.cancel(notificationId) - if (foregroundNotificationId == notificationId) { - promoteForegroundOrStop(excludeId = notificationId) - } - haSession.removeFromService(this@HaMediaSessionService) - job.cancelAndJoin() - Timber.d("Removed media session for $key") - } - - toAdd.forEach { (key, session) -> - val job = serviceScope.launch { - session.observe { haSession -> haSession.addToService(this@HaMediaSessionService) } - } - activeSessions[key] = session to job - Timber.d("Added media session for $key") - } + toRemove.forEach { (key, pair) -> tearDownSession(key, pair) } + toAdd.forEach { (key, session) -> launchSession(key, session) } } Timber.d("reconcileSessions: done, activeSessions=${activeSessions.keys.toList()}") } + /** + * Cancels the notification for a session, unregisters it from the service, and joins the + * observation coroutine so all Media3 resources are released before returning. + * Must be called from the Main dispatcher. + */ + private suspend fun tearDownSession(key: String, pair: Pair) { + val (haSession, job) = pair + val notificationId = haSession.id.hashCode() + notificationManager.cancel(notificationId) + if (foregroundNotificationId == notificationId) { + promoteForegroundOrStop(excludeId = notificationId) + } + haSession.removeFromService(this) + job.cancelAndJoin() + Timber.d("Removed media session for $key") + } + + /** + * Launches the observation coroutine for a new session, registers it with the service, and + * stores it in [activeSessions]. + * Must be called from the Main dispatcher (required by [MediaSessionService.addSession]). + */ + private fun launchSession(key: String, session: HaMediaSession) { + val job = serviceScope.launch { + session.observe { haSession -> haSession.addToService(this@HaMediaSessionService) } + } + activeSessions[key] = session to job + Timber.d("Added media session for $key") + } + /** * Promotes a remaining active session to the foreground notification when the current * foreground session is removed or goes idle. If no active session has media content, From f5a47c44eb111ee90ae0608dba9734e7ab9b2c60 Mon Sep 17 00:00:00 2001 From: Fletcher Dostie Date: Tue, 5 May 2026 06:03:21 -0700 Subject: [PATCH 086/114] Remove unnecessary onStartCommand override in HaMediaSessionService --- .../companion/android/mediacontrol/HaMediaSessionService.kt | 5 ----- 1 file changed, 5 deletions(-) diff --git a/app/src/main/kotlin/io/homeassistant/companion/android/mediacontrol/HaMediaSessionService.kt b/app/src/main/kotlin/io/homeassistant/companion/android/mediacontrol/HaMediaSessionService.kt index 425b193452f..7c64137c8c2 100644 --- a/app/src/main/kotlin/io/homeassistant/companion/android/mediacontrol/HaMediaSessionService.kt +++ b/app/src/main/kotlin/io/homeassistant/companion/android/mediacontrol/HaMediaSessionService.kt @@ -80,11 +80,6 @@ class HaMediaSessionService @VisibleForTesting constructor(private val serviceSc // multi-session behavior where each entity has its own independent media control card. override fun onGetSession(controllerInfo: MediaSession.ControllerInfo): MediaSession? = null - override fun onStartCommand(intent: Intent?, flags: Int, startId: Int): Int { - Timber.d("HaMediaSessionService onStartCommand, ${activeSessions.size} active sessions") - return super.onStartCommand(intent, flags, startId) - } - override fun onTaskRemoved(rootIntent: Intent?) { val anyPlaying = activeSessions.values.any { (session, _) -> session.isPlaying } // Keep the service alive while playback is active so the media notification remains From 4f5be546922ee4b4769709ae5d94c064fc3c7edd Mon Sep 17 00:00:00 2001 From: Fletcher Dostie Date: Tue, 5 May 2026 06:05:10 -0700 Subject: [PATCH 087/114] Confine activeSessions map access to Main thread Move all activeSessions reads and writes inside withContext(Dispatchers.Main) in reconcileSessions, eliminating the data race with onUpdateNotification and onTaskRemoved which are always called on Main by Media3 and the OS. --- .../mediacontrol/HaMediaSessionService.kt | 38 +++++++++---------- 1 file changed, 19 insertions(+), 19 deletions(-) diff --git a/app/src/main/kotlin/io/homeassistant/companion/android/mediacontrol/HaMediaSessionService.kt b/app/src/main/kotlin/io/homeassistant/companion/android/mediacontrol/HaMediaSessionService.kt index 7c64137c8c2..97cd9497dc4 100644 --- a/app/src/main/kotlin/io/homeassistant/companion/android/mediacontrol/HaMediaSessionService.kt +++ b/app/src/main/kotlin/io/homeassistant/companion/android/mediacontrol/HaMediaSessionService.kt @@ -162,8 +162,7 @@ class HaMediaSessionService @VisibleForTesting constructor(private val serviceSc Timber.d( "reconcileSessions: received ${configuredEntities.size} entities=${configuredEntities.map { it.entityId - }}, " + - "activeSessions=${activeSessions.keys.toList()}", + }}", ) if (configuredEntities.isEmpty()) { @@ -172,30 +171,31 @@ class HaMediaSessionService @VisibleForTesting constructor(private val serviceSc return } - val desiredKeys = configuredEntities.map { it.sessionKey() }.toSet() - val currentKeys = activeSessions.keys.toSet() + // All activeSessions reads and writes are confined to the Main thread to avoid data races + // with onUpdateNotification and onTaskRemoved, which are always called on Main by the OS + // and Media3. The diff is computed here on Main as well since it operates on small sets. + withContext(Dispatchers.Main) { + val desiredKeys = configuredEntities.map { it.sessionKey() }.toSet() + val currentKeys = activeSessions.keys.toSet() - Timber.d("reconcileSessions: desiredKeys=$desiredKeys, currentKeys=$currentKeys") + Timber.d("reconcileSessions: desiredKeys=$desiredKeys, currentKeys=$currentKeys") - // Precompute the diff and prepare new sessions on Default before touching Main. - val toRemove = (currentKeys - desiredKeys).mapNotNull { key -> - val pair = activeSessions.remove(key) ?: return@mapNotNull null - key to pair - } - val toAdd = (desiredKeys - currentKeys).map { key -> - val entityConfig = configuredEntities.first { it.sessionKey() == key } - key to haMediaSessionFactory.create(config = entityConfig) - } + val toRemove = (currentKeys - desiredKeys).mapNotNull { key -> + val pair = activeSessions.remove(key) ?: return@mapNotNull null + key to pair + } + val toAdd = (desiredKeys - currentKeys).map { key -> + val entityConfig = configuredEntities.first { it.sessionKey() == key } + key to haMediaSessionFactory.create(config = entityConfig) + } - Timber.d("reconcileSessions: toRemove=${toRemove.map { it.first }}, toAdd=${toAdd.map { it.first }}") + Timber.d("reconcileSessions: toRemove=${toRemove.map { it.first }}, toAdd=${toAdd.map { it.first }}") - // Execute all Android/Media3 API calls that require Main in a single dispatcher hop. - withContext(Dispatchers.Main) { toRemove.forEach { (key, pair) -> tearDownSession(key, pair) } toAdd.forEach { (key, session) -> launchSession(key, session) } - } - Timber.d("reconcileSessions: done, activeSessions=${activeSessions.keys.toList()}") + Timber.d("reconcileSessions: done, activeSessions=${activeSessions.keys.toList()}") + } } /** From 6f6fa042fb79730ea8748a3a3e3aa0ffe6ed33b6 Mon Sep 17 00:00:00 2001 From: Fletcher Dostie Date: Tue, 5 May 2026 06:08:11 -0700 Subject: [PATCH 088/114] Pre-scale album art to notification icon size to avoid main thread downscaling Add a size(256, 256) constraint to the Coil ImageRequest in loadBitmapAsPng so the bitmap is delivered at the notification large icon size before compression. This prevents Android's Icon.scaleDownIfNecessary from running on the main thread and triggering a StrictMode CustomViolation. --- .../companion/android/mediacontrol/HaMediaSession.kt | 5 +++++ .../companion/android/mediacontrol/HaRemoteMediaPlayer.kt | 4 ---- 2 files changed, 5 insertions(+), 4 deletions(-) diff --git a/app/src/main/kotlin/io/homeassistant/companion/android/mediacontrol/HaMediaSession.kt b/app/src/main/kotlin/io/homeassistant/companion/android/mediacontrol/HaMediaSession.kt index 490520c9bca..2f2726d73c8 100644 --- a/app/src/main/kotlin/io/homeassistant/companion/android/mediacontrol/HaMediaSession.kt +++ b/app/src/main/kotlin/io/homeassistant/companion/android/mediacontrol/HaMediaSession.kt @@ -352,6 +352,7 @@ class HaMediaSession @AssistedInject constructor( val request = ImageRequest.Builder(context) .data(url) .allowHardware(false) + .size(NOTIFICATION_ICON_SIZE_PX, NOTIFICATION_ICON_SIZE_PX) .build() val result = context.imageLoader.execute(request) result.image?.toBitmap()?.let { bitmap -> @@ -392,6 +393,10 @@ class HaMediaSession @AssistedInject constructor( private data class ArtworkCache(val url: String? = null, val bytes: ByteArray? = null) private companion object { + /** Target pixel size for notification large icon artwork. Pre-scaling in Coil avoids + * main-thread downscaling by Android's Icon class (StrictMode CustomViolation). */ + const val NOTIFICATION_ICON_SIZE_PX = 256 + const val ACTION_MEDIA_PLAY = "media_play" const val ACTION_MEDIA_PAUSE = "media_pause" const val ACTION_MEDIA_STOP = "media_stop" diff --git a/app/src/main/kotlin/io/homeassistant/companion/android/mediacontrol/HaRemoteMediaPlayer.kt b/app/src/main/kotlin/io/homeassistant/companion/android/mediacontrol/HaRemoteMediaPlayer.kt index 5fd3102cdaa..2331573dfbd 100644 --- a/app/src/main/kotlin/io/homeassistant/companion/android/mediacontrol/HaRemoteMediaPlayer.kt +++ b/app/src/main/kotlin/io/homeassistant/companion/android/mediacontrol/HaRemoteMediaPlayer.kt @@ -42,10 +42,6 @@ internal class HaRemoteMediaPlayer(looper: Looper, private val commandCallback: fun onNextRequested(): Job fun onPreviousRequested(): Job - /** - * Called when the OS requests an exact volume level. - * @param volume the requested volume in the range [0.0, 1.0] - */ fun onSetVolumeRequested(volume: Float): Job fun onIncreaseVolumeRequested(): Job fun onDecreaseVolumeRequested(): Job From fddbcd1bc13974f726295364aa5d59822bcc7e20 Mon Sep 17 00:00:00 2001 From: Fletcher Dostie Date: Tue, 5 May 2026 22:51:07 -0700 Subject: [PATCH 089/114] Revert "Encapsulate MediaSession inside HaMediaSession, expose id and notification builder" This reverts commit 275b4ec813dba7498fd479b242eab53de49b5a5b. --- .../android/launch/LaunchActivity.kt | 2 +- .../android/mediacontrol/HaMediaSession.kt | 84 ++----------------- .../mediacontrol/HaMediaSessionService.kt | 78 ++++++++++------- .../mediacontrol/HaMediaSessionTest.kt | 7 +- 4 files changed, 62 insertions(+), 109 deletions(-) diff --git a/app/src/main/kotlin/io/homeassistant/companion/android/launch/LaunchActivity.kt b/app/src/main/kotlin/io/homeassistant/companion/android/launch/LaunchActivity.kt index ac3103735f9..1ebc4339b12 100644 --- a/app/src/main/kotlin/io/homeassistant/companion/android/launch/LaunchActivity.kt +++ b/app/src/main/kotlin/io/homeassistant/companion/android/launch/LaunchActivity.kt @@ -30,7 +30,6 @@ import dagger.hilt.android.lifecycle.withCreationCallback import io.homeassistant.companion.android.WIPFeature import io.homeassistant.companion.android.common.R as commonR import io.homeassistant.companion.android.common.compose.theme.HATheme -import io.homeassistant.companion.android.mediacontrol.HaMediaSessionService import io.homeassistant.companion.android.sensors.SensorReceiver import io.homeassistant.companion.android.sensors.SensorWorker import io.homeassistant.companion.android.util.ChangeLog @@ -40,6 +39,7 @@ import io.homeassistant.companion.android.util.PlayServicesAvailability import io.homeassistant.companion.android.util.compose.HAApp import io.homeassistant.companion.android.util.compose.navigateToUri import io.homeassistant.companion.android.util.enableEdgeToEdgeCompat +import io.homeassistant.companion.android.mediacontrol.HaMediaSessionService import io.homeassistant.companion.android.websocket.WebsocketManager import javax.inject.Inject import kotlinx.coroutines.launch diff --git a/app/src/main/kotlin/io/homeassistant/companion/android/mediacontrol/HaMediaSession.kt b/app/src/main/kotlin/io/homeassistant/companion/android/mediacontrol/HaMediaSession.kt index 2f2726d73c8..8694afc0d40 100644 --- a/app/src/main/kotlin/io/homeassistant/companion/android/mediacontrol/HaMediaSession.kt +++ b/app/src/main/kotlin/io/homeassistant/companion/android/mediacontrol/HaMediaSession.kt @@ -1,19 +1,13 @@ package io.homeassistant.companion.android.mediacontrol -import android.app.Notification import android.app.PendingIntent import android.content.Context import android.content.Intent import android.graphics.Bitmap.CompressFormat -import android.graphics.BitmapFactory import android.os.Looper import androidx.annotation.OptIn -import androidx.annotation.VisibleForTesting -import androidx.core.app.NotificationCompat import androidx.media3.common.util.UnstableApi import androidx.media3.session.MediaSession -import androidx.media3.session.MediaSessionService -import androidx.media3.session.MediaStyleNotificationHelper import coil3.imageLoader import coil3.request.ImageRequest import coil3.request.allowHardware @@ -22,7 +16,6 @@ import dagger.assisted.Assisted import dagger.assisted.AssistedFactory import dagger.assisted.AssistedInject import dagger.hilt.android.qualifiers.ApplicationContext -import io.homeassistant.companion.android.common.R as commonR import io.homeassistant.companion.android.common.data.integration.IntegrationDomains.MEDIA_PLAYER_DOMAIN import io.homeassistant.companion.android.common.data.mediacontrol.MediaControlEntityConfig import io.homeassistant.companion.android.common.data.mediacontrol.MediaControlRepository @@ -67,34 +60,14 @@ class HaMediaSession @AssistedInject constructor( private val mediaControlRepository: MediaControlRepository, private val serverManager: ServerManager, ) { - /** - * Stable identifier for this session, derived from [config]. Matches the [MediaSession.id] - * assigned in [buildMediaSession]. - */ - val id: String get() = "${config.serverId}_${config.entityId}" - /** * The active [MediaSession] while [observe] is running, null otherwise. - * Internal so that unit tests can access the player to trigger commands and assert state. + * The service uses this to call [androidx.media3.session.MediaSessionService.removeSession] + * and to check playback state in [androidx.media3.session.MediaSessionService.onTaskRemoved]. */ - @VisibleForTesting - internal var mediaSession: MediaSession? = null + var mediaSession: MediaSession? = null private set - /** - * Whether the session is currently playing media. Returns false when [observe] is not running - * or the player has no media content loaded. - */ - val isPlaying: Boolean - get() = mediaSession?.player?.let { it.playWhenReady && it.mediaItemCount > 0 } == true - - /** - * Whether the session has media content loaded (i.e. the player's media item count is > 0). - * Returns false when [observe] is not running. - */ - val hasMediaContent: Boolean - get() = mediaSession?.player?.mediaItemCount?.let { it > 0 } == true - private fun getCommandCallback(scope: CoroutineScope) = object : HaRemoteMediaPlayer.CommandCallback { override fun onPlayRequested() = scope.launch { callMediaAction(ACTION_MEDIA_PLAY) } @@ -153,57 +126,16 @@ class HaMediaSession @AssistedInject constructor( } } - /** - * Registers this session with [service] so that Media3's internal notification manager - * can monitor player state and call [MediaSessionService.onUpdateNotification]. Has no effect - * if [observe] is not currently running. - */ - fun addToService(service: MediaSessionService) { - mediaSession?.let { service.addSession(it) } - } - - /** - * Removes this session from [service]. Has no effect if [observe] is not currently running. - */ - fun removeFromService(service: MediaSessionService) { - mediaSession?.let { service.removeSession(it) } - } - - /** - * Builds a [MediaStyleNotificationHelper.MediaStyle] notification for this session using the - * player's current metadata (title, artist, artwork). Returns null when [observe] is not - * running or the session has no media content. - * - * @param channelId The notification channel ID to assign to the notification. - */ - @OptIn(UnstableApi::class) - fun buildNotification(channelId: String): Notification? { - val session = mediaSession ?: return null - val metadata = session.player.mediaMetadata - val artworkBitmap = metadata.artworkData?.let { BitmapFactory.decodeByteArray(it, 0, it.size) } - return NotificationCompat.Builder(context, channelId) - .setStyle(MediaStyleNotificationHelper.MediaStyle(session)) - .setSmallIcon(commonR.drawable.ic_stat_ic_notification) - .setVisibility(NotificationCompat.VISIBILITY_PUBLIC) - .setCategory(NotificationCompat.CATEGORY_TRANSPORT) - .setContentTitle(metadata.title ?: session.id) - .setContentText(metadata.artist) - .setLargeIcon(artworkBitmap) - .setOngoing(session.player.isPlaying) - .setContentIntent(session.sessionActivity) - .build() - } - /** * Creates the [MediaSession] and player, starts observing entity state, and suspends until - * the calling coroutine is cancelled. Calls [onSessionReady] with this [HaMediaSession] - * immediately after the [MediaSession] is created so the caller can register it with - * [addToService]. + * the calling coroutine is cancelled. Calls [onSessionReady] with the new session immediately + * after creation so the caller can register it with + * [androidx.media3.session.MediaSessionService.addSession]. * * All Media3 resources are released in a `finally` block, so they are always cleaned up * regardless of how the coroutine ends (cancellation or normal flow completion). */ - suspend fun observe(onSessionReady: suspend (HaMediaSession) -> Unit) = coroutineScope { + suspend fun observe(onSessionReady: suspend (MediaSession) -> Unit) = coroutineScope { FailFast.failWhen(mediaSession != null) { "observe() called while a session is already active for ${config.entityId}" } @@ -212,7 +144,7 @@ class HaMediaSession @AssistedInject constructor( val session = buildMediaSession(player) mediaSession = session try { - onSessionReady(this@HaMediaSession) + onSessionReady(session) startObservingState() } catch (e: CancellationException) { Timber.d("observe: cancelled for ${config.entityId}") diff --git a/app/src/main/kotlin/io/homeassistant/companion/android/mediacontrol/HaMediaSessionService.kt b/app/src/main/kotlin/io/homeassistant/companion/android/mediacontrol/HaMediaSessionService.kt index 97cd9497dc4..6c477106bc2 100644 --- a/app/src/main/kotlin/io/homeassistant/companion/android/mediacontrol/HaMediaSessionService.kt +++ b/app/src/main/kotlin/io/homeassistant/companion/android/mediacontrol/HaMediaSessionService.kt @@ -1,17 +1,22 @@ package io.homeassistant.companion.android.mediacontrol import android.annotation.SuppressLint +import android.app.Notification import android.app.NotificationChannel import android.app.NotificationManager import android.content.Context import android.content.Intent +import android.graphics.BitmapFactory +import android.os.Build import androidx.annotation.OptIn import androidx.annotation.VisibleForTesting +import androidx.core.app.NotificationCompat import androidx.core.app.NotificationManagerCompat import androidx.core.app.ServiceCompat import androidx.media3.common.util.UnstableApi import androidx.media3.session.MediaSession import androidx.media3.session.MediaSessionService +import androidx.media3.session.MediaStyleNotificationHelper import dagger.hilt.android.AndroidEntryPoint import io.homeassistant.companion.android.common.R as commonR import io.homeassistant.companion.android.common.data.mediacontrol.MediaControlEntityConfig @@ -81,7 +86,9 @@ class HaMediaSessionService @VisibleForTesting constructor(private val serviceSc override fun onGetSession(controllerInfo: MediaSession.ControllerInfo): MediaSession? = null override fun onTaskRemoved(rootIntent: Intent?) { - val anyPlaying = activeSessions.values.any { (session, _) -> session.isPlaying } + val anyPlaying = activeSessions.values.any { (session, _) -> + session.mediaSession?.player?.let { it.playWhenReady && it.mediaItemCount > 0 } == true + } // Keep the service alive while playback is active so the media notification remains // visible and controllable from the notification shade after the app is dismissed. // If nothing is playing there is no reason to keep the service alive. @@ -109,11 +116,9 @@ class HaMediaSessionService @VisibleForTesting constructor(private val serviceSc // A session not in activeSessions is being torn down. removeSession() and player.release() // both trigger onUpdateNotification, so without this guard we would re-post a notification // we just cancelled, leaving a zombie media control card after removal. - val activeHaSession = activeSessions.values - .map { (haSession, _) -> haSession } - .firstOrNull { it.id == session.id } + val isActive = activeSessions.values.any { (haSession, _) -> haSession.mediaSession?.id == session.id } - if (activeHaSession == null || session.player.mediaItemCount == 0) { + if (!isActive || session.player.mediaItemCount == 0) { // Entity is off, no state has arrived yet, or the session is being torn down. notificationManager.cancel(notificationId) if (foregroundNotificationId == notificationId) { @@ -122,7 +127,7 @@ class HaMediaSessionService @VisibleForTesting constructor(private val serviceSc return } - val notification = activeHaSession.buildNotification(channelId = NOTIFICATION_CHANNEL_ID) ?: return + val notification = buildNotification(session) if (foregroundNotificationId == null && startInForegroundRequired) { // Service is not yet in the foreground and playback requires it — start foreground // with this session's notification. All subsequent sessions (and updates to this one) @@ -149,9 +154,11 @@ class HaMediaSessionService @VisibleForTesting constructor(private val serviceSc // cancels rather than re-posts their notifications during teardown. val sessionsToClean = activeSessions.values.toList() activeSessions.clear() - sessionsToClean.forEach { (haSession, job) -> - notificationManager.cancel(haSession.id.hashCode()) - haSession.removeFromService(this) + sessionsToClean.forEach { (session, job) -> + session.mediaSession?.let { ms -> + notificationManager.cancel(ms.id.hashCode()) + removeSession(ms) + } job.cancel() } serviceScope.cancel() @@ -205,12 +212,12 @@ class HaMediaSessionService @VisibleForTesting constructor(private val serviceSc */ private suspend fun tearDownSession(key: String, pair: Pair) { val (haSession, job) = pair - val notificationId = haSession.id.hashCode() + val notificationId = key.hashCode() notificationManager.cancel(notificationId) if (foregroundNotificationId == notificationId) { promoteForegroundOrStop(excludeId = notificationId) } - haSession.removeFromService(this) + haSession.mediaSession?.let { removeSession(it) } job.cancelAndJoin() Timber.d("Removed media session for $key") } @@ -222,7 +229,7 @@ class HaMediaSessionService @VisibleForTesting constructor(private val serviceSc */ private fun launchSession(key: String, session: HaMediaSession) { val job = serviceScope.launch { - session.observe { haSession -> haSession.addToService(this@HaMediaSessionService) } + session.observe { mediaSession -> addSession(mediaSession) } } activeSessions[key] = session to job Timber.d("Added media session for $key") @@ -238,22 +245,15 @@ class HaMediaSessionService @VisibleForTesting constructor(private val serviceSc */ @OptIn(UnstableApi::class) private fun promoteForegroundOrStop(excludeId: Int) { - val nextHaSession = activeSessions.values - .map { (haSession, _) -> haSession } - .firstOrNull { it.id.hashCode() != excludeId && it.hasMediaContent } - - if (nextHaSession != null) { - val nextId = nextHaSession.id.hashCode() - val notification = nextHaSession.buildNotification(channelId = NOTIFICATION_CHANNEL_ID) - if (notification != null) { - startForeground(nextId, notification) - foregroundNotificationId = nextId - Timber.d("promoteForegroundOrStop: promoted session ${nextHaSession.id}") - } else { - ServiceCompat.stopForeground(this, ServiceCompat.STOP_FOREGROUND_REMOVE) - foregroundNotificationId = null - Timber.d("promoteForegroundOrStop: notification was null for candidate session, stopped foreground") - } + val nextSession = activeSessions.values + .mapNotNull { (haSession, _) -> haSession.mediaSession } + .firstOrNull { it.id.hashCode() != excludeId && it.player.mediaItemCount > 0 } + + if (nextSession != null) { + val nextId = nextSession.id.hashCode() + startForeground(nextId, buildNotification(nextSession)) + foregroundNotificationId = nextId + Timber.d("promoteForegroundOrStop: promoted session ${nextSession.id}") } else { ServiceCompat.stopForeground(this, ServiceCompat.STOP_FOREGROUND_REMOVE) foregroundNotificationId = null @@ -261,6 +261,28 @@ class HaMediaSessionService @VisibleForTesting constructor(private val serviceSc } } + /** + * Builds a [MediaStyleNotificationHelper.MediaStyle] notification for [session] + * using the player's current metadata (title, artist, artwork). + */ + @OptIn(UnstableApi::class) + private fun buildNotification(session: MediaSession): Notification { + val metadata = session.player.mediaMetadata + val artworkBitmap = metadata.artworkData?.let { BitmapFactory.decodeByteArray(it, 0, it.size) } + + return NotificationCompat.Builder(this, NOTIFICATION_CHANNEL_ID) + .setStyle(MediaStyleNotificationHelper.MediaStyle(session)) + .setSmallIcon(commonR.drawable.ic_stat_ic_notification) + .setVisibility(NotificationCompat.VISIBILITY_PUBLIC) + .setCategory(NotificationCompat.CATEGORY_TRANSPORT) + .setContentTitle(metadata.title ?: session.id) + .setContentText(metadata.artist) + .setLargeIcon(artworkBitmap) + .setOngoing(session.player.isPlaying) + .setContentIntent(session.sessionActivity) + .build() + } + private fun createNotificationChannel() { val channel = NotificationChannel( NOTIFICATION_CHANNEL_ID, diff --git a/app/src/test/kotlin/io/homeassistant/companion/android/mediacontrol/HaMediaSessionTest.kt b/app/src/test/kotlin/io/homeassistant/companion/android/mediacontrol/HaMediaSessionTest.kt index 40fe8c0a69c..71344740a8a 100644 --- a/app/src/test/kotlin/io/homeassistant/companion/android/mediacontrol/HaMediaSessionTest.kt +++ b/app/src/test/kotlin/io/homeassistant/companion/android/mediacontrol/HaMediaSessionTest.kt @@ -30,7 +30,6 @@ import org.junit.After import org.junit.Assert.assertEquals import org.junit.Assert.assertNotNull import org.junit.Assert.assertNull -import org.junit.Assert.assertTrue import org.junit.Before import org.junit.Test import org.junit.runner.RunWith @@ -483,13 +482,13 @@ class HaMediaSessionTest { coEvery { mediaControlRepository.observeEntityState(config) } returns stateFlow val session = buildSession() - var onSessionReadyInvoked = false + var capturedSession: androidx.media3.session.MediaSession? = null val job = testScope.launch { - session.observe { onSessionReadyInvoked = true } + session.observe { capturedSession = it } } idleMainLooper() - assertTrue(onSessionReadyInvoked) + assertNotNull(capturedSession) job.cancel() } From 623bb57828c28a5f03ec59ccaa52a668064209ad Mon Sep 17 00:00:00 2001 From: Fletcher Dostie Date: Tue, 5 May 2026 23:11:24 -0700 Subject: [PATCH 090/114] Restore tests: observe() stays alive after flow ends, restarts on command After the revert of the over-scoped comment-4 change, wire up the two behaviors the unit tests expect: - observe() launches startObservingState() as a child and uses awaitCancellation() so the session stays alive after the WebSocket flow completes (e.g. transient disconnect). - getCommandCallback now accepts an onCommandComplete callback; after each HA action succeeds, restartObservationIfNeeded() re-launches startObservingState() if the observation job has ended. - Removed withContext(Dispatchers.IO) from callMediaAction: Retrofit suspend functions are non-blocking so Dispatchers.Default suffices, and this keeps the call synchronous under UnconfinedTestDispatcher. --- .../android/mediacontrol/HaMediaSession.kt | 52 +++++++++++++------ 1 file changed, 37 insertions(+), 15 deletions(-) diff --git a/app/src/main/kotlin/io/homeassistant/companion/android/mediacontrol/HaMediaSession.kt b/app/src/main/kotlin/io/homeassistant/companion/android/mediacontrol/HaMediaSession.kt index 8694afc0d40..5e1209d070f 100644 --- a/app/src/main/kotlin/io/homeassistant/companion/android/mediacontrol/HaMediaSession.kt +++ b/app/src/main/kotlin/io/homeassistant/companion/android/mediacontrol/HaMediaSession.kt @@ -34,6 +34,7 @@ import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.Job import kotlinx.coroutines.NonCancellable +import kotlinx.coroutines.awaitCancellation import kotlinx.coroutines.coroutineScope import kotlinx.coroutines.launch import kotlinx.coroutines.withContext @@ -68,47 +69,54 @@ class HaMediaSession @AssistedInject constructor( var mediaSession: MediaSession? = null private set - private fun getCommandCallback(scope: CoroutineScope) = object : HaRemoteMediaPlayer.CommandCallback { - override fun onPlayRequested() = scope.launch { callMediaAction(ACTION_MEDIA_PLAY) } + private fun getCommandCallback( + scope: CoroutineScope, + onCommandComplete: () -> Unit, + ) = object : HaRemoteMediaPlayer.CommandCallback { + override fun onPlayRequested() = scope.launch { callMediaAction(ACTION_MEDIA_PLAY); onCommandComplete() } - override fun onPauseRequested() = scope.launch { callMediaAction(ACTION_MEDIA_PAUSE) } + override fun onPauseRequested() = scope.launch { callMediaAction(ACTION_MEDIA_PAUSE); onCommandComplete() } override fun onSeekRequested(positionMs: Long) = scope.launch { callMediaAction( action = ACTION_MEDIA_SEEK, extraData = mapOf("seek_position" to positionMs / 1000.0), ) + onCommandComplete() } - override fun onNextRequested() = scope.launch { callMediaAction(ACTION_MEDIA_NEXT_TRACK) } + override fun onNextRequested() = scope.launch { callMediaAction(ACTION_MEDIA_NEXT_TRACK); onCommandComplete() } - override fun onPreviousRequested() = scope.launch { callMediaAction(ACTION_MEDIA_PREVIOUS_TRACK) } + override fun onPreviousRequested() = scope.launch { callMediaAction(ACTION_MEDIA_PREVIOUS_TRACK); onCommandComplete() } override fun onSetVolumeRequested(volume: Float) = scope.launch { callMediaAction( action = ACTION_VOLUME_SET, extraData = mapOf("volume_level" to volume), ) + onCommandComplete() } - override fun onIncreaseVolumeRequested() = scope.launch { callMediaAction(ACTION_VOLUME_UP) } + override fun onIncreaseVolumeRequested() = scope.launch { callMediaAction(ACTION_VOLUME_UP); onCommandComplete() } - override fun onDecreaseVolumeRequested() = scope.launch { callMediaAction(ACTION_VOLUME_DOWN) } + override fun onDecreaseVolumeRequested() = scope.launch { callMediaAction(ACTION_VOLUME_DOWN); onCommandComplete() } override fun onMuteRequested(muted: Boolean) = scope.launch { callMediaAction( action = ACTION_VOLUME_MUTE, extraData = mapOf("is_volume_muted" to muted), ) + onCommandComplete() } - override fun onStopRequested() = scope.launch { callMediaAction(ACTION_MEDIA_STOP) } + override fun onStopRequested() = scope.launch { callMediaAction(ACTION_MEDIA_STOP); onCommandComplete() } override fun onShuffleRequested(shuffle: Boolean) = scope.launch { callMediaAction( action = ACTION_SHUFFLE_SET, extraData = mapOf("shuffle" to shuffle), ) + onCommandComplete() } override fun onRepeatRequested(repeatMode: MediaRepeatMode): Job { @@ -122,6 +130,7 @@ class HaMediaSession @AssistedInject constructor( action = ACTION_REPEAT_SET, extraData = mapOf("repeat" to haRepeatValue), ) + onCommandComplete() } } } @@ -135,17 +144,31 @@ class HaMediaSession @AssistedInject constructor( * All Media3 resources are released in a `finally` block, so they are always cleaned up * regardless of how the coroutine ends (cancellation or normal flow completion). */ - suspend fun observe(onSessionReady: suspend (MediaSession) -> Unit) = coroutineScope { + suspend fun observe(onSessionReady: suspend (MediaSession) -> Unit) { + coroutineScope { FailFast.failWhen(mediaSession != null) { "observe() called while a session is already active for ${config.entityId}" } Timber.d("observe: starting for ${config.entityId}") - val player = HaRemoteMediaPlayer(Looper.getMainLooper(), getCommandCallback(this)) + + var observationJob = launch { startObservingState() } + + // After each command, restart observation if the WebSocket flow has completed (e.g. + // after a transient disconnect). This lets the user resume control without reopening + // the app. + fun restartObservationIfNeeded() { + if (!observationJob.isActive) { + Timber.d("observe: restarting observation after command for ${config.entityId}") + observationJob = launch { startObservingState() } + } + } + + val player = HaRemoteMediaPlayer(Looper.getMainLooper(), getCommandCallback(this, ::restartObservationIfNeeded)) val session = buildMediaSession(player) mediaSession = session try { onSessionReady(session) - startObservingState() + awaitCancellation() } catch (e: CancellationException) { Timber.d("observe: cancelled for ${config.entityId}") throw e @@ -157,6 +180,7 @@ class HaMediaSession @AssistedInject constructor( session.release() } } + } } /** @@ -225,10 +249,8 @@ class HaMediaSession @AssistedInject constructor( val actionData = hashMapOf("entity_id" to config.entityId) actionData.putAll(extraData) try { - withContext(Dispatchers.IO) { - serverManager.integrationRepository(config.serverId) - .callAction(MEDIA_PLAYER_DOMAIN, action, actionData) - } + serverManager.integrationRepository(config.serverId) + .callAction(MEDIA_PLAYER_DOMAIN, action, actionData) } catch (e: CancellationException) { throw e } catch (e: Exception) { From eaf71d622998a8f4387bd6297c91d30bc4a26a46 Mon Sep 17 00:00:00 2001 From: Fletcher Dostie Date: Tue, 5 May 2026 23:38:19 -0700 Subject: [PATCH 091/114] Encapsulate MediaSession inside HaMediaSession, expose id and notification builder Address review comment: mediaSession should not be exposed directly to the service. HaMediaSession now exposes a stable val id, isPlaying/hasActiveMedia properties, unregisterFrom() for teardown, and buildNotification() instead of the raw session. NOTIFICATION_CHANNEL_ID moves to the HaMediaSession companion. Tests are updated to capture the MediaSession via the observe() callback and use buildNotification() for lifecycle assertions. --- .../android/launch/LaunchActivity.kt | 2 +- .../android/mediacontrol/HaMediaSession.kt | 264 +++++++++++------- .../mediacontrol/HaMediaSessionService.kt | 57 +--- .../mediacontrol/HaMediaSessionTest.kt | 59 ++-- 4 files changed, 212 insertions(+), 170 deletions(-) diff --git a/app/src/main/kotlin/io/homeassistant/companion/android/launch/LaunchActivity.kt b/app/src/main/kotlin/io/homeassistant/companion/android/launch/LaunchActivity.kt index 1ebc4339b12..ac3103735f9 100644 --- a/app/src/main/kotlin/io/homeassistant/companion/android/launch/LaunchActivity.kt +++ b/app/src/main/kotlin/io/homeassistant/companion/android/launch/LaunchActivity.kt @@ -30,6 +30,7 @@ import dagger.hilt.android.lifecycle.withCreationCallback import io.homeassistant.companion.android.WIPFeature import io.homeassistant.companion.android.common.R as commonR import io.homeassistant.companion.android.common.compose.theme.HATheme +import io.homeassistant.companion.android.mediacontrol.HaMediaSessionService import io.homeassistant.companion.android.sensors.SensorReceiver import io.homeassistant.companion.android.sensors.SensorWorker import io.homeassistant.companion.android.util.ChangeLog @@ -39,7 +40,6 @@ import io.homeassistant.companion.android.util.PlayServicesAvailability import io.homeassistant.companion.android.util.compose.HAApp import io.homeassistant.companion.android.util.compose.navigateToUri import io.homeassistant.companion.android.util.enableEdgeToEdgeCompat -import io.homeassistant.companion.android.mediacontrol.HaMediaSessionService import io.homeassistant.companion.android.websocket.WebsocketManager import javax.inject.Inject import kotlinx.coroutines.launch diff --git a/app/src/main/kotlin/io/homeassistant/companion/android/mediacontrol/HaMediaSession.kt b/app/src/main/kotlin/io/homeassistant/companion/android/mediacontrol/HaMediaSession.kt index 5e1209d070f..99cea6827d7 100644 --- a/app/src/main/kotlin/io/homeassistant/companion/android/mediacontrol/HaMediaSession.kt +++ b/app/src/main/kotlin/io/homeassistant/companion/android/mediacontrol/HaMediaSession.kt @@ -1,13 +1,18 @@ package io.homeassistant.companion.android.mediacontrol +import android.app.Notification import android.app.PendingIntent import android.content.Context import android.content.Intent import android.graphics.Bitmap.CompressFormat +import android.graphics.BitmapFactory import android.os.Looper import androidx.annotation.OptIn +import androidx.core.app.NotificationCompat import androidx.media3.common.util.UnstableApi import androidx.media3.session.MediaSession +import androidx.media3.session.MediaSessionService +import androidx.media3.session.MediaStyleNotificationHelper import coil3.imageLoader import coil3.request.ImageRequest import coil3.request.allowHardware @@ -16,6 +21,7 @@ import dagger.assisted.Assisted import dagger.assisted.AssistedFactory import dagger.assisted.AssistedInject import dagger.hilt.android.qualifiers.ApplicationContext +import io.homeassistant.companion.android.common.R as commonR import io.homeassistant.companion.android.common.data.integration.IntegrationDomains.MEDIA_PLAYER_DOMAIN import io.homeassistant.companion.android.common.data.mediacontrol.MediaControlEntityConfig import io.homeassistant.companion.android.common.data.mediacontrol.MediaControlRepository @@ -25,8 +31,8 @@ import io.homeassistant.companion.android.common.data.mediacontrol.MediaRepeatMo import io.homeassistant.companion.android.common.data.servers.ServerManager import io.homeassistant.companion.android.common.data.servers.firstUrlOrNull import io.homeassistant.companion.android.common.util.FailFast -import io.homeassistant.companion.android.util.sensitive import io.homeassistant.companion.android.launch.LaunchActivity +import io.homeassistant.companion.android.util.sensitive import java.io.ByteArrayOutputStream import java.net.URL import kotlinx.coroutines.CancellationException @@ -61,79 +67,135 @@ class HaMediaSession @AssistedInject constructor( private val mediaControlRepository: MediaControlRepository, private val serverManager: ServerManager, ) { + /** Stable identifier for this session, derived from the entity config. */ + val id: String = "${config.serverId}_${config.entityId}" + + private var mediaSession: MediaSession? = null + + /** True if the player is currently playing and has at least one media item. */ + val isPlaying: Boolean + get() = mediaSession?.player?.let { it.playWhenReady && it.mediaItemCount > 0 } == true + + /** True if the player has at least one media item (playing or paused). */ + val hasActiveMedia: Boolean + get() = mediaSession?.player?.let { it.mediaItemCount > 0 } == true + /** - * The active [MediaSession] while [observe] is running, null otherwise. - * The service uses this to call [androidx.media3.session.MediaSessionService.removeSession] - * and to check playback state in [androidx.media3.session.MediaSessionService.onTaskRemoved]. + * Unregisters this session from [service] by calling + * [MediaSessionService.removeSession]. Has no effect if the session is not currently active. */ - var mediaSession: MediaSession? = null - private set - - private fun getCommandCallback( - scope: CoroutineScope, - onCommandComplete: () -> Unit, - ) = object : HaRemoteMediaPlayer.CommandCallback { - override fun onPlayRequested() = scope.launch { callMediaAction(ACTION_MEDIA_PLAY); onCommandComplete() } + fun unregisterFrom(service: MediaSessionService) { + mediaSession?.let { service.removeSession(it) } + } - override fun onPauseRequested() = scope.launch { callMediaAction(ACTION_MEDIA_PAUSE); onCommandComplete() } + /** + * Builds a [MediaStyle][MediaStyleNotificationHelper.MediaStyle] notification for this session + * using the player's current metadata (title, artist, artwork). + * + * @return The notification, or null if the session is not currently active. + */ + @OptIn(UnstableApi::class) + fun buildNotification(): Notification? { + val session = mediaSession ?: return null + val metadata = session.player.mediaMetadata + val artworkBitmap = metadata.artworkData?.let { BitmapFactory.decodeByteArray(it, 0, it.size) } + return NotificationCompat.Builder(context, NOTIFICATION_CHANNEL_ID) + .setStyle(MediaStyleNotificationHelper.MediaStyle(session)) + .setSmallIcon(commonR.drawable.ic_stat_ic_notification) + .setVisibility(NotificationCompat.VISIBILITY_PUBLIC) + .setCategory(NotificationCompat.CATEGORY_TRANSPORT) + .setContentTitle(metadata.title ?: id) + .setContentText(metadata.artist) + .setLargeIcon(artworkBitmap) + .setOngoing(session.player.isPlaying) + .setContentIntent(session.sessionActivity) + .build() + } - override fun onSeekRequested(positionMs: Long) = scope.launch { - callMediaAction( - action = ACTION_MEDIA_SEEK, - extraData = mapOf("seek_position" to positionMs / 1000.0), - ) - onCommandComplete() - } + private fun getCommandCallback(scope: CoroutineScope, onCommandComplete: () -> Unit) = + object : HaRemoteMediaPlayer.CommandCallback { + override fun onPlayRequested() = scope.launch { + callMediaAction(ACTION_MEDIA_PLAY) + onCommandComplete() + } - override fun onNextRequested() = scope.launch { callMediaAction(ACTION_MEDIA_NEXT_TRACK); onCommandComplete() } + override fun onPauseRequested() = scope.launch { + callMediaAction(ACTION_MEDIA_PAUSE) + onCommandComplete() + } - override fun onPreviousRequested() = scope.launch { callMediaAction(ACTION_MEDIA_PREVIOUS_TRACK); onCommandComplete() } + override fun onSeekRequested(positionMs: Long) = scope.launch { + callMediaAction( + action = ACTION_MEDIA_SEEK, + extraData = mapOf("seek_position" to positionMs / 1000.0), + ) + onCommandComplete() + } - override fun onSetVolumeRequested(volume: Float) = scope.launch { - callMediaAction( - action = ACTION_VOLUME_SET, - extraData = mapOf("volume_level" to volume), - ) - onCommandComplete() - } + override fun onNextRequested() = scope.launch { + callMediaAction(ACTION_MEDIA_NEXT_TRACK) + onCommandComplete() + } - override fun onIncreaseVolumeRequested() = scope.launch { callMediaAction(ACTION_VOLUME_UP); onCommandComplete() } + override fun onPreviousRequested() = scope.launch { + callMediaAction(ACTION_MEDIA_PREVIOUS_TRACK) + onCommandComplete() + } - override fun onDecreaseVolumeRequested() = scope.launch { callMediaAction(ACTION_VOLUME_DOWN); onCommandComplete() } + override fun onSetVolumeRequested(volume: Float) = scope.launch { + callMediaAction( + action = ACTION_VOLUME_SET, + extraData = mapOf("volume_level" to volume), + ) + onCommandComplete() + } - override fun onMuteRequested(muted: Boolean) = scope.launch { - callMediaAction( - action = ACTION_VOLUME_MUTE, - extraData = mapOf("is_volume_muted" to muted), - ) - onCommandComplete() - } + override fun onIncreaseVolumeRequested() = scope.launch { + callMediaAction(ACTION_VOLUME_UP) + onCommandComplete() + } - override fun onStopRequested() = scope.launch { callMediaAction(ACTION_MEDIA_STOP); onCommandComplete() } + override fun onDecreaseVolumeRequested() = scope.launch { + callMediaAction(ACTION_VOLUME_DOWN) + onCommandComplete() + } - override fun onShuffleRequested(shuffle: Boolean) = scope.launch { - callMediaAction( - action = ACTION_SHUFFLE_SET, - extraData = mapOf("shuffle" to shuffle), - ) - onCommandComplete() - } + override fun onMuteRequested(muted: Boolean) = scope.launch { + callMediaAction( + action = ACTION_VOLUME_MUTE, + extraData = mapOf("is_volume_muted" to muted), + ) + onCommandComplete() + } - override fun onRepeatRequested(repeatMode: MediaRepeatMode): Job { - val haRepeatValue = when (repeatMode) { - is MediaRepeatMode.Off -> "off" - is MediaRepeatMode.One -> "one" - is MediaRepeatMode.All -> "all" + override fun onStopRequested() = scope.launch { + callMediaAction(ACTION_MEDIA_STOP) + onCommandComplete() } - return scope.launch { + + override fun onShuffleRequested(shuffle: Boolean) = scope.launch { callMediaAction( - action = ACTION_REPEAT_SET, - extraData = mapOf("repeat" to haRepeatValue), + action = ACTION_SHUFFLE_SET, + extraData = mapOf("shuffle" to shuffle), ) onCommandComplete() } + + override fun onRepeatRequested(repeatMode: MediaRepeatMode): Job { + val haRepeatValue = when (repeatMode) { + is MediaRepeatMode.Off -> "off" + is MediaRepeatMode.One -> "one" + is MediaRepeatMode.All -> "all" + } + return scope.launch { + callMediaAction( + action = ACTION_REPEAT_SET, + extraData = mapOf("repeat" to haRepeatValue), + ) + onCommandComplete() + } + } } - } /** * Creates the [MediaSession] and player, starts observing entity state, and suspends until @@ -146,41 +208,42 @@ class HaMediaSession @AssistedInject constructor( */ suspend fun observe(onSessionReady: suspend (MediaSession) -> Unit) { coroutineScope { - FailFast.failWhen(mediaSession != null) { - "observe() called while a session is already active for ${config.entityId}" - } - Timber.d("observe: starting for ${config.entityId}") + FailFast.failWhen(mediaSession != null) { + "observe() called while a session is already active for ${config.entityId}" + } + Timber.d("observe: starting for ${config.entityId}") - var observationJob = launch { startObservingState() } + var observationJob = launch { startObservingState() } - // After each command, restart observation if the WebSocket flow has completed (e.g. - // after a transient disconnect). This lets the user resume control without reopening - // the app. - fun restartObservationIfNeeded() { - if (!observationJob.isActive) { - Timber.d("observe: restarting observation after command for ${config.entityId}") - observationJob = launch { startObservingState() } + // After each command, restart observation if the WebSocket flow has completed (e.g. + // after a transient disconnect). This lets the user resume control without reopening + // the app. + fun restartObservationIfNeeded() { + if (!observationJob.isActive) { + Timber.d("observe: restarting observation after command for ${config.entityId}") + observationJob = launch { startObservingState() } + } } - } - val player = HaRemoteMediaPlayer(Looper.getMainLooper(), getCommandCallback(this, ::restartObservationIfNeeded)) - val session = buildMediaSession(player) - mediaSession = session - try { - onSessionReady(session) - awaitCancellation() - } catch (e: CancellationException) { - Timber.d("observe: cancelled for ${config.entityId}") - throw e - } finally { - Timber.d("observe: finally block running for ${config.entityId}, releasing player and session") - mediaSession = null - withContext(NonCancellable + Dispatchers.Main) { - player.release() - session.release() + val player = + HaRemoteMediaPlayer(Looper.getMainLooper(), getCommandCallback(this, ::restartObservationIfNeeded)) + val session = buildMediaSession(player) + mediaSession = session + try { + onSessionReady(session) + awaitCancellation() + } catch (e: CancellationException) { + Timber.d("observe: cancelled for ${config.entityId}") + throw e + } finally { + Timber.d("observe: finally block running for ${config.entityId}, releasing player and session") + mediaSession = null + withContext(NonCancellable + Dispatchers.Main) { + player.release() + session.release() + } } } - } } /** @@ -346,23 +409,26 @@ class HaMediaSession @AssistedInject constructor( /** Immutable cache of the last successfully loaded artwork. */ private data class ArtworkCache(val url: String? = null, val bytes: ByteArray? = null) - private companion object { + companion object { + /** Notification channel ID used for all media control notifications. */ + const val NOTIFICATION_CHANNEL_ID = "media_session" + /** Target pixel size for notification large icon artwork. Pre-scaling in Coil avoids * main-thread downscaling by Android's Icon class (StrictMode CustomViolation). */ - const val NOTIFICATION_ICON_SIZE_PX = 256 - - const val ACTION_MEDIA_PLAY = "media_play" - const val ACTION_MEDIA_PAUSE = "media_pause" - const val ACTION_MEDIA_STOP = "media_stop" - const val ACTION_MEDIA_SEEK = "media_seek" - const val ACTION_MEDIA_NEXT_TRACK = "media_next_track" - const val ACTION_MEDIA_PREVIOUS_TRACK = "media_previous_track" - const val ACTION_VOLUME_SET = "volume_set" - const val ACTION_VOLUME_UP = "volume_up" - const val ACTION_VOLUME_DOWN = "volume_down" - const val ACTION_VOLUME_MUTE = "volume_mute" - const val ACTION_SHUFFLE_SET = "shuffle_set" - const val ACTION_REPEAT_SET = "repeat_set" + private const val NOTIFICATION_ICON_SIZE_PX = 256 + + private const val ACTION_MEDIA_PLAY = "media_play" + private const val ACTION_MEDIA_PAUSE = "media_pause" + private const val ACTION_MEDIA_STOP = "media_stop" + private const val ACTION_MEDIA_SEEK = "media_seek" + private const val ACTION_MEDIA_NEXT_TRACK = "media_next_track" + private const val ACTION_MEDIA_PREVIOUS_TRACK = "media_previous_track" + private const val ACTION_VOLUME_SET = "volume_set" + private const val ACTION_VOLUME_UP = "volume_up" + private const val ACTION_VOLUME_DOWN = "volume_down" + private const val ACTION_VOLUME_MUTE = "volume_mute" + private const val ACTION_SHUFFLE_SET = "shuffle_set" + private const val ACTION_REPEAT_SET = "repeat_set" } /** Creates [HaMediaSession] instances with the runtime-provided [config]. */ diff --git a/app/src/main/kotlin/io/homeassistant/companion/android/mediacontrol/HaMediaSessionService.kt b/app/src/main/kotlin/io/homeassistant/companion/android/mediacontrol/HaMediaSessionService.kt index 6c477106bc2..6879dee2e1d 100644 --- a/app/src/main/kotlin/io/homeassistant/companion/android/mediacontrol/HaMediaSessionService.kt +++ b/app/src/main/kotlin/io/homeassistant/companion/android/mediacontrol/HaMediaSessionService.kt @@ -1,22 +1,17 @@ package io.homeassistant.companion.android.mediacontrol import android.annotation.SuppressLint -import android.app.Notification import android.app.NotificationChannel import android.app.NotificationManager import android.content.Context import android.content.Intent -import android.graphics.BitmapFactory -import android.os.Build import androidx.annotation.OptIn import androidx.annotation.VisibleForTesting -import androidx.core.app.NotificationCompat import androidx.core.app.NotificationManagerCompat import androidx.core.app.ServiceCompat import androidx.media3.common.util.UnstableApi import androidx.media3.session.MediaSession import androidx.media3.session.MediaSessionService -import androidx.media3.session.MediaStyleNotificationHelper import dagger.hilt.android.AndroidEntryPoint import io.homeassistant.companion.android.common.R as commonR import io.homeassistant.companion.android.common.data.mediacontrol.MediaControlEntityConfig @@ -86,9 +81,7 @@ class HaMediaSessionService @VisibleForTesting constructor(private val serviceSc override fun onGetSession(controllerInfo: MediaSession.ControllerInfo): MediaSession? = null override fun onTaskRemoved(rootIntent: Intent?) { - val anyPlaying = activeSessions.values.any { (session, _) -> - session.mediaSession?.player?.let { it.playWhenReady && it.mediaItemCount > 0 } == true - } + val anyPlaying = activeSessions.values.any { (session, _) -> session.isPlaying } // Keep the service alive while playback is active so the media notification remains // visible and controllable from the notification shade after the app is dismissed. // If nothing is playing there is no reason to keep the service alive. @@ -116,9 +109,9 @@ class HaMediaSessionService @VisibleForTesting constructor(private val serviceSc // A session not in activeSessions is being torn down. removeSession() and player.release() // both trigger onUpdateNotification, so without this guard we would re-post a notification // we just cancelled, leaving a zombie media control card after removal. - val isActive = activeSessions.values.any { (haSession, _) -> haSession.mediaSession?.id == session.id } + val haSession = activeSessions.values.firstOrNull { (haSession, _) -> haSession.id == session.id }?.first - if (!isActive || session.player.mediaItemCount == 0) { + if (haSession == null || session.player.mediaItemCount == 0) { // Entity is off, no state has arrived yet, or the session is being torn down. notificationManager.cancel(notificationId) if (foregroundNotificationId == notificationId) { @@ -127,7 +120,7 @@ class HaMediaSessionService @VisibleForTesting constructor(private val serviceSc return } - val notification = buildNotification(session) + val notification = haSession.buildNotification() ?: return if (foregroundNotificationId == null && startInForegroundRequired) { // Service is not yet in the foreground and playback requires it — start foreground // with this session's notification. All subsequent sessions (and updates to this one) @@ -155,10 +148,8 @@ class HaMediaSessionService @VisibleForTesting constructor(private val serviceSc val sessionsToClean = activeSessions.values.toList() activeSessions.clear() sessionsToClean.forEach { (session, job) -> - session.mediaSession?.let { ms -> - notificationManager.cancel(ms.id.hashCode()) - removeSession(ms) - } + notificationManager.cancel(session.id.hashCode()) + session.unregisterFrom(this) job.cancel() } serviceScope.cancel() @@ -217,7 +208,7 @@ class HaMediaSessionService @VisibleForTesting constructor(private val serviceSc if (foregroundNotificationId == notificationId) { promoteForegroundOrStop(excludeId = notificationId) } - haSession.mediaSession?.let { removeSession(it) } + haSession.unregisterFrom(this) job.cancelAndJoin() Timber.d("Removed media session for $key") } @@ -243,15 +234,15 @@ class HaMediaSessionService @VisibleForTesting constructor(private val serviceSc * @param excludeId The notification ID of the session being removed, to skip it when searching * for a replacement. */ - @OptIn(UnstableApi::class) private fun promoteForegroundOrStop(excludeId: Int) { val nextSession = activeSessions.values - .mapNotNull { (haSession, _) -> haSession.mediaSession } - .firstOrNull { it.id.hashCode() != excludeId && it.player.mediaItemCount > 0 } + .map { (haSession, _) -> haSession } + .firstOrNull { it.id.hashCode() != excludeId && it.hasActiveMedia } if (nextSession != null) { val nextId = nextSession.id.hashCode() - startForeground(nextId, buildNotification(nextSession)) + val notification = nextSession.buildNotification() ?: return + startForeground(nextId, notification) foregroundNotificationId = nextId Timber.d("promoteForegroundOrStop: promoted session ${nextSession.id}") } else { @@ -261,31 +252,9 @@ class HaMediaSessionService @VisibleForTesting constructor(private val serviceSc } } - /** - * Builds a [MediaStyleNotificationHelper.MediaStyle] notification for [session] - * using the player's current metadata (title, artist, artwork). - */ - @OptIn(UnstableApi::class) - private fun buildNotification(session: MediaSession): Notification { - val metadata = session.player.mediaMetadata - val artworkBitmap = metadata.artworkData?.let { BitmapFactory.decodeByteArray(it, 0, it.size) } - - return NotificationCompat.Builder(this, NOTIFICATION_CHANNEL_ID) - .setStyle(MediaStyleNotificationHelper.MediaStyle(session)) - .setSmallIcon(commonR.drawable.ic_stat_ic_notification) - .setVisibility(NotificationCompat.VISIBILITY_PUBLIC) - .setCategory(NotificationCompat.CATEGORY_TRANSPORT) - .setContentTitle(metadata.title ?: session.id) - .setContentText(metadata.artist) - .setLargeIcon(artworkBitmap) - .setOngoing(session.player.isPlaying) - .setContentIntent(session.sessionActivity) - .build() - } - private fun createNotificationChannel() { val channel = NotificationChannel( - NOTIFICATION_CHANNEL_ID, + HaMediaSession.NOTIFICATION_CHANNEL_ID, getString(commonR.string.media_controls), NotificationManager.IMPORTANCE_LOW, ).apply { @@ -295,8 +264,6 @@ class HaMediaSessionService @VisibleForTesting constructor(private val serviceSc } companion object { - private const val NOTIFICATION_CHANNEL_ID = "media_session" - /** * Starts the service. Should be called from a foreground context (e.g. Activity) to avoid * Android 15+ restrictions on starting mediaPlayback foreground services from background. diff --git a/app/src/test/kotlin/io/homeassistant/companion/android/mediacontrol/HaMediaSessionTest.kt b/app/src/test/kotlin/io/homeassistant/companion/android/mediacontrol/HaMediaSessionTest.kt index 71344740a8a..834669d618a 100644 --- a/app/src/test/kotlin/io/homeassistant/companion/android/mediacontrol/HaMediaSessionTest.kt +++ b/app/src/test/kotlin/io/homeassistant/companion/android/mediacontrol/HaMediaSessionTest.kt @@ -144,12 +144,13 @@ class HaMediaSessionTest { coEvery { mediaControlRepository.observeEntityState(config) } returns stateFlow val session = buildSession() + var capturedSession: androidx.media3.session.MediaSession? = null val job = testScope.launch { - session.observe { /* no-op: addSession not needed in unit tests */ } + session.observe { capturedSession = it } } idleMainLooper() - val player = session.mediaSession?.player + val player = capturedSession?.player assertEquals(Player.STATE_READY, player?.playbackState) assertEquals(true, player?.playWhenReady) @@ -177,12 +178,13 @@ class HaMediaSessionTest { coEvery { mediaControlRepository.observeEntityState(config) } returns stateFlow val session = buildSession() + var capturedSession: androidx.media3.session.MediaSession? = null val job = testScope.launch { - session.observe { } + session.observe { capturedSession = it } } idleMainLooper() - val player = session.mediaSession?.player + val player = capturedSession?.player assertEquals(Player.STATE_READY, player?.playbackState) assertEquals(true, player?.playWhenReady) @@ -202,12 +204,13 @@ class HaMediaSessionTest { coEvery { mediaControlRepository.observeEntityState(config) } returns stateFlow val session = buildSession() + var capturedSession: androidx.media3.session.MediaSession? = null val job = testScope.launch { - session.observe { } + session.observe { capturedSession = it } } idleMainLooper() - val player = session.mediaSession?.player + val player = capturedSession?.player assertEquals(Player.STATE_READY, player?.playbackState) assertEquals(false, player?.playWhenReady) @@ -233,7 +236,7 @@ class HaMediaSessionTest { // The observation job completed naturally but observe() is still suspended in // awaitCancellation(), so the session and its notification remain active. - assertNotNull(session.mediaSession) + assertNotNull(session.buildNotification()) org.junit.Assert.assertTrue(job.isActive) job.cancel() @@ -263,16 +266,17 @@ class HaMediaSessionTest { } val session = buildSession() + var capturedSession: androidx.media3.session.MediaSession? = null val job = testScope.launch { - session.observe { } + session.observe { capturedSession = it } } idleMainLooper() // After the first flow completes, observation is inactive but observe() is still alive. - assertNotNull(session.mediaSession) + assertNotNull(session.buildNotification()) // Trigger a play command; the action succeeds (integrationRepository is relaxed). - session.mediaSession?.player?.play() + capturedSession?.player?.play() shadowOf(Looper.getMainLooper()).idle() // observeEntityState should have been called a second time (observation restarted). @@ -296,12 +300,13 @@ class HaMediaSessionTest { coEvery { mediaControlRepository.observeEntityState(config) } returns stateFlow val session = buildSession() + var capturedSession: androidx.media3.session.MediaSession? = null val job = testScope.launch { - session.observe { } + session.observe { capturedSession = it } } idleMainLooper() - val player = session.mediaSession?.player + val player = capturedSession?.player assertNull(player?.mediaMetadata?.artworkData) job.cancel() @@ -321,15 +326,16 @@ class HaMediaSessionTest { coEvery { mediaControlRepository.observeEntityState(config) } returns stateFlow val session = buildSession() + var capturedSession: androidx.media3.session.MediaSession? = null val job = testScope.launch { - session.observe { } + session.observe { capturedSession = it } } idleMainLooper() stateFlow.tryEmit(createState(entityPictureUrl = null, title = "Track 2")) idleMainLooper() - val player = session.mediaSession?.player + val player = capturedSession?.player assertNull(player?.mediaMetadata?.artworkData) assertEquals("Track 2", player?.mediaMetadata?.title?.toString()) @@ -353,12 +359,13 @@ class HaMediaSessionTest { coEvery { mediaControlRepository.observeEntityState(config) } returns stateFlow val session = buildSession() + var capturedSession: androidx.media3.session.MediaSession? = null val job = testScope.launch { - session.observe { } + session.observe { capturedSession = it } } idleMainLooper() - session.mediaSession?.player?.play() + capturedSession?.player?.play() shadowOf(Looper.getMainLooper()).idle() val capturedDomain = slot() @@ -389,12 +396,13 @@ class HaMediaSessionTest { coEvery { mediaControlRepository.observeEntityState(config) } returns stateFlow val session = buildSession() + var capturedSession: androidx.media3.session.MediaSession? = null val job = testScope.launch { - session.observe { } + session.observe { capturedSession = it } } idleMainLooper() - session.mediaSession?.player?.pause() + capturedSession?.player?.pause() shadowOf(Looper.getMainLooper()).idle() val capturedAction = slot() @@ -427,12 +435,13 @@ class HaMediaSessionTest { } throws RuntimeException("Simulated server error") val session = buildSession() + var capturedSession: androidx.media3.session.MediaSession? = null val job = testScope.launch { - session.observe { } + session.observe { capturedSession = it } } idleMainLooper() - session.mediaSession?.player?.play() + capturedSession?.player?.play() shadowOf(Looper.getMainLooper()).idle() coVerify { @@ -449,11 +458,11 @@ class HaMediaSessionTest { // -- observe() lifecycle tests -- /** - * Verifies that [HaMediaSession.mediaSession] is set during observation and becomes null - * after the observing job is cancelled, confirming Media3 resources are released. + * Verifies that the session is active (produces a notification) during observation and + * becomes inactive after the observing job is cancelled, confirming Media3 resources are released. */ @Test - fun `Given observing session when job cancelled then mediaSession is null`() { + fun `Given observing session when job cancelled then session is no longer active`() { val stateFlow = MutableSharedFlow(replay = 1) stateFlow.tryEmit(createState(playbackState = MediaPlaybackState.Playing)) coEvery { mediaControlRepository.observeEntityState(config) } returns stateFlow @@ -464,12 +473,12 @@ class HaMediaSessionTest { } idleMainLooper() - assertNotNull(session.mediaSession) + assertNotNull(session.buildNotification()) job.cancel() idleMainLooper() - assertNull(session.mediaSession) + assertNull(session.buildNotification()) } /** From 7c4b248e952db4ccfbb302d2468892de2aa86b91 Mon Sep 17 00:00:00 2001 From: Fletcher Dostie Date: Wed, 6 May 2026 00:32:19 -0700 Subject: [PATCH 092/114] Unify session ID format with map key; use key string in promoteForegroundOrStop HaMediaSession.id and the activeSessions map key both identified the same entity but used different separators (_ vs :). Align the separator to : so they are identical, then pass the key string directly to promoteForegroundOrStop instead of a hashCode int, removing the hash collision risk and the redundant identity derivation. --- .../android/mediacontrol/HaMediaSession.kt | 4 ++-- .../android/mediacontrol/HaMediaSessionService.kt | 14 +++++++------- 2 files changed, 9 insertions(+), 9 deletions(-) diff --git a/app/src/main/kotlin/io/homeassistant/companion/android/mediacontrol/HaMediaSession.kt b/app/src/main/kotlin/io/homeassistant/companion/android/mediacontrol/HaMediaSession.kt index 99cea6827d7..6246aba90ab 100644 --- a/app/src/main/kotlin/io/homeassistant/companion/android/mediacontrol/HaMediaSession.kt +++ b/app/src/main/kotlin/io/homeassistant/companion/android/mediacontrol/HaMediaSession.kt @@ -68,7 +68,7 @@ class HaMediaSession @AssistedInject constructor( private val serverManager: ServerManager, ) { /** Stable identifier for this session, derived from the entity config. */ - val id: String = "${config.serverId}_${config.entityId}" + val id: String = "${config.serverId}:${config.entityId}" private var mediaSession: MediaSession? = null @@ -281,7 +281,7 @@ class HaMediaSession @AssistedInject constructor( } private fun buildMediaSession(player: HaRemoteMediaPlayer): MediaSession = MediaSession.Builder(context, player) - .setId("${config.serverId}_${config.entityId}") + .setId("${config.serverId}:${config.entityId}") .setCallback(MediaSessionCallback()) .build() .also { session -> diff --git a/app/src/main/kotlin/io/homeassistant/companion/android/mediacontrol/HaMediaSessionService.kt b/app/src/main/kotlin/io/homeassistant/companion/android/mediacontrol/HaMediaSessionService.kt index 6879dee2e1d..e0a3065e9e2 100644 --- a/app/src/main/kotlin/io/homeassistant/companion/android/mediacontrol/HaMediaSessionService.kt +++ b/app/src/main/kotlin/io/homeassistant/companion/android/mediacontrol/HaMediaSessionService.kt @@ -115,7 +115,7 @@ class HaMediaSessionService @VisibleForTesting constructor(private val serviceSc // Entity is off, no state has arrived yet, or the session is being torn down. notificationManager.cancel(notificationId) if (foregroundNotificationId == notificationId) { - promoteForegroundOrStop(excludeId = notificationId) + promoteForegroundOrStop(excludeKey = session.id) } return } @@ -206,7 +206,7 @@ class HaMediaSessionService @VisibleForTesting constructor(private val serviceSc val notificationId = key.hashCode() notificationManager.cancel(notificationId) if (foregroundNotificationId == notificationId) { - promoteForegroundOrStop(excludeId = notificationId) + promoteForegroundOrStop(excludeKey = key) } haSession.unregisterFrom(this) job.cancelAndJoin() @@ -231,13 +231,13 @@ class HaMediaSessionService @VisibleForTesting constructor(private val serviceSc * foreground session is removed or goes idle. If no active session has media content, * stops the foreground state. * - * @param excludeId The notification ID of the session being removed, to skip it when searching + * @param excludeKey The map key of the session being removed, to skip it when searching * for a replacement. */ - private fun promoteForegroundOrStop(excludeId: Int) { - val nextSession = activeSessions.values - .map { (haSession, _) -> haSession } - .firstOrNull { it.id.hashCode() != excludeId && it.hasActiveMedia } + private fun promoteForegroundOrStop(excludeKey: String) { + val nextSession = activeSessions.entries + .firstOrNull { (key, pair) -> key != excludeKey && pair.first.hasActiveMedia } + ?.value?.first if (nextSession != null) { val nextId = nextSession.id.hashCode() From b416ec748262507359e1b6031910547a86c1a24f Mon Sep 17 00:00:00 2001 From: Fletcher Dostie Date: Sat, 9 May 2026 20:28:23 -0700 Subject: [PATCH 093/114] Fix HaMediaSessionService constructor and test --- .../android/mediacontrol/HaMediaSession.kt | 2 +- .../mediacontrol/HaMediaSessionService.kt | 24 +++---- .../mediacontrol/HaMediaSessionServiceTest.kt | 64 +++++++++++-------- 3 files changed, 48 insertions(+), 42 deletions(-) diff --git a/app/src/main/kotlin/io/homeassistant/companion/android/mediacontrol/HaMediaSession.kt b/app/src/main/kotlin/io/homeassistant/companion/android/mediacontrol/HaMediaSession.kt index 6246aba90ab..c0fe470ecd0 100644 --- a/app/src/main/kotlin/io/homeassistant/companion/android/mediacontrol/HaMediaSession.kt +++ b/app/src/main/kotlin/io/homeassistant/companion/android/mediacontrol/HaMediaSession.kt @@ -302,7 +302,7 @@ class HaMediaSession @AssistedInject constructor( } session.sessionActivity = PendingIntent.getActivity( context, - "${config.serverId}:${config.entityId}".hashCode(), + id.hashCode(), tapIntent, PendingIntent.FLAG_IMMUTABLE or PendingIntent.FLAG_UPDATE_CURRENT, ) diff --git a/app/src/main/kotlin/io/homeassistant/companion/android/mediacontrol/HaMediaSessionService.kt b/app/src/main/kotlin/io/homeassistant/companion/android/mediacontrol/HaMediaSessionService.kt index e0a3065e9e2..d4d8ec3af67 100644 --- a/app/src/main/kotlin/io/homeassistant/companion/android/mediacontrol/HaMediaSessionService.kt +++ b/app/src/main/kotlin/io/homeassistant/companion/android/mediacontrol/HaMediaSessionService.kt @@ -42,16 +42,11 @@ import timber.log.Timber * All per-entity session logic is delegated to [HaMediaSession]. */ @AndroidEntryPoint -class HaMediaSessionService @VisibleForTesting constructor(private val serviceScope: CoroutineScope) : +class HaMediaSessionService @VisibleForTesting constructor(private val serviceScope: CoroutineScope, + val mediaControlRepository: MediaControlRepository, val haMediaSessionFactory: HaMediaSession.Factory) : MediaSessionService() { - @Inject constructor() : this(CoroutineScope(SupervisorJob() + Dispatchers.Default)) - - @Inject - lateinit var mediaControlRepository: MediaControlRepository - - @Inject - lateinit var haMediaSessionFactory: HaMediaSession.Factory + @Inject constructor(mediaControlRepository: MediaControlRepository, haMediaSessionFactory: HaMediaSession.Factory) : this(CoroutineScope(SupervisorJob() + Dispatchers.Default), mediaControlRepository, haMediaSessionFactory) // Keyed by "$serverId:$entityId". Each entry pairs the session with the job running observe(). private val activeSessions = mutableMapOf>() @@ -67,13 +62,6 @@ class HaMediaSessionService @VisibleForTesting constructor(private val serviceSc startObservingEntities() } - @VisibleForTesting - internal fun startObservingEntities() { - mediaControlRepository.observeConfiguredEntities() - .onEach { entities -> reconcileSessions(entities) } - .launchIn(serviceScope) - } - // Returns null intentionally: Media3 routes each controller to the session whose ID matches // the one it was constructed with. Returning a specific session here would cause all // controllers (including the notification) to connect to that one session, breaking @@ -156,6 +144,12 @@ class HaMediaSessionService @VisibleForTesting constructor(private val serviceSc super.onDestroy() } + private fun startObservingEntities() { + mediaControlRepository.observeConfiguredEntities() + .onEach { entities -> reconcileSessions(entities) } + .launchIn(serviceScope) + } + private suspend fun reconcileSessions(configuredEntities: List) { Timber.d( "reconcileSessions: received ${configuredEntities.size} entities=${configuredEntities.map { diff --git a/app/src/test/kotlin/io/homeassistant/companion/android/mediacontrol/HaMediaSessionServiceTest.kt b/app/src/test/kotlin/io/homeassistant/companion/android/mediacontrol/HaMediaSessionServiceTest.kt index c5f025736de..268d2be2e83 100644 --- a/app/src/test/kotlin/io/homeassistant/companion/android/mediacontrol/HaMediaSessionServiceTest.kt +++ b/app/src/test/kotlin/io/homeassistant/companion/android/mediacontrol/HaMediaSessionServiceTest.kt @@ -42,17 +42,19 @@ private val sessionCounter = AtomicInteger(0) * Tests for [HaMediaSessionService] session reconciliation and lifecycle behavior. * * Session management is driven through [MediaControlRepository.observeConfiguredEntities] flow - * emissions via [HaMediaSessionService.startObservingEntities], rather than through [onCreate], - * which is intentionally not called in tests: [onCreate] triggers Hilt's field injection, which - * requires a fully-initialized Hilt application component that is not available in this test setup. - * Instead, dependencies are injected manually into the service's [Inject]-annotated fields after - * construction, and observation is started via [HaMediaSessionService.startObservingEntities]. + * emissions, rather than through [onCreate], which is intentionally not called in tests: [onCreate] + * triggers Hilt's component injection, which requires a fully-initialized Hilt application + * component that is not available in this test setup. Instead, all constructor-injected dependencies + * ([MediaControlRepository], [HaMediaSession.Factory], and [serviceScope]) are replaced via + * reflection after construction, and the private [startObservingEntities] method is invoked via + * reflection through [startObserving]. * * The service is created via [Robolectric.buildService] (using [get] rather than [create]) so that - * the service is properly attached to an Android context without triggering [onCreate]. The private - * [serviceScope] field is then replaced via reflection with [observationScope] (backed by - * [UnconfinedTestDispatcher]) before observation starts, so that flow collection and session - * coroutines run eagerly and synchronously on the test dispatcher. + * the service is properly attached to an Android context without triggering [onCreate]. The three + * constructor val fields are then replaced via reflection with test doubles: [mediaControlRepository] + * and [haMediaSessionFactory] receive MockK mocks, and [serviceScope] receives [observationScope] + * (backed by [UnconfinedTestDispatcher]) so that flow collection and session coroutines run eagerly + * and synchronously on the test dispatcher. * * Each test pre-populates [configuredEntitiesFlow] (replay=1) before starting observation, so * the subscriber receives the value immediately upon subscribing. Subsequent emissions are @@ -104,14 +106,19 @@ class HaMediaSessionServiceTest { } service = Robolectric.buildService(HaMediaSessionService::class.java).get() - service.mediaControlRepository = mediaControlRepository - service.haMediaSessionFactory = haMediaSessionFactory - - // Replace the private serviceScope field with the test-controlled scope so that - // startObservingEntities() and all session coroutines run on the UnconfinedTestDispatcher. - val scopeField = HaMediaSessionService::class.java.getDeclaredField("serviceScope") - scopeField.isAccessible = true - scopeField.set(service, observationScope) + + // mediaControlRepository, haMediaSessionFactory, and serviceScope are constructor val + // parameters (private final fields). Reflection is required to inject test doubles because + // the service is built without calling onCreate() (which would trigger Hilt injection) and + // the fields are immutable from Kotlin's perspective. + fun setField(name: String, value: Any) { + val field = HaMediaSessionService::class.java.getDeclaredField(name) + field.isAccessible = true + field.set(service, value) + } + setField("mediaControlRepository", mediaControlRepository) + setField("haMediaSessionFactory", haMediaSessionFactory) + setField("serviceScope", observationScope) } @After @@ -129,15 +136,20 @@ class HaMediaSessionServiceTest { } /** - * Starts [HaMediaSessionService.startObservingEntities] with the test-controlled - * [observationScope] (already set via reflection in [setUp]) as the service scope. Because - * [configuredEntitiesFlow] uses replay=1 and [observationScope] uses [UnconfinedTestDispatcher], - * the subscriber receives any pre-emitted value immediately and reconciliation runs synchronously. + * Starts entity observation on the service using the test-controlled [observationScope] + * (already set via reflection in [setUp]) as the service scope. Because [configuredEntitiesFlow] + * uses replay=1 and [observationScope] uses [UnconfinedTestDispatcher], the subscriber receives + * any pre-emitted value immediately and reconciliation runs synchronously. * Call [idleMainLooper] after this to flush any Main-thread tasks posted by [HaMediaSession] * (e.g. [HaRemoteMediaPlayer.updateState]). + * + * Invoked via reflection because [HaMediaSessionService.startObservingEntities] is private — + * this avoids calling [onCreate], which triggers Hilt field injection unavailable in this setup. */ private fun startObserving() { - service.startObservingEntities() + val m = HaMediaSessionService::class.java.getDeclaredMethod("startObservingEntities") + m.isAccessible = true + m.invoke(service) } /** @@ -194,7 +206,7 @@ class HaMediaSessionServiceTest { idleMainLooper() assertEquals(1, service.getSessions().size) - assertTrue(service.getSessions().any { it.id == "1_${config.entityId}" }) + assertTrue(service.getSessions().any { it.id == "1:${config.entityId}" }) } @Test @@ -206,8 +218,8 @@ class HaMediaSessionServiceTest { idleMainLooper() assertEquals(2, service.getSessions().size) - assertTrue(service.getSessions().any { it.id == "1_${configA.entityId}" }) - assertTrue(service.getSessions().any { it.id == "1_${configB.entityId}" }) + assertTrue(service.getSessions().any { it.id == "1:${configA.entityId}" }) + assertTrue(service.getSessions().any { it.id == "1:${configB.entityId}" }) } @Test @@ -222,7 +234,7 @@ class HaMediaSessionServiceTest { idleMainLooper() assertEquals(1, service.getSessions().size) - assertTrue(service.getSessions().any { it.id == "1_${configB.entityId}" }) + assertTrue(service.getSessions().any { it.id == "1:${configB.entityId}" }) } @Test From 6336c81d2d3b624c7b11f4645824fd5bba3432f3 Mon Sep 17 00:00:00 2001 From: Fletcher Dostie Date: Sat, 9 May 2026 21:19:25 -0700 Subject: [PATCH 094/114] add commandScope in HaMediaSession so thrown exceptions are handled gracefully instead of crashing --- .../android/mediacontrol/HaMediaSession.kt | 38 +++++++++++------ .../mediacontrol/HaMediaSessionService.kt | 11 +++-- .../mediacontrol/HaMediaSessionServiceTest.kt | 41 ++++++++----------- 3 files changed, 51 insertions(+), 39 deletions(-) diff --git a/app/src/main/kotlin/io/homeassistant/companion/android/mediacontrol/HaMediaSession.kt b/app/src/main/kotlin/io/homeassistant/companion/android/mediacontrol/HaMediaSession.kt index c0fe470ecd0..58dca3cdfaf 100644 --- a/app/src/main/kotlin/io/homeassistant/companion/android/mediacontrol/HaMediaSession.kt +++ b/app/src/main/kotlin/io/homeassistant/companion/android/mediacontrol/HaMediaSession.kt @@ -36,10 +36,12 @@ import io.homeassistant.companion.android.util.sensitive import java.io.ByteArrayOutputStream import java.net.URL import kotlinx.coroutines.CancellationException +import kotlinx.coroutines.CoroutineExceptionHandler import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.Job import kotlinx.coroutines.NonCancellable +import kotlinx.coroutines.SupervisorJob import kotlinx.coroutines.awaitCancellation import kotlinx.coroutines.coroutineScope import kotlinx.coroutines.launch @@ -114,17 +116,29 @@ class HaMediaSession @AssistedInject constructor( private fun getCommandCallback(scope: CoroutineScope, onCommandComplete: () -> Unit) = object : HaRemoteMediaPlayer.CommandCallback { - override fun onPlayRequested() = scope.launch { + // SupervisorJob: a failed command doesn't cancel the observation scope. + // CoroutineExceptionHandler: prevents the unhandled exception from crashing the + // process. The error is already delivered to SimpleBasePlayer via + // future.setException() in handleCommand's invokeOnCompletion handler. + private val commandScope = CoroutineScope( + scope.coroutineContext + + SupervisorJob(scope.coroutineContext[Job]) + + CoroutineExceptionHandler { _, e -> + Timber.e(e, "Command failed for ${config.entityId}") + }, + ) + + override fun onPlayRequested() = commandScope.launch { callMediaAction(ACTION_MEDIA_PLAY) onCommandComplete() } - override fun onPauseRequested() = scope.launch { + override fun onPauseRequested() = commandScope.launch { callMediaAction(ACTION_MEDIA_PAUSE) onCommandComplete() } - override fun onSeekRequested(positionMs: Long) = scope.launch { + override fun onSeekRequested(positionMs: Long) = commandScope.launch { callMediaAction( action = ACTION_MEDIA_SEEK, extraData = mapOf("seek_position" to positionMs / 1000.0), @@ -132,17 +146,17 @@ class HaMediaSession @AssistedInject constructor( onCommandComplete() } - override fun onNextRequested() = scope.launch { + override fun onNextRequested() = commandScope.launch { callMediaAction(ACTION_MEDIA_NEXT_TRACK) onCommandComplete() } - override fun onPreviousRequested() = scope.launch { + override fun onPreviousRequested() = commandScope.launch { callMediaAction(ACTION_MEDIA_PREVIOUS_TRACK) onCommandComplete() } - override fun onSetVolumeRequested(volume: Float) = scope.launch { + override fun onSetVolumeRequested(volume: Float) = commandScope.launch { callMediaAction( action = ACTION_VOLUME_SET, extraData = mapOf("volume_level" to volume), @@ -150,17 +164,17 @@ class HaMediaSession @AssistedInject constructor( onCommandComplete() } - override fun onIncreaseVolumeRequested() = scope.launch { + override fun onIncreaseVolumeRequested() = commandScope.launch { callMediaAction(ACTION_VOLUME_UP) onCommandComplete() } - override fun onDecreaseVolumeRequested() = scope.launch { + override fun onDecreaseVolumeRequested() = commandScope.launch { callMediaAction(ACTION_VOLUME_DOWN) onCommandComplete() } - override fun onMuteRequested(muted: Boolean) = scope.launch { + override fun onMuteRequested(muted: Boolean) = commandScope.launch { callMediaAction( action = ACTION_VOLUME_MUTE, extraData = mapOf("is_volume_muted" to muted), @@ -168,12 +182,12 @@ class HaMediaSession @AssistedInject constructor( onCommandComplete() } - override fun onStopRequested() = scope.launch { + override fun onStopRequested() = commandScope.launch { callMediaAction(ACTION_MEDIA_STOP) onCommandComplete() } - override fun onShuffleRequested(shuffle: Boolean) = scope.launch { + override fun onShuffleRequested(shuffle: Boolean) = commandScope.launch { callMediaAction( action = ACTION_SHUFFLE_SET, extraData = mapOf("shuffle" to shuffle), @@ -187,7 +201,7 @@ class HaMediaSession @AssistedInject constructor( is MediaRepeatMode.One -> "one" is MediaRepeatMode.All -> "all" } - return scope.launch { + return commandScope.launch { callMediaAction( action = ACTION_REPEAT_SET, extraData = mapOf("repeat" to haRepeatValue), diff --git a/app/src/main/kotlin/io/homeassistant/companion/android/mediacontrol/HaMediaSessionService.kt b/app/src/main/kotlin/io/homeassistant/companion/android/mediacontrol/HaMediaSessionService.kt index d4d8ec3af67..80daebf38b6 100644 --- a/app/src/main/kotlin/io/homeassistant/companion/android/mediacontrol/HaMediaSessionService.kt +++ b/app/src/main/kotlin/io/homeassistant/companion/android/mediacontrol/HaMediaSessionService.kt @@ -42,11 +42,16 @@ import timber.log.Timber * All per-entity session logic is delegated to [HaMediaSession]. */ @AndroidEntryPoint -class HaMediaSessionService @VisibleForTesting constructor(private val serviceScope: CoroutineScope, - val mediaControlRepository: MediaControlRepository, val haMediaSessionFactory: HaMediaSession.Factory) : +class HaMediaSessionService @VisibleForTesting constructor(private val serviceScope: CoroutineScope) : MediaSessionService() { - @Inject constructor(mediaControlRepository: MediaControlRepository, haMediaSessionFactory: HaMediaSession.Factory) : this(CoroutineScope(SupervisorJob() + Dispatchers.Default), mediaControlRepository, haMediaSessionFactory) + @Inject constructor() : this(CoroutineScope(SupervisorJob() + Dispatchers.Default)) + + @Inject + lateinit var mediaControlRepository: MediaControlRepository + + @Inject + lateinit var haMediaSessionFactory: HaMediaSession.Factory // Keyed by "$serverId:$entityId". Each entry pairs the session with the job running observe(). private val activeSessions = mutableMapOf>() diff --git a/app/src/test/kotlin/io/homeassistant/companion/android/mediacontrol/HaMediaSessionServiceTest.kt b/app/src/test/kotlin/io/homeassistant/companion/android/mediacontrol/HaMediaSessionServiceTest.kt index 268d2be2e83..9a114862e76 100644 --- a/app/src/test/kotlin/io/homeassistant/companion/android/mediacontrol/HaMediaSessionServiceTest.kt +++ b/app/src/test/kotlin/io/homeassistant/companion/android/mediacontrol/HaMediaSessionServiceTest.kt @@ -42,19 +42,17 @@ private val sessionCounter = AtomicInteger(0) * Tests for [HaMediaSessionService] session reconciliation and lifecycle behavior. * * Session management is driven through [MediaControlRepository.observeConfiguredEntities] flow - * emissions, rather than through [onCreate], which is intentionally not called in tests: [onCreate] - * triggers Hilt's component injection, which requires a fully-initialized Hilt application - * component that is not available in this test setup. Instead, all constructor-injected dependencies - * ([MediaControlRepository], [HaMediaSession.Factory], and [serviceScope]) are replaced via - * reflection after construction, and the private [startObservingEntities] method is invoked via - * reflection through [startObserving]. + * emissions via [HaMediaSessionService.startObservingEntities], rather than through [onCreate], + * which is intentionally not called in tests: [onCreate] triggers Hilt's field injection, which + * requires a fully-initialized Hilt application component that is not available in this test setup. + * Instead, dependencies are injected manually into the service's [Inject]-annotated fields after + * construction, and observation is started via [HaMediaSessionService.startObservingEntities]. * * The service is created via [Robolectric.buildService] (using [get] rather than [create]) so that - * the service is properly attached to an Android context without triggering [onCreate]. The three - * constructor val fields are then replaced via reflection with test doubles: [mediaControlRepository] - * and [haMediaSessionFactory] receive MockK mocks, and [serviceScope] receives [observationScope] - * (backed by [UnconfinedTestDispatcher]) so that flow collection and session coroutines run eagerly - * and synchronously on the test dispatcher. + * the service is properly attached to an Android context without triggering [onCreate]. The private + * [serviceScope] field is then replaced via reflection with [observationScope] (backed by + * [UnconfinedTestDispatcher]) before observation starts, so that flow collection and session + * coroutines run eagerly and synchronously on the test dispatcher. * * Each test pre-populates [configuredEntitiesFlow] (replay=1) before starting observation, so * the subscriber receives the value immediately upon subscribing. Subsequent emissions are @@ -106,19 +104,14 @@ class HaMediaSessionServiceTest { } service = Robolectric.buildService(HaMediaSessionService::class.java).get() - - // mediaControlRepository, haMediaSessionFactory, and serviceScope are constructor val - // parameters (private final fields). Reflection is required to inject test doubles because - // the service is built without calling onCreate() (which would trigger Hilt injection) and - // the fields are immutable from Kotlin's perspective. - fun setField(name: String, value: Any) { - val field = HaMediaSessionService::class.java.getDeclaredField(name) - field.isAccessible = true - field.set(service, value) - } - setField("mediaControlRepository", mediaControlRepository) - setField("haMediaSessionFactory", haMediaSessionFactory) - setField("serviceScope", observationScope) + service.mediaControlRepository = mediaControlRepository + service.haMediaSessionFactory = haMediaSessionFactory + + // Replace the private serviceScope field with the test-controlled scope so that + // startObservingEntities() and all session coroutines run on the UnconfinedTestDispatcher. + val scopeField = HaMediaSessionService::class.java.getDeclaredField("serviceScope") + scopeField.isAccessible = true + scopeField.set(service, observationScope) } @After From 168fd9c7f57f24f7bba9cfce2fa8d255a6933c00 Mon Sep 17 00:00:00 2001 From: Fletcher Dostie Date: Sat, 9 May 2026 21:31:12 -0700 Subject: [PATCH 095/114] remove restartObservationIfNeeded; remove unregisterFrom --- .../android/mediacontrol/HaMediaSession.kt | 44 +++---------------- .../mediacontrol/HaMediaSessionService.kt | 4 +- 2 files changed, 7 insertions(+), 41 deletions(-) diff --git a/app/src/main/kotlin/io/homeassistant/companion/android/mediacontrol/HaMediaSession.kt b/app/src/main/kotlin/io/homeassistant/companion/android/mediacontrol/HaMediaSession.kt index 58dca3cdfaf..0dd688079ae 100644 --- a/app/src/main/kotlin/io/homeassistant/companion/android/mediacontrol/HaMediaSession.kt +++ b/app/src/main/kotlin/io/homeassistant/companion/android/mediacontrol/HaMediaSession.kt @@ -11,7 +11,6 @@ import androidx.annotation.OptIn import androidx.core.app.NotificationCompat import androidx.media3.common.util.UnstableApi import androidx.media3.session.MediaSession -import androidx.media3.session.MediaSessionService import androidx.media3.session.MediaStyleNotificationHelper import coil3.imageLoader import coil3.request.ImageRequest @@ -72,7 +71,8 @@ class HaMediaSession @AssistedInject constructor( /** Stable identifier for this session, derived from the entity config. */ val id: String = "${config.serverId}:${config.entityId}" - private var mediaSession: MediaSession? = null + internal var mediaSession: MediaSession? = null + private set /** True if the player is currently playing and has at least one media item. */ val isPlaying: Boolean @@ -82,14 +82,6 @@ class HaMediaSession @AssistedInject constructor( val hasActiveMedia: Boolean get() = mediaSession?.player?.let { it.mediaItemCount > 0 } == true - /** - * Unregisters this session from [service] by calling - * [MediaSessionService.removeSession]. Has no effect if the session is not currently active. - */ - fun unregisterFrom(service: MediaSessionService) { - mediaSession?.let { service.removeSession(it) } - } - /** * Builds a [MediaStyle][MediaStyleNotificationHelper.MediaStyle] notification for this session * using the player's current metadata (title, artist, artwork). @@ -114,7 +106,7 @@ class HaMediaSession @AssistedInject constructor( .build() } - private fun getCommandCallback(scope: CoroutineScope, onCommandComplete: () -> Unit) = + private fun getCommandCallback(scope: CoroutineScope) = object : HaRemoteMediaPlayer.CommandCallback { // SupervisorJob: a failed command doesn't cancel the observation scope. // CoroutineExceptionHandler: prevents the unhandled exception from crashing the @@ -130,12 +122,10 @@ class HaMediaSession @AssistedInject constructor( override fun onPlayRequested() = commandScope.launch { callMediaAction(ACTION_MEDIA_PLAY) - onCommandComplete() } override fun onPauseRequested() = commandScope.launch { callMediaAction(ACTION_MEDIA_PAUSE) - onCommandComplete() } override fun onSeekRequested(positionMs: Long) = commandScope.launch { @@ -143,17 +133,14 @@ class HaMediaSession @AssistedInject constructor( action = ACTION_MEDIA_SEEK, extraData = mapOf("seek_position" to positionMs / 1000.0), ) - onCommandComplete() } override fun onNextRequested() = commandScope.launch { callMediaAction(ACTION_MEDIA_NEXT_TRACK) - onCommandComplete() } override fun onPreviousRequested() = commandScope.launch { callMediaAction(ACTION_MEDIA_PREVIOUS_TRACK) - onCommandComplete() } override fun onSetVolumeRequested(volume: Float) = commandScope.launch { @@ -161,17 +148,14 @@ class HaMediaSession @AssistedInject constructor( action = ACTION_VOLUME_SET, extraData = mapOf("volume_level" to volume), ) - onCommandComplete() } override fun onIncreaseVolumeRequested() = commandScope.launch { callMediaAction(ACTION_VOLUME_UP) - onCommandComplete() } override fun onDecreaseVolumeRequested() = commandScope.launch { callMediaAction(ACTION_VOLUME_DOWN) - onCommandComplete() } override fun onMuteRequested(muted: Boolean) = commandScope.launch { @@ -179,12 +163,10 @@ class HaMediaSession @AssistedInject constructor( action = ACTION_VOLUME_MUTE, extraData = mapOf("is_volume_muted" to muted), ) - onCommandComplete() } override fun onStopRequested() = commandScope.launch { callMediaAction(ACTION_MEDIA_STOP) - onCommandComplete() } override fun onShuffleRequested(shuffle: Boolean) = commandScope.launch { @@ -192,7 +174,6 @@ class HaMediaSession @AssistedInject constructor( action = ACTION_SHUFFLE_SET, extraData = mapOf("shuffle" to shuffle), ) - onCommandComplete() } override fun onRepeatRequested(repeatMode: MediaRepeatMode): Job { @@ -206,7 +187,6 @@ class HaMediaSession @AssistedInject constructor( action = ACTION_REPEAT_SET, extraData = mapOf("repeat" to haRepeatValue), ) - onCommandComplete() } } } @@ -227,20 +207,10 @@ class HaMediaSession @AssistedInject constructor( } Timber.d("observe: starting for ${config.entityId}") - var observationJob = launch { startObservingState() } - - // After each command, restart observation if the WebSocket flow has completed (e.g. - // after a transient disconnect). This lets the user resume control without reopening - // the app. - fun restartObservationIfNeeded() { - if (!observationJob.isActive) { - Timber.d("observe: restarting observation after command for ${config.entityId}") - observationJob = launch { startObservingState() } - } - } + launch { startObservingState() } val player = - HaRemoteMediaPlayer(Looper.getMainLooper(), getCommandCallback(this, ::restartObservationIfNeeded)) + HaRemoteMediaPlayer(Looper.getMainLooper(), getCommandCallback(this)) val session = buildMediaSession(player) mediaSession = session try { @@ -262,10 +232,6 @@ class HaMediaSession @AssistedInject constructor( /** * Observes entity state for [config] until the flow completes or the coroutine is cancelled. - * The flow completes when the WebSocket subscription returns null (not yet connected), and - * is cancelled when the WebSocket disconnects (the backing SharedFlow's scope is cancelled). - * In both cases the session is not restarted here; reconnection happens when the user opens - * the app, which recreates active sessions via [HaMediaSessionService]. */ private suspend fun startObservingState() { Timber.d("startObservingState: starting for ${config.entityId}") diff --git a/app/src/main/kotlin/io/homeassistant/companion/android/mediacontrol/HaMediaSessionService.kt b/app/src/main/kotlin/io/homeassistant/companion/android/mediacontrol/HaMediaSessionService.kt index 80daebf38b6..24e33c99743 100644 --- a/app/src/main/kotlin/io/homeassistant/companion/android/mediacontrol/HaMediaSessionService.kt +++ b/app/src/main/kotlin/io/homeassistant/companion/android/mediacontrol/HaMediaSessionService.kt @@ -142,7 +142,7 @@ class HaMediaSessionService @VisibleForTesting constructor(private val serviceSc activeSessions.clear() sessionsToClean.forEach { (session, job) -> notificationManager.cancel(session.id.hashCode()) - session.unregisterFrom(this) + session.mediaSession?.let { removeSession(it) } job.cancel() } serviceScope.cancel() @@ -207,7 +207,7 @@ class HaMediaSessionService @VisibleForTesting constructor(private val serviceSc if (foregroundNotificationId == notificationId) { promoteForegroundOrStop(excludeKey = key) } - haSession.unregisterFrom(this) + haSession.mediaSession?.let { removeSession(it) } job.cancelAndJoin() Timber.d("Removed media session for $key") } From 09e456d0fad17338caec628e877de9612d40acaa Mon Sep 17 00:00:00 2001 From: Fletcher Dostie Date: Sat, 9 May 2026 21:34:39 -0700 Subject: [PATCH 096/114] Add test to verify HaMediaSessionService.start is called in LaunchActivity; remove test for removed restartObservationIfNeeded --- .../android/launch/LaunchActivityTest.kt | 7 ++- .../mediacontrol/HaMediaSessionTest.kt | 43 ------------------- 2 files changed, 6 insertions(+), 44 deletions(-) diff --git a/app/src/test/kotlin/io/homeassistant/companion/android/launch/LaunchActivityTest.kt b/app/src/test/kotlin/io/homeassistant/companion/android/launch/LaunchActivityTest.kt index 50268bc0940..f960f2c9fb1 100644 --- a/app/src/test/kotlin/io/homeassistant/companion/android/launch/LaunchActivityTest.kt +++ b/app/src/test/kotlin/io/homeassistant/companion/android/launch/LaunchActivityTest.kt @@ -12,6 +12,7 @@ import dagger.hilt.android.testing.UninstallModules import io.homeassistant.companion.android.common.data.servers.ServerManager import io.homeassistant.companion.android.common.util.DisabledLocationHandler import io.homeassistant.companion.android.di.ServerManagerModule +import io.homeassistant.companion.android.mediacontrol.HaMediaSessionService import io.homeassistant.companion.android.sensors.SensorReceiver import io.homeassistant.companion.android.sensors.SensorWorker import io.homeassistant.companion.android.testing.unit.ConsoleLogRule @@ -61,9 +62,11 @@ class LaunchActivityTest { mockkObject(WebsocketManager.Companion) mockkObject(SensorReceiver.Companion) mockkObject(DisabledLocationHandler) + mockkObject(HaMediaSessionService.Companion) every { SensorWorker.start(any()) } just Runs coEvery { WebsocketManager.start(any()) } just Runs every { SensorReceiver.updateAllSensors(any()) } just Runs + every { HaMediaSessionService.start(any()) } just Runs every { DisabledLocationHandler.isLocationEnabled(any()) } returns true mockkConstructor(ChangeLog::class) coEvery { anyConstructed().showChangeLog(any(), any()) } just Runs @@ -75,14 +78,16 @@ class LaunchActivityTest { unmockkObject(WebsocketManager.Companion) unmockkObject(SensorReceiver.Companion) unmockkObject(DisabledLocationHandler) + unmockkObject(HaMediaSessionService.Companion) unmockkConstructor(ChangeLog::class) } @Test - fun `Given activity resumes then sensor worker and websocket manager are started and changelog is shown`() { + fun `Given activity resumes then sensor worker, websocket manager and media session service are started and changelog is shown`() { ActivityScenario.launch(LaunchActivity::class.java).use { verify { SensorWorker.start(any()) } coVerify { WebsocketManager.start(any()) } + verify { HaMediaSessionService.start(any()) } verify { DisabledLocationHandler.isLocationEnabled(any()) } coVerify { anyConstructed().showChangeLog(any(), eq(false)) } } diff --git a/app/src/test/kotlin/io/homeassistant/companion/android/mediacontrol/HaMediaSessionTest.kt b/app/src/test/kotlin/io/homeassistant/companion/android/mediacontrol/HaMediaSessionTest.kt index 834669d618a..38289dea73d 100644 --- a/app/src/test/kotlin/io/homeassistant/companion/android/mediacontrol/HaMediaSessionTest.kt +++ b/app/src/test/kotlin/io/homeassistant/companion/android/mediacontrol/HaMediaSessionTest.kt @@ -242,49 +242,6 @@ class HaMediaSessionTest { job.cancel() } - /** - * Verifies that after the observation flow ends (simulating a WebSocket disconnect), - * a successful media command restarts state observation so future state updates are received. - * - * This covers the reconnection path: user taps play → REST call succeeds → `callMediaAction` - * sees `observationJob.isActive == false` and re-launches `startObservingState()`. - */ - @Test - fun `Given observation ended when play requested and action succeeds then observation is restarted`() { - // First call: immediately-completing flow (simulates WebSocket disconnect). - // Second call: open flow that stays alive so we can verify it was subscribed to. - val reopenedFlow = MutableSharedFlow(replay = 1) - reopenedFlow.tryEmit(createState(playbackState = MediaPlaybackState.Paused)) - var callCount = 0 - coEvery { mediaControlRepository.observeEntityState(config) } answers { - callCount++ - if (callCount == 1) { - flowOf(createState(playbackState = MediaPlaybackState.Playing)) - } else { - reopenedFlow - } - } - - val session = buildSession() - var capturedSession: androidx.media3.session.MediaSession? = null - val job = testScope.launch { - session.observe { capturedSession = it } - } - idleMainLooper() - - // After the first flow completes, observation is inactive but observe() is still alive. - assertNotNull(session.buildNotification()) - - // Trigger a play command; the action succeeds (integrationRepository is relaxed). - capturedSession?.player?.play() - shadowOf(Looper.getMainLooper()).idle() - - // observeEntityState should have been called a second time (observation restarted). - assertEquals(2, callCount) - - job.cancel() - } - // -- Artwork caching tests -- /** From cf42a8fa2da02478aed4f9ec898c66629a84c268 Mon Sep 17 00:00:00 2001 From: Fletcher Dostie Date: Tue, 12 May 2026 08:47:57 -0700 Subject: [PATCH 097/114] Address trivial PR review comments from @TimoPtr MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Use `id` property in buildMediaSession instead of re-building the string - Apply when-with-subject idiom in loadArtworkAndUpdatePlayer - Remove duplicate log in observe(); remove redundant catch-rethrow block - Replace hashMapOf+putAll with buildMap in callMediaAction - Move desiredKeys computation before withContext(Main) in reconcileSessions; use it in log - Fix launchSession KDoc: requirement is activeSessions thread-safety, not addSession - Add comment explaining Idle→STATE_ENDED mapping in HaRemoteMediaPlayer - Remove implementation details (REST/WebSocket/database) from MediaControlRepository docs - Simplify observeEntityState comment; remove verbose per-event WebSocket debug logs --- .../android/mediacontrol/HaMediaSession.kt | 156 +++++++++--------- .../mediacontrol/HaMediaSessionService.kt | 10 +- .../mediacontrol/HaRemoteMediaPlayer.kt | 1 + .../mediacontrol/MediaControlRepository.kt | 8 +- .../MediaControlRepositoryImpl.kt | 8 +- 5 files changed, 85 insertions(+), 98 deletions(-) diff --git a/app/src/main/kotlin/io/homeassistant/companion/android/mediacontrol/HaMediaSession.kt b/app/src/main/kotlin/io/homeassistant/companion/android/mediacontrol/HaMediaSession.kt index 0dd688079ae..649ba3fab24 100644 --- a/app/src/main/kotlin/io/homeassistant/companion/android/mediacontrol/HaMediaSession.kt +++ b/app/src/main/kotlin/io/homeassistant/companion/android/mediacontrol/HaMediaSession.kt @@ -106,90 +106,89 @@ class HaMediaSession @AssistedInject constructor( .build() } - private fun getCommandCallback(scope: CoroutineScope) = - object : HaRemoteMediaPlayer.CommandCallback { - // SupervisorJob: a failed command doesn't cancel the observation scope. - // CoroutineExceptionHandler: prevents the unhandled exception from crashing the - // process. The error is already delivered to SimpleBasePlayer via - // future.setException() in handleCommand's invokeOnCompletion handler. - private val commandScope = CoroutineScope( - scope.coroutineContext + - SupervisorJob(scope.coroutineContext[Job]) + - CoroutineExceptionHandler { _, e -> - Timber.e(e, "Command failed for ${config.entityId}") - }, - ) + private fun getCommandCallback(scope: CoroutineScope) = object : HaRemoteMediaPlayer.CommandCallback { + // SupervisorJob: a failed command doesn't cancel the observation scope. + // CoroutineExceptionHandler: prevents the unhandled exception from crashing the + // process. The error is already delivered to SimpleBasePlayer via + // future.setException() in handleCommand's invokeOnCompletion handler. + private val commandScope = CoroutineScope( + scope.coroutineContext + + SupervisorJob(scope.coroutineContext[Job]) + + CoroutineExceptionHandler { _, e -> + Timber.e(e, "Command failed for ${config.entityId}") + }, + ) + + override fun onPlayRequested() = commandScope.launch { + callMediaAction(ACTION_MEDIA_PLAY) + } - override fun onPlayRequested() = commandScope.launch { - callMediaAction(ACTION_MEDIA_PLAY) - } + override fun onPauseRequested() = commandScope.launch { + callMediaAction(ACTION_MEDIA_PAUSE) + } - override fun onPauseRequested() = commandScope.launch { - callMediaAction(ACTION_MEDIA_PAUSE) - } + override fun onSeekRequested(positionMs: Long) = commandScope.launch { + callMediaAction( + action = ACTION_MEDIA_SEEK, + extraData = mapOf("seek_position" to positionMs / 1000.0), + ) + } - override fun onSeekRequested(positionMs: Long) = commandScope.launch { - callMediaAction( - action = ACTION_MEDIA_SEEK, - extraData = mapOf("seek_position" to positionMs / 1000.0), - ) - } + override fun onNextRequested() = commandScope.launch { + callMediaAction(ACTION_MEDIA_NEXT_TRACK) + } - override fun onNextRequested() = commandScope.launch { - callMediaAction(ACTION_MEDIA_NEXT_TRACK) - } + override fun onPreviousRequested() = commandScope.launch { + callMediaAction(ACTION_MEDIA_PREVIOUS_TRACK) + } - override fun onPreviousRequested() = commandScope.launch { - callMediaAction(ACTION_MEDIA_PREVIOUS_TRACK) - } + override fun onSetVolumeRequested(volume: Float) = commandScope.launch { + callMediaAction( + action = ACTION_VOLUME_SET, + extraData = mapOf("volume_level" to volume), + ) + } - override fun onSetVolumeRequested(volume: Float) = commandScope.launch { - callMediaAction( - action = ACTION_VOLUME_SET, - extraData = mapOf("volume_level" to volume), - ) - } + override fun onIncreaseVolumeRequested() = commandScope.launch { + callMediaAction(ACTION_VOLUME_UP) + } - override fun onIncreaseVolumeRequested() = commandScope.launch { - callMediaAction(ACTION_VOLUME_UP) - } + override fun onDecreaseVolumeRequested() = commandScope.launch { + callMediaAction(ACTION_VOLUME_DOWN) + } - override fun onDecreaseVolumeRequested() = commandScope.launch { - callMediaAction(ACTION_VOLUME_DOWN) - } + override fun onMuteRequested(muted: Boolean) = commandScope.launch { + callMediaAction( + action = ACTION_VOLUME_MUTE, + extraData = mapOf("is_volume_muted" to muted), + ) + } - override fun onMuteRequested(muted: Boolean) = commandScope.launch { - callMediaAction( - action = ACTION_VOLUME_MUTE, - extraData = mapOf("is_volume_muted" to muted), - ) - } + override fun onStopRequested() = commandScope.launch { + callMediaAction(ACTION_MEDIA_STOP) + } - override fun onStopRequested() = commandScope.launch { - callMediaAction(ACTION_MEDIA_STOP) - } + override fun onShuffleRequested(shuffle: Boolean) = commandScope.launch { + callMediaAction( + action = ACTION_SHUFFLE_SET, + extraData = mapOf("shuffle" to shuffle), + ) + } - override fun onShuffleRequested(shuffle: Boolean) = commandScope.launch { + override fun onRepeatRequested(repeatMode: MediaRepeatMode): Job { + val haRepeatValue = when (repeatMode) { + is MediaRepeatMode.Off -> "off" + is MediaRepeatMode.One -> "one" + is MediaRepeatMode.All -> "all" + } + return commandScope.launch { callMediaAction( - action = ACTION_SHUFFLE_SET, - extraData = mapOf("shuffle" to shuffle), + action = ACTION_REPEAT_SET, + extraData = mapOf("repeat" to haRepeatValue), ) } - - override fun onRepeatRequested(repeatMode: MediaRepeatMode): Job { - val haRepeatValue = when (repeatMode) { - is MediaRepeatMode.Off -> "off" - is MediaRepeatMode.One -> "one" - is MediaRepeatMode.All -> "all" - } - return commandScope.launch { - callMediaAction( - action = ACTION_REPEAT_SET, - extraData = mapOf("repeat" to haRepeatValue), - ) - } - } } + } /** * Creates the [MediaSession] and player, starts observing entity state, and suspends until @@ -205,7 +204,6 @@ class HaMediaSession @AssistedInject constructor( FailFast.failWhen(mediaSession != null) { "observe() called while a session is already active for ${config.entityId}" } - Timber.d("observe: starting for ${config.entityId}") launch { startObservingState() } @@ -216,9 +214,6 @@ class HaMediaSession @AssistedInject constructor( try { onSessionReady(session) awaitCancellation() - } catch (e: CancellationException) { - Timber.d("observe: cancelled for ${config.entityId}") - throw e } finally { Timber.d("observe: finally block running for ${config.entityId}, releasing player and session") mediaSession = null @@ -261,7 +256,7 @@ class HaMediaSession @AssistedInject constructor( } private fun buildMediaSession(player: HaRemoteMediaPlayer): MediaSession = MediaSession.Builder(context, player) - .setId("${config.serverId}:${config.entityId}") + .setId(id) .setCallback(MediaSessionCallback()) .build() .also { session -> @@ -289,8 +284,10 @@ class HaMediaSession @AssistedInject constructor( } private suspend fun callMediaAction(action: String, extraData: Map = emptyMap()) { - val actionData = hashMapOf("entity_id" to config.entityId) - actionData.putAll(extraData) + val actionData = buildMap { + put("entity_id", config.entityId) + putAll(extraData) + } try { serverManager.integrationRepository(config.serverId) .callAction(MEDIA_PLAYER_DOMAIN, action, actionData) @@ -307,10 +304,9 @@ class HaMediaSession @AssistedInject constructor( * @return An updated [ArtworkCache] reflecting the outcome of the load attempt. */ private suspend fun loadArtworkAndUpdatePlayer(state: MediaControlState, cache: ArtworkCache): ArtworkCache { - val pictureUrl = state.entityPictureUrl - val updatedCache = when { - pictureUrl == null -> ArtworkCache() - pictureUrl == cache.url -> cache + val updatedCache = when (val pictureUrl = state.entityPictureUrl) { + null -> ArtworkCache() + cache.url -> cache else -> { val bytes = resolveArtworkUrl(state)?.let { loadBitmapAsPng(it) } if (bytes != null) ArtworkCache(url = pictureUrl, bytes = bytes) else cache diff --git a/app/src/main/kotlin/io/homeassistant/companion/android/mediacontrol/HaMediaSessionService.kt b/app/src/main/kotlin/io/homeassistant/companion/android/mediacontrol/HaMediaSessionService.kt index 24e33c99743..172f0ed528c 100644 --- a/app/src/main/kotlin/io/homeassistant/companion/android/mediacontrol/HaMediaSessionService.kt +++ b/app/src/main/kotlin/io/homeassistant/companion/android/mediacontrol/HaMediaSessionService.kt @@ -156,11 +156,8 @@ class HaMediaSessionService @VisibleForTesting constructor(private val serviceSc } private suspend fun reconcileSessions(configuredEntities: List) { - Timber.d( - "reconcileSessions: received ${configuredEntities.size} entities=${configuredEntities.map { - it.entityId - }}", - ) + val desiredKeys = configuredEntities.map { it.sessionKey() }.toSet() + Timber.d("reconcileSessions: received ${configuredEntities.size} entities=$desiredKeys") if (configuredEntities.isEmpty()) { Timber.d("No media control entities configured, stopping service") @@ -172,7 +169,6 @@ class HaMediaSessionService @VisibleForTesting constructor(private val serviceSc // with onUpdateNotification and onTaskRemoved, which are always called on Main by the OS // and Media3. The diff is computed here on Main as well since it operates on small sets. withContext(Dispatchers.Main) { - val desiredKeys = configuredEntities.map { it.sessionKey() }.toSet() val currentKeys = activeSessions.keys.toSet() Timber.d("reconcileSessions: desiredKeys=$desiredKeys, currentKeys=$currentKeys") @@ -215,7 +211,7 @@ class HaMediaSessionService @VisibleForTesting constructor(private val serviceSc /** * Launches the observation coroutine for a new session, registers it with the service, and * stores it in [activeSessions]. - * Must be called from the Main dispatcher (required by [MediaSessionService.addSession]). + * Must be called from the Main thread to safely mutate [activeSessions]. */ private fun launchSession(key: String, session: HaMediaSession) { val job = serviceScope.launch { diff --git a/app/src/main/kotlin/io/homeassistant/companion/android/mediacontrol/HaRemoteMediaPlayer.kt b/app/src/main/kotlin/io/homeassistant/companion/android/mediacontrol/HaRemoteMediaPlayer.kt index 2331573dfbd..70dd3225fba 100644 --- a/app/src/main/kotlin/io/homeassistant/companion/android/mediacontrol/HaRemoteMediaPlayer.kt +++ b/app/src/main/kotlin/io/homeassistant/companion/android/mediacontrol/HaRemoteMediaPlayer.kt @@ -94,6 +94,7 @@ internal class HaRemoteMediaPlayer(looper: Looper, private val commandCallback: is MediaPlaybackState.Playing -> STATE_READY is MediaPlaybackState.Paused -> STATE_READY is MediaPlaybackState.Buffering -> STATE_BUFFERING + // STATE_IDLE would clear the media item; STATE_ENDED keeps the last track visible in the notification is MediaPlaybackState.Idle -> STATE_ENDED is MediaPlaybackState.Off -> STATE_IDLE } diff --git a/common/src/main/kotlin/io/homeassistant/companion/android/common/data/mediacontrol/MediaControlRepository.kt b/common/src/main/kotlin/io/homeassistant/companion/android/common/data/mediacontrol/MediaControlRepository.kt index 6bc8cb9f4cd..cdcd07b1ee0 100644 --- a/common/src/main/kotlin/io/homeassistant/companion/android/common/data/mediacontrol/MediaControlRepository.kt +++ b/common/src/main/kotlin/io/homeassistant/companion/android/common/data/mediacontrol/MediaControlRepository.kt @@ -9,16 +9,16 @@ import kotlinx.coroutines.flow.Flow interface MediaControlRepository { /** - * Emits the current [MediaControlState] for a single entity on subscription (via REST), - * then continues emitting whenever its state changes via WebSocket. - * Emits null when the entity is unavailable or the WebSocket subscription fails. + * Emits the current [MediaControlState] for a single entity, + * then continues emitting whenever its state changes. + * Emits null when the entity is unavailable. */ fun observeEntityState(config: MediaControlEntityConfig): Flow /** Returns the list of all configured media_player entities. */ suspend fun getConfiguredEntities(): List - /** Emits the list of configured entities whenever it changes in the database. */ + /** Emits the list of configured entities whenever it changes. */ fun observeConfiguredEntities(): Flow> /** Replaces the full list of configured media_player entities. */ diff --git a/common/src/main/kotlin/io/homeassistant/companion/android/common/data/mediacontrol/MediaControlRepositoryImpl.kt b/common/src/main/kotlin/io/homeassistant/companion/android/common/data/mediacontrol/MediaControlRepositoryImpl.kt index 08e5ffdd1d4..9ccae681c0d 100644 --- a/common/src/main/kotlin/io/homeassistant/companion/android/common/data/mediacontrol/MediaControlRepositoryImpl.kt +++ b/common/src/main/kotlin/io/homeassistant/companion/android/common/data/mediacontrol/MediaControlRepositoryImpl.kt @@ -56,11 +56,8 @@ internal class MediaControlRepositoryImpl @Inject constructor( override fun observeEntityState(config: MediaControlEntityConfig): Flow = flow { Timber.d("observeEntityState: starting for ${config.entityId}") - // Emit current state via REST so the caller has something to show immediately. - // The WebSocket added event delivers the same state again; distinctUntilChanged() - // at the end suppresses the duplicate. + // Emit current state immediately so the caller has something to show right away. getEntityState(config)?.let { - Timber.d("observeEntityState: emitting REST state for ${config.entityId}") emit(it) } @@ -79,16 +76,13 @@ internal class MediaControlRepositoryImpl @Inject constructor( var currentEntity: Entity? = null stateFlow.collect { event -> event.added?.get(config.entityId)?.let { - Timber.d("observeEntityState: 'added' event for ${config.entityId}") currentEntity = it.toEntity(config.entityId) } event.changed?.get(config.entityId)?.let { diff -> - Timber.d("observeEntityState: 'changed' event for ${config.entityId}") currentEntity = currentEntity?.applyCompressedStateDiff(diff) } event.removed?.let { removed -> if (config.entityId in removed) { - Timber.d("observeEntityState: 'removed' event for ${config.entityId}") currentEntity = null } } From e85b81a0922ff34d1f63685ba560ef37dfa51138 Mon Sep 17 00:00:00 2001 From: Fletcher Dostie Date: Tue, 12 May 2026 18:45:58 -0700 Subject: [PATCH 098/114] Address more PR review comments from @TimoPtr - Move NOTIFICATION_CHANNEL_ID to AppNotifChannels as CHANNEL_MEDIA_SESSION (thread 14) - Use direct map lookup activeSessions[session.id] instead of firstOrNull (thread 12) - Remove dead code: setConnecting(), isConnecting, buildConnectingState() (thread 16) - Use Entity.friendlyName in toMediaControlState(); make entityFriendlyName non-null (thread 22) --- .../android/mediacontrol/HaMediaSession.kt | 6 ++-- .../mediacontrol/HaMediaSessionService.kt | 5 +-- .../mediacontrol/HaRemoteMediaPlayer.kt | 36 ------------------- .../mediacontrol/HaMediaSessionServiceTest.kt | 2 +- .../mediacontrol/HaMediaSessionTest.kt | 2 +- .../mediacontrol/HaRemoteMediaPlayerTest.kt | 2 +- .../MediaControlRepositoryImpl.kt | 3 +- .../data/mediacontrol/MediaControlState.kt | 2 +- .../android/common/util/AppNotifChannels.kt | 2 ++ 9 files changed, 13 insertions(+), 47 deletions(-) diff --git a/app/src/main/kotlin/io/homeassistant/companion/android/mediacontrol/HaMediaSession.kt b/app/src/main/kotlin/io/homeassistant/companion/android/mediacontrol/HaMediaSession.kt index 649ba3fab24..89469c4bcad 100644 --- a/app/src/main/kotlin/io/homeassistant/companion/android/mediacontrol/HaMediaSession.kt +++ b/app/src/main/kotlin/io/homeassistant/companion/android/mediacontrol/HaMediaSession.kt @@ -29,6 +29,7 @@ import io.homeassistant.companion.android.common.data.mediacontrol.MediaPlayback import io.homeassistant.companion.android.common.data.mediacontrol.MediaRepeatMode import io.homeassistant.companion.android.common.data.servers.ServerManager import io.homeassistant.companion.android.common.data.servers.firstUrlOrNull +import io.homeassistant.companion.android.common.util.CHANNEL_MEDIA_SESSION import io.homeassistant.companion.android.common.util.FailFast import io.homeassistant.companion.android.launch.LaunchActivity import io.homeassistant.companion.android.util.sensitive @@ -93,7 +94,7 @@ class HaMediaSession @AssistedInject constructor( val session = mediaSession ?: return null val metadata = session.player.mediaMetadata val artworkBitmap = metadata.artworkData?.let { BitmapFactory.decodeByteArray(it, 0, it.size) } - return NotificationCompat.Builder(context, NOTIFICATION_CHANNEL_ID) + return NotificationCompat.Builder(context, CHANNEL_MEDIA_SESSION) .setStyle(MediaStyleNotificationHelper.MediaStyle(session)) .setSmallIcon(commonR.drawable.ic_stat_ic_notification) .setVisibility(NotificationCompat.VISIBILITY_PUBLIC) @@ -386,9 +387,6 @@ class HaMediaSession @AssistedInject constructor( private data class ArtworkCache(val url: String? = null, val bytes: ByteArray? = null) companion object { - /** Notification channel ID used for all media control notifications. */ - const val NOTIFICATION_CHANNEL_ID = "media_session" - /** Target pixel size for notification large icon artwork. Pre-scaling in Coil avoids * main-thread downscaling by Android's Icon class (StrictMode CustomViolation). */ private const val NOTIFICATION_ICON_SIZE_PX = 256 diff --git a/app/src/main/kotlin/io/homeassistant/companion/android/mediacontrol/HaMediaSessionService.kt b/app/src/main/kotlin/io/homeassistant/companion/android/mediacontrol/HaMediaSessionService.kt index 172f0ed528c..1ba5c9f7d82 100644 --- a/app/src/main/kotlin/io/homeassistant/companion/android/mediacontrol/HaMediaSessionService.kt +++ b/app/src/main/kotlin/io/homeassistant/companion/android/mediacontrol/HaMediaSessionService.kt @@ -16,6 +16,7 @@ import dagger.hilt.android.AndroidEntryPoint import io.homeassistant.companion.android.common.R as commonR import io.homeassistant.companion.android.common.data.mediacontrol.MediaControlEntityConfig import io.homeassistant.companion.android.common.data.mediacontrol.MediaControlRepository +import io.homeassistant.companion.android.common.util.CHANNEL_MEDIA_SESSION import javax.inject.Inject import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.Dispatchers @@ -102,7 +103,7 @@ class HaMediaSessionService @VisibleForTesting constructor(private val serviceSc // A session not in activeSessions is being torn down. removeSession() and player.release() // both trigger onUpdateNotification, so without this guard we would re-post a notification // we just cancelled, leaving a zombie media control card after removal. - val haSession = activeSessions.values.firstOrNull { (haSession, _) -> haSession.id == session.id }?.first + val haSession = activeSessions[session.id]?.first if (haSession == null || session.player.mediaItemCount == 0) { // Entity is off, no state has arrived yet, or the session is being torn down. @@ -249,7 +250,7 @@ class HaMediaSessionService @VisibleForTesting constructor(private val serviceSc private fun createNotificationChannel() { val channel = NotificationChannel( - HaMediaSession.NOTIFICATION_CHANNEL_ID, + CHANNEL_MEDIA_SESSION, getString(commonR.string.media_controls), NotificationManager.IMPORTANCE_LOW, ).apply { diff --git a/app/src/main/kotlin/io/homeassistant/companion/android/mediacontrol/HaRemoteMediaPlayer.kt b/app/src/main/kotlin/io/homeassistant/companion/android/mediacontrol/HaRemoteMediaPlayer.kt index 70dd3225fba..39ca0fb56a3 100644 --- a/app/src/main/kotlin/io/homeassistant/companion/android/mediacontrol/HaRemoteMediaPlayer.kt +++ b/app/src/main/kotlin/io/homeassistant/companion/android/mediacontrol/HaRemoteMediaPlayer.kt @@ -53,7 +53,6 @@ internal class HaRemoteMediaPlayer(looper: Looper, private val commandCallback: private var mediaState: MediaControlState? = null private var artworkBytes: ByteArray? = null - private var isConnecting: Boolean = false /** * Updates the internal state from a new [MediaControlState] and triggers a state refresh. @@ -62,27 +61,12 @@ internal class HaRemoteMediaPlayer(looper: Looper, private val commandCallback: */ @MainThread fun updateState(state: MediaControlState?, artworkPngBytes: ByteArray?) { - isConnecting = false mediaState = state artworkBytes = artworkPngBytes invalidateState() } - /** - * Signals that the connection to HA has been lost and is being retried. - * Transitions to [STATE_BUFFERING] with the last known metadata visible but all - * interactive commands disabled, so the notification stays visible without showing - * stale controls. - * Must be called on the looper thread passed to the constructor. - */ - @MainThread - fun setConnecting() { - isConnecting = true - invalidateState() - } - override fun getState(): State { - if (isConnecting) return buildConnectingState() val state = mediaState ?: return buildIdleState() return buildConnectedState(state, artworkBytes) } @@ -239,26 +223,6 @@ internal class HaRemoteMediaPlayer(looper: Looper, private val commandCallback: .setDeviceInfo(REMOTE_DEVICE_INFO) .build() - /** - * Builds a buffering state that keeps the last known metadata visible while the - * connection is being re-established. All interactive commands are disabled so the - * user cannot act on stale state. - */ - private fun buildConnectingState(): State { - val state = mediaState ?: return buildIdleState() - val currentItem = MediaItemData.Builder(state.entityId) - .setMediaMetadata(buildMetadata(state, artworkBytes)) - .build() - return State.Builder() - .setAvailableCommands(Player.Commands.EMPTY) - .setPlaybackState(STATE_BUFFERING) - .setPlayWhenReady(false, PLAY_WHEN_READY_CHANGE_REASON_REMOTE) - .setCurrentMediaItemIndex(CURRENT_ITEM_INDEX) - .setPlaylist(buildPlaylist(currentItem)) - .setDeviceInfo(REMOTE_DEVICE_INFO) - .build() - } - private fun buildAvailableCommands(state: MediaControlState): Player.Commands { val builder = Player.Commands.Builder() if (state.supportsPlay || state.supportsPause) builder.add(Player.COMMAND_PLAY_PAUSE) diff --git a/app/src/test/kotlin/io/homeassistant/companion/android/mediacontrol/HaMediaSessionServiceTest.kt b/app/src/test/kotlin/io/homeassistant/companion/android/mediacontrol/HaMediaSessionServiceTest.kt index 9a114862e76..43fc0de3764 100644 --- a/app/src/test/kotlin/io/homeassistant/companion/android/mediacontrol/HaMediaSessionServiceTest.kt +++ b/app/src/test/kotlin/io/homeassistant/companion/android/mediacontrol/HaMediaSessionServiceTest.kt @@ -186,7 +186,7 @@ class HaMediaSessionServiceTest { isVolumeMuted = false, shuffle = false, repeatMode = MediaRepeatMode.Off, - entityFriendlyName = null, + entityFriendlyName = "media_player.test", ) // -- Reconciliation via flow emissions -- diff --git a/app/src/test/kotlin/io/homeassistant/companion/android/mediacontrol/HaMediaSessionTest.kt b/app/src/test/kotlin/io/homeassistant/companion/android/mediacontrol/HaMediaSessionTest.kt index 38289dea73d..0404776a81f 100644 --- a/app/src/test/kotlin/io/homeassistant/companion/android/mediacontrol/HaMediaSessionTest.kt +++ b/app/src/test/kotlin/io/homeassistant/companion/android/mediacontrol/HaMediaSessionTest.kt @@ -105,7 +105,7 @@ class HaMediaSessionTest { isVolumeMuted = false, shuffle = false, repeatMode = MediaRepeatMode.Off, - entityFriendlyName = null, + entityFriendlyName = "media_player.test", ) private fun buildSession(): HaMediaSession = HaMediaSession( diff --git a/app/src/test/kotlin/io/homeassistant/companion/android/mediacontrol/HaRemoteMediaPlayerTest.kt b/app/src/test/kotlin/io/homeassistant/companion/android/mediacontrol/HaRemoteMediaPlayerTest.kt index d04044c8b8a..28f6612f28c 100644 --- a/app/src/test/kotlin/io/homeassistant/companion/android/mediacontrol/HaRemoteMediaPlayerTest.kt +++ b/app/src/test/kotlin/io/homeassistant/companion/android/mediacontrol/HaRemoteMediaPlayerTest.kt @@ -61,7 +61,7 @@ class HaRemoteMediaPlayerTest { isVolumeMuted: Boolean = false, shuffle: Boolean = false, repeatMode: MediaRepeatMode = MediaRepeatMode.Off, - entityFriendlyName: String? = null, + entityFriendlyName: String = "media_player.test", albumArtist: String? = null, mediaContentType: String? = null, mediaTrack: Int? = null, diff --git a/common/src/main/kotlin/io/homeassistant/companion/android/common/data/mediacontrol/MediaControlRepositoryImpl.kt b/common/src/main/kotlin/io/homeassistant/companion/android/common/data/mediacontrol/MediaControlRepositoryImpl.kt index 9ccae681c0d..0021d0bf72e 100644 --- a/common/src/main/kotlin/io/homeassistant/companion/android/common/data/mediacontrol/MediaControlRepositoryImpl.kt +++ b/common/src/main/kotlin/io/homeassistant/companion/android/common/data/mediacontrol/MediaControlRepositoryImpl.kt @@ -2,6 +2,7 @@ package io.homeassistant.companion.android.common.data.mediacontrol import io.homeassistant.companion.android.common.data.integration.Entity import io.homeassistant.companion.android.common.data.integration.applyCompressedStateDiff +import io.homeassistant.companion.android.common.data.integration.friendlyName import io.homeassistant.companion.android.common.data.integration.getAppName import io.homeassistant.companion.android.common.data.integration.getEntityPictureUrl import io.homeassistant.companion.android.common.data.integration.getMediaAlbumArtist @@ -169,7 +170,7 @@ private fun Entity.toMediaControlState(serverId: Int): MediaControlState { isVolumeMuted = getVolumeMuted(), shuffle = getShuffle(), repeatMode = repeatMode, - entityFriendlyName = attributes["friendly_name"] as? String, + entityFriendlyName = friendlyName, albumArtist = getMediaAlbumArtist(), mediaContentType = getMediaContentType(), mediaTrack = getMediaTrack(), diff --git a/common/src/main/kotlin/io/homeassistant/companion/android/common/data/mediacontrol/MediaControlState.kt b/common/src/main/kotlin/io/homeassistant/companion/android/common/data/mediacontrol/MediaControlState.kt index 4c1424d81fa..0c4d8040ace 100644 --- a/common/src/main/kotlin/io/homeassistant/companion/android/common/data/mediacontrol/MediaControlState.kt +++ b/common/src/main/kotlin/io/homeassistant/companion/android/common/data/mediacontrol/MediaControlState.kt @@ -51,7 +51,7 @@ data class MediaControlState( val isVolumeMuted: Boolean, val shuffle: Boolean, val repeatMode: MediaRepeatMode, - val entityFriendlyName: String?, + val entityFriendlyName: String, val albumArtist: String? = null, val mediaContentType: String? = null, val mediaTrack: Int? = null, diff --git a/common/src/main/kotlin/io/homeassistant/companion/android/common/util/AppNotifChannels.kt b/common/src/main/kotlin/io/homeassistant/companion/android/common/util/AppNotifChannels.kt index 7b4ae3f0e27..4d45865cc59 100755 --- a/common/src/main/kotlin/io/homeassistant/companion/android/common/util/AppNotifChannels.kt +++ b/common/src/main/kotlin/io/homeassistant/companion/android/common/util/AppNotifChannels.kt @@ -17,6 +17,7 @@ const val CHANNEL_DOWNLOADS = "downloads" const val CHANNEL_GENERAL = "general" const val CHANNEL_BEACON_MONITOR = "beacon" const val CHANNEL_ASSIST_LISTENING = "assist_listening" +const val CHANNEL_MEDIA_SESSION = "media_session" /** * List of all notification channel IDs created by the app. @@ -38,4 +39,5 @@ val appCreatedChannels = listOf( CHANNEL_GENERAL, CHANNEL_BEACON_MONITOR, CHANNEL_ASSIST_LISTENING, + CHANNEL_MEDIA_SESSION, ) From f4ff7c556f9c6379d8050ef5c44c820fabeee83a Mon Sep 17 00:00:00 2001 From: Fletcher Dostie Date: Tue, 12 May 2026 19:20:34 -0700 Subject: [PATCH 099/114] Address threading PR review comments (threads 8, 9, 10) - Thread 8: Document Main thread requirement on mediaSession, notificationArtwork, isPlaying, and hasActiveMedia via @get:/@set:MainThread annotations and KDoc - Thread 9: Assign mediaSession on Main thread (withContext(Dispatchers.Main)); move mediaSession = null into the existing NonCancellable + Main finally block - Thread 10: Cache decoded Bitmap alongside PNG bytes in ArtworkCache; decode on IO dispatcher in loadArtworkData() instead of on Main in buildNotification(); add @MainThread to buildNotification(); clear notificationArtwork on Main in the Off path and in the observe() finally block Also removes three setConnecting() tests made obsolete by thread 16 dead-code removal. --- .../android/mediacontrol/HaMediaSession.kt | 45 ++++++++++---- .../mediacontrol/HaRemoteMediaPlayerTest.kt | 59 ------------------- 2 files changed, 32 insertions(+), 72 deletions(-) diff --git a/app/src/main/kotlin/io/homeassistant/companion/android/mediacontrol/HaMediaSession.kt b/app/src/main/kotlin/io/homeassistant/companion/android/mediacontrol/HaMediaSession.kt index 89469c4bcad..b000af01ba3 100644 --- a/app/src/main/kotlin/io/homeassistant/companion/android/mediacontrol/HaMediaSession.kt +++ b/app/src/main/kotlin/io/homeassistant/companion/android/mediacontrol/HaMediaSession.kt @@ -4,9 +4,10 @@ import android.app.Notification import android.app.PendingIntent import android.content.Context import android.content.Intent +import android.graphics.Bitmap import android.graphics.Bitmap.CompressFormat -import android.graphics.BitmapFactory import android.os.Looper +import androidx.annotation.MainThread import androidx.annotation.OptIn import androidx.core.app.NotificationCompat import androidx.media3.common.util.UnstableApi @@ -72,14 +73,23 @@ class HaMediaSession @AssistedInject constructor( /** Stable identifier for this session, derived from the entity config. */ val id: String = "${config.serverId}:${config.entityId}" + /** Must be accessed from the Main thread. Non-null while [observe] is running. */ + @get:MainThread + @set:MainThread internal var mediaSession: MediaSession? = null private set - /** True if the player is currently playing and has at least one media item. */ + @get:MainThread + @set:MainThread + private var notificationArtwork: Bitmap? = null + + /** True if the player is currently playing and has at least one media item. Must be called from the Main thread. */ + @get:MainThread val isPlaying: Boolean get() = mediaSession?.player?.let { it.playWhenReady && it.mediaItemCount > 0 } == true - /** True if the player has at least one media item (playing or paused). */ + /** True if the player has at least one media item (playing or paused). Must be called from the Main thread. */ + @get:MainThread val hasActiveMedia: Boolean get() = mediaSession?.player?.let { it.mediaItemCount > 0 } == true @@ -89,11 +99,11 @@ class HaMediaSession @AssistedInject constructor( * * @return The notification, or null if the session is not currently active. */ + @MainThread @OptIn(UnstableApi::class) fun buildNotification(): Notification? { val session = mediaSession ?: return null val metadata = session.player.mediaMetadata - val artworkBitmap = metadata.artworkData?.let { BitmapFactory.decodeByteArray(it, 0, it.size) } return NotificationCompat.Builder(context, CHANNEL_MEDIA_SESSION) .setStyle(MediaStyleNotificationHelper.MediaStyle(session)) .setSmallIcon(commonR.drawable.ic_stat_ic_notification) @@ -101,7 +111,7 @@ class HaMediaSession @AssistedInject constructor( .setCategory(NotificationCompat.CATEGORY_TRANSPORT) .setContentTitle(metadata.title ?: id) .setContentText(metadata.artist) - .setLargeIcon(artworkBitmap) + .setLargeIcon(notificationArtwork) .setOngoing(session.player.isPlaying) .setContentIntent(session.sessionActivity) .build() @@ -211,14 +221,15 @@ class HaMediaSession @AssistedInject constructor( val player = HaRemoteMediaPlayer(Looper.getMainLooper(), getCommandCallback(this)) val session = buildMediaSession(player) - mediaSession = session + withContext(Dispatchers.Main) { mediaSession = session } try { onSessionReady(session) awaitCancellation() } finally { Timber.d("observe: finally block running for ${config.entityId}, releasing player and session") - mediaSession = null withContext(NonCancellable + Dispatchers.Main) { + mediaSession = null + notificationArtwork = null player.release() session.release() } @@ -245,6 +256,7 @@ class HaMediaSession @AssistedInject constructor( // currently-playing session (e.g. another configured entity), hiding its control. artworkCache = ArtworkCache() withContext(Dispatchers.Main) { + notificationArtwork = null mediaSession?.player?.let { (it as? HaRemoteMediaPlayer)?.updateState(state = null, artworkPngBytes = null) } @@ -309,12 +321,19 @@ class HaMediaSession @AssistedInject constructor( null -> ArtworkCache() cache.url -> cache else -> { - val bytes = resolveArtworkUrl(state)?.let { loadBitmapAsPng(it) } - if (bytes != null) ArtworkCache(url = pictureUrl, bytes = bytes) else cache + val artworkData = resolveArtworkUrl(state)?.let { loadArtworkData(it) } + if (artworkData != + null + ) { + ArtworkCache(url = pictureUrl, bytes = artworkData.first, bitmap = artworkData.second) + } else { + cache + } } } withContext(Dispatchers.Main) { + notificationArtwork = updatedCache.bitmap mediaSession?.player?.let { player -> (player as? HaRemoteMediaPlayer)?.updateState(state = state, artworkPngBytes = updatedCache.bytes) } @@ -340,8 +359,8 @@ class HaMediaSession @AssistedInject constructor( return URL(baseUrl, entityPictureUrl).toString() } - /** Loads album art and compresses to PNG bytes on the IO dispatcher. */ - private suspend fun loadBitmapAsPng(url: String): ByteArray? = withContext(Dispatchers.IO) { + /** Loads album art and compresses to PNG bytes on the IO dispatcher, also returning the decoded bitmap. */ + private suspend fun loadArtworkData(url: String): Pair? = withContext(Dispatchers.IO) { try { val request = ImageRequest.Builder(context) .data(url) @@ -352,7 +371,7 @@ class HaMediaSession @AssistedInject constructor( result.image?.toBitmap()?.let { bitmap -> val stream = ByteArrayOutputStream() bitmap.compress(CompressFormat.PNG, 100, stream) - stream.toByteArray() + stream.toByteArray() to bitmap } } catch (e: CancellationException) { throw e @@ -384,7 +403,7 @@ class HaMediaSession @AssistedInject constructor( } /** Immutable cache of the last successfully loaded artwork. */ - private data class ArtworkCache(val url: String? = null, val bytes: ByteArray? = null) + private data class ArtworkCache(val url: String? = null, val bytes: ByteArray? = null, val bitmap: Bitmap? = null) companion object { /** Target pixel size for notification large icon artwork. Pre-scaling in Coil avoids diff --git a/app/src/test/kotlin/io/homeassistant/companion/android/mediacontrol/HaRemoteMediaPlayerTest.kt b/app/src/test/kotlin/io/homeassistant/companion/android/mediacontrol/HaRemoteMediaPlayerTest.kt index 28f6612f28c..8ee830c108a 100644 --- a/app/src/test/kotlin/io/homeassistant/companion/android/mediacontrol/HaRemoteMediaPlayerTest.kt +++ b/app/src/test/kotlin/io/homeassistant/companion/android/mediacontrol/HaRemoteMediaPlayerTest.kt @@ -614,63 +614,4 @@ class HaRemoteMediaPlayerTest { fun `Given repeat mode All when getState then maps to REPEAT_MODE_ALL and set triggers callback`() { assertRepeatModeRoundTrip(mediaRepeatMode = MediaRepeatMode.All, media3RepeatMode = Player.REPEAT_MODE_ALL) } - - // -- setConnecting tests -- - - @Test - fun `Given prior state when setConnecting then playback state is buffering`() { - player.updateState(state = createState(playbackState = MediaPlaybackState.Playing), artworkPngBytes = null) - shadowOf(Looper.getMainLooper()).idle() - - player.setConnecting() - shadowOf(Looper.getMainLooper()).idle() - - assertEquals(Player.STATE_BUFFERING, player.playbackState) - } - - @Test - fun `Given prior state when setConnecting then all media commands are disabled`() { - player.updateState( - state = createState( - supportsPlay = true, - supportsPause = true, - supportsSeek = true, - supportsPreviousTrack = true, - supportsNextTrack = true, - supportsVolumeSet = true, - volumeLevel = 0.5f, - ), - artworkPngBytes = null, - ) - shadowOf(Looper.getMainLooper()).idle() - - player.setConnecting() - shadowOf(Looper.getMainLooper()).idle() - - assertFalse(player.availableCommands.contains(Player.COMMAND_PLAY_PAUSE)) - assertFalse(player.availableCommands.contains(Player.COMMAND_SEEK_IN_CURRENT_MEDIA_ITEM)) - assertFalse(player.availableCommands.contains(Player.COMMAND_SEEK_TO_NEXT)) - assertFalse(player.availableCommands.contains(Player.COMMAND_SEEK_TO_PREVIOUS)) - @Suppress("DEPRECATION") - assertFalse(player.availableCommands.contains(Player.COMMAND_SET_DEVICE_VOLUME)) - @Suppress("DEPRECATION") - assertFalse(player.availableCommands.contains(Player.COMMAND_ADJUST_DEVICE_VOLUME)) - } - - @Test - fun `Given prior metadata when setConnecting then metadata is retained in player state`() { - player.updateState( - state = createState(title = "Retained Title", artist = "Retained Artist", albumName = "Retained Album"), - artworkPngBytes = null, - ) - shadowOf(Looper.getMainLooper()).idle() - - player.setConnecting() - shadowOf(Looper.getMainLooper()).idle() - - val metadata = player.mediaMetadata - assertEquals("Retained Title", metadata.title?.toString()) - assertEquals("Retained Artist", metadata.artist?.toString()) - assertEquals("Retained Album", metadata.albumTitle?.toString()) - } } From ea35aed77ea6033cd93b68661b1f626f15330bfb Mon Sep 17 00:00:00 2001 From: Fletcher Dostie Date: Tue, 12 May 2026 19:39:50 -0700 Subject: [PATCH 100/114] Address PR thread 6: move startObservingState after player creation Creates HaRemoteMediaPlayer and MediaSession before starting observation, eliminating the race window where state could arrive before the player existed. startObservingState now takes the player directly, removing the null-safe cast. Replaces launch { startObservingState() } + awaitCancellation() with a direct startObservingState(player) call as the natural suspension point. Adds cleanup in launchSession for the case where the entity state flow completes normally: removes the stale activeSessions entry so reconcileSessions can restart the session if the entity is still configured. --- .../android/mediacontrol/HaMediaSession.kt | 30 ++++++++----------- .../mediacontrol/HaMediaSessionService.kt | 10 +++++++ .../mediacontrol/HaMediaSessionTest.kt | 17 +++++------ 3 files changed, 29 insertions(+), 28 deletions(-) diff --git a/app/src/main/kotlin/io/homeassistant/companion/android/mediacontrol/HaMediaSession.kt b/app/src/main/kotlin/io/homeassistant/companion/android/mediacontrol/HaMediaSession.kt index b000af01ba3..0b01c036bb8 100644 --- a/app/src/main/kotlin/io/homeassistant/companion/android/mediacontrol/HaMediaSession.kt +++ b/app/src/main/kotlin/io/homeassistant/companion/android/mediacontrol/HaMediaSession.kt @@ -43,7 +43,6 @@ import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.Job import kotlinx.coroutines.NonCancellable import kotlinx.coroutines.SupervisorJob -import kotlinx.coroutines.awaitCancellation import kotlinx.coroutines.coroutineScope import kotlinx.coroutines.launch import kotlinx.coroutines.withContext @@ -216,15 +215,12 @@ class HaMediaSession @AssistedInject constructor( "observe() called while a session is already active for ${config.entityId}" } - launch { startObservingState() } - - val player = - HaRemoteMediaPlayer(Looper.getMainLooper(), getCommandCallback(this)) + val player = HaRemoteMediaPlayer(Looper.getMainLooper(), getCommandCallback(this)) val session = buildMediaSession(player) withContext(Dispatchers.Main) { mediaSession = session } try { onSessionReady(session) - awaitCancellation() + startObservingState(player) } finally { Timber.d("observe: finally block running for ${config.entityId}, releasing player and session") withContext(NonCancellable + Dispatchers.Main) { @@ -240,7 +236,7 @@ class HaMediaSession @AssistedInject constructor( /** * Observes entity state for [config] until the flow completes or the coroutine is cancelled. */ - private suspend fun startObservingState() { + private suspend fun startObservingState(player: HaRemoteMediaPlayer) { Timber.d("startObservingState: starting for ${config.entityId}") var artworkCache = ArtworkCache() mediaControlRepository.observeEntityState(config).collect { state -> @@ -257,12 +253,10 @@ class HaMediaSession @AssistedInject constructor( artworkCache = ArtworkCache() withContext(Dispatchers.Main) { notificationArtwork = null - mediaSession?.player?.let { - (it as? HaRemoteMediaPlayer)?.updateState(state = null, artworkPngBytes = null) - } + player.updateState(state = null, artworkPngBytes = null) } } else { - artworkCache = loadArtworkAndUpdatePlayer(state, artworkCache) + artworkCache = loadArtworkAndUpdatePlayer(state, artworkCache, player) } } Timber.d("startObservingState: flow collection ended for ${config.entityId}") @@ -316,15 +310,17 @@ class HaMediaSession @AssistedInject constructor( * * @return An updated [ArtworkCache] reflecting the outcome of the load attempt. */ - private suspend fun loadArtworkAndUpdatePlayer(state: MediaControlState, cache: ArtworkCache): ArtworkCache { + private suspend fun loadArtworkAndUpdatePlayer( + state: MediaControlState, + cache: ArtworkCache, + player: HaRemoteMediaPlayer, + ): ArtworkCache { val updatedCache = when (val pictureUrl = state.entityPictureUrl) { null -> ArtworkCache() cache.url -> cache else -> { val artworkData = resolveArtworkUrl(state)?.let { loadArtworkData(it) } - if (artworkData != - null - ) { + if (artworkData != null) { ArtworkCache(url = pictureUrl, bytes = artworkData.first, bitmap = artworkData.second) } else { cache @@ -334,9 +330,7 @@ class HaMediaSession @AssistedInject constructor( withContext(Dispatchers.Main) { notificationArtwork = updatedCache.bitmap - mediaSession?.player?.let { player -> - (player as? HaRemoteMediaPlayer)?.updateState(state = state, artworkPngBytes = updatedCache.bytes) - } + player.updateState(state = state, artworkPngBytes = updatedCache.bytes) } return updatedCache } diff --git a/app/src/main/kotlin/io/homeassistant/companion/android/mediacontrol/HaMediaSessionService.kt b/app/src/main/kotlin/io/homeassistant/companion/android/mediacontrol/HaMediaSessionService.kt index 1ba5c9f7d82..d31aec774b4 100644 --- a/app/src/main/kotlin/io/homeassistant/companion/android/mediacontrol/HaMediaSessionService.kt +++ b/app/src/main/kotlin/io/homeassistant/companion/android/mediacontrol/HaMediaSessionService.kt @@ -217,6 +217,16 @@ class HaMediaSessionService @VisibleForTesting constructor(private val serviceSc private fun launchSession(key: String, session: HaMediaSession) { val job = serviceScope.launch { session.observe { mediaSession -> addSession(mediaSession) } + // observe() returned normally (the entity state flow completed rather than suspending + // indefinitely). The finally block in observe() has already released Media3 resources. + // Remove the stale map entry so a subsequent reconcileSessions emission can restart + // the session if the entity is still configured. This path is not taken on cancellation + // (tearDownSession calls job.cancelAndJoin()), because CancellationException propagates + // past the line above and skips this cleanup. + withContext(Dispatchers.Main) { + activeSessions.remove(key) + Timber.d("Session $key observation ended normally, removed stale entry") + } } activeSessions[key] = session to job Timber.d("Added media session for $key") diff --git a/app/src/test/kotlin/io/homeassistant/companion/android/mediacontrol/HaMediaSessionTest.kt b/app/src/test/kotlin/io/homeassistant/companion/android/mediacontrol/HaMediaSessionTest.kt index 0404776a81f..d6ca01050ad 100644 --- a/app/src/test/kotlin/io/homeassistant/companion/android/mediacontrol/HaMediaSessionTest.kt +++ b/app/src/test/kotlin/io/homeassistant/companion/android/mediacontrol/HaMediaSessionTest.kt @@ -218,12 +218,12 @@ class HaMediaSessionTest { } /** - * Verifies that when `observeEntityState` flow completes naturally (e.g. WebSocket disconnected), - * the session stays alive — `observe()` keeps running via `awaitCancellation()` and - * `mediaSession` remains non-null so the notification is not removed. + * Verifies that when `observeEntityState` flow completes naturally (e.g. WebSocket subscription + * ended), `observe()` returns normally and tears down the session. `mediaSession` becomes null + * and `buildNotification()` returns null, preventing a stale notification from remaining. */ @Test - fun `Given observeEntityState flow completes when startObservingState then session stays alive`() { + fun `Given observeEntityState flow completes when startObservingState then session is torn down`() { coEvery { mediaControlRepository.observeEntityState(config) } returns flowOf( createState(playbackState = MediaPlaybackState.Playing), ) @@ -234,12 +234,9 @@ class HaMediaSessionTest { } idleMainLooper() - // The observation job completed naturally but observe() is still suspended in - // awaitCancellation(), so the session and its notification remain active. - assertNotNull(session.buildNotification()) - org.junit.Assert.assertTrue(job.isActive) - - job.cancel() + // The flow completed, so observe() exited via its finally block — session is torn down. + assertNull(session.buildNotification()) + org.junit.Assert.assertFalse(job.isActive) } // -- Artwork caching tests -- From 9727ee43e1586997263486ef1bc6715332fa5f9b Mon Sep 17 00:00:00 2001 From: Fletcher Dostie Date: Tue, 12 May 2026 19:49:23 -0700 Subject: [PATCH 101/114] Return failed future for unsupported commands in handleCommand When a command lambda returns null (unsupported action), return immediateFailedFuture(UnsupportedOperationException) instead of immediateFuture(null) so SimpleBasePlayer is explicitly told the command failed rather than silently succeeded. --- .../companion/android/mediacontrol/HaRemoteMediaPlayer.kt | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/app/src/main/kotlin/io/homeassistant/companion/android/mediacontrol/HaRemoteMediaPlayer.kt b/app/src/main/kotlin/io/homeassistant/companion/android/mediacontrol/HaRemoteMediaPlayer.kt index 39ca0fb56a3..3e7ad20fdc4 100644 --- a/app/src/main/kotlin/io/homeassistant/companion/android/mediacontrol/HaRemoteMediaPlayer.kt +++ b/app/src/main/kotlin/io/homeassistant/companion/android/mediacontrol/HaRemoteMediaPlayer.kt @@ -198,14 +198,15 @@ internal class HaRemoteMediaPlayer(looper: Looper, private val commandCallback: * * [CancellationException] from the [Job] is treated as success (the command was sent; the * scope was cancelled). If [block] itself throws before returning a [Job], returns an - * immediate failed future. + * immediate failed future. If [block] returns null (command not supported), returns an + * immediate failed future with [UnsupportedOperationException]. */ private inline fun handleCommand(block: () -> Job?): ListenableFuture { val job = try { block() } catch (e: Exception) { return Futures.immediateFailedFuture(e) - } ?: return Futures.immediateFuture(null) + } ?: return Futures.immediateFailedFuture(UnsupportedOperationException("Command not supported")) val future = SettableFuture.create() job.invokeOnCompletion { cause -> when (cause) { From aa94487652d392cce1d37069c0b93bc31bb6d424 Mon Sep 17 00:00:00 2001 From: Fletcher Dostie Date: Tue, 12 May 2026 20:25:29 -0700 Subject: [PATCH 102/114] Fix HaMediaSession coroutineScope hanging on natural flow completion MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The commandScope inside getCommandCallback used SupervisorJob(parentJob), making it a registered child of the coroutineScope{} block's job. When the entity state flow completed naturally, coroutineScope waited for all children — including this never-cancelled supervisor job — and never returned. Move commandScope creation into observe() using SupervisorJob() (no parent) so it does not block coroutineScope from completing. Cancel it explicitly in the finally block to clean up any in-flight commands whenever the session tears down, whether by cancellation or flow completion. --- .../android/mediacontrol/HaMediaSession.kt | 48 +++++++++---------- 1 file changed, 23 insertions(+), 25 deletions(-) diff --git a/app/src/main/kotlin/io/homeassistant/companion/android/mediacontrol/HaMediaSession.kt b/app/src/main/kotlin/io/homeassistant/companion/android/mediacontrol/HaMediaSession.kt index 0b01c036bb8..3128d17776b 100644 --- a/app/src/main/kotlin/io/homeassistant/companion/android/mediacontrol/HaMediaSession.kt +++ b/app/src/main/kotlin/io/homeassistant/companion/android/mediacontrol/HaMediaSession.kt @@ -43,6 +43,7 @@ import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.Job import kotlinx.coroutines.NonCancellable import kotlinx.coroutines.SupervisorJob +import kotlinx.coroutines.cancel import kotlinx.coroutines.coroutineScope import kotlinx.coroutines.launch import kotlinx.coroutines.withContext @@ -117,68 +118,56 @@ class HaMediaSession @AssistedInject constructor( } private fun getCommandCallback(scope: CoroutineScope) = object : HaRemoteMediaPlayer.CommandCallback { - // SupervisorJob: a failed command doesn't cancel the observation scope. - // CoroutineExceptionHandler: prevents the unhandled exception from crashing the - // process. The error is already delivered to SimpleBasePlayer via - // future.setException() in handleCommand's invokeOnCompletion handler. - private val commandScope = CoroutineScope( - scope.coroutineContext + - SupervisorJob(scope.coroutineContext[Job]) + - CoroutineExceptionHandler { _, e -> - Timber.e(e, "Command failed for ${config.entityId}") - }, - ) - - override fun onPlayRequested() = commandScope.launch { + override fun onPlayRequested() = scope.launch { callMediaAction(ACTION_MEDIA_PLAY) } - override fun onPauseRequested() = commandScope.launch { + override fun onPauseRequested() = scope.launch { callMediaAction(ACTION_MEDIA_PAUSE) } - override fun onSeekRequested(positionMs: Long) = commandScope.launch { + override fun onSeekRequested(positionMs: Long) = scope.launch { callMediaAction( action = ACTION_MEDIA_SEEK, extraData = mapOf("seek_position" to positionMs / 1000.0), ) } - override fun onNextRequested() = commandScope.launch { + override fun onNextRequested() = scope.launch { callMediaAction(ACTION_MEDIA_NEXT_TRACK) } - override fun onPreviousRequested() = commandScope.launch { + override fun onPreviousRequested() = scope.launch { callMediaAction(ACTION_MEDIA_PREVIOUS_TRACK) } - override fun onSetVolumeRequested(volume: Float) = commandScope.launch { + override fun onSetVolumeRequested(volume: Float) = scope.launch { callMediaAction( action = ACTION_VOLUME_SET, extraData = mapOf("volume_level" to volume), ) } - override fun onIncreaseVolumeRequested() = commandScope.launch { + override fun onIncreaseVolumeRequested() = scope.launch { callMediaAction(ACTION_VOLUME_UP) } - override fun onDecreaseVolumeRequested() = commandScope.launch { + override fun onDecreaseVolumeRequested() = scope.launch { callMediaAction(ACTION_VOLUME_DOWN) } - override fun onMuteRequested(muted: Boolean) = commandScope.launch { + override fun onMuteRequested(muted: Boolean) = scope.launch { callMediaAction( action = ACTION_VOLUME_MUTE, extraData = mapOf("is_volume_muted" to muted), ) } - override fun onStopRequested() = commandScope.launch { + override fun onStopRequested() = scope.launch { callMediaAction(ACTION_MEDIA_STOP) } - override fun onShuffleRequested(shuffle: Boolean) = commandScope.launch { + override fun onShuffleRequested(shuffle: Boolean) = scope.launch { callMediaAction( action = ACTION_SHUFFLE_SET, extraData = mapOf("shuffle" to shuffle), @@ -191,7 +180,7 @@ class HaMediaSession @AssistedInject constructor( is MediaRepeatMode.One -> "one" is MediaRepeatMode.All -> "all" } - return commandScope.launch { + return scope.launch { callMediaAction( action = ACTION_REPEAT_SET, extraData = mapOf("repeat" to haRepeatValue), @@ -215,13 +204,22 @@ class HaMediaSession @AssistedInject constructor( "observe() called while a session is already active for ${config.entityId}" } - val player = HaRemoteMediaPlayer(Looper.getMainLooper(), getCommandCallback(this)) + // SupervisorJob without a parent: command failures don't propagate to the + // observation scope, and this scope does not block coroutineScope from completing + // when the entity state flow ends naturally. Cancelled explicitly in the finally block. + val commandScope = CoroutineScope( + coroutineContext + SupervisorJob() + CoroutineExceptionHandler { _, e -> + Timber.e(e, "Command failed for ${config.entityId}") + }, + ) + val player = HaRemoteMediaPlayer(Looper.getMainLooper(), getCommandCallback(commandScope)) val session = buildMediaSession(player) withContext(Dispatchers.Main) { mediaSession = session } try { onSessionReady(session) startObservingState(player) } finally { + commandScope.cancel() Timber.d("observe: finally block running for ${config.entityId}, releasing player and session") withContext(NonCancellable + Dispatchers.Main) { mediaSession = null From f6081030d552ba42b9c1fa23b128c22532e94c4d Mon Sep 17 00:00:00 2001 From: Fletcher Dostie Date: Tue, 12 May 2026 20:59:45 -0700 Subject: [PATCH 103/114] Clarify comment on MediaPlaybackState.Off -> STATE_IDLE mapping --- .../companion/android/mediacontrol/HaRemoteMediaPlayer.kt | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/app/src/main/kotlin/io/homeassistant/companion/android/mediacontrol/HaRemoteMediaPlayer.kt b/app/src/main/kotlin/io/homeassistant/companion/android/mediacontrol/HaRemoteMediaPlayer.kt index 3e7ad20fdc4..2792caa547f 100644 --- a/app/src/main/kotlin/io/homeassistant/companion/android/mediacontrol/HaRemoteMediaPlayer.kt +++ b/app/src/main/kotlin/io/homeassistant/companion/android/mediacontrol/HaRemoteMediaPlayer.kt @@ -78,7 +78,11 @@ internal class HaRemoteMediaPlayer(looper: Looper, private val commandCallback: is MediaPlaybackState.Playing -> STATE_READY is MediaPlaybackState.Paused -> STATE_READY is MediaPlaybackState.Buffering -> STATE_BUFFERING - // STATE_IDLE would clear the media item; STATE_ENDED keeps the last track visible in the notification + // HA "Idle" (on, nothing playing) and Media3 STATE_IDLE share a name but mean different + // things: STATE_IDLE means "not prepared", which suppresses the notification until the + // player plays something. STATE_ENDED keeps the notification visible so the entity + // remains controllable. HA "Off" maps to STATE_IDLE for the opposite reason: the device + // is unavailable, so letting the notification disappear is the right behavior. is MediaPlaybackState.Idle -> STATE_ENDED is MediaPlaybackState.Off -> STATE_IDLE } From 86d04201cb35b84bde40f47f74e8e375a2039cfe Mon Sep 17 00:00:00 2001 From: Fletcher Dostie Date: Fri, 15 May 2026 04:41:29 -0700 Subject: [PATCH 104/114] Address trivial PR review comments (threads 33, 35, 48, 51) - Thread 33: Replace implementation-detail KDoc on MediaControlSettingsScreen with caller-facing description - Thread 35: Change subtitle parameter in ConfiguredEntityRow from String? to String; remove null-check - Thread 48: Add serverId to loadRegistry error log message - Thread 51: Replace all getSessions() calls with sessions Kotlin accessor in HaMediaSessionServiceTest --- .../MediaControlSettingsViewModel.kt | 2 +- .../views/MediaControlSettingsScreen.kt | 18 +++++++------- .../mediacontrol/HaMediaSessionServiceTest.kt | 24 +++++++++---------- 3 files changed, 21 insertions(+), 23 deletions(-) diff --git a/app/src/main/kotlin/io/homeassistant/companion/android/settings/mediacontrol/MediaControlSettingsViewModel.kt b/app/src/main/kotlin/io/homeassistant/companion/android/settings/mediacontrol/MediaControlSettingsViewModel.kt index 388a6eec054..18bd6251c3d 100644 --- a/app/src/main/kotlin/io/homeassistant/companion/android/settings/mediacontrol/MediaControlSettingsViewModel.kt +++ b/app/src/main/kotlin/io/homeassistant/companion/android/settings/mediacontrol/MediaControlSettingsViewModel.kt @@ -254,7 +254,7 @@ class MediaControlSettingsViewModel @VisibleForTesting constructor( } catch (e: CancellationException) { throw e } catch (e: Exception) { - Timber.e(e, "Couldn't load $name for server") + Timber.e(e, "Couldn't load $name for server $serverId") emptyList() } } diff --git a/app/src/main/kotlin/io/homeassistant/companion/android/settings/mediacontrol/views/MediaControlSettingsScreen.kt b/app/src/main/kotlin/io/homeassistant/companion/android/settings/mediacontrol/views/MediaControlSettingsScreen.kt index f048023439e..2d9581c97a6 100644 --- a/app/src/main/kotlin/io/homeassistant/companion/android/settings/mediacontrol/views/MediaControlSettingsScreen.kt +++ b/app/src/main/kotlin/io/homeassistant/companion/android/settings/mediacontrol/views/MediaControlSettingsScreen.kt @@ -43,7 +43,7 @@ import io.homeassistant.companion.android.util.compose.entity.EntityPicker import io.homeassistant.companion.android.util.plus import io.homeassistant.companion.android.util.safeBottomPaddingValues -/** Outer composable that extracts state from the ViewModel and delegates to the stateless content. */ +/** Displays the media controls settings screen, backed by [MediaControlSettingsViewModel]. */ @Composable fun MediaControlSettingsScreen(viewModel: MediaControlSettingsViewModel, modifier: Modifier = Modifier) { val uiState by viewModel.uiState.collectAsStateWithLifecycle() @@ -140,7 +140,7 @@ internal fun MediaControlSettingsContent( @Composable private fun ConfiguredEntityRow( config: MediaControlEntityConfig, - subtitle: String?, + subtitle: String, entityName: String?, entityIcon: IIcon?, onRemove: () -> Unit, @@ -178,14 +178,12 @@ private fun ConfiguredEntityRow( color = colorScheme.colorTextPrimary, textAlign = TextAlign.Start, ) - if (subtitle != null) { - Text( - text = subtitle, - style = HATextStyle.BodyMedium, - color = colorScheme.colorTextSecondary, - textAlign = TextAlign.Start, - ) - } + Text( + text = subtitle, + style = HATextStyle.BodyMedium, + color = colorScheme.colorTextSecondary, + textAlign = TextAlign.Start, + ) } HAIconButton( icon = Icons.Default.Clear, diff --git a/app/src/test/kotlin/io/homeassistant/companion/android/mediacontrol/HaMediaSessionServiceTest.kt b/app/src/test/kotlin/io/homeassistant/companion/android/mediacontrol/HaMediaSessionServiceTest.kt index 43fc0de3764..1187d8ec443 100644 --- a/app/src/test/kotlin/io/homeassistant/companion/android/mediacontrol/HaMediaSessionServiceTest.kt +++ b/app/src/test/kotlin/io/homeassistant/companion/android/mediacontrol/HaMediaSessionServiceTest.kt @@ -198,8 +198,8 @@ class HaMediaSessionServiceTest { startObserving() idleMainLooper() - assertEquals(1, service.getSessions().size) - assertTrue(service.getSessions().any { it.id == "1:${config.entityId}" }) + assertEquals(1, service.sessions.size) + assertTrue(service.sessions.any { it.id == "1:${config.entityId}" }) } @Test @@ -210,9 +210,9 @@ class HaMediaSessionServiceTest { startObserving() idleMainLooper() - assertEquals(2, service.getSessions().size) - assertTrue(service.getSessions().any { it.id == "1:${configA.entityId}" }) - assertTrue(service.getSessions().any { it.id == "1:${configB.entityId}" }) + assertEquals(2, service.sessions.size) + assertTrue(service.sessions.any { it.id == "1:${configA.entityId}" }) + assertTrue(service.sessions.any { it.id == "1:${configB.entityId}" }) } @Test @@ -226,8 +226,8 @@ class HaMediaSessionServiceTest { configuredEntitiesFlow.tryEmit(listOf(configB)) idleMainLooper() - assertEquals(1, service.getSessions().size) - assertTrue(service.getSessions().any { it.id == "1:${configB.entityId}" }) + assertEquals(1, service.sessions.size) + assertTrue(service.sessions.any { it.id == "1:${configB.entityId}" }) } @Test @@ -236,13 +236,13 @@ class HaMediaSessionServiceTest { configuredEntitiesFlow.tryEmit(listOf(config)) startObserving() idleMainLooper() - val sessionBefore = service.getSessions().first() + val sessionBefore = service.sessions.first() configuredEntitiesFlow.tryEmit(listOf(config)) idleMainLooper() - assertEquals(1, service.getSessions().size) - assertSame(sessionBefore, service.getSessions().first()) + assertEquals(1, service.sessions.size) + assertSame(sessionBefore, service.sessions.first()) } @Test @@ -305,13 +305,13 @@ class HaMediaSessionServiceTest { configuredEntitiesFlow.tryEmit(listOf(config)) startObserving() idleMainLooper() - assertEquals(1, service.getSessions().size) + assertEquals(1, service.sessions.size) // onDestroy() calls removeSession() explicitly for each active session before cancelling // the observation jobs, so getSessions() is empty immediately after the call. service.onDestroy() idleMainLooper() - assertTrue(service.getSessions().isEmpty()) + assertTrue(service.sessions.isEmpty()) } } From 5c19e0744a5f26b0b5313a17f03463003677ceb1 Mon Sep 17 00:00:00 2001 From: Fletcher Dostie Date: Fri, 15 May 2026 05:08:13 -0700 Subject: [PATCH 105/114] Address PR review comments (threads 29, 30, 32, 36, 52) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Thread 29: Use ServiceController.of(HaMediaSessionService(observationScope), null) in tests instead of Robolectric.buildService; remove reflection-based scope injection - Thread 30: Make startObservingEntities() @VisibleForTesting internal; replace reflection-based invocation in test with direct call - Thread 32: Add notificationEntityName field (set from entityFriendlyName on Main); use as fallback in buildNotification title instead of raw id string - Thread 36: Remove Surface wrapper from ConfiguredEntityRow; apply background color directly to Row via Modifier.background - Thread 52: Consolidate entity config key — move session id format into MediaControlEntityConfig as a property --- .../android/mediacontrol/HaMediaSession.kt | 13 ++- .../mediacontrol/HaMediaSessionService.kt | 11 ++- .../views/MediaControlSettingsScreen.kt | 81 +++++++++---------- .../mediacontrol/HaMediaSessionServiceTest.kt | 31 +++---- .../mediacontrol/MediaControlEntityConfig.kt | 4 +- 5 files changed, 69 insertions(+), 71 deletions(-) diff --git a/app/src/main/kotlin/io/homeassistant/companion/android/mediacontrol/HaMediaSession.kt b/app/src/main/kotlin/io/homeassistant/companion/android/mediacontrol/HaMediaSession.kt index 3128d17776b..67df0491826 100644 --- a/app/src/main/kotlin/io/homeassistant/companion/android/mediacontrol/HaMediaSession.kt +++ b/app/src/main/kotlin/io/homeassistant/companion/android/mediacontrol/HaMediaSession.kt @@ -70,8 +70,8 @@ class HaMediaSession @AssistedInject constructor( private val mediaControlRepository: MediaControlRepository, private val serverManager: ServerManager, ) { - /** Stable identifier for this session, derived from the entity config. */ - val id: String = "${config.serverId}:${config.entityId}" + /** Stable identifier for this session. Delegates to [MediaControlEntityConfig.id]. */ + val id: String get() = config.id /** Must be accessed from the Main thread. Non-null while [observe] is running. */ @get:MainThread @@ -83,6 +83,10 @@ class HaMediaSession @AssistedInject constructor( @set:MainThread private var notificationArtwork: Bitmap? = null + @get:MainThread + @set:MainThread + private var notificationEntityName: String? = null + /** True if the player is currently playing and has at least one media item. Must be called from the Main thread. */ @get:MainThread val isPlaying: Boolean @@ -109,7 +113,7 @@ class HaMediaSession @AssistedInject constructor( .setSmallIcon(commonR.drawable.ic_stat_ic_notification) .setVisibility(NotificationCompat.VISIBILITY_PUBLIC) .setCategory(NotificationCompat.CATEGORY_TRANSPORT) - .setContentTitle(metadata.title ?: id) + .setContentTitle(metadata.title ?: notificationEntityName ?: id) .setContentText(metadata.artist) .setLargeIcon(notificationArtwork) .setOngoing(session.player.isPlaying) @@ -224,6 +228,7 @@ class HaMediaSession @AssistedInject constructor( withContext(NonCancellable + Dispatchers.Main) { mediaSession = null notificationArtwork = null + notificationEntityName = null player.release() session.release() } @@ -251,6 +256,7 @@ class HaMediaSession @AssistedInject constructor( artworkCache = ArtworkCache() withContext(Dispatchers.Main) { notificationArtwork = null + notificationEntityName = null player.updateState(state = null, artworkPngBytes = null) } } else { @@ -328,6 +334,7 @@ class HaMediaSession @AssistedInject constructor( withContext(Dispatchers.Main) { notificationArtwork = updatedCache.bitmap + notificationEntityName = state.entityFriendlyName player.updateState(state = state, artworkPngBytes = updatedCache.bytes) } return updatedCache diff --git a/app/src/main/kotlin/io/homeassistant/companion/android/mediacontrol/HaMediaSessionService.kt b/app/src/main/kotlin/io/homeassistant/companion/android/mediacontrol/HaMediaSessionService.kt index d31aec774b4..3ed79ea707a 100644 --- a/app/src/main/kotlin/io/homeassistant/companion/android/mediacontrol/HaMediaSessionService.kt +++ b/app/src/main/kotlin/io/homeassistant/companion/android/mediacontrol/HaMediaSessionService.kt @@ -54,7 +54,7 @@ class HaMediaSessionService @VisibleForTesting constructor(private val serviceSc @Inject lateinit var haMediaSessionFactory: HaMediaSession.Factory - // Keyed by "$serverId:$entityId". Each entry pairs the session with the job running observe(). + // Keyed by MediaControlEntityConfig.id. Each entry pairs the session with the job running observe(). private val activeSessions = mutableMapOf>() /** The notification ID last passed to [startForeground], or null if not in the foreground. */ @@ -150,14 +150,15 @@ class HaMediaSessionService @VisibleForTesting constructor(private val serviceSc super.onDestroy() } - private fun startObservingEntities() { + @VisibleForTesting + internal fun startObservingEntities() { mediaControlRepository.observeConfiguredEntities() .onEach { entities -> reconcileSessions(entities) } .launchIn(serviceScope) } private suspend fun reconcileSessions(configuredEntities: List) { - val desiredKeys = configuredEntities.map { it.sessionKey() }.toSet() + val desiredKeys = configuredEntities.map { it.id }.toSet() Timber.d("reconcileSessions: received ${configuredEntities.size} entities=$desiredKeys") if (configuredEntities.isEmpty()) { @@ -179,7 +180,7 @@ class HaMediaSessionService @VisibleForTesting constructor(private val serviceSc key to pair } val toAdd = (desiredKeys - currentKeys).map { key -> - val entityConfig = configuredEntities.first { it.sessionKey() == key } + val entityConfig = configuredEntities.first { it.id == key } key to haMediaSessionFactory.create(config = entityConfig) } @@ -286,5 +287,3 @@ class HaMediaSessionService @VisibleForTesting constructor(private val serviceSc } } } - -private fun MediaControlEntityConfig.sessionKey(): String = "$serverId:$entityId" diff --git a/app/src/main/kotlin/io/homeassistant/companion/android/settings/mediacontrol/views/MediaControlSettingsScreen.kt b/app/src/main/kotlin/io/homeassistant/companion/android/settings/mediacontrol/views/MediaControlSettingsScreen.kt index 2d9581c97a6..17f8fc225bc 100644 --- a/app/src/main/kotlin/io/homeassistant/companion/android/settings/mediacontrol/views/MediaControlSettingsScreen.kt +++ b/app/src/main/kotlin/io/homeassistant/companion/android/settings/mediacontrol/views/MediaControlSettingsScreen.kt @@ -1,5 +1,6 @@ package io.homeassistant.companion.android.settings.mediacontrol.views +import androidx.compose.foundation.background import androidx.compose.foundation.layout.Box import androidx.compose.foundation.layout.Column import androidx.compose.foundation.layout.PaddingValues @@ -13,7 +14,6 @@ import androidx.compose.foundation.lazy.LazyColumn import androidx.compose.foundation.lazy.itemsIndexed import androidx.compose.material.icons.Icons import androidx.compose.material.icons.filled.Clear -import androidx.compose.material3.Surface import androidx.compose.material3.Text import androidx.compose.runtime.Composable import androidx.compose.runtime.getValue @@ -122,7 +122,7 @@ internal fun MediaControlSettingsContent( itemsIndexed( items = uiState.configuredEntities, - key = { _, config -> config.listKey() }, + key = { _, config -> config.id }, ) { index, config -> ConfiguredEntityRow( config = config, @@ -149,49 +149,48 @@ private fun ConfiguredEntityRow( val colorScheme = LocalHAColorScheme.current val displayName = entityName ?: config.entityId - Surface(modifier = modifier, color = colorScheme.colorSurfaceLow, shadowElevation = HADimens.SPACE0) { - Row( - verticalAlignment = Alignment.CenterVertically, + Row( + verticalAlignment = Alignment.CenterVertically, + modifier = modifier + .fillMaxWidth() + .background(colorScheme.colorSurfaceLow) + .heightIn(min = HADimens.SPACE18) + .padding(vertical = HADimens.SPACE1), + ) { + if (entityIcon != null) { + Image( + asset = entityIcon, + colorFilter = ColorFilter.tint(colorScheme.colorTextSecondary), + contentDescription = null, + modifier = Modifier + .padding(start = HADimens.SPACE4) + .size(HADimens.SPACE6), + ) + } + Column( modifier = Modifier - .fillMaxWidth() - .heightIn(min = HADimens.SPACE18) - .padding(vertical = HADimens.SPACE1), + .weight(1f) + .padding(start = if (entityIcon != null) HADimens.SPACE2 else HADimens.SPACE4), ) { - if (entityIcon != null) { - Image( - asset = entityIcon, - colorFilter = ColorFilter.tint(colorScheme.colorTextSecondary), - contentDescription = null, - modifier = Modifier - .padding(start = HADimens.SPACE4) - .size(HADimens.SPACE6), - ) - } - Column( - modifier = Modifier - .weight(1f) - .padding(start = if (entityIcon != null) HADimens.SPACE2 else HADimens.SPACE4), - ) { - Text( - text = displayName, - style = HATextStyle.Body, - color = colorScheme.colorTextPrimary, - textAlign = TextAlign.Start, - ) - Text( - text = subtitle, - style = HATextStyle.BodyMedium, - color = colorScheme.colorTextSecondary, - textAlign = TextAlign.Start, - ) - } - HAIconButton( - icon = Icons.Default.Clear, - onClick = onRemove, - contentDescription = stringResource(R.string.media_control_remove_entity), - variant = ButtonVariant.NEUTRAL, + Text( + text = displayName, + style = HATextStyle.Body, + color = colorScheme.colorTextPrimary, + textAlign = TextAlign.Start, + ) + Text( + text = subtitle, + style = HATextStyle.BodyMedium, + color = colorScheme.colorTextSecondary, + textAlign = TextAlign.Start, ) } + HAIconButton( + icon = Icons.Default.Clear, + onClick = onRemove, + contentDescription = stringResource(R.string.media_control_remove_entity), + variant = ButtonVariant.NEUTRAL, + ) } } diff --git a/app/src/test/kotlin/io/homeassistant/companion/android/mediacontrol/HaMediaSessionServiceTest.kt b/app/src/test/kotlin/io/homeassistant/companion/android/mediacontrol/HaMediaSessionServiceTest.kt index 1187d8ec443..0160b7ec293 100644 --- a/app/src/test/kotlin/io/homeassistant/companion/android/mediacontrol/HaMediaSessionServiceTest.kt +++ b/app/src/test/kotlin/io/homeassistant/companion/android/mediacontrol/HaMediaSessionServiceTest.kt @@ -29,10 +29,10 @@ import org.junit.Before import org.junit.Rule import org.junit.Test import org.junit.runner.RunWith -import org.robolectric.Robolectric import org.robolectric.RobolectricTestRunner import org.robolectric.Shadows import org.robolectric.Shadows.shadowOf +import org.robolectric.android.controller.ServiceController import org.robolectric.annotation.Config /** Module-level counter for unique MediaSession IDs across tests within the same JVM process. */ @@ -48,11 +48,11 @@ private val sessionCounter = AtomicInteger(0) * Instead, dependencies are injected manually into the service's [Inject]-annotated fields after * construction, and observation is started via [HaMediaSessionService.startObservingEntities]. * - * The service is created via [Robolectric.buildService] (using [get] rather than [create]) so that - * the service is properly attached to an Android context without triggering [onCreate]. The private - * [serviceScope] field is then replaced via reflection with [observationScope] (backed by - * [UnconfinedTestDispatcher]) before observation starts, so that flow collection and session - * coroutines run eagerly and synchronously on the test dispatcher. + * The service is created via [ServiceController.of] (using [get] rather than [create]) so that + * the service is properly attached to an Android context without triggering [onCreate]. The + * [observationScope] (backed by [UnconfinedTestDispatcher]) is passed directly to the + * [HaMediaSessionService] constructor before observation starts, so that flow collection and + * session coroutines run eagerly and synchronously on the test dispatcher. * * Each test pre-populates [configuredEntitiesFlow] (replay=1) before starting observation, so * the subscriber receives the value immediately upon subscribing. Subsequent emissions are @@ -103,15 +103,10 @@ class HaMediaSessionServiceTest { ) } - service = Robolectric.buildService(HaMediaSessionService::class.java).get() + val instance = HaMediaSessionService(observationScope) + service = ServiceController.of(instance, null).get() service.mediaControlRepository = mediaControlRepository service.haMediaSessionFactory = haMediaSessionFactory - - // Replace the private serviceScope field with the test-controlled scope so that - // startObservingEntities() and all session coroutines run on the UnconfinedTestDispatcher. - val scopeField = HaMediaSessionService::class.java.getDeclaredField("serviceScope") - scopeField.isAccessible = true - scopeField.set(service, observationScope) } @After @@ -130,19 +125,17 @@ class HaMediaSessionServiceTest { /** * Starts entity observation on the service using the test-controlled [observationScope] - * (already set via reflection in [setUp]) as the service scope. Because [configuredEntitiesFlow] + * (passed to the constructor in [setUp]) as the service scope. Because [configuredEntitiesFlow] * uses replay=1 and [observationScope] uses [UnconfinedTestDispatcher], the subscriber receives * any pre-emitted value immediately and reconciliation runs synchronously. * Call [idleMainLooper] after this to flush any Main-thread tasks posted by [HaMediaSession] * (e.g. [HaRemoteMediaPlayer.updateState]). * - * Invoked via reflection because [HaMediaSessionService.startObservingEntities] is private — - * this avoids calling [onCreate], which triggers Hilt field injection unavailable in this setup. + * Called directly (not via [onCreate]) to avoid triggering Hilt field injection, which requires + * a fully-initialized Hilt component unavailable in this test setup. */ private fun startObserving() { - val m = HaMediaSessionService::class.java.getDeclaredMethod("startObservingEntities") - m.isAccessible = true - m.invoke(service) + service.startObservingEntities() } /** diff --git a/common/src/main/kotlin/io/homeassistant/companion/android/common/data/mediacontrol/MediaControlEntityConfig.kt b/common/src/main/kotlin/io/homeassistant/companion/android/common/data/mediacontrol/MediaControlEntityConfig.kt index cf811de966c..819fa66cfb0 100644 --- a/common/src/main/kotlin/io/homeassistant/companion/android/common/data/mediacontrol/MediaControlEntityConfig.kt +++ b/common/src/main/kotlin/io/homeassistant/companion/android/common/data/mediacontrol/MediaControlEntityConfig.kt @@ -2,6 +2,6 @@ package io.homeassistant.companion.android.common.data.mediacontrol /** Identifies a single `media_player` entity to expose as a native media control. */ data class MediaControlEntityConfig(val serverId: Int, val entityId: String) { - /** Stable string key suitable for use as a Compose list item key. */ - fun listKey(): String = "${serverId}_$entityId" + /** Stable identifier for this config, used as both the Compose list item key and [androidx.media3.session.MediaSession] ID. */ + val id: String = "$serverId:$entityId" } From 2b399b34d153f4ef43adc81fc3d75bb87f0e3512 Mon Sep 17 00:00:00 2001 From: Fletcher Dostie Date: Fri, 15 May 2026 14:08:46 -0700 Subject: [PATCH 106/114] Pre-scale notification album art bitmap on IO to fix StrictMode violation MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit On API 36+, Notification.Builder.build() calls Icon.scaleDownIfNecessary() on the Main thread, triggering a StrictMode CustomViolation that crashes debug builds via FailFast. Remove the hardcoded 256px Coil size constraint so artwork loads at native server resolution (better quality on lock screen / expanded controls). After compressing the full-resolution PNG bytes for MediaMetadata, explicitly call Bitmap.createScaledBitmap() to android.R.dimen.notification_large_icon_width on IO before passing the bitmap to setLargeIcon() — ensuring scaleDownIfNecessary has nothing to do on Main. --- .../android/mediacontrol/HaMediaSession.kt | 18 +++++++++++------- 1 file changed, 11 insertions(+), 7 deletions(-) diff --git a/app/src/main/kotlin/io/homeassistant/companion/android/mediacontrol/HaMediaSession.kt b/app/src/main/kotlin/io/homeassistant/companion/android/mediacontrol/HaMediaSession.kt index 67df0491826..98c3ce48d0b 100644 --- a/app/src/main/kotlin/io/homeassistant/companion/android/mediacontrol/HaMediaSession.kt +++ b/app/src/main/kotlin/io/homeassistant/companion/android/mediacontrol/HaMediaSession.kt @@ -358,19 +358,27 @@ class HaMediaSession @AssistedInject constructor( return URL(baseUrl, entityPictureUrl).toString() } - /** Loads album art and compresses to PNG bytes on the IO dispatcher, also returning the decoded bitmap. */ + /** + * Loads album art at its native resolution and returns full-resolution PNG bytes for media + * metadata alongside a notification-icon-sized bitmap for [setLargeIcon][android.app.Notification.Builder.setLargeIcon]. + * + * The bitmap is explicitly scaled to [android.R.dimen.notification_large_icon_width] on IO so + * that [android.graphics.drawable.Icon.scaleDownIfNecessary] has nothing to do on the Main + * thread, preventing a StrictMode CustomViolation on API 36+. + */ private suspend fun loadArtworkData(url: String): Pair? = withContext(Dispatchers.IO) { try { val request = ImageRequest.Builder(context) .data(url) .allowHardware(false) - .size(NOTIFICATION_ICON_SIZE_PX, NOTIFICATION_ICON_SIZE_PX) .build() val result = context.imageLoader.execute(request) result.image?.toBitmap()?.let { bitmap -> val stream = ByteArrayOutputStream() bitmap.compress(CompressFormat.PNG, 100, stream) - stream.toByteArray() to bitmap + val iconSize = context.resources.getDimensionPixelSize(android.R.dimen.notification_large_icon_width) + val notificationBitmap = Bitmap.createScaledBitmap(bitmap, iconSize, iconSize, /* filter= */ true) + stream.toByteArray() to notificationBitmap } } catch (e: CancellationException) { throw e @@ -405,10 +413,6 @@ class HaMediaSession @AssistedInject constructor( private data class ArtworkCache(val url: String? = null, val bytes: ByteArray? = null, val bitmap: Bitmap? = null) companion object { - /** Target pixel size for notification large icon artwork. Pre-scaling in Coil avoids - * main-thread downscaling by Android's Icon class (StrictMode CustomViolation). */ - private const val NOTIFICATION_ICON_SIZE_PX = 256 - private const val ACTION_MEDIA_PLAY = "media_play" private const val ACTION_MEDIA_PAUSE = "media_pause" private const val ACTION_MEDIA_STOP = "media_stop" From 2e620a97a4173d77225e9f8c2c87932e8ce5dac8 Mon Sep 17 00:00:00 2001 From: Fletcher Dostie Date: Fri, 15 May 2026 14:13:19 -0700 Subject: [PATCH 107/114] Address PR review comments (threads 34, 39, 40, 41) - Split MediaControlSettingsContent into private composables (DescriptionSection, ServerDropdownSection, EntityPickerSection) - Always render icon slot (Image or Spacer) in ConfiguredEntityRow so rows align when mixing entities with and without icons - Use Arrangement.spacedBy(SPACE3) for horizontal rhythm in ConfiguredEntityRow; remove per-child start padding --- .../views/MediaControlSettingsScreen.kt | 108 +++++++++++------- 1 file changed, 67 insertions(+), 41 deletions(-) diff --git a/app/src/main/kotlin/io/homeassistant/companion/android/settings/mediacontrol/views/MediaControlSettingsScreen.kt b/app/src/main/kotlin/io/homeassistant/companion/android/settings/mediacontrol/views/MediaControlSettingsScreen.kt index 17f8fc225bc..d4f05ab6517 100644 --- a/app/src/main/kotlin/io/homeassistant/companion/android/settings/mediacontrol/views/MediaControlSettingsScreen.kt +++ b/app/src/main/kotlin/io/homeassistant/companion/android/settings/mediacontrol/views/MediaControlSettingsScreen.kt @@ -1,6 +1,7 @@ package io.homeassistant.companion.android.settings.mediacontrol.views import androidx.compose.foundation.background +import androidx.compose.foundation.layout.Arrangement import androidx.compose.foundation.layout.Box import androidx.compose.foundation.layout.Column import androidx.compose.foundation.layout.PaddingValues @@ -64,22 +65,11 @@ internal fun MediaControlSettingsContent( onRemoveEntity: (Int) -> Unit, modifier: Modifier = Modifier, ) { - val colorScheme = LocalHAColorScheme.current - LazyColumn( contentPadding = PaddingValues(vertical = HADimens.SPACE4) + safeBottomPaddingValues(applyHorizontal = false), modifier = modifier, ) { - item { - Text( - text = stringResource(R.string.media_control_description), - style = HATextStyle.Body, - color = colorScheme.colorTextPrimary, - textAlign = TextAlign.Start, - modifier = Modifier.padding(horizontal = HADimens.SPACE4), - ) - Spacer(modifier = Modifier.size(HADimens.SPACE4)) - } + item { DescriptionSection() } if (uiState.isLoading) { item { @@ -93,30 +83,19 @@ internal fun MediaControlSettingsContent( } else { if (uiState.servers.size > 1) { item(key = "server_dropdown") { - Column(modifier = Modifier.animateItem()) { - HADropdownMenu( - items = uiState.servers.map { HADropdownItem(key = it.id, label = it.friendlyName) }, - selectedKey = uiState.selectedServerId, - onItemSelected = onServerSelected, - label = stringResource(R.string.server), - modifier = Modifier.fillMaxWidth().padding(horizontal = HADimens.SPACE4), - ) - Spacer(modifier = Modifier.size(HADimens.SPACE2)) - } + ServerDropdownSection( + uiState = uiState, + onServerSelected = onServerSelected, + modifier = Modifier.animateItem(), + ) } } item(key = "entity_picker") { - EntityPicker( - entities = uiState.availableEntities, - selectedEntityId = null, - onEntitySelectedId = onEntitySelected, - onEntityCleared = {}, - addButtonText = stringResource(R.string.media_control_select_entity), - entityRegistry = uiState.entityRegistryForServer(uiState.selectedServerId), - deviceRegistry = uiState.deviceRegistryForServer(uiState.selectedServerId), - areaRegistry = uiState.areaRegistryForServer(uiState.selectedServerId), - modifier = Modifier.padding(horizontal = HADimens.SPACE4).animateItem(), + EntityPickerSection( + uiState = uiState, + onEntitySelected = onEntitySelected, + modifier = Modifier.animateItem(), ) } @@ -137,6 +116,56 @@ internal fun MediaControlSettingsContent( } } +@Composable +private fun DescriptionSection() { + val colorScheme = LocalHAColorScheme.current + Text( + text = stringResource(R.string.media_control_description), + style = HATextStyle.Body, + color = colorScheme.colorTextPrimary, + textAlign = TextAlign.Start, + modifier = Modifier.padding(horizontal = HADimens.SPACE4), + ) + Spacer(modifier = Modifier.size(HADimens.SPACE4)) +} + +@Composable +private fun ServerDropdownSection( + uiState: MediaControlSettingsUiState, + onServerSelected: (Int) -> Unit, + modifier: Modifier = Modifier, +) { + Column(modifier = modifier) { + HADropdownMenu( + items = uiState.servers.map { HADropdownItem(key = it.id, label = it.friendlyName) }, + selectedKey = uiState.selectedServerId, + onItemSelected = onServerSelected, + label = stringResource(R.string.server), + modifier = Modifier.fillMaxWidth().padding(horizontal = HADimens.SPACE4), + ) + Spacer(modifier = Modifier.size(HADimens.SPACE2)) + } +} + +@Composable +private fun EntityPickerSection( + uiState: MediaControlSettingsUiState, + onEntitySelected: (String) -> Unit, + modifier: Modifier = Modifier, +) { + EntityPicker( + entities = uiState.availableEntities, + selectedEntityId = null, + onEntitySelectedId = onEntitySelected, + onEntityCleared = {}, + addButtonText = stringResource(R.string.media_control_select_entity), + entityRegistry = uiState.entityRegistryForServer(uiState.selectedServerId), + deviceRegistry = uiState.deviceRegistryForServer(uiState.selectedServerId), + areaRegistry = uiState.areaRegistryForServer(uiState.selectedServerId), + modifier = modifier.padding(horizontal = HADimens.SPACE4), + ) +} + @Composable private fun ConfiguredEntityRow( config: MediaControlEntityConfig, @@ -151,27 +180,24 @@ private fun ConfiguredEntityRow( Row( verticalAlignment = Alignment.CenterVertically, + horizontalArrangement = Arrangement.spacedBy(HADimens.SPACE3), modifier = modifier .fillMaxWidth() .background(colorScheme.colorSurfaceLow) .heightIn(min = HADimens.SPACE18) - .padding(vertical = HADimens.SPACE1), + .padding(vertical = HADimens.SPACE1, horizontal = HADimens.SPACE4), ) { if (entityIcon != null) { Image( asset = entityIcon, colorFilter = ColorFilter.tint(colorScheme.colorTextSecondary), contentDescription = null, - modifier = Modifier - .padding(start = HADimens.SPACE4) - .size(HADimens.SPACE6), + modifier = Modifier.size(HADimens.SPACE6), ) + } else { + Spacer(modifier = Modifier.size(HADimens.SPACE6)) } - Column( - modifier = Modifier - .weight(1f) - .padding(start = if (entityIcon != null) HADimens.SPACE2 else HADimens.SPACE4), - ) { + Column(modifier = Modifier.weight(1f)) { Text( text = displayName, style = HATextStyle.Body, From 32ff7da1bb08e5a8106c2a0ebc5e512b2271fd40 Mon Sep 17 00:00:00 2001 From: Fletcher Dostie Date: Fri, 15 May 2026 14:35:51 -0700 Subject: [PATCH 108/114] =?UTF-8?q?Address=20PR=20review=20comments=20(thr?= =?UTF-8?q?eads=2042=E2=80=9347):=20refactor=20MediaControlSettingsViewMod?= =?UTF-8?q?el?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Merge configuredEntities + entityNamesByConfig + entityIconsByConfig into List updated atomically (thread 42, 44) - Move IIcon resolution into Compose layer via LocalContext (thread 44) - Make availableEntities a computed val on UiState instead of a stored field (thread 43), removing updateAvailableEntities() entirely (thread 46) - Invert data flow: addEntity/removeEntity write to the repository only; observeConfiguredEntities() drives configuredEntityItems reactively, eliminating the read-after-write race in persistAndNotifyService() (thread 47) and the copy() duplication in add/remove (thread 45) - Add multi-server screenshot test variant (thread 38) --- .../MediaControlSettingsViewModel.kt | 164 ++++++++---------- .../views/MediaControlSettingsScreen.kt | 43 +++-- ...ediaControlSettingsScreenScreenshotTest.kt | 39 +++-- .../MediaControlSettingsViewModelTest.kt | 59 ++++--- 4 files changed, 156 insertions(+), 149 deletions(-) diff --git a/app/src/main/kotlin/io/homeassistant/companion/android/settings/mediacontrol/MediaControlSettingsViewModel.kt b/app/src/main/kotlin/io/homeassistant/companion/android/settings/mediacontrol/MediaControlSettingsViewModel.kt index 18bd6251c3d..4eba6117600 100644 --- a/app/src/main/kotlin/io/homeassistant/companion/android/settings/mediacontrol/MediaControlSettingsViewModel.kt +++ b/app/src/main/kotlin/io/homeassistant/companion/android/settings/mediacontrol/MediaControlSettingsViewModel.kt @@ -1,16 +1,13 @@ package io.homeassistant.companion.android.settings.mediacontrol -import android.app.Application import androidx.annotation.VisibleForTesting import androidx.compose.runtime.Stable -import androidx.lifecycle.AndroidViewModel +import androidx.lifecycle.ViewModel import androidx.lifecycle.viewModelScope -import com.mikepenz.iconics.typeface.IIcon import dagger.hilt.android.lifecycle.HiltViewModel import io.homeassistant.companion.android.common.data.integration.Entity import io.homeassistant.companion.android.common.data.integration.IntegrationDomains.MEDIA_PLAYER_DOMAIN import io.homeassistant.companion.android.common.data.integration.friendlyName -import io.homeassistant.companion.android.common.data.integration.getIcon import io.homeassistant.companion.android.common.data.mediacontrol.MediaControlEntityConfig import io.homeassistant.companion.android.common.data.mediacontrol.MediaControlRepository import io.homeassistant.companion.android.common.data.servers.ServerManager @@ -39,6 +36,18 @@ sealed interface MediaControlServiceEvent { data object Start : MediaControlServiceEvent } +/** + * A configured media player entity paired with its resolved display name and entity data. + * [name] always has a value — it falls back to [MediaControlEntityConfig.entityId] if [entity] + * has not yet been loaded from the server. [entity] is null until server data is available; + * the Compose layer uses it to resolve the entity icon via [LocalContext]. + */ +data class ConfiguredEntityItem( + val config: MediaControlEntityConfig, + val name: String, + val entity: Entity?, +) + @Stable data class MediaControlSettingsUiState( val servers: List = emptyList(), @@ -47,19 +56,23 @@ data class MediaControlSettingsUiState( val entityRegistryPerServer: Map> = emptyMap(), val deviceRegistryPerServer: Map> = emptyMap(), val areaRegistryPerServer: Map> = emptyMap(), - // The in-memory list of entities being configured - val configuredEntities: List = emptyList(), - // Precomputed friendly names for each configured entity; absent means not yet loaded - val entityNamesByConfig: Map = emptyMap(), - // Precomputed icons for each configured entity; absent means not yet loaded - val entityIconsByConfig: Map = emptyMap(), - // Entities for the selected server that are not yet configured, ready for the picker - val availableEntities: List = emptyList(), + // The configured entities, with names and entity data resolved from server data + val configuredEntityItems: List = emptyList(), // Server selection for the entity picker val selectedServerId: Int = ServerManager.SERVER_ID_ACTIVE, // True while entities and registries are being loaded from the server val isLoading: Boolean = true, ) { + /** Entities for the selected server that are not yet configured, ready for the entity picker. */ + val availableEntities: List + get() { + val configuredForServer = configuredEntityItems + .filter { it.config.serverId == selectedServerId } + .mapTo(HashSet()) { it.config.entityId } + return (entitiesPerServer[selectedServerId] ?: emptyList()) + .filter { it.entityId !in configuredForServer } + } + fun entityRegistryForServer(serverId: Int): List = entityRegistryPerServer[serverId] ?: emptyList() fun deviceRegistryForServer(serverId: Int): List = @@ -70,18 +83,16 @@ data class MediaControlSettingsUiState( @HiltViewModel class MediaControlSettingsViewModel @VisibleForTesting constructor( - application: Application, private val serverManager: ServerManager, private val mediaControlRepository: MediaControlRepository, private val backgroundDispatcher: CoroutineDispatcher, -) : AndroidViewModel(application) { +) : ViewModel() { @Inject constructor( - application: Application, serverManager: ServerManager, mediaControlRepository: MediaControlRepository, - ) : this(application, serverManager, mediaControlRepository, Dispatchers.Default) + ) : this(serverManager, mediaControlRepository, Dispatchers.Default) private val _uiState = MutableStateFlow(MediaControlSettingsUiState()) val uiState: StateFlow = _uiState.asStateFlow() @@ -90,13 +101,12 @@ class MediaControlSettingsViewModel @VisibleForTesting constructor( val serviceEvents: SharedFlow = _serviceEvents.asSharedFlow() init { + // Coroutine 1: load server data (entities + registries) from the network viewModelScope.launch(backgroundDispatcher) { val loadedServers = serverManager.servers() val defaultServerId = serverManager.getServer()?.id ?: ServerManager.SERVER_ID_ACTIVE + _uiState.update { it.copy(servers = loadedServers, selectedServerId = defaultServerId) } - // Load configured entities (local DB) and server registries (network) concurrently. - // Emit the configured list as soon as the DB read completes so the list appears immediately. - val configuredEntitiesDeferred = async { mediaControlRepository.getConfiguredEntities() } val entitiesDeferred = loadedServers.map { server -> async { server.id to loadMediaPlayerEntities(server.id) } } @@ -122,15 +132,6 @@ class MediaControlSettingsViewModel @VisibleForTesting constructor( } } - val configuredEntities = configuredEntitiesDeferred.await() - _uiState.update { - it.copy( - servers = loadedServers, - selectedServerId = defaultServerId, - configuredEntities = configuredEntities, - ) - } - val entitiesPerServer = entitiesDeferred.awaitAll().toMap() _uiState.update { state -> state.copy( @@ -138,19 +139,34 @@ class MediaControlSettingsViewModel @VisibleForTesting constructor( entityRegistryPerServer = entityRegistryDeferred.awaitAll().toMap(), deviceRegistryPerServer = deviceRegistryDeferred.awaitAll().toMap(), areaRegistryPerServer = areaRegistryDeferred.awaitAll().toMap(), - entityNamesByConfig = buildEntityNamesByConfig(entitiesPerServer, state.configuredEntities), - entityIconsByConfig = buildEntityIconsByConfig(entitiesPerServer, state.configuredEntities), + // Re-resolve items now that entity names and data are available + configuredEntityItems = buildConfiguredItems( + entitiesPerServer, + state.configuredEntityItems.map { it.config }, + ), isLoading = false, ) } - updateAvailableEntities() + } + + // Coroutine 2: observe the DB-backed configured list; drives configuredEntityItems reactively + viewModelScope.launch { + mediaControlRepository.observeConfiguredEntities().collect { dbConfigs -> + _uiState.update { state -> + state.copy( + configuredEntityItems = buildConfiguredItems(state.entitiesPerServer, dbConfigs), + ) + } + if (dbConfigs.isNotEmpty()) { + _serviceEvents.emit(MediaControlServiceEvent.Start) + } + } } } /** Updates the selected server in the entity picker. */ fun selectServerId(serverId: Int) { _uiState.update { it.copy(selectedServerId = serverId) } - updateAvailableEntities() } /** @@ -158,85 +174,41 @@ class MediaControlSettingsViewModel @VisibleForTesting constructor( * list, then persists the change immediately. Has no effect if the entity is already in the list. */ fun addEntity(entityId: String) { - _uiState.update { state -> + viewModelScope.launch { + val state = _uiState.value val config = MediaControlEntityConfig( serverId = state.selectedServerId, entityId = entityId, ) - if (state.configuredEntities.contains(config)) { - state - } else { - val newConfiguredEntities = state.configuredEntities + config - state.copy( - configuredEntities = newConfiguredEntities, - entityNamesByConfig = buildEntityNamesByConfig(state.entitiesPerServer, newConfiguredEntities), - entityIconsByConfig = buildEntityIconsByConfig(state.entitiesPerServer, newConfiguredEntities), - ) + if (state.configuredEntityItems.none { it.config == config }) { + val newConfigs = state.configuredEntityItems.map { it.config } + config + mediaControlRepository.setConfiguredEntities(newConfigs) } } - updateAvailableEntities() - persistAndNotifyService() } /** Removes the configured entity at [index] from the list, then persists the change immediately. */ fun removeEntity(index: Int) { - _uiState.update { state -> - val newConfiguredEntities = state.configuredEntities.toMutableList().also { it.removeAt(index) } - state.copy( - configuredEntities = newConfiguredEntities, - entityNamesByConfig = buildEntityNamesByConfig(state.entitiesPerServer, newConfiguredEntities), - entityIconsByConfig = buildEntityIconsByConfig(state.entitiesPerServer, newConfiguredEntities), - ) - } - updateAvailableEntities() - persistAndNotifyService() - } - - private fun persistAndNotifyService() { viewModelScope.launch { - val entities = _uiState.value.configuredEntities - mediaControlRepository.setConfiguredEntities(entities) - if (entities.isNotEmpty()) { - _serviceEvents.emit(MediaControlServiceEvent.Start) - } + val newConfigs = _uiState.value.configuredEntityItems + .map { it.config } + .toMutableList() + .also { it.removeAt(index) } + mediaControlRepository.setConfiguredEntities(newConfigs) } } - private fun updateAvailableEntities() { - viewModelScope.launch(backgroundDispatcher) { - _uiState.update { state -> - val configuredForServer = state.configuredEntities - .filter { it.serverId == state.selectedServerId } - .mapTo(HashSet()) { it.entityId } - state.copy( - availableEntities = (state.entitiesPerServer[state.selectedServerId] ?: emptyList()) - .filter { it.entityId !in configuredForServer }, - ) - } - } - } - - private fun buildEntityIconsByConfig( + private fun buildConfiguredItems( entitiesPerServer: Map>, - configuredEntities: List, - ): Map = configuredEntities.mapNotNull { config -> - val icon = entitiesPerServer[config.serverId] - ?.firstOrNull { it.entityId == config.entityId } - ?.getIcon(getApplication()) - ?: return@mapNotNull null - config to icon - }.toMap() - - private fun buildEntityNamesByConfig( - entitiesPerServer: Map>, - configuredEntities: List, - ): Map = configuredEntities.mapNotNull { config -> - val name = entitiesPerServer[config.serverId] - ?.firstOrNull { it.entityId == config.entityId } - ?.friendlyName - ?: return@mapNotNull null - config to name - }.toMap() + configs: List, + ): List = configs.map { config -> + val entity = entitiesPerServer[config.serverId]?.firstOrNull { it.entityId == config.entityId } + ConfiguredEntityItem( + config = config, + name = entity?.friendlyName ?: config.entityId, + entity = entity, + ) + } private suspend fun loadMediaPlayerEntities(serverId: Int): List = try { serverManager.integrationRepository(serverId).getEntities().orEmpty() diff --git a/app/src/main/kotlin/io/homeassistant/companion/android/settings/mediacontrol/views/MediaControlSettingsScreen.kt b/app/src/main/kotlin/io/homeassistant/companion/android/settings/mediacontrol/views/MediaControlSettingsScreen.kt index d4f05ab6517..8405e9506ff 100644 --- a/app/src/main/kotlin/io/homeassistant/companion/android/settings/mediacontrol/views/MediaControlSettingsScreen.kt +++ b/app/src/main/kotlin/io/homeassistant/companion/android/settings/mediacontrol/views/MediaControlSettingsScreen.kt @@ -18,15 +18,16 @@ import androidx.compose.material.icons.filled.Clear import androidx.compose.material3.Text import androidx.compose.runtime.Composable import androidx.compose.runtime.getValue +import androidx.compose.runtime.remember import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier import androidx.compose.ui.graphics.ColorFilter +import androidx.compose.ui.platform.LocalContext import androidx.compose.ui.res.stringResource import androidx.compose.ui.text.style.TextAlign import androidx.compose.ui.tooling.preview.Preview import androidx.lifecycle.compose.collectAsStateWithLifecycle import com.mikepenz.iconics.compose.Image -import com.mikepenz.iconics.typeface.IIcon import io.homeassistant.companion.android.common.R import io.homeassistant.companion.android.common.compose.composable.ButtonVariant import io.homeassistant.companion.android.common.compose.composable.HADropdownItem @@ -37,7 +38,9 @@ import io.homeassistant.companion.android.common.compose.theme.HADimens import io.homeassistant.companion.android.common.compose.theme.HATextStyle import io.homeassistant.companion.android.common.compose.theme.HAThemeForPreview import io.homeassistant.companion.android.common.compose.theme.LocalHAColorScheme +import io.homeassistant.companion.android.common.data.integration.getIcon import io.homeassistant.companion.android.common.data.mediacontrol.MediaControlEntityConfig +import io.homeassistant.companion.android.settings.mediacontrol.ConfiguredEntityItem import io.homeassistant.companion.android.settings.mediacontrol.MediaControlSettingsUiState import io.homeassistant.companion.android.settings.mediacontrol.MediaControlSettingsViewModel import io.homeassistant.companion.android.util.compose.entity.EntityPicker @@ -100,14 +103,11 @@ internal fun MediaControlSettingsContent( } itemsIndexed( - items = uiState.configuredEntities, - key = { _, config -> config.id }, - ) { index, config -> + items = uiState.configuredEntityItems, + key = { _, item -> item.config.id }, + ) { index, item -> ConfiguredEntityRow( - config = config, - subtitle = config.entityId, - entityName = uiState.entityNamesByConfig[config], - entityIcon = uiState.entityIconsByConfig[config], + item = item, onRemove = { onRemoveEntity(index) }, modifier = Modifier.animateItem(), ) @@ -168,15 +168,13 @@ private fun EntityPickerSection( @Composable private fun ConfiguredEntityRow( - config: MediaControlEntityConfig, - subtitle: String, - entityName: String?, - entityIcon: IIcon?, + item: ConfiguredEntityItem, onRemove: () -> Unit, modifier: Modifier = Modifier, ) { val colorScheme = LocalHAColorScheme.current - val displayName = entityName ?: config.entityId + val context = LocalContext.current + val entityIcon = remember(item.entity) { item.entity?.getIcon(context) } Row( verticalAlignment = Alignment.CenterVertically, @@ -199,13 +197,13 @@ private fun ConfiguredEntityRow( } Column(modifier = Modifier.weight(1f)) { Text( - text = displayName, + text = item.name, style = HATextStyle.Body, color = colorScheme.colorTextPrimary, textAlign = TextAlign.Start, ) Text( - text = subtitle, + text = item.config.entityId, style = HATextStyle.BodyMedium, color = colorScheme.colorTextSecondary, textAlign = TextAlign.Start, @@ -252,9 +250,18 @@ private fun MediaControlSettingsContentWithEntitiesPreview() { HAThemeForPreview { MediaControlSettingsContent( uiState = MediaControlSettingsUiState( - configuredEntities = listOf( - MediaControlEntityConfig(serverId = 1, entityId = "media_player.living_room"), - MediaControlEntityConfig(serverId = 1, entityId = "media_player.bedroom"), + isLoading = false, + configuredEntityItems = listOf( + ConfiguredEntityItem( + config = MediaControlEntityConfig(serverId = 1, entityId = "media_player.living_room"), + name = "Living Room", + entity = null, + ), + ConfiguredEntityItem( + config = MediaControlEntityConfig(serverId = 1, entityId = "media_player.bedroom"), + name = "Bedroom", + entity = null, + ), ), ), onServerSelected = {}, diff --git a/app/src/screenshotTest/kotlin/io/homeassistant/companion/android/settings/mediacontrol/MediaControlSettingsScreenScreenshotTest.kt b/app/src/screenshotTest/kotlin/io/homeassistant/companion/android/settings/mediacontrol/MediaControlSettingsScreenScreenshotTest.kt index 7fcb4dbd219..fe26c0f4ab3 100644 --- a/app/src/screenshotTest/kotlin/io/homeassistant/companion/android/settings/mediacontrol/MediaControlSettingsScreenScreenshotTest.kt +++ b/app/src/screenshotTest/kotlin/io/homeassistant/companion/android/settings/mediacontrol/MediaControlSettingsScreenScreenshotTest.kt @@ -2,9 +2,12 @@ package io.homeassistant.companion.android.settings.mediacontrol import androidx.compose.runtime.Composable import com.android.tools.screenshot.PreviewTest -import com.mikepenz.iconics.typeface.library.community.material.CommunityMaterial.Icon3 import io.homeassistant.companion.android.common.compose.theme.HAThemeForPreview import io.homeassistant.companion.android.common.data.mediacontrol.MediaControlEntityConfig +import io.homeassistant.companion.android.database.server.Server +import io.homeassistant.companion.android.database.server.ServerConnectionInfo +import io.homeassistant.companion.android.database.server.ServerSessionInfo +import io.homeassistant.companion.android.database.server.ServerUserInfo import io.homeassistant.companion.android.settings.mediacontrol.views.MediaControlSettingsContent import io.homeassistant.companion.android.util.compose.HAPreviews @@ -49,10 +52,17 @@ class MediaControlSettingsScreenScreenshotTest { MediaControlSettingsContent( uiState = MediaControlSettingsUiState( isLoading = false, - configuredEntities = listOf(livingRoomConfig, bedroomConfig), - entityNamesByConfig = mapOf( - livingRoomConfig to "Living Room TV", - bedroomConfig to "Bedroom Speaker", + configuredEntityItems = listOf( + ConfiguredEntityItem( + config = livingRoomConfig, + name = "Living Room TV", + entity = null, + ), + ConfiguredEntityItem( + config = bedroomConfig, + name = "Bedroom Speaker", + entity = null, + ), ), ), onServerSelected = {}, @@ -65,19 +75,22 @@ class MediaControlSettingsScreenScreenshotTest { @PreviewTest @HAPreviews @Composable - fun `Media control settings with configured entities and icons`() { + fun `Media control settings with multiple servers`() { HAThemeForPreview { MediaControlSettingsContent( uiState = MediaControlSettingsUiState( isLoading = false, - configuredEntities = listOf(livingRoomConfig, bedroomConfig), - entityNamesByConfig = mapOf( - livingRoomConfig to "Living Room TV", - bedroomConfig to "Bedroom Speaker", + servers = listOf( + Server(id = 1, _name = "Home", connection = ServerConnectionInfo(externalUrl = "http://home.local"), session = ServerSessionInfo(), user = ServerUserInfo()), + Server(id = 2, _name = "Office", connection = ServerConnectionInfo(externalUrl = "http://office.local"), session = ServerSessionInfo(), user = ServerUserInfo()), ), - entityIconsByConfig = mapOf( - livingRoomConfig to Icon3.cmd_television, - bedroomConfig to Icon3.cmd_speaker, + selectedServerId = 1, + configuredEntityItems = listOf( + ConfiguredEntityItem( + config = livingRoomConfig, + name = "Living Room TV", + entity = null, + ), ), ), onServerSelected = {}, diff --git a/app/src/test/kotlin/io/homeassistant/companion/android/settings/mediacontrol/MediaControlSettingsViewModelTest.kt b/app/src/test/kotlin/io/homeassistant/companion/android/settings/mediacontrol/MediaControlSettingsViewModelTest.kt index 7b0885941be..1c549fc9cb0 100644 --- a/app/src/test/kotlin/io/homeassistant/companion/android/settings/mediacontrol/MediaControlSettingsViewModelTest.kt +++ b/app/src/test/kotlin/io/homeassistant/companion/android/settings/mediacontrol/MediaControlSettingsViewModelTest.kt @@ -1,6 +1,5 @@ package io.homeassistant.companion.android.settings.mediacontrol -import android.app.Application import app.cash.turbine.test import io.homeassistant.companion.android.common.data.mediacontrol.MediaControlEntityConfig import io.homeassistant.companion.android.common.data.mediacontrol.MediaControlRepository @@ -11,6 +10,7 @@ import io.mockk.coEvery import io.mockk.coVerify import io.mockk.mockk import kotlinx.coroutines.ExperimentalCoroutinesApi +import kotlinx.coroutines.flow.MutableStateFlow import kotlinx.coroutines.test.advanceUntilIdle import kotlinx.coroutines.test.runTest import org.junit.jupiter.api.Assertions.assertEquals @@ -31,6 +31,8 @@ class MediaControlSettingsViewModelTest { private val serverManager: ServerManager = mockk(relaxed = true) private val mediaControlRepository: MediaControlRepository = mockk(relaxed = true) + private val configuredEntitiesFlow = MutableStateFlow>(emptyList()) + private lateinit var viewModel: MediaControlSettingsViewModel @BeforeEach @@ -39,12 +41,14 @@ class MediaControlSettingsViewModelTest { coEvery { serverManager.getServer(any()) } returns null coEvery { serverManager.integrationRepository(any()) } returns mockk(relaxed = true) coEvery { serverManager.webSocketRepository(any()) } returns mockk(relaxed = true) - coEvery { mediaControlRepository.getConfiguredEntities() } returns emptyList() + coEvery { mediaControlRepository.observeConfiguredEntities() } returns configuredEntitiesFlow + coEvery { mediaControlRepository.setConfiguredEntities(any()) } coAnswers { + configuredEntitiesFlow.value = firstArg() + } } private fun createViewModel(): MediaControlSettingsViewModel { return MediaControlSettingsViewModel( - application = mockk(relaxed = true), serverManager = serverManager, mediaControlRepository = mediaControlRepository, backgroundDispatcher = testDispatcher, @@ -55,22 +59,22 @@ class MediaControlSettingsViewModelTest { inner class InitializationTest { @Test - fun `Given no configured entities when viewModel created then configuredEntities is empty`() = runTest(testDispatcher) { + fun `Given no configured entities when viewModel created then configuredEntityItems is empty`() = runTest(testDispatcher) { viewModel = createViewModel() advanceUntilIdle() - assertEquals(emptyList(), viewModel.uiState.value.configuredEntities) + assertEquals(emptyList(), viewModel.uiState.value.configuredEntityItems) } @Test - fun `Given configured entities when viewModel created then configuredEntities reflects repo`() = runTest(testDispatcher) { - val entities = listOf(MediaControlEntityConfig(serverId = 1, entityId = "media_player.tv")) - coEvery { mediaControlRepository.getConfiguredEntities() } returns entities + fun `Given configured entities when viewModel created then configuredEntityItems reflects repo`() = runTest(testDispatcher) { + configuredEntitiesFlow.value = listOf(MediaControlEntityConfig(serverId = 1, entityId = "media_player.tv")) viewModel = createViewModel() advanceUntilIdle() - assertEquals(entities, viewModel.uiState.value.configuredEntities) + assertEquals(1, viewModel.uiState.value.configuredEntityItems.size) + assertEquals("media_player.tv", viewModel.uiState.value.configuredEntityItems.first().config.entityId) } } @@ -82,19 +86,22 @@ class MediaControlSettingsViewModelTest { viewModel = createViewModel() viewModel.addEntity("media_player.living_room") + advanceUntilIdle() - assertEquals(1, viewModel.uiState.value.configuredEntities.size) - assertEquals("media_player.living_room", viewModel.uiState.value.configuredEntities.first().entityId) + assertEquals(1, viewModel.uiState.value.configuredEntityItems.size) + assertEquals("media_player.living_room", viewModel.uiState.value.configuredEntityItems.first().config.entityId) } @Test fun `Given entity already in list when addEntity called with same entity then not duplicated`() = runTest(testDispatcher) { viewModel = createViewModel() viewModel.addEntity("media_player.tv") + advanceUntilIdle() viewModel.addEntity("media_player.tv") + advanceUntilIdle() - assertEquals(1, viewModel.uiState.value.configuredEntities.size) + assertEquals(1, viewModel.uiState.value.configuredEntityItems.size) } @Test @@ -129,13 +136,16 @@ class MediaControlSettingsViewModelTest { fun `Given non-default server selected when addEntity called then entity config has that server's id`() = runTest(testDispatcher) { val serverBId = 99 viewModel = createViewModel() + // Ensure init coroutines (which reset selectedServerId to default) complete first + advanceUntilIdle() viewModel.selectServerId(serverBId) viewModel.addEntity("media_player.bedroom") + advanceUntilIdle() - val addedEntity = viewModel.uiState.value.configuredEntities.first() - assertEquals(serverBId, addedEntity.serverId) - assertEquals("media_player.bedroom", addedEntity.entityId) + val addedItem = viewModel.uiState.value.configuredEntityItems.first() + assertEquals(serverBId, addedItem.config.serverId) + assertEquals("media_player.bedroom", addedItem.config.entityId) } } @@ -146,12 +156,16 @@ class MediaControlSettingsViewModelTest { fun `Given configured entity when removeEntity called then entity removed`() = runTest(testDispatcher) { viewModel = createViewModel() viewModel.addEntity("media_player.tv") + // Advance between adds so the second call sees the updated configuredEntityItems + advanceUntilIdle() viewModel.addEntity("media_player.radio") + advanceUntilIdle() viewModel.removeEntity(0) + advanceUntilIdle() - assertEquals(1, viewModel.uiState.value.configuredEntities.size) - assertEquals("media_player.radio", viewModel.uiState.value.configuredEntities.first().entityId) + assertEquals(1, viewModel.uiState.value.configuredEntityItems.size) + assertEquals("media_player.radio", viewModel.uiState.value.configuredEntityItems.first().config.entityId) } @Test @@ -178,14 +192,15 @@ class MediaControlSettingsViewModelTest { fun `Given two entities when removeEntity called then repository updated and start event emitted`() = runTest(testDispatcher) { viewModel = createViewModel() advanceUntilIdle() - viewModel.addEntity("media_player.tv") - viewModel.addEntity("media_player.radio") viewModel.serviceEvents.test { - // Drain the Start events from addEntity calls + viewModel.addEntity("media_player.tv") advanceUntilIdle() - awaitItem() - awaitItem() + awaitItem() // Start for tv + + viewModel.addEntity("media_player.radio") + advanceUntilIdle() + awaitItem() // Start for radio viewModel.removeEntity(0) advanceUntilIdle() From 7068ddd070c0a5a2247457efc356cf6dbd7cb942 Mon Sep 17 00:00:00 2001 From: Fletcher Dostie Date: Fri, 15 May 2026 15:05:23 -0700 Subject: [PATCH 109/114] Remove index column from MediaControlConfig (thread 53) Ordering of media control notifications is not important, so there is no need to persist list order in the DB. --- .../52.json | 12 +++--------- .../data/mediacontrol/MediaControlRepositoryImpl.kt | 3 +-- .../database/mediacontrol/MediaControlConfig.kt | 2 -- .../android/database/mediacontrol/MediaControlDao.kt | 4 ++-- .../mediacontrol/MediaControlRepositoryImplTest.kt | 8 ++++---- 5 files changed, 10 insertions(+), 19 deletions(-) diff --git a/common/schemas/io.homeassistant.companion.android.database.AppDatabase/52.json b/common/schemas/io.homeassistant.companion.android.database.AppDatabase/52.json index b84d3a58560..b88ebbc7679 100644 --- a/common/schemas/io.homeassistant.companion.android.database.AppDatabase/52.json +++ b/common/schemas/io.homeassistant.companion.android.database.AppDatabase/52.json @@ -2,7 +2,7 @@ "formatVersion": 1, "database": { "version": 52, - "identityHash": "3c21b887932188439db367536976cf8a", + "identityHash": "2001b0522c75782b992b5b833528b0dc", "entities": [ { "tableName": "sensor_attributes", @@ -1144,7 +1144,7 @@ }, { "tableName": "media_control_entity_config", - "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`id` INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, `server_id` INTEGER NOT NULL, `entity_id` TEXT NOT NULL, `index` INTEGER NOT NULL)", + "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`id` INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, `server_id` INTEGER NOT NULL, `entity_id` TEXT NOT NULL)", "fields": [ { "fieldPath": "id", @@ -1163,12 +1163,6 @@ "columnName": "entity_id", "affinity": "TEXT", "notNull": true - }, - { - "fieldPath": "index", - "columnName": "index", - "affinity": "INTEGER", - "notNull": true } ], "primaryKey": { @@ -1181,7 +1175,7 @@ ], "setupQueries": [ "CREATE TABLE IF NOT EXISTS room_master_table (id INTEGER PRIMARY KEY,identity_hash TEXT)", - "INSERT OR REPLACE INTO room_master_table (id,identity_hash) VALUES(42, '3c21b887932188439db367536976cf8a')" + "INSERT OR REPLACE INTO room_master_table (id,identity_hash) VALUES(42, '2001b0522c75782b992b5b833528b0dc')" ] } } \ No newline at end of file diff --git a/common/src/main/kotlin/io/homeassistant/companion/android/common/data/mediacontrol/MediaControlRepositoryImpl.kt b/common/src/main/kotlin/io/homeassistant/companion/android/common/data/mediacontrol/MediaControlRepositoryImpl.kt index 0021d0bf72e..5aed608d669 100644 --- a/common/src/main/kotlin/io/homeassistant/companion/android/common/data/mediacontrol/MediaControlRepositoryImpl.kt +++ b/common/src/main/kotlin/io/homeassistant/companion/android/common/data/mediacontrol/MediaControlRepositoryImpl.kt @@ -115,11 +115,10 @@ internal class MediaControlRepositoryImpl @Inject constructor( override suspend fun setConfiguredEntities(entities: List) { dao.replaceAll( - entities.mapIndexed { index, config -> + entities.map { config -> MediaControlConfig( serverId = config.serverId, entityId = config.entityId, - index = index, ) }, ) diff --git a/common/src/main/kotlin/io/homeassistant/companion/android/database/mediacontrol/MediaControlConfig.kt b/common/src/main/kotlin/io/homeassistant/companion/android/database/mediacontrol/MediaControlConfig.kt index 7ca3d4644d9..dddaa976ad2 100644 --- a/common/src/main/kotlin/io/homeassistant/companion/android/database/mediacontrol/MediaControlConfig.kt +++ b/common/src/main/kotlin/io/homeassistant/companion/android/database/mediacontrol/MediaControlConfig.kt @@ -14,6 +14,4 @@ data class MediaControlConfig( val serverId: Int, @ColumnInfo(name = "entity_id") val entityId: String, - @ColumnInfo(name = "index") - val index: Int, ) diff --git a/common/src/main/kotlin/io/homeassistant/companion/android/database/mediacontrol/MediaControlDao.kt b/common/src/main/kotlin/io/homeassistant/companion/android/database/mediacontrol/MediaControlDao.kt index 29c9eb8c40a..bdbf717942d 100644 --- a/common/src/main/kotlin/io/homeassistant/companion/android/database/mediacontrol/MediaControlDao.kt +++ b/common/src/main/kotlin/io/homeassistant/companion/android/database/mediacontrol/MediaControlDao.kt @@ -10,10 +10,10 @@ import kotlinx.coroutines.flow.Flow @Dao interface MediaControlDao { - @Query("SELECT * FROM media_control_entity_config ORDER BY `index` ASC") + @Query("SELECT * FROM media_control_entity_config") fun getAllFlow(): Flow> - @Query("SELECT * FROM media_control_entity_config ORDER BY `index` ASC") + @Query("SELECT * FROM media_control_entity_config") suspend fun getAll(): List @Insert(onConflict = OnConflictStrategy.REPLACE) diff --git a/common/src/test/kotlin/io/homeassistant/companion/android/common/data/mediacontrol/MediaControlRepositoryImplTest.kt b/common/src/test/kotlin/io/homeassistant/companion/android/common/data/mediacontrol/MediaControlRepositoryImplTest.kt index dd1180c56c4..b9b4d53ef1a 100644 --- a/common/src/test/kotlin/io/homeassistant/companion/android/common/data/mediacontrol/MediaControlRepositoryImplTest.kt +++ b/common/src/test/kotlin/io/homeassistant/companion/android/common/data/mediacontrol/MediaControlRepositoryImplTest.kt @@ -548,7 +548,7 @@ class MediaControlRepositoryImplTest { @Test fun `Given entities in database when getConfiguredEntities then returns mapped list`() = runTest { coEvery { dao.getAll() } returns listOf( - MediaControlConfig(id = 1, serverId = 1, entityId = "media_player.tv", index = 0), + MediaControlConfig(id = 1, serverId = 1, entityId = "media_player.tv"), ) assertEquals( @@ -558,7 +558,7 @@ class MediaControlRepositoryImplTest { } @Test - fun `Given entities when setConfiguredEntities then replaces all in database with positions`() = runTest { + fun `Given entities when setConfiguredEntities then replaces all in database`() = runTest { val entities = listOf( MediaControlEntityConfig(serverId = 1, entityId = "media_player.tv"), MediaControlEntityConfig(serverId = 2, entityId = "media_player.office"), @@ -569,8 +569,8 @@ class MediaControlRepositoryImplTest { coVerify { dao.replaceAll( listOf( - MediaControlConfig(serverId = 1, entityId = "media_player.tv", index = 0), - MediaControlConfig(serverId = 2, entityId = "media_player.office", index = 1), + MediaControlConfig(serverId = 1, entityId = "media_player.tv"), + MediaControlConfig(serverId = 2, entityId = "media_player.office"), ), ) } From a8c57a1737f000839dfe027ef75fa51c3573534d Mon Sep 17 00:00:00 2001 From: Fletcher Dostie Date: Fri, 15 May 2026 15:50:04 -0700 Subject: [PATCH 110/114] Fix seek-bar regression after media commands by completing pendingCommandFuture in updateState() Previously handleCommand() completed the SettableFuture via invokeOnCompletion when the HTTP call returned. SimpleBasePlayer then called getState() with the stale pre-command mediaState (e.g. Playing@178s after a pause), briefly flashing the old position before the WebSocket state confirmation arrived ~25ms later. The future is now stored in pendingCommandFuture and completed by updateState() after the server-confirmed state has been written to mediaState, so getState() always sees fresh data. invokeOnCompletion is kept only as an error fallback for unrecoverable job failures. --- .../mediacontrol/HaRemoteMediaPlayer.kt | 43 +++++++---- .../mediacontrol/HaRemoteMediaPlayerTest.kt | 72 +++++++++++++++++++ automotive/src/main/AndroidManifest.xml | 1 - 3 files changed, 103 insertions(+), 13 deletions(-) diff --git a/app/src/main/kotlin/io/homeassistant/companion/android/mediacontrol/HaRemoteMediaPlayer.kt b/app/src/main/kotlin/io/homeassistant/companion/android/mediacontrol/HaRemoteMediaPlayer.kt index 2792caa547f..96c442d2286 100644 --- a/app/src/main/kotlin/io/homeassistant/companion/android/mediacontrol/HaRemoteMediaPlayer.kt +++ b/app/src/main/kotlin/io/homeassistant/companion/android/mediacontrol/HaRemoteMediaPlayer.kt @@ -3,6 +3,7 @@ package io.homeassistant.companion.android.mediacontrol import android.os.Looper import androidx.annotation.MainThread import androidx.annotation.OptIn +import androidx.annotation.VisibleForTesting import androidx.media3.common.DeviceInfo import androidx.media3.common.MediaMetadata import androidx.media3.common.PlaybackParameters @@ -54,8 +55,17 @@ internal class HaRemoteMediaPlayer(looper: Looper, private val commandCallback: private var mediaState: MediaControlState? = null private var artworkBytes: ByteArray? = null + /** + * The pending future from the most recent [handleCommand] call, if any. Completed by + * [updateState] when the server confirms the new state via WebSocket. Exposed for testing only. + */ + @VisibleForTesting + internal var pendingCommandFuture: SettableFuture? = null + /** * Updates the internal state from a new [MediaControlState] and triggers a state refresh. + * Completes any in-flight [pendingCommandFuture] so SimpleBasePlayer calls [getState] with + * the fresh data rather than the stale pre-command state. * Must be called on the looper thread passed to the constructor. * @param artworkPngBytes Pre-compressed PNG bytes for album art (compress off main thread). */ @@ -63,6 +73,8 @@ internal class HaRemoteMediaPlayer(looper: Looper, private val commandCallback: fun updateState(state: MediaControlState?, artworkPngBytes: ByteArray?) { mediaState = state artworkBytes = artworkPngBytes + pendingCommandFuture?.set(null) + pendingCommandFuture = null invalidateState() } @@ -194,16 +206,18 @@ internal class HaRemoteMediaPlayer(looper: Looper, private val commandCallback: } /** - * Executes [block] to launch a command coroutine and returns a [ListenableFuture] tied to - * that coroutine's [Job]. The future completes when the coroutine finishes (success or - * cancellation) and fails if the coroutine throws. Keeping the future pending until the - * network call finishes prevents [SimpleBasePlayer] from calling [getState] prematurely, - * which preserves the position extrapolation anchor and avoids a seek bar jump. + * Executes [block] to launch a command coroutine and returns a [ListenableFuture] that stays + * pending until [updateState] is called with the server-confirmed state. This prevents + * [SimpleBasePlayer] from calling [getState] with the stale pre-command [mediaState] during + * the window between the HTTP response and the WebSocket confirmation, which would cause a + * visible seek-bar regression. + * + * Any previously in-flight future is completed immediately to avoid leaking pending operations + * when commands arrive faster than the server confirms them. * - * [CancellationException] from the [Job] is treated as success (the command was sent; the - * scope was cancelled). If [block] itself throws before returning a [Job], returns an - * immediate failed future. If [block] returns null (command not supported), returns an - * immediate failed future with [UnsupportedOperationException]. + * If [block] returns null (command not supported) or throws, returns an immediate failed future. + * If the [Job] completes with a non-[CancellationException] error, the future is failed as a + * safety fallback (though [callMediaAction] already catches all non-cancellation exceptions). */ private inline fun handleCommand(block: () -> Job?): ListenableFuture { val job = try { @@ -211,11 +225,16 @@ internal class HaRemoteMediaPlayer(looper: Looper, private val commandCallback: } catch (e: Exception) { return Futures.immediateFailedFuture(e) } ?: return Futures.immediateFailedFuture(UnsupportedOperationException("Command not supported")) + // Complete any in-flight future so it doesn't stay in SimpleBasePlayer's pendingOperations. + pendingCommandFuture?.set(null) val future = SettableFuture.create() + pendingCommandFuture = future job.invokeOnCompletion { cause -> - when (cause) { - null, is CancellationException -> future.set(null) - else -> future.setException(cause) + // Do NOT complete the future on normal success or cancellation: updateState() is the + // primary completion path and runs with fresh server state from the WebSocket. + // Only fail the future on an unrecoverable error so the UI doesn't freeze. + if (cause != null && cause !is CancellationException) { + future.setException(cause) } } return future diff --git a/app/src/test/kotlin/io/homeassistant/companion/android/mediacontrol/HaRemoteMediaPlayerTest.kt b/app/src/test/kotlin/io/homeassistant/companion/android/mediacontrol/HaRemoteMediaPlayerTest.kt index 8ee830c108a..ad3df3ca88a 100644 --- a/app/src/test/kotlin/io/homeassistant/companion/android/mediacontrol/HaRemoteMediaPlayerTest.kt +++ b/app/src/test/kotlin/io/homeassistant/companion/android/mediacontrol/HaRemoteMediaPlayerTest.kt @@ -5,10 +5,13 @@ import androidx.media3.common.Player import io.homeassistant.companion.android.common.data.mediacontrol.MediaControlState import io.homeassistant.companion.android.common.data.mediacontrol.MediaPlaybackState import io.homeassistant.companion.android.common.data.mediacontrol.MediaRepeatMode +import io.mockk.every import io.mockk.mockk import io.mockk.verify import kotlin.time.Duration import kotlin.time.Duration.Companion.seconds +import kotlinx.coroutines.CompletableJob +import kotlinx.coroutines.Job import org.junit.After import org.junit.Assert.assertEquals import org.junit.Assert.assertFalse @@ -614,4 +617,73 @@ class HaRemoteMediaPlayerTest { fun `Given repeat mode All when getState then maps to REPEAT_MODE_ALL and set triggers callback`() { assertRepeatModeRoundTrip(mediaRepeatMode = MediaRepeatMode.All, media3RepeatMode = Player.REPEAT_MODE_ALL) } + + // -- Pending command future tests -- + + @Test + fun `Given command in progress when coroutine completes normally then future is still pending`() { + val commandJob: CompletableJob = Job() + every { commandCallback.onPauseRequested() } returns commandJob + + player.updateState(state = createState(playbackState = MediaPlaybackState.Playing), artworkPngBytes = null) + shadowOf(Looper.getMainLooper()).idle() + + player.pause() + shadowOf(Looper.getMainLooper()).idle() + + // Simulate the HTTP call returning successfully (before WebSocket update arrives) + commandJob.complete() + shadowOf(Looper.getMainLooper()).idle() + + // Future must still be pending — updateState() hasn't been called yet + assertFalse(player.pendingCommandFuture?.isDone ?: true) + } + + @Test + fun `Given command in progress when updateState called then future is resolved and state is updated`() { + val commandJob: CompletableJob = Job() + every { commandCallback.onPauseRequested() } returns commandJob + + player.updateState(state = createState(playbackState = MediaPlaybackState.Playing), artworkPngBytes = null) + shadowOf(Looper.getMainLooper()).idle() + + player.pause() + shadowOf(Looper.getMainLooper()).idle() + + // WebSocket state confirmation arrives + player.updateState(state = createState(playbackState = MediaPlaybackState.Paused), artworkPngBytes = null) + shadowOf(Looper.getMainLooper()).idle() + + // Future is cleared after completion + assertNull(player.pendingCommandFuture) + // Player reflects the server-confirmed paused state + assertEquals(Player.STATE_READY, player.playbackState) + assertFalse(player.playWhenReady) + } + + @Test + fun `Given command in progress when second command arrives then first future is immediately completed`() { + val firstJob: CompletableJob = Job() + val secondJob: CompletableJob = Job() + val jobs = listOf(firstJob, secondJob) + var callIndex = 0 + every { commandCallback.onPauseRequested() } answers { jobs[callIndex++] } + + player.updateState(state = createState(playbackState = MediaPlaybackState.Playing), artworkPngBytes = null) + shadowOf(Looper.getMainLooper()).idle() + + player.pause() + shadowOf(Looper.getMainLooper()).idle() + val firstFuture = player.pendingCommandFuture + assertFalse(firstFuture?.isDone ?: true) + + // Second command arrives before server confirms the first + player.pause() + shadowOf(Looper.getMainLooper()).idle() + + // First future is completed so it doesn't stay in SimpleBasePlayer's pendingOperations + assertTrue(firstFuture?.isDone ?: false) + // Second future is still pending + assertFalse(player.pendingCommandFuture?.isDone ?: true) + } } diff --git a/automotive/src/main/AndroidManifest.xml b/automotive/src/main/AndroidManifest.xml index f904f72c869..cf8aaf6abf9 100644 --- a/automotive/src/main/AndroidManifest.xml +++ b/automotive/src/main/AndroidManifest.xml @@ -242,7 +242,6 @@ - Date: Fri, 15 May 2026 16:17:25 -0700 Subject: [PATCH 111/114] Update screenshot reference images for MediaControlSettingsScreen Adds multi-server variant references and refreshes existing ones. --- ...onfigured entities_foldable_c908f502_0.png | Bin 57377 -> 57553 bytes ...h configured entities_phone_e05166be_0.png | Bin 54274 -> 54529 bytes ...ed entities_phone_landscape_9e00b29d_0.png | Bin 56995 -> 57268 bytes ...igured entities_small_phone_66e7bbf2_0.png | Bin 63016 -> 63358 bytes ... configured entities_tablet_2f22c4ea_0.png | Bin 40152 -> 40359 bytes ...d entities_tablet_landscape_62cae397_0.png | Bin 39486 -> 39702 bytes ...h multiple servers_foldable_c908f502_0.png | Bin 0 -> 53151 bytes ...with multiple servers_phone_e05166be_0.png | Bin 0 -> 50300 bytes ...ple servers_phone_landscape_9e00b29d_0.png | Bin 0 -> 52796 bytes ...ultiple servers_small_phone_66e7bbf2_0.png | Bin 0 -> 58295 bytes ...ith multiple servers_tablet_2f22c4ea_0.png | Bin 0 -> 37683 bytes ...le servers_tablet_landscape_62cae397_0.png | Bin 0 -> 37717 bytes 12 files changed, 0 insertions(+), 0 deletions(-) create mode 100644 app/src/screenshotTestFullDebug/reference/io/homeassistant/companion/android/settings/mediacontrol/MediaControlSettingsScreenScreenshotTest/Media control settings with multiple servers_foldable_c908f502_0.png create mode 100644 app/src/screenshotTestFullDebug/reference/io/homeassistant/companion/android/settings/mediacontrol/MediaControlSettingsScreenScreenshotTest/Media control settings with multiple servers_phone_e05166be_0.png create mode 100644 app/src/screenshotTestFullDebug/reference/io/homeassistant/companion/android/settings/mediacontrol/MediaControlSettingsScreenScreenshotTest/Media control settings with multiple servers_phone_landscape_9e00b29d_0.png create mode 100644 app/src/screenshotTestFullDebug/reference/io/homeassistant/companion/android/settings/mediacontrol/MediaControlSettingsScreenScreenshotTest/Media control settings with multiple servers_small_phone_66e7bbf2_0.png create mode 100644 app/src/screenshotTestFullDebug/reference/io/homeassistant/companion/android/settings/mediacontrol/MediaControlSettingsScreenScreenshotTest/Media control settings with multiple servers_tablet_2f22c4ea_0.png create mode 100644 app/src/screenshotTestFullDebug/reference/io/homeassistant/companion/android/settings/mediacontrol/MediaControlSettingsScreenScreenshotTest/Media control settings with multiple servers_tablet_landscape_62cae397_0.png diff --git a/app/src/screenshotTestFullDebug/reference/io/homeassistant/companion/android/settings/mediacontrol/MediaControlSettingsScreenScreenshotTest/Media control settings with configured entities_foldable_c908f502_0.png b/app/src/screenshotTestFullDebug/reference/io/homeassistant/companion/android/settings/mediacontrol/MediaControlSettingsScreenScreenshotTest/Media control settings with configured entities_foldable_c908f502_0.png index 638b8bb7bff8c8b0887c28078d8f4d0d4c7c41a4..1b46f54762e1f1823579371b8c4537d9484f4635 100644 GIT binary patch delta 33870 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 BJ)r;q delta 33693 zcmc$`cT|(<+BfQq4$O=c3kpaZ#)g0(BGO?rDk@SGq!$J0U3y6#6(s@!HhMEkl_tHD zK?rD&A}v6GPz(VAgwO(ngmXu6@ICwc_BrdEwZHB1kFfIa+*dEZ>$>?|zZ3QM&Uew~ z5dLQGZ*>$@6}hrJr|PX6zI>{=4DMX1ayHPlOi}N>|){+L+dxDZW>p9|8Zf@AE@~Uq5~O`O5P{arL6#KW{zppM3!OO2vQn zjDL3o#NzUsDE=!%K>tUj{jZXM{?DuYe-N=H|Nl>Rcj%%t7Z0Xbnv*B7oS`mI&cQ>r z=rhShAe^XQilup5Qv5587M5BtRy%wyZ=8%kXH(1Nm`zQDfz?C-C~(}(edA=zcl`r3 z%=)n*FWI;BzV3TByD15s-MlMskGdCnG4AHM5fQUxC*V03OE#p^(nib0Lgu49OsCy~ zbk0w4Mq_T?8?BM(p>20cTjv*CZ?@_R>#H3L<+8lGvqK=oZ-S=0xBv0wf1ZM#U&^Nj z!*=4G2TtF*_3NvsM#9o6UKkobx@{QAPD>*l6TIwZksPn0Foe}rQ|aw5u})t`I%I(i zS~xg~{iI(qNlx9ag+0Y63re|8bcy($RF%v{?GdPk%JpJ>33E zuCz`_a6svlZf=0o=5xLs*swo~&o=xJ}r4Ws1l**8I+HcJl7KF6+{|*l)7qSY)5~WO|;@ zcTuzKzuR*8%ZP5l+*z;ox1=y=VUaFNUGzG+W4~t5%C@E6Q19^shPt!160cif*Hhfz z(LrHHrnL6{e5$a~PA7YXy%k}8k3W7&)At^M;>9%I20Ven(^5?r-*S3J6kTKf|adxFmsabw=Gn^LAQH;>96 zb*$gc$#oKbZ1c}@!zG9w3FFQSM6L3Yw1qtE?@0FW-{8-4O)9=JU4tm3Yx}q6AQWqj zDiqZX3uG0#p%^zh$2Ng!i0n)@q{X1g9m}zm=LmwwWE#@oPWx=DVJo&bB3%h4{-!6w z^X!#m97Q@GIucm0)PfE^9SmcfPz(R2tgrDWTVy)B9;IcgF4Z+><}a?&QzRke zG3lWs)q*nEobmHK5ee@Q{YyClB9iUUJMs>{3QH58FYk7%AJ zxCNE;QQCgNcyz^h*WAH%%e5aM1lV6Jq|EL%aoSu-If{w0Es)A6fUB7*zpQ9?DpPHi zb_o;|sa-A{tHmQUQY)Qqdn`~=Br|e_hv;sS7HElb)y)N`#aS+=8}cXdW=ZSwZ+p{Q z$M)Hcz9L9TX(yIe`Mql(LuIOC8^q=w;psrH@oXD?4Gz4djk6D<@kBCYM`e$j*Q zYr)V87ne)BX9VO)Y-SSKV{DynSO(rQCdPRRn%_o340IMF)H! zeW!e@#IW~J(%AboanVh(ytq6rG+3qe*Rw}&%$!_`&X zrbpVXcwZw!`1~gCEOfSFQq5H*0`mrj&pK#(kizU7IkUYMlN$QR6Z)eUlhmBNJut5$ zFq__MpJwXtR-_ERPod)?7U*<2-6b96+})dFgV}lYFP9K{c5TMyHFJjOmPl!QAf7Ux z0!25VxtkZ3>DZkg|7tA=5zYz~%^4~PQm96EGkv8UIakw~qb_A87a>l0+Sq91b#MB% zSm*r|w`6v^Bp9Z=U}n84Ztlz2uVX{|?9;N4S-dQ>>t+6K<#pkK#j0uYI>V)4YHbl` zM~Sx1j8vI9bG^}STMS2*10Ypdg%Xg*`+3W2Gemp^!*0Lg``uAJmd`f6c$Bu2Q>4xY zLG(v>t}o22YP(uey{OH+`s}|et#w&WGzcb#=vR5SJxdFQ73N??k`f7a(*)N*4yqqv zp8Smc^7)yd7sI}I6ixDDFSku>xX7Wqq_{!^W15Q#<7z;p;VutDN)A3UzFjNa-08uv z22THI%wIP%=|Zg|9g%9dzR=0k3o8MKW7WqVqUqcJPqGMGKb7{H{&;S5en{_yxm;!kI+rw^39OB@8yA5=p$s zq3X2K2CbUNDF%EY@|XU~>8tF>0mv$ALN2z|o|Bvwm3>lJFQBd}7-qd}Hh%g(5pO+z zqPC!{PxNig*+?zilb%2^A;CjelZ8r-h5f5F8>q!X9(bp9k7g7fo49&x@kB0v&1_+& z1vW%zAa?W+mY`a5IuLHfH&u2($FSFYsV@YZ-T@6L0b3qV^7c9;7(goZG%2Wm-&&Ac z9q>7$cV4IJtf2Si{=E9+l>vphk-&p??xMmpxReV9sASgP*mP7TZ!hn1a#hN8*v+j)mNVZJqg~iX(ArG-mO$(}LKs^W5 zcwO@NpsHyC3n@HoZ1(mfJa_-ipkv!1^F{$qHW;Rv`Vn0r#9dHVq9l20c#N7B8@641%nD<6WRw$Pbur*U%N0D3lN6JBEi2C>*I^Gt5In%age9Yr$%%+ zf*a>Gs-##Ubp}DJg`X>vYV5eQu67N_Z2#gNm3&`m_9~Ayh?h3A0{MP^^JT8J2yZrI zr{)_t&3DcJ{S2pR(NKWZo}=c5z_fT8&cSM3U&Ok!rI4Y|G(%}l17COh+!XR*{IKQJ ze6NR))Mhj@#ftPwp{&L>cNm818tEw1i?xNM13oU;ad2%jI?V{Mbr)lF`qb1Y_1oO3 z!Hi!K8E;#dsy=8S+=6tCPt6N8x5qj$d)Byl7DMsew4vw!|2hw%$^>3jcH;ImA#(_CNz4R&= zL_C>;D`FYMaU>BxzTh~es0KZqG2>C@k9HGjq3K>`M`9^Bi_$L+!9Nsv0ceo^!lWI# zq+OdEa-@^5ul*df#ps>}b(vlI2ubzSSjxga<*tn>=}g1kXlXlxgX+=+;hHB}1#R#B z`Q%JmXM|^OG#8hU%BPWzS&5YVTuxuFibj1?GiW%wW(6G+0+TX*$}Os8N)PghEK;uy zFtB07dm^ChY@o@*oLmtGGwyn7mNO$S^Ro{FC!F&=sI4i*d9Xp&BeZU17U=qtQyS@z z@}6inZXy9Pb39qQ%UFryYzzhUl#453scPltA6Z&Qu~=$(pJoXSMzSk&F@~dF+<#ut zeZ&9OYssPb$<4~qXU+teS|l&e+$)R7IB?&N;2s_g3 z?RFx)q23MrOd_>~wJ^WuLL-?2{)FY#YR{Y8`PD<74TL@J5s=PZ!s68UJ z`=*8A@I^bZEvBFd+(<`khE!{toCzyJdgrrThaEZg++3t~ws3|TaYQI1+X>`4T5iDE zYRbaViA%ByXJXpD(aOB~y&IV20uC~KPCi_`90Sj2jv@w%Esc-p{%bIBN+Be`J(Puy zogCKRa2#zKGu(al$vOl<8<)LfQ_5ETGnc)Y^1?dneAOp?E?h~4aa<_zy>Nw5?vw-D zDaxkNxhTAZ$3)A?G(O9}67kKVdKX6-_fu1>nUxRR=9rD3oge210s_G*4|I&pNBR#2I=Ab0%awxc;eXf{P-^*S^pb0 z$d++@An(8KnmZzjNXbwBP`B}SB<0dVs#M~$WLg$Iry5_g_SP`ucF5_@uc-{@$H^u1 zLWKm;Tc-ML(l70cEe`YaCNJm6DlFYkoPcijHtx|fV@^Md=xK3$ByV|g6%mx0qy z;UFc=8AnsJ_l=RJ20|r65S^rVs)$;9Yhn$EB^FR6W3$3Nz=x3i4Ac@HZB93$HH3x&7?%zSR@vF8-SHjBz1i{O_be@GGN4lmFS&nx zXffb1iM=RL+>EYel4hd}+u+QN<^BYMisI7zH9m*0A=0Ua4Qcgho)yCvh(b2&8Xt9l#wGebE87jfn3hRip!;;)}4zbtX_~R4at-isR`YfYEmR0DyT)viE@_; zi(aN*OEEOovvbc%Y?rgZEesTmGG`;dxm(Agw7?JOVK;plgjr2f7Ww6%q!dl%TREY= zvUASjWu5@`i%pM^?)wwmhSDE-V)Y<#f-p?1(DQ0QeqRr83nJoLGONl5WOjW`-7!7$!(AN2S!62 zLSArjF^XLfrKivY_rBU5!nxJYGd5GX)-VIlL{|Y@9u`p}sU2&l^m3cRST1&`t zHWxq9_zI(3kjM3BiT9ze^5<)>M*-jF*`#*z_baNqch!thNckt{Oc`b}oARt` z2U%svSZYk~Ou*VFthVluAIsRok|R4sODi7Ys9mwVH0C%uw&IS-%>0XC%g4Cmwe3os z^{73{QbJX;K{ApDl&OtQT@LnQ7L>|F3;&_>$@M5#H5?&-MkSZes^hr1B`Xgh1O&s{ z|NNnJKn6Iv+e2M3!^7TLIA6haw~x0zvm*QACl?+G6fJ@x`1hfp ze79tMxJXFVrcd*R$EN zGJ8ICxLhqJPZK`f_6W0CQ5oQn`<43a>;h3uHOr}X-(l!pC? z4bh7;z+XVSw~(+(85cG(*r5K>RYYgJ*)1%_>SvvX0N#^7*bA&Ykt7JUUEmY^UC%(> zP|%(BdW>MEpjsU@f1FoaVg;0$GX7H&GkrycL5yh*u2RY(h`r(H3g)xkd^MuA)#al; zW$}e`kH(rkd+$U!1TxJ*Q$$q`*9@)Q%YF;# zSoP#Qfwssxn#5{Wjfr43MXHO_ z$d}#-kY;|7i97AzKT%H-$~UgbHtM*IM2$Ydk$Gtz_^?b#;HfXol_pI0E4-m8FuZ zT9Ei6?~PjQiR~7%+YLa59lgRs-X9`irwW(XM>;oKJ+CAB zWxDsLDpLD@#6b0RxVSDRmT}y%oYD4zd;}ka=Hb|pA?pJBnYiTL#mn8isfyc7fs2!4*+1rxhRDri zM_REzw($}A`IY9FY?JE`b@_T}im+fMLBuG|2? zIiGeAy<_r-n(SEd4=g9>TLRHif0@6k%>C1;2dlZKetdiA z^6ZFiHK%Ert>wO*fA!73?_IL~;g=8T5xBW7>Y(lYe!cg0)%jbp0rS5r&(n_K9s`cn zV%fve!8ky0XNM%!cu(qY+iZ0&9gq%Cr2a%T{$pFLj(yXZw`FeGIHJg_`>^R4spO*4g1wAk@Ktzd^HwDTer6lWMLi8V&z6Ol;853J(_ zp*KIwfAF#OsOtwUZ>VoB{6$?V+qCP7xoZl5G1^84pk_c^$Jg0_D8YbU?p&s(4G zv7J`f_5CT%JMO=J|9t4f$e!ZAI8w+w>RNoVGPbSb0-n{Qp7Wi(!Y<&`w4>c`h;kvCi70Po zS6{8SVs5PUSMpm<(SsyGwjONG&P*{`Ta!nxwa$1vX$l-(Ou?=l(@9Cn+X@NyEbh3A z$ymg4u*iE1$a|(CY`n2Sg4EkLmNL~(YAcLB9J{xZOKg}L>8l_48-1o&r_c%$HnZ_0 zb+JuZny#7=sW=gbrN~He$K+3?!PnkZm>I9F4*B5ojL-=9iqUkOjP)g=nOi_tVj10R zi-l94`2?-r_YV^&3>pDcM6}^(YxF{N!5wm3Uw-980v4j23VF~ecX(|cscxp&e6oD- zd0zJTOFixEBvLhj;kqr1=z7s(NkVIkws_f0zgZ_sWxtsmOU87)rqO4CCa@?l7A~Ei zG_Gm6exuCxh>q&AejzC((4b8gzP{uvv_;O6crfgmg7P{&q9ryuD(c)zFNkwL&In+6 zN2e_o6L1_Ug!*w7*l%3S+g=hE}`X0-V=wUxps zn`UleZgJb&Bzd-g>0vkgejSzT#)~v)la`k%ZC+KfI&FwHsk~q~9Y~;CkUKS}6d~k3 z*ulbvs{tu{s>_2G6A6NX=htTJ)Rp~AIar8po)Cl4bW3|}^>C!ZpQbOu>hndI^GFPS zc%^J+t*mxjh+@wvilP6Zia25oXY!dyhy)J%lS&c74d>`{)owm>WjHi*IS*B|P-%5) za;Zy4dUzqG{0)lNJlJW`#xI@6~;yqxcQfLm?#7PX!m;XZG-|F%0M=JWA{2sCn^-PQ@4p_OP* zvz+JFnnKXE`un)gC8a_LpGbW(Yz`Fk zi5oE=?A&^pCIB!EouIM((dHp)^Y^)Vj;99Q^}wFUYLB0et}g+&(>RRs0VRa4Yf z2|(Pe7isU+d03C~nzYUux7J8ly6cP-ynC72XB}nZB;x<& zS??(Wf0vrFskZCNsi1&*1DK7YINA)lOF2t67i zP~>gxAPF#cg2|fM;aRlAOq8+Eh5xcHbU`|Z%R36@n_5yzr4_~b;3`yC7br|74s20TCY9?TD3PXRRTKuEpwb<53}2ST3c>S6Gi?Td=#* z*p77?rVrD&6mRJtjI9Fi8{ zNCC%p;s=6tX02KI`A&IMdLiijA$ekbCSwIJZQ6AZWkQoa}dlK^Yo=gsE# zUXhffXDr_h@P@UII$Zgoo9eajGha!c(u6Fry^mHvH}&PP$l8Yy znZg%00_b1m`_$rR*ZK#)^e4D4_ZS-XV$h3ToLiz@+8qoFRobZni3-hCe0i=}BqtN3 zXCXV7FY7($8_16A9CCB5TbpohRin?y`URQ^OVq-}_Pe-?`8*CCje6!2+7JAeEvi3| zQd^AIC<3vbTX>U6L#tQU;z@+zdK4&H3hoZNAr=#zwT?p!9Hi=ZZRW#^VYQel83nH) zZ`{o`{sLGPbSy1)S-=r_YKyK(_HRNPz*heTU++q7bB#KOTAB68P8;<}&h|tP2?`Ea zN2#*8MGe_>;*qDHftkedBqim^M&0Xcoi}A9pXc*`tfS8<`)!adXjRDp%v9x-r)LW?8X|BnPyG9xIEkVf1RCt>RSLK9&VQJ5_9C z#JVg5lsQTv;izoJV#S3UX5uGQeZZl4^(fss{eGm{5^81zbqz$`KE;e0=1Dhy&2MgR zT2n?`W*2n-3$QCf?`vj@f`B&;9jXIES8gy9mbPeM#mHb1oDxV-_QOB;Ww$uZf6$}Z zrg`T#%Aiv+Ltb547*>@q1_G$m!ILI0hlV*l)IA^%bn?WhfJgPH3&}sF6n%VgoI5{4 zC}bd3g1$jgS6^Lp3mO;b_sCZIDjiS<1kSIR`wo@*0f#M;OJ#_%X2rTKpfzGFuY_TKuG#zC zwlaP1x$?wd7%}<9`&{E<7F93nQIB@>8dxmy)$qH9y@OQx4p=qEd$sDa5`yAN)|*HW z5a=6h$TFQ89W2R}JFa$C0oL`-Px~6Ld1mVnOhIP%`>@i)@k zLA{|LDKK|e&(IR?ZR1jNX(|Dggjk=7wsxx+4Piw_H+OqFd_p#rU&VK3f(Le&NLOC` zBwK8~MOd7lFsRIWKV4G#d%snM-I>Io?!6=dM|&}04V9FoxbKuXVqcz!w#Jemh2?I& z;^pM-N`fmFSGsax&6Jj#Bj+#a6A&;iKrm7~>qEJMdjv}K1J$527^wpK zDK@J1aVe834O&~k!W(TqoOSMdnnzw)amO~cepV=4`tCzi*c4&84#=EXpbzo*lwv>-FQZm`6bQMrE*Me6rrAm2kK4uO*>q)F^9 z2@zS43PnS%VVe;PFH%4CmSFO)5=)zf1D(mf@%c{p3J+_KzT3!~k&3iI&th-oah5I# zZ*S&=;p$dOqv`f|kVlJ`wF(>~ zrSKftzq_s|9ofg6E?|nA%D)84o2^GFdQOytoX0w`w8zUz%{C)PeO4-$IyJ+A7sv&+ zjjJl~RIfKmsS*K(Ia}sz{@DEfO21tycA%o$jDwiwL~2V;gl4ZTvWnrp`nRqr1h91$ zipvQSafvneF)lm!jmCSSZfVI#tJUM61zklj(_Uy}+xP?gGf`!Ae1ZcOtghZ?4!A%v zXq}XmH|^Pkrw852*^%!{aTbZHQF~&g=%B+j-ym8tZ3}8$ zff^@cPMXFf+ldV+un5^tdFETUm>f+9ow@ZtD8*6?-vqy7-*JSn;jXJuQ%8C^y;Bf< z4q2@ux_4P}f>lnw4rhxBAMytY4ALVZe0xW9jX|9kFj7fE#rR%+>L5 z&;=Bg!Zg>)-b5;iE930b(S*-jT#x)BiJqV?7ygEi*t|HdBc(>GY`1AIpJky4u4u-} zOhr}G0x&+G!Kutti^|lh0@W>}+mCmT$@zcdd5Ouhxi2 z!;`jZ<$DeFB(HIVkTpZ%JDeac2d zkX9Nf4PpPZA~j}UR&vOgibvg&T0nBWsJImp^-OB&=0Q{UXm%uM(PF-1Dm(bN4|8(2 z0z9Hris@T{LV?QOhBOB%h^)t&5wqw`CT4w^T#UaV<3I!QM7Z1A7u2peatf!Dw*;}H z3DV?XaLB88k@L#Al+ScWDRY+c3tDwxcr8^Fc9jqi^aB8FXzeXgUFv{gKtWuGb%n*6 z-Mv!Awe^ZyHJJH!klf=q**G&(zgk`6E53~r+&@3!hEKvUtm1F*Zp%pwsL_m*Am$o| z1Qg{w^jSm11?=;0)gQOs2P}QoaN_1(rfb7oSPYD!a5WQh{kJ;YS#SUkfCoOdZ58!9 zPCe`97j}IA^~n#w>#7wNJ{&Io3Dpf6HVXhMsh4+s$B8>+=PJe{osF_2^FO>4?keEm zl1aN5ez4T%kM$<`y6b{a(0o1SHd4qS$^HFr7!VzX)-{T5H-!8XGVg`HZHt6?1mw(Se(2O*9O&&zc2+VwyfGx($9WMmW!v{6*E2&AH%VF)(o zMO&bllM(6TK?RcOe!;a~f(*Gd;2?H@4DdrYThesqw>PKNqvFCO2o}Cq^HaNpyih4h z1*EnB!fY;mOWLn!9P(#)8r1Q0p~WZsvg-kUA4YV!`5i#ov^qgRbZN=kkS2Y-+03&F z+Q^l~!@kO7#1=!7Cl7OSV&);8fKT>Ii}L^i7CsHu7|rUYp2D~sh7NAx8(S26_`Ohd z|8l6W7f^4WB@zgC`6(#C-*={Kn&SGxH?`cH9w-G%bsN%_2aPG!$=>Q)hg}O&cCycM z0kQ|SXVZMmiwzlY82};~Igs+?c~uLYt>=!tb;_?iCNT0f*%mEZi?$^W8=9)5crh-3 z#Tz83x#Q2p77~}YK=WI#SxK9vFM|-@szRXM^`$9{d>u6c3yQPH%`ftkC&3t9OiGUh zVaI?-#=%sPG6(gh`~gz3uZ72SHk5f#oiU{o-Xe{zi34DXPvks66ArKtJ1Qt3auvp( z$cE+QSG|o>@^&ornH_MRy=;|}4eIjS^JXmIkOg@h$T7&n_HvOv9#55Ytt7_udMdD5 zPEcOO=8={@9F8h+6#+V7Rx<`3_T(7a(Vm4_&w+xqcij_eQ_Nib9EH#~3!-8$taizY zh>h-FFFXr8zP=fsvcf7TsDJO|=3!wg9&?qXgPEy_0J02Yr5t^-x4;s_W9L9N^D>&; zW17L*vhY;lBNp=J4&TV{!nc&s;0Gu#R^W~6tNnU9syzWvbKo?9cTY%Fj69gB(1xaK zQW|P0V~S5!>l@o0rBBcqi8yYEymlJKNTT89`+$4XB)IHtrk1SjLqzT`&Z!pVa0&_vX7H99}To zQ@atp6?*@2drXlWr!PUta%Z|h^)uTNgJDEXRFgu}NMP+GoVc>5A>J;Ddx@rSYoo)ulk-tU$cq-v7+ zG9Jr+wo|9~&j`9u1tD5B;U*%6i>rr!!9M(cTydL{L^YJ!eZbI6Mxo*}C-o>quN$NB zw2uM{XcgAL*RzWZ9=d$Fy{k;tGMLXttU!YMt=B&22$%ZCeEqV_ zV9g%#aDOn3qT4;bJkzjk_P#+{7If9(Xqy3PD7ZWtc|K$x%yf1c6!E@}Lpr8wmCYlU zH>#tc(Pyk4|E_aC4ZX>*8mjW{uf&d(MiLAIoQ*m5VbH`?flj6|M_n3eV6XB*bp#rI zJlX5UN=1vd+S->fka#{s3So_sJ^y5wZ^e}WogiO6!qi+YXa@L%!zdMag89m8u&ba1 zGJcpewARue+n5X%x@UT+Yfw9+R-N|(fOm(hDMcWc=gIy3Oc-}1$V0e#GL7^rbs{wR zOsBQdl~gjggM#tU5c1adVWJwxMI0~NXn=%lB~ZYEhO0NVt@w_p8urB(oa6Xe2o&AH zPHg}?m_cBzNLdSt*5&B{^rBikpz(cqP8Fls zMSMlsvLkXaq$Dv2w-p={GQjf2fYm8cpFm^K`Z`q{_L*4gDL~v5bpQLOV5hN7H|}&n zC}0wmCp|)HPbE|hUcZ)vDV@OX6rf&Q(v8i&>dRDQm0+fBwWX!xi-SBCn=GkA;w93m2$CkQI9@UqxukAL+2)liA#SR-E<(@1Dh5EBqO$gYz;G zsD7V@e;Lt3f2(44<6!%7AMr42)>ugh2kw-4rpeI&NHOAaxb_m5LrjhgtkR6?1p9&L zlvHWbL8H6#XzfXgp5m0uRpnEiYvy|FtLVp&p8K6 zFtOdl(qx~^$3q&}>Q9Zac$kZ#H!<3fD?j{x=+bVopCGa25Qgh?vQ+2+Rsp9PyX4=^ zpZi!8xd0_p3>s8roRs44w&0CT47-2Nt2Gi_3>hoZfSI2aXS2h?b`+j9FD?ciIDI13 zsiGxX$al~qm~6Gni^c2zih!0JQ#24dRlx0=rz0`U2I_To{LE5r@Z)#?aH6TrEv@_NEe;^Cx2)reAD zQ>0n4PswzXVl$nxHG%j`Zy8*~B`{|R2U+D4Auw; z44N9OQ}ubvKgYEG`;WQ~*8&~({lLIwUUoX{c`YeabOkL|AZxT&*}cRq3KD(1v{KZE zN)M{zdwvBsleOR(CIsswy$sWQ87-oxbVf$F;GF-dG1hp}C-Cu4&lmhz0COc=l3+OH zeucvw|&)c}~`tYy5m?@qGR8y|oIat{k{ zUb3bodTAL4Yz_$vLWib&1*(}PxF$jiDkN(l#cwPW+h&m*;tZCNsm$uFGPgrt6?Bt3 z1*T@RJ=;}%-Qi~1$7@x+K|9HvuTIV_F2bW}wG__b;i=A>*$d+l)-C1H=ugc4c0`O& zVwmXtmG!4w{Xpe>5q-vKL3PhUPL*l+gDT|p};U4D(93ibXKrpaVgz zJG}zyq*M#;hQV(NORWvy>SBbH4|!X(D>;o7-6i6(y7E?w}?GMi&qkiVppXIh?bEOPrXgHDsLi%N$t zP#QquzB!e+UIDI|=^J>|7>!BfDe5xVkmt=}Yuaxbn%{I32>0BBLm72V*Hr)jAaPd4 z=|-VT9POr9h-QFl=Iqj4wZQC9hJ+MmWze(zrej$9%EsEF#B8lIlu59T8Zov=m4frO zbRK{?>ZnjJq(kCE&DX)Eu#n}tK-Y9qd68q!+Z*Vy&iilpWSBSz|iAE#SGUpTU%_adi{gtC~VI#V`egYuu3sr!o_Rp3RhJPK~ zSZjw|;~-FTIn)@S;&;kjcF*ElQ6MFGUUjkd=6Zd$;EG*Ff2ot9!xOK{;@iW9s8shW z^0i6r7LMmV;wuegos&VY+`3|*sk2;^jEJh$bI(%Pd84n)#q=xvg&bVzEiP4`poP?^i__F#peRZS*btI#F4tsWaKktjEH+7#1o@TcI56`=|E zf%V^Fy}DY~X3~$&ix-)0S~C35_<^m2t_qs$Nv%pB>+fV2{?;_;Q9cHe1M z-P~Ag9jIvTTJh;5uJz`dD|gB?7%}s=fR65XFox>dJzVEc_LTqzuiEILwZ@E5_@6pO^?dL z3dnGwtiRY!9&HJllyu4|N=}DPMOvaoo1L^=r9!j6xkr4?m|C-J;tJXO8_l|hCd1;h zJDJ&DBF&(Y*BmC6vHro4n(2+k}t{F^0g4Qb~f%Q?H9c26;PiP0w1HqDQ1bR zT{|=NT)p;_?dc~Yx=LNpXHb4!PsqyE- zBBB&b1g>g1^3|h^5+vNv8w)L_Qolu$kDrmv0_4gZ)*a3??HeCgVaLP=FQivk*+y?v zv&M9t$2k`3erG(?tePSQt=xDKes2&ge)MOtz?VZLvAPzBo&rX$(P|9mZ`6iS!|{P2 zb&50erqm*B+{K1sEhsq(ZC2>jyhFse+mhb{*N*9H?qZ*(e({t%9)lEq4`w0;Q-qv2 z(F|}I>P?iIN%j@a!wOy-)Mj~nDv0S<1Fx&2;?HsJ6BL*7y_r;c>%5M!d1?SaApSuPqrq*`z90)dLB|2d+S)CwwsHZLeLnWF2r*}1~G3A={ z%ucvq%ZTnLpPMxWtZj^JhjfKEhJu@QaQY>se-UnAy$Uc*TRPaEFma%0JV}M34#*PH zX0vy4a;1yL#fcstx|F%D4Jcg}5DWnG4o&(?Hr}RnK}oZUcg6y!42P}^xy`u}urWZ% zVd>sWIkmQzN0qVE)jF`YNQ#YAt<9tlX``EmPblz&iDve-m#9Y1jT?br>9HADSzt9) zxN6=?XMrX+WW!{dp>^M_<&;KirvyxAU)8!^b0$jW@T;ewZYdt( zX%6c*>||C>3eYWcbzlb_>`^!0S%HqTb>-K}wAsqIyglp$D){(EDiOXO^Bc$(;y!_1*~l4Xp$(09+?|;JV(2>L!gCKs@{PD=g!Aj4>Qr6N*wrUK-Pz30G;%wnVot#_e zcRkFnS-{$wyFLXPoxhPAN-XJ2_?5yFyOXRR_$sU(HWg@gAMM-{R+Ea>XB=NJsv6B zR52DNaY*#JRiG>Mbfg1dx(Tv1U;e!JwW|$3c+!zS<|F2l=#(G3I9PK~7#47=DcoBY z>Ul_x1h0Od&9~a~uC9a6tY5>ajwK*OOBqK3odyW_6IQ6m}qfqcDk>a8~Pj6>c^0GLAR_ zwhvvqF{h3EO(pB2BRyGW`Rn<{)0e=|P4Xo7O&(35^k(xj7H#LKCQaAQIRqYO53pR` zCl$I!!()TjGN|yz{;$!kBVrf`Qk;eX(~S#5BcW;2$t^OO@u8^O zd`p5QdP!QxV=4l`Y*|9CmTv;ybM>K#)u#$l=h*?x)X!sZe%ZecP!=nA$LP0Jr5pCp zm#`8AFC#@`ti$Oi^JaU*n!dwhOS_PKAKpFKll%a-zh}2}O@|6V<||O0ZC`GhY0m=` z$N>SV=aRm|${|_E%tZ-NR>h8elQ23)TU^EG1^INfv(U1$%^qB-N~B zIDI8LrjHJGxH_E$dKbShj5ZumXpBp626=K$QauI4vGd0rIQO@JlzIr~34EqM-@ICU zR`fg!WLIm4m{-s;8D}`X1^?Yr*(+#uO$#(xUHy*0kt@kIUs>`8X0 zu%P%H^cf_cgjoU_eWSgxn1$v+)7{z8PJ`N#ClAW*Ngv-Lw|Sx6a+-|G&ijj#tosN9_Md{VV_fHSR-pLH}_J z|Mvz6`2R0*kNiIW`>zoJ{a3mFzW?-pC*s&+^J*U(Fk5sB0BE|n++P$Q%CLDr2B?Wl zvbUn+y^q)2?H~A!N5~g#u10OzD}hOkxZE{uI*rmkjG)gtv#|802myi3S~o)7RUt;` zqES$Wwj%N6)$dDi*KGGgrxi;4sAJAx9mQNLSxHVAEZ!IM%i7+-nR#mYfC|AD02$d& z4;E}Kr*wQDz_u)|d*~qt z7i&7b@AYIe7z1}1txE{`s_Ykhi!2`wkWgNqd?P`FoR70sSXaQrLci&?>_2yUrt@R! zQS)7?%#yu=mz#wPb|H_U!Ag!C{p$v|VIVbBC+N>=fGtQ^cc%PvE67{^!~+;>y>_BK z)l$Z7xW;+nQ+xywi&$&1G1!jSf_bk@vrat8h@tq&(@<@ zOZi|iz27GGreo9LdelcJLLEH%DApoyw)CpGGN{}Y#jt-Ccu@;anq2ICYazqFA33&xWk+cZWf3oGgIb#8Mi@Ab*b9L2mZDTp^5WTM*MLKSj_>>4j(xN{j#lfr@B6v$>prjZI?szO zPB-ShwU77Gdw|`+!!5u%E_{-!Na42`y1O@o=RnYr)V|)48i6eT1pJ#t3~GJ)vxy9Q z3S?!OQ%Hu0kJA*)vWmUsro5h*xDssk=$Al7%%eNt!_+yW?|^qMpRsFsuA(zwdF-^P zT^kfe)kTS>Gf#!I%y2t5}(o>C&2+Wqpx^28bX}|%y2&`u(8}Ih7OVc&VM<4g( z9^Ev?pD?HJyYy-R%wS>?^4!w?+;i2O%7pW8nlnsuvOxDtQKFW%<`SB+;Tx1nkZL?` z{*V3S9n(-ev=p`3mghYpa5D5uQ<7Zu&p_B_$1RR0k)zCD)(ym=Yvl4G-%k&pMwln+ z$FUiiyT8>BRs!3Av)G{2aV^Q(d%+I#GVKWoF==L7P`nI zs^XTDzz&zsTsP}0?K-zVmdSRQLhSDRY@3p*Ddam^HcZTt8G>`t7C{xs*rmtEFS@&L zxy~D56GEU5aZ5MnmJB1>>UCj?j-sSg4-?7VaY+2RL@;aMk;~LdYfWRcCXg_A^X6AS zgE%L}EDoimgA=@y3TLNs-i|%GJn{WV9MAiS9Z7&Fep0u7ua7-0=3WE|kbYQE@lf$s z(Hl3|{NB5_mNk;u; z)(C5nq+F#c_aL9tw~j}kBEWiuG=a`FCDW3_1UI#}Qjuf&+~xJ4%y8vMp8*}6=mZLA zlO4l;1$sNxooHo`nm?VMD6OKOq+!Jnn@h8~O`V3`7g5^SdX@?E9k43;z+fH2sVccx zR+q&z-_ePI197cPv1#RYYkZZ!#!l0a1);2&sZ?4cQt#vAB7WExM#0rc6oUc=M?_>2 z?))2MJxfJZB2igEyOx8^G!03@c^&abl8DFop)JTyO-1xAz}zdEb;sFD;H-b6Z?t%&>95jAR^ zd?uU3#BnYiXv1Ob)>ap#I}UcZ@LA&0T$eNNB;VVyY>;6vCim`(2>F!+yPGIED04R3LskBiAgt)bF%bLES^(4d!X_P ztvsuA6i0E=YpC5LWMsfEU1>!)e>RS+D9_y|{qqv2nG1>~)*ekoZzrokW@RtB>85?q z)}fDbNdD18y|&EJmA7wFD+0AJd6vddqfK&Y%EvQ12?8YV&3*}jw>;ca9%&v+VP-X9 zbkP*RRe4{Jp80w4$&2_OH*OD|o!}JRNE1#MdJvW`kjyrqIQh<|m6@WeKG%YyuVG%P z@F~MgB7gSrNO7jCgf<8Dd-0xP#Yi^!(L_3h04TL2R822W= zBh&TQ%bNzqKv*-y8vg$a?VUBaj3>p~Ou8pK=b#J!GWG!Mf5FqV6VwdnQNhRdex5dMw= zk0gN(eZG<&dpii9orH>RK6Tuc`HK2H6*>HXnmeoB-qwP$wEX0l%7HiZBW0GBGl#eUwY^eXR%^;fRvno7wZO0XR0CO+4+z&R7`eYg@q;C$Rl_8`*D1 zP$}=0`qQ!`@*q_y8->w;>hwy;&f2rv+C${K@4hb2Yr6c+=D~v($+vz+k3R&Dr%WRu z5C?2R-{91u?r@l9*@16u`BkO}y4-mu>IaoHK zD^=gp2^}BW=}vd zNCg3nh7%XQT1xIZGi&qi>jKt<^LHT;n<%eO&y-e)o6~GttzVUZN>EnClW;|%BhF*W zbT<8u9&oS9_<%%Ky{qQPMetf=1-)^KeyO6Tw?Z zB2}jZw?_N%z^x5QpbxZLy0t~A5HH<7vflx&#iqd4P*<=Ino<&XaQKPsuIYc9raoBK zshlBhQCi5H3Nv*|VZw1bw^ngvAW1ewrmCrbhW$$pXMFtn-JVZcm29em@IHzqQZIF} zW13ESe_Q$AF78OvRP)?_eT25-zM>*`PmKquJ$T{lSCN}0K-}x;40MTJ9EH)B>w(8= z7+rm}TesB^!FK{s9lZgWi&ud$4WBIo%Lh5iLuej9;DdY}4yS)!JO$>6chBQ<7XZ8& zI(WNaki&&l8&j>-Qp#H9lE~_kWw}hbN<~6l^5bxs(y`gES%wbyTk8Tek9|qN&!HT* zxc(#Z7zaJt`Sx!o>u}^kkHFG_+t*1S<2|(=H*Zl5ioSElm8wiw@HB)HVcQav$1<37 z;AZuj9Ky&atK?}eSXRa2EbhD*iUyl`=NE=C$qAHpipdU|LFPp%Uj{aCt7tJlXp7S( z5NcE~psTzk7({z88efk!C|f!V!}URP)Iy1Lit~FLLI;c;VL6#01l43yI!dmG&yMr) zJ8U}(wJXy}z#Z{=EkjdwdVLsddW)=;O%F@|D9p_5jT)InYxnMcTUU}_)nwc4JJ!mx zk*91+lg&X&$}lV+CF7R>t!CPqi<^hG_(EFJKXV7w`aB^0(<^VNIplO)WiLcf3yK7J zomt!M^)R)n0Z|$y3{q`pTc62+6egt;stEY!m{6GDy~7$Na(`|uGtZB=Da6mV3YkyG z-}RJtP;Jhnh-_x3En*N@$y7Y*oRHFmjJLS+Ja5N1l{0CB1>Od_9IWD#3Q)8=8?JuO zb_~TKT*vAazj8X<8xJaS5BCIY`xNM6UFx>e>(T*{#Ix9(1}k7&n)*DtN0?K9C$gBm z5|Gf~2T>T#6pUkYng6g}`4ZF8g|;o2*OUak30fRf=$54yPwd*;L z6apH?5h1dSht0*c7dTr^LfnpL_9aF;r80^9Jz#DPcj@cF*?p1nyPiI!MR8h!7M92@nt+cxZ5l6t2w{4-5%U!SIDPzdP*rZfbP#2 zIH=C1=RyFDl(r9Z09l|wehjYz_wspqO!#x+za0C#eRsb*Bf!J@$X(6&c&powsw)Az zF6SkY*x5GYGH-XAbI-H(T8w&%3PU)xLZ@q~M8UtsP zXLX=}=-T8ETMdx*DqJM?P?k@5-!MY=1z(-m+eI+!rwyEWbKr6K^oZt^g56dUF=Vn( z;AsOCA6u#yDS3jAGu$j;t=xWMAB3vPveqiqdBQOm>xPW5)uCi{lkAXQ%-y(!HU$~! z-1t+|OP8M3%Y;UAzlc9s<*EvNLTXT~H^B3qd4#11!Hd9}1z%M^CZ>K@_+FT}F`id) z#}z`{R>7MQKOU@HN3*>TS-!K3%8xT$gRnpNj@%WF01s4_{-l^)USQ8=P`hK!qJu~i zn~gx&5eo;s9<6b3!yqMc;l1{0kZZnGJhL=mxul;m)37w(kgx6q7iKT=y2xgoOk=4B zqN&#riY{aq-DjQ_0DtvUhR?9FHc9NN!6p$gA+45@bB$uUmp33`OoGe#C!0Fw6BV)w6nf@$4T8GiFk z%M3-8xE4)mWWIX9h|qDk0U-RX?+KYZht*>bX;wA1cTbDmY1eu zx+x8|!zSsA&)vQ-s$Gr0`1M-9N(QrAIwQ;QB|nx8HDI&hh*zH=R_NL!ri_>V0pT(0 zqJ6BpflXKxGVhaJNRU~*-+|8UGv{JfLkYXxB>M~y?gqiJ#z2yZblKG#IGi9Zj8d2= zX~g@8&xD7BD~X{R^Rcyff3h`id9ITYdV_1dR!N!uJ)JM|H!dL2p7~4FH@n>lU5YX? zymoxA&;S0R(dgbz@im98ceoqwO-Jloh~%OVM^0)LUK=GUdu2wUk4*k1Y;Vx*!jH=w z-Lz2ENcrOIS90;mVDI_BAzx#3diJ2*?tX6gkB>AWQmdh=@Io;8 zh7&N7EBRN1V{x4#5H5*$;(UjM40n%4^#&oB@oA&%pEJ;>y zR;#*Edn^A11&rm(2x2PF?M)sned{ODJpa1?fIhwU$dD4;ge6KgKpWMub ztr~ZymJCRI&rPQRYd6muK#46LuvS{g<+)h_@k02b_FV8Bw=X-~$r3TQy ziCM)z1zSxi!#=^kE zPr@ZNYP-M)Ix1DaGy5zWe6cF38FqZQ<=KpVYed?KFVZ?dKktESuVK5S#rs_Q1|Y{f z%D{}#3aXwrxtCiqahuDKony=o`HUz;p^^F3{9D5hkV&mX>9Wuv^e8 z&8wFRzb{V&oAtUUR)FHb0T|8vDEK0NLxSlyK|4Otd`WO-9I3vzUtY%S`@#fW@37+| zebZ`75_qJbh(_(UQK>4}6CB^NZQWggzBcSoeE93@c^a_dIvKYo@$qH_-?RtLwAl-7 z<&Qeyy+NrIux;>{yzZ{t40hIlJL;?Z@RyO)CJj|&a=){k@3s5JEoDH2l9hU5KQyum zO*g{-u5MV}(uXY$0UYQ2@M`mMnNU;k3fr0%0f4Q*D|ez7b#qI{26k+7`1hCH^LBAz zE(fd-&$v5zX&S02J1jiosj=N2Hpx530CS8<28Hs z5ecFLIbcl|!{FK|KXUpV0K&c8s0f32?pI*VD@PrvYLRd#Wl$tB${UigXw0SqYE{dn z7btn@I~;EX$d?a}=4vT3AWoO74)UOII4av#@}ofa@ces!K(mJVzmk+t0{3hY6t?tC zK>Chvo~pG1=>2u@eNhfx*%5l^I1V`{jCPj*QEA(tyyQCx+34PqFNx91QY)$!l9c6O zWj<2|)d%?CU42%#>yzeLUNUIv38Jg0373qf$)_iW(+aglubd+KPC-bK9U3l7f;*Oc z2;_KhNdX+;xeSST>qBAnY@kkLhTo#DH7d%=>%BX>F&394npfc5QNI9dOC)5v(UQ$y z9nmu)$Mxr?ykOLgl{u8!hkVl%-+Q#bQ9Bd-DuY^8joJ}cU&MRP#8ynl0nL&RGe8On zu^-pq5huaQ@)S#VzP?;3az)1LmJ??rEIwQM&GeF`Tp{FK^nkt~x2#eI%_Ggt%ci-FDx5tnFo{dJFQW>m^j68Qk zgRyzU*eDalWWPKV;Xoo%gU_D!DDUPJa`Y zc#3lvth(ur737G)eY?bbWBT^&o(IKwp0TujeaveQlJ%$P?g*)N;30$NQh9y}^g;T! zT$2)LzQhAEx)&H;!$Ww%T=#E=6uL5W1)vGm#W) z6{29_C%r;^@L(ctR}bvS!R)IXB@u4g`<_Gk9wO0OVV`xR2QJmC9z-OFKWn~YE5oQ> zjMJXO?Z7(TZddDjhYuFKcU4ajnLNI0Kld%(j}O%)2*99P zSa%7*ZmT`At;Rv_c>N9B zedVekRjNOpUyClnbtBp+_26cF?oXY*@B8*tZu9bCm4AwvG^HN3%RI*w@Ul3I^h3l` z`NwCCPRCKy!wqKh82z)zO&cuLJzp~sD4Zk27P^kw?a3Iad>)eXc5&D5W75BS-J=wf z@;K5l(lw4+Z(32{oRnS9xwS4c*}fT@eCQ+JR` zwMCx4TBKi*y>(jLSU<*A#NxL;_1OgEDYP^9$1%eDsRAQJ3ohxjToX<);Nucq#lN_W zb4CU3QKO24wL=<3P1muw&eXxq$f|54)ZM_{5}?X7q4YjwBgcV*>$W{TnlV$@aMItL zWaDm=qo?VGT7>5|;`Jw`N?l%V zmeXr{d3+cv)#XEucgiF<3nz1}>9O*T&OTTt;Ju-4e6OAI!H@#zC5EfJA$mu_ z`t;-6pSRVDZVQhs2F?LDXyd{z)cCNVz%(-*>>f(|pNRUKewzn}Wcv8vnUPtLiYkyN z_2|3xVx;z~n9wGzcK1Dxi}PzRmAcSWOZ7)m*48BbOIKE2!V3QAX-NR~);|2)t@Rnm ztq#tVWn;=#PU+~s8&l#R{%K6<4ft+M>EG_l<8etuWe;t{Ixs8u(+SXS|Kwsms$^*H zuAg!R7Ther`h414H$z?WN`6iHIa)rlbMXA~Wg-U4m;QYs^7wV9oCeT!cFz03?jiLh z#f^nIEx~P>#>`#uo@DzjdrwyP4NFfnGD4_-g93S&MPp6S9;$Nesq<7VdIXovmDX&^ z_ySB-r!`!!;KR#35b)6{5b=TBEvMbNqKupY!B*AXeU|MH)(Xvp0%i?fb{jxx_?77pLP#@(Q$+;_;l(y1n77t}i} z;7-9;6k489u)8}JQ9yiO5xIiCf}EFKCNGf7WaI2VxJMCNxFj$qk8FzVS^-+G+fqWb4W5d z%Z_XhtQU%T|Cm)Asp6_rg1%k^KV^CkKW(h3!RwxF^Jp8`6pArMXFbSLjM@UaT`&IY zH!PFB6|14|U-;er>A7&>Ht@>WTH-ryZYlG(V?>%{f|i@%D659j%anZcOP@|`;?(eh zUM*2XlDgGxs^a<t|E7DplpQsbUTRpmpTz(ljkK7l+(~w20OMdPG84_;E0)!wL zGR*)AMP*X}Q(LG=Q)LW00hWZz-IOAn&x~uNKUudSu`1|kF#338<$ z4*TaVrjP(#rm|ZXmz51uqITf*zA^z#S`8e~su8|D(ZBR*y63)ge$7KX0bBKjXaqjj z?zD$CE8q@NT+hKR8nP=MRl{VKEb<+V|2C$;K9OOr+T7m1R?Au>rJI^=R+Noz!nx$9 zvxNiq;hbP|hdTc~IQk+Vkk1BWNc?X9kh;KuExSKpv7F)~WmvhS|43;6tk-oAd^LWz z4mwvXco5(+GeSb)Rn z3xfjDd^PO3d`h(l5w16%x9cU6;!|}(z##GcR9fD|R0EwPUl?XtbU1E7O-m_>2P_6^ zBB;K)#rq8C9=iMp-jY{MAGfx2s7MP|3V8YWn=vNM=q9d%c`aepU$;l`o|1~-l>Qw= zXL)#C830apL{>eaWW1xm*K5xq`@|D7O`qGsmaF(7LX*_8A2kZa>*{U7G;fdZ-nDwg zAoCYxWD&Fv1`eb!NlS}VOGsNNcK>)|vh;*QgI?)M zb0;)6piCM?eWpt{IOf+JQO&5_!f~|_woJ5p(J~0KgKnvmC?id=jKFW2E||h|%{;I< zB%&ryt@&4=Mo!&iG}0De5FbZXTJM6zfDwl5*Ado>7W^`cNOc8pyxHJYA8tjJ>_NdY zCBaNp@oizvrwfyecFaXIZyJ*iSePI8?sVli9R;$VoCZV{PcEXYV#UgFGTR_WE*M>& z*!K-G&&iJ)ALaC&n;b;N)@XOZH9S%~&(r0(a{QNZ;lZRBhU0y0)wB~DtmaQMXgf zbwz;O85bUn3Xy^nYjypMkpqxFgF%VP-fCWViMk$U@(=bcfAOwu-i z`SOngc6%QKBWw;oW~a(-Ur(Gk*Vx@u-QI7fnFJj*#arR8s+_*KXR2F zDdiYEK%}};5@W64$Kzg`RnyqGag#jtIp!xFD1^hVKBo23 z{bCf4@?9`dRkA0gUqf-XGg7S?-i+g8prCviGt}0rE{ns z%7ECB%c`#p3A7D!9l37OaxWrxz%+$7@!izBYN&-V-&rI@s*~Do|Ljec3?{D& zAhn-uAkguThH4IP@@8)fJfWea{zm7_E^-+VyyPegu=_a(-;|cJD`>sZ7D#z{$Ax&u zD@I^y>=Ehm5{lcCR)98xZ8R?X$daUfSmFQnu(3-$xW89kMyCwKR&_ST(3DhkwXDg~ zbK}F-wNT;Ev@w2q5;_W|O4VNkGvi2a%{XwF2CKDXmg==H1gn`BH-gX6erBY~)mFf7 z+KRH;&H94k)_-BH!2ag0SlOAsjHq0_D<%8pmMU#QvKV+LsFqF{_OGOFEY%y)b53nx zKLkOHlP?P5?_{&7v%bUk4{)Imfc6%NDdog1%S#zborp|FdN_}_`i8d1^^*_&i)t*} zmatNNV?nNq@9ofK_x(ry{3rhX4?S#odH?<_>_0NgfAQdz=c4)leMJA+0j=a8|4V}y zU$RyD_rEao*Libn>@(BpF diff --git a/app/src/screenshotTestFullDebug/reference/io/homeassistant/companion/android/settings/mediacontrol/MediaControlSettingsScreenScreenshotTest/Media control settings with configured entities_phone_e05166be_0.png b/app/src/screenshotTestFullDebug/reference/io/homeassistant/companion/android/settings/mediacontrol/MediaControlSettingsScreenScreenshotTest/Media control settings with configured entities_phone_e05166be_0.png index 1042bdea0eb83e9186c5872b9b5a51a88f10efa8..e88d4512d14b34db734d8b3263b68b38b9257d8e 100644 GIT binary patch delta 28013 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 Lhzo^U){p-SEt)tP delta 27756 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 Aw*UYD delta 31076 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�Isz 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 Bqr3nB diff --git a/app/src/screenshotTestFullDebug/reference/io/homeassistant/companion/android/settings/mediacontrol/MediaControlSettingsScreenScreenshotTest/Media control settings with configured entities_tablet_2f22c4ea_0.png b/app/src/screenshotTestFullDebug/reference/io/homeassistant/companion/android/settings/mediacontrol/MediaControlSettingsScreenScreenshotTest/Media control settings with configured entities_tablet_2f22c4ea_0.png index db5b036508dd5caa50f96327aae9c360bef46544..13e8c2bb38a8ccc8a6255e8a1f3f77b26b8b2841 100644 GIT binary patch delta 17691 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 delta 17482 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�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 A9{>OV diff --git a/app/src/screenshotTestFullDebug/reference/io/homeassistant/companion/android/settings/mediacontrol/MediaControlSettingsScreenScreenshotTest/Media control settings with multiple servers_foldable_c908f502_0.png b/app/src/screenshotTestFullDebug/reference/io/homeassistant/companion/android/settings/mediacontrol/MediaControlSettingsScreenScreenshotTest/Media control settings with multiple servers_foldable_c908f502_0.png new file mode 100644 index 0000000000000000000000000000000000000000..a9c946c7cb54d59bb5ffedc412653768cc662b13 GIT binary patch literal 53151 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 JRKWWvq=|NlzW()+ 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%0AMg5+%?2#2#OQr#kt0x%Md#ZM=O8Md@oB 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 literal 0 HcmV?d00001 diff --git a/app/src/screenshotTestFullDebug/reference/io/homeassistant/companion/android/settings/mediacontrol/MediaControlSettingsScreenScreenshotTest/Media control settings with multiple servers_tablet_2f22c4ea_0.png b/app/src/screenshotTestFullDebug/reference/io/homeassistant/companion/android/settings/mediacontrol/MediaControlSettingsScreenScreenshotTest/Media control settings with multiple servers_tablet_2f22c4ea_0.png new file mode 100644 index 0000000000000000000000000000000000000000..d3977c03a041f51468658040c0c0aa53a0a9ce88 GIT binary patch literal 37683 zcmeFZc{tSX|39h?EuvIHNcBe6EJ+MfNo9*nlC6>uMwYP*hC(GW^|mEhvNIU_*p;>H z`!<#`#Eh+BW-Md)-J{g|^Z9 zC@{T$^7o5D$^W^{|I3pWU-l(bI5pa#(nHarKA3Dgx_WChs?AFXyN~Iv+$s6(nrkyw zs+yOUKd~cUYqI#>>vw9B$gd=@`z&9Q^gi)HfO&8h<+End`>cxe%3-{7n>b%YiZfRj zel6R_D=s7?+|ca2@?x`WmsOm%y!QruDIcHk;}eTOk}iaF8PTn$G0|I7+fh&bymaPF z0_X8)`ywO6r(Il0*ioeCYO`!x(tITiwp!2YkmR%471zn@P%b@efl_vwcE{K5`zRu+ zZ{+L3p{+4Z@4@>kL)XHX@}J`iM)Ti%@^vrus|E# zP|>XV_KeqwV1H2+lIzg}#ms&*=k+2ENJ_Y)?tn8_f?VaIZ=TCD`E9LK62^ya`*VkC zJzg4ivuYY~>C!H7iI1+mvabp3<0$A?N}suEB&;R+oRqPdu%7(z>e{4g9Fm3`oohan zo!2N@;$r)nGasp%$g4d!16FtpmlnYxdZfkO+fh48=C5H`*=*;$*Q64Gh{nWf&Oe9U z!##|)@0`Vsszlxj*I0=lH7_19wtF*IHeX4|KxeXvZD_C^s9&8m${s~YD(-oUezStR{7|){Owe_ z!Fd7hQ$Bw0N6+@Og>#P|4NG?lu3w}Tz{)U<7UnGJ4*I|b%ZqUv@9nLI;e9R1?2U;S z?j&8ZD3@(JzWbF%#py1G4Vl{qzoR9=IcqXq&azF-w zcs(`Hn-+ryhb#^_!RZ)!I z6}KKX%%2?3H8TXZL5u*WYfL;b&?u&jwY$CWm2jMwjIruYc=q-D>2h+XrfY|Z0&s!O z)6fq}kI4Hfmc7OHpj6l05ybS=Bl}IBN%;X^TDIt;{gANo)}exOtB6nAbr^W@@X80u zjo3XXh}e|o*o%`PSIxahb>eeLp*oFOU78B%`W}Rh#!*wZ;j<5`$gpGKguY5@p`G%u zj5{!J3Z`luQS`o7kESsG`jS&zmv)!snb-!`+Y?i7guV6Bbv-FPhWV7jtjRc^%EgNn zd7+WT^NQ=scxS>B9ddRlF+<0wj zvzvI%76z#DXHaYC-zTc~N;OC5Rpj7;2$s(Tr<9@c6|K?&NyA~J{x~(-JhCbh!Emy- z;f+G=>`WD*;;^_qs~fM*jr4n5_BBn_s#NSZxY#p;t9c2!7F)oc;YDULH* z#T!wSX}0>Pt1eN15a1m7*M~F#fh0+a?dws?;eDNkyWqIHRkK#F7vCtZpb^M(v2+uo z7_{fU#_sc1_(xOuXDcH~B4uhs<0{J`w2q0>m%loAhHEAw&0{4tqDR++g8IHD4r4z4 zT6mE#=JPtA+`FSsz*o8EsS2MR3y4T|7W}|Dg9C9vRci}PrczVI8|$=uOS18BN&~U` zOL10h=(SsGu;X<5E;P@rI1agC=I4UI!yb%#5c9ZtcL^Dp{cvB`IFIk#Wp^Z}SZ)j{(CA|s7xNP`nl07X68o}{A38)vS38mg9#uS5?4U1= zs$yS#O!R7U|88_|eQl-Vj^;(I09%E>K-D{rHG-~>VoFz@S`6x;KfJJdbYtBu8X|OP z_=rNV%+YxZrC=xW=g@4$j%(NT+5lbEu6;5sZ?z4Jx(=i=}0 zY@2U2JTo-&NS>5cLX&I!#w|m&<-ZX9S3e}6FO01lan3v58MYX4C_9ZWRQ02d(veaW z1_lW1k>EYQv9`FEc5qjW$sE`VCGa3}v^i-Ci%yH4EDo90xMCDTEaXd%p8PSOnBIp{ zik2i%9RMmYDYZ7Wzoa(GEnm@m+&cogR2-I$mAMJd0*_n^j@v zQDFUmgFXii=Rm7zgufYmIUb%a;I}Rr)H91tg7MB^>11b>u{Tv92;qm@!h1?e8{)NM zEDV-t-HF3oB=IsuO4g{%98|d8VtXyHc>!=Xk+);;hunLkW#BZfHmbsuW3Y!8dz1ST z8`Q?>gnxB4aF9z@z35C3YQKe&;iCrC zoNn&S3hH2qeXTk3H%)cf?8#V9Sn2^n2~t;;?ot%IFf{F&Svp}H;1+x7hE=9L;Xztl zh@eWu9!v%G4uVeUa}(NyQY5CeM#8;}<6~bPCB9fl@b23kR2eolc|vriWHPp-E%aX4 zCwBqdy)cVm2tiX(>zGK|T0v}x-`cpaDz`H{^&&PjGB4CXTYe3=@aBjTO0Th!{Y}Hy zk9^I|UkG^pP>Vn|OE-)c=?S$yf7*D*GCQwNy8W)!(bszj!$N|MtKSqoI>K{@$1D`1 z_Nf`h_mfK-%12#q);s$!6RK!*Ga}TmqKFf1EKh=tmp;7;*W7WDh0o>2U5*!C5$WW7>g~vOBfNZnc3>N2QsaF0JUC+R_;9?@}zGmC)jQDMmY1rrS_5= zUZloL?8;%ugwvd^!yglMwcxTveHsxWkr?iFzl8LFVApl;#|$r0WSSbPscgB7M$RJST ziS+JpievlE1XCSY6`g9wZ5rs%^<0lx`xq{zspF(B$@5jL=UhoP>RD$KwE)KOG>tm? z6w9O4>RhH_nvt??5Lx4tK8p)4YlZJIa+AIVL$k5aJ(TCJQF+K>9WxiP$E=D2`O{xO z=2K%A6|k2pP7?r$(HaQTP1$W#UC~7R=6oDw<~v{RkWFU_!@$O zvxF?nKvN+LncK!WN-305^^s?=$#^c4$7&JT0z2d@uEwZ{{ZNp!EDwp+Kqg-=6Ctv= zl=-lh^0a4*4Z>JgJM6lYSGSfxprNVg7^$o|5pxhDF9IFZ?O8m4`ECC5Z5B6DMlB4i zd?16~+!$|41_RGD5&diFF4%RQMxhIkRUV8=N1{o2NT^}OX?#bO`z*S_k-W+eOK_Od z@DhB^{Pl3E)BbM(TxL^<4}ZJ&d`S_ya3xvyM@CS_YVpO#LWZOGI?DWz}mGsU;HakT8B=lK) z8^w)b#(VJUbqE%N>+3N84zOI@%= z_j%ozb>j>#sc;6Oa1VQxt)kz)1jmGWn+ozijm>@3g--k19D^(i)`&&-rt`vz1&y*6ABvfOxKye&Mu!YTF(N02LVxS(#ElK4T1Q zxGd?ua}hV%@lB=5%wn}w=@2EU}H&M@LgWO^ya(sB|ynsl8zvS)X?(zdalK6gqW|HK&l zeK}E^8?~NHtc)nsK;fq-%0rh&+u3^>e#Bb8VzJ#mmYy2hs8Tj{;uJ=4pmyhH5z21p zG<;ZIK?_8ZU8D3lH&2xftsS>Y>DQ$mWPUpd7iWhEm&!gtqQW&pwXx(AUpeH0j;7YVO0mwnj_nGF7l?6u2a*ZyE3xPo zx*20!CU;2el;xz%j;3POme<7f;~AK2Rrwk`T4<{*J8^7;g6 zw}GDb>*d;Norpt}8v0at2RvSw`6!~8U&(LYSr(ML|q)Xg-O zjBWUmIAZXvqe`w2qlVcuoxy0klyZjXPE!tn>XRtQ-^TJkGDEese1rAl+FdI6pVeLo z{u|)b?8Sp0moNCo3y2JlaLRa6XY8WPq}+CsGwV6Xd2tF^Q?<=_*)a_?gA6I5tm;h! zpM5yxiR_nmKm_|E3->4P zd#6y;`QSWa{F-p6VA_1{blpoGv!tn0g}iKJyHY|5flTPipR63T8lozGnoo|~{n~tO zjB6mz^a`iz+72Z z*K^{AF-V#?2{>0si19hUal^*JfJ2lW3A?ErGkfRoOUiK1olgx_^`9{?JdTvloTXXe zz9zXigNESlhEs1&EJ79yU6Fm4RSj=VW`qSAoM#4Z`puzPltvk*+QM9UI@;hgK2K2) zE(|>DI~emU=X6BSq~k)`IjB2X3SWq!^J`${zoo1`LlXACTCO-EIAt;{$?M+xMF_an zblsyEgz|Mj*<{FxrE}L~M-XCScDv5@x|b}k*wFn!(ref3`ckJEqH?nGV9WOp=FrOG zm)4J^c2+!SNHKPtw29-J?68J3Vw=w_n5c)UA~)lnu}$7F<%L5&Hm;tn)|pe|>MwQl zEmpU8_i#d=(w)S++IC(wVW0KAucvy9S58V%niW;rfwvoLNT`*1(zT?!=E2`!l2H^b zqdl*yx4~zyVwRzAI1Ot++Zmj5(adEd+Pa7>ztP|ypm-4IqD>g9DpTOH`QeSSZKXLv z{=4=bc|hVa_i_~0aeFeg(dg+uaCgn(@+haEUEUX=lD6ze?OQwP2s+gKv@Mr@H~Y?S zrhcVC!jg&0CU@s6mRhqWdr)EDhAgj5!Pk;t|F?EhEs+`sZ>n2V@aT>fg@6pon~$u3 z@Mb^Pb8g=Wm8DzlWs);8(rsIwZ-jz4^q2hoZkr=#km+&Ac%mgl&@}Xv-%h@nW#>&( zSO7NAsGNR+V94-shUVVzqV?Pc{%B1sgU7S;U~{Rr;eS;R5~F=5+n{nQc(*Mk1fY>f zGlb0%RjbzbLz4|Z_X?EE%4N!SfJK?he1{L>o`<{ZgQIIVbIe05SEHEDPri4~vz(O{ zAwI7=DMgYMui+C>B(NDqyP!S)-AbZpG(V0c%G*KXZ&lq`la@jT)ig;}4V5^5&hA6y zts$s5Xm<<4-L*Qqx5CzR{D1UAhnWS&$S3S}vAug<{3Gx3unG)o9H0^R7aYZKbwXw< z58sOnje2VpV|Rc1gRs?|V81jT{GU)1#4dt&&Q{cmKq^?(I zpTu{dT>b$a{)17<`rRqcmViHsx*BeAqkj76wT^Z70-7j<+LK>-EnG$t&8eS^I{l7` zG-X?h{vChFw(aY6w&v4Yu1u|t6RJKT5ev@?-2GaQ$XQOLh-li?p0Rd??h;14L21ul zF(f|w0WwWX5?s_g^Jl2pb7#rOfnk+e)g%{Mv^KVTARu1s6kZN>1+Q0W`RvW4=({zN zQm~BmSpW4HmyfAhg=ji7}7&5aO%nqVyoJpN{>CFlrRpZDU5l(Qlc!lT|(?nxRSo zFIUAtFqdfrYiYP}Ey#mE8LjPLhrBk%WNhx57Z}A}lyo$I7yH{YO{F#a zmBu^KUXF)5xSUzpRhI8c4!?{;ry5Nvv?O*g(y)8uB`<}1*8UOyZ2;HbQbZzm=}vZ9 zs0&N!yZp^l^|256$yoiTBMZb73|K~**8j9ppo4%4ARZO5FGZ(TqFjwg|Blu4OeupQ z8Us_#HEua`M{)?Cbd+Ypyd#M3wJ{0eRk3u}0~m;B_vv|v?ccImc2n{zKb8|=ZHI2f z=(SgUTlu`IXF|1`fr6P2xs z)8oBt#7)rl6%fOq68cO{Ds{JDY_mwh)BWH2s@CC0Fk;l|d>ott8{qp(aVk_;x3!Kd z=B>AdVh14N5i0kak|x z^QaXTX{>4#)R7`SS6)0A$5BtqMpw?}jX5?aKPo%jMP5Hd8C46PPfjQW+!`uRPnlJ% z&8Bd=mVEoK06^pY6?sd2bHkl5V<0&E8!P&8{q{0Q_4;!+rn>5IxT5afhATUGT}wc; z{x9}(*%fE@G&_Ej{hmxF4!?f~3YoMA&~7_D*C5mSQv6j-5Sl1T{-}YCDpaLS)<=EP zO`GDZ4%hkLfj4!(=V~20Uuc-)2Y$z*Mt6!70OgLyDk`5x6M30?+IGIMirL3??X>w1s(!R@C2YJR-Fy{=MZquRsQ6qqvDM44?hsI}mf$tZgbZyHxXn zY1^+tmHG{_<^A5d!s&|gf>V24+mx4@voPp;V=5Z=h~4QW6EAB+Syzo$iki}b$8gv2 zZs&KY({tR+VnG!_x`{B3>0?-yW&=R^P+Z<-W_-8@+BVxQ5pC0zVmUoMlxSGd515*~ z338s@7U!W}&fq-C7rm$hR#r`?)7XuiTh2N+rR(@FUGl#{{rijAKW&@VDcQLClo{)a-Tu>IUYmJe^d1KYc-c2cIh(l;-hQ%zA%glZW;$=o2KL-{vfoY zAIEA8(;GbkCxl2z1CcG~m}~z%3*-ahW%{5kX4d2l7i_V^Ihvv$%RubL**J+i8OKPG zp%3jTc4xh}+1$4T<+*v6L-(kfDB1Q|3z9qlj^!$sQ1@P7Ka~4NxtYF!xXlf@kjCna zR_(FF5jgfhC1rc5u)b%!u(!rVTrFYse7=f%l(~#(A6j)A)KGrA)o49gCrOXw_$Q20 z2oS>#GHUb>5fVz3t$ccE$AaTVs<-#bL}b2804Te_gwsjaN_2$CPB}lg5l4^^Zoa2P zzhRv>?%OY`QLekK5*}QoTtXcWY|@X;sDL`!w;^Ua54j=r*Z)wlz8f{4Y#4~-a zkj5*9UH5R^32Nd?(G?02+vGkzfM!6N^=+B)_BhL@%S5RF zm^T#4?;Qb%PCR@FvLFT>R5w!P!1-*@^DPgT(x(a`zu2wekhov$7BKfCKmBC70Uh#( z+$zbi)SoySMuJ?iWH{d@z+4%61D9-aOZb#znHnPl`){}{>J%^8=$_04R775!bQ)6l zLOJol+PZ20;KOCb43)1yExJg2hxhmae|$aeD-@$)1pM(etYuw**^yYlPr1w%_O;q; zxJ=*Zu}^pEr!;M5WOkQi3oX@R!eH9@(?N>K?!D6fF!LMga(fX?64?Hh@uyU*q2CX? zO^bcmw3s>f74G1rT)rzHW3~abH_u{cAxy9mTJn>=YCKuFm|%Q^A75_0FaS%v3fZRL zTa`Ya=SJFPNzbt|b6FchlKnY#K1*2iD1WCjGPGIU@bxmlZ5WwShIEGWI#4E_JzALd zS<65u^b5wFyh%P9fsME}79{m>`cQ?BWcex6Z-7g0N?xi-Y+LvT@0ixfzEccSzVKGy z>8hSxBq0U%J276&(6nUWN%Aj{pAjd_zapkoWt$KuhIWQFZIT%t!5K3kFP0iB!SGYG zGr}B=VmMH{Inr?q9?EQD%<=s%j@j0{A|$b4DW`juckCLAeM1U+#^`PiQd($2WK(3o zkJbwTYC;zt9NGf=(srwQPGf<>t`7-_UCB1``m&y`^nOP1Io4-=Wniy8KAu~yWu0hA zbX7jBB)zyCeBtnNWYwA__1G8(*)mCt-Ks5i_%v6UnHJw``a*_`Z{I8A?YjKWg4P?b za#DRZo8%7|!%FI$9@+Pgsv`0B@N_iXc_+b0& zcyi;ljLN&S(3U+sLtQ6XDPC7iJ2;+ZQ*&@42X%d?-UK|tm%glJ=1Voh8f%6l`(>rR z$v=*{;9BNg9Ie>k_1g7jN+3Ob&?nMc3Yw0N#iierPvEp+dxrKNY&dZ`O$8kr;cXsy zy2&9^r^-})7~iUDd2;0!KG zYJ?^VCmP?l#mLdhg)St)%<(u>`JmtXsZ|9(6a>n{iaDjTRzUR80vqmd zZe{i$`xYg0ZMWfFJxHX!pDcx_T*Af#loNMBh+Z=?>IUCxRuO7C13UE&WTBsY$x$Xu zvLu{CEl9{d^5B2=(*@e_dvrE6R7<}-@BA=}Ius-%T;R>;+=f4<>+3J2Ym80Njf*wL zgp_)8NblvGcN=olkgNbzk|jA&8lF-yUdTrh;iW(Bw68&2$thZFaX`vqwfN}ceMJ)7 zNo--<^N^*)bOkY{-G>|kKE__R(0QXsbk4K9oLC__)s9=5bv;4EE>1&0_ zacEmeh#oh}b@UKwRX$io@+KBTn&MP$s>3UswJ`vg5HA7{p&ylP(1(W1ytkMZih$fH zf0Yo4?mN53yZUlCLuE&tlHVpnbora3I@2iMiSSb?XC227(B07B6}~{$mkj{n2krdV zYi*XzPcP7bYKzHNaZqlXjK{(_Ias#!Gu3c@S5DKz=Qrq^l0JCBz3t;b;n7Ofy9Yv4Ol0uD#Lv&$%@|_7_z;FzpOiTsP`zLc;j)n(5*Bd~= zK-wn3BH;CS6^I=+HFBk!nl|+PGhBWP8GiPcqJL^C?ZN60=euG#cF%yC$O~A+rg@(Y zn%#y2n0FHdbl>;;H_YHU_SUkS_lVB|Ha7=_D}lTxi4NY=#wFx?-2b>EqYPy=Itqd@ z`SVFsbFyYQRsIc&GkRRW53SFFOSv8s_4(Iuwd?|4`C>%K9Dm(2`mw6`m94LkcQ2EoYjDYcpQeSS}~+gUIJ-rhQ{`VCI~(#vDv){_*A3X z#40viy0M!wcE{%PH3D+6UoPGY=**IJRaPFze?9n=`Ciz=KEik39s94&17THb{viIx zG9Hzh8jE=JE&kHc84vJ;N*m@rbV}EBcA2F2bQU&mwtVG#G(iG8)CvDMl^ki-7%_c# zzsmC0p~=(MXQuvD)#LrF`wRX!CwuOh^FJ7=#Nx(z=kG~vsvBMmZJQ+y%54g2w*)|@ zL>sH7l?w3M<){HgjbXA6c-jW9dXSt%jySg|GYF7+aUW0}eAqMu?=vl#t&^-=9TM9k1ZXhZJWDg=%7hF4)wxy) zi&=(NN^xn#(?N1ei8B%hRFLcsnrt4Qt!;o$fO%*en=UxV*N4Qpor4eFFW*r2!>O*5 zQ27&NH!Q_7Kw*QP7Al2NInjQ~mxwLmb-;rKpgmu{*y;kL56xMe-LqYOX7F~J^LA}{ zQ`Z4Y0?3dfvM}Z7V?dceZj})=-$mK&N;g~0k{z*6Y0b^d(D9jux>XeYv>0p(KZkV_Gwye|U zRUgt7{WKRR+fWgA4$goSlOL@EAs=LRWvCpb{k{)Z1Hjc;(%A#Mlri%>dp{CLrxGPx z*%=bkqE?}3yT93F2uBZ_7V`I%M9Eq`B!L9ni2v+`bg}W-qUrHZ88{VC)2-ecd)N%D z4VT51b8Qk`n${9~hP{w7f(6>A3XvsKz$*LNR-*nUL$;6=kn&*H^|&i1t;ScCX?IRZpA}4#Y+%g0@}RNmtkU<6Bhxy* z$QzITMiAaWCH>MP$bYN`T3d60JP^PH_HH_jE{ro%Mm#E}Q z_AuS>D(eJDrP$>Upqz%B4z`L;_Y`k(C;z)GBI1B3X5jcoKX#RVN(C2!8F5s+o#~l3 z1jT&l;_Y&G$5P-rCyG97BaW_9u>(##zBx^`e#$&+xJ}uG^+zfGw7~geFDNuGINOl* zt7hW8PSMy-Fm z+PSjWwI9z_nYiXNPb2gsZq;DcC0<4mP(2ho3T$e67x5KoS2 zq!Rk!yvKWKC&|_)0~lK4lCsz3As$A2$9*9I%;D{DMSQpv z%EG8Vv5JyWW`_G2XZ;wI_SE$skJWRT@6Ud;*D`$n>@LeTirp+nDO)ykX&w}nbff)3 zF7xp*vU|?tc&Kh`mcWoZ{?&k!^JHsFvSyW^X6eD+l!jlEwr|E7r;fV5Iv<2xv$ecN6V$q-!Pap_y@0ef0b&Hg6){5|3D;xW@5czNYxR&4#xuJI_xjY@Kj zY<%#}3x!zvwRJjpiai=VH}v>YkqMSM+jB(2etWH$xtaInq5U9WE}0-60}+;0(|{67 z2LEE7N=4>=gtv}~unYE?Hv5=T3fT9j8x4)3NeU5`VCRpSx=q7=;?8}bccUg=yZL<}Z?Fa1gURx;?ymPbmVYvMvNcZTzh%NtlUzI+qa`892J} zA&{etp7+U$Wapqhi_4b?=>(Ks<*JQp#VYG?&!MLw(WX)-HZ1SL4rXhkDA6n^s-UBCS2&(D z8ROh~zGQ-Sn7v(0RnTl@pPH1g%G!^b{EdcC_0mq|of8AFDzIN5IAc8;)h;MeZrfNC z205sUQMpf@88Gr1Sl41G!fr_ogfI&5VLfW7wm<>l)ZId5FuQJ{3ojQY;Nr9%2Olwh zc%Sn>+&wc}7}(keqs;=Cb1thYKCr ziWIJM9*|@T?+z&%CI|8mS?_7@&?6PA>BnB&e~#$HvrfKlJUD-_^qm8~^j8 zl9vq+Y#xw|FU+!Ei_5BA(z=#`L~-o@>gFI zjtSGmj!kCTGKuIc9-Y|@VTpt+G8}&jFy(UNI`E>eu8HAL%dLAV-miePL96e!#j7DF zM2Rb_>lxec%~3{!ptWN#FvwgHHy!c{x!}G@0}on__O@V}Kv{e$f1p>`B+3DaKczxY$SXt&5*mcp<=>pkd$d zqPas%aOx3Rp~WIc_{TAmg=UL^+DlPLX4hOvf~?sOnCfqZ=ck0#GE6!Akv zehHt%ce@GsGb)bfrW?QhtT>XvHf>z#(p6OsTKWv0_jPfs&55gq*QXC$A%(Y7)qCkL zM|V4Z7JUA|@a!~Z&`G5HnX<%Ro27+kyo83-g!u zEQVR&c}qa&K|c9ph(f}m!l7NtCr2cC!2_qpAr*}`iwk4Q45!T4wn@5P=bi~&8siFG z(hSwScmGo8MTC_9#o|RFDnR%yon!}hRbLg=SdqZ+KhG$wGB=%>uLB#7Z)9=`U*jS* z8>-Hx8VWc9cxFY)5O%G|*z!>W0666rFxtzou*{!^exdPSoYXVWW39i^tAprFnZ6)t$MPl*1qddfBT@HTP5qUC0=(0^th+V%O_ zg)fUvK05bEN`B;b?DBie<@a>3z*O~xuqJa1Q@XwtgyG8n(+b&b=qt8agJMyU`}sf$Tms!I)_o%P=PYUXU;v~p zu_VKuFOyVAnmK+6^czMXKrAe`zPvF1_QkY+b$9wr=cX?=b(POPJkM55xpQj_LJWBW z^YcR#d3h~8A3+~T^_&1Rbx7OSy82}6JcCfeA)zGNjYDDcXZuWKvG0k&%meuN$S=5w zr$2+a<*X-Ua10ceBQ&{`k7!ZO`h%Pvx?o-}W{&UBu-4a}?zg;*>&xx&T?f5P@?{`u9cDXVx99r3jz7p%TJaT~Iz5fPM)qo9TI8_C}i@bD;7+n~70lHVw$u;17tO zh4T(A^31$(Kd!m57bVO{C28vrQlmvj?WMz{k0DQ~_^_KggnjKI>_EC_5eda#On(S(p_pm2j?^e!8i_4={y}TbTdsUd6t3=%K zn32Cd`367(J-KZs24m;$?*4#dayZOf z&Hm2*G34Af(P;so^Vq;hMu7vWNW{<-9u7uTt#tDcLfhBii_c+xM$&N^uBrl4SKBe- z>W#55yTwwWqT#~Q#~@84`Xp-oCjE4L0UH*(lJSp3jpUz1#ieXA489{E9@+5}_gMH> z2Zdc~|LU84Bu?4WwRE9TY_d1srS5^(E_>F&IYvJd+*jepv6%yGWBuDw+<#OMCyn4+ zIoZJdAPL2lzMgVuPSvMbiTz?b-e3lwB94J{+Xz5~E}TO4)dGQhR|&0F^5%C&@iP-c zCsN+>cJ#CgifqU$-;!TG=3a=+m^CIA)Lk%iMVk%AYwRK%xUC`J?Q*2gcKhYVg;A6u zW0tlTega8()uMtTuM5}9k(I~oYAh4IoWEvFxE}flq$)zXei> zlaXctBNYcGb4MHUyIU@SSSFN5dgP#PM;AzvAXe-L#ay$CX0@^#e&21&S6K`3!>+ij z{K`4ADJn855O|oPFO7Bp0}W{AL6L$}!xvmDknX)v8TGW=`v*r6J*Jr17rm#Wt$*fD z9)KXvn3B(tCCc?5`o;9G7389l;-4PCYwbkslLt1!9q4S+0S zIsRkHjvrn1D)+;ta(UQ005nI0Y+4=zi-Sj3IB{-S-pd@=r@(+o81g zi1<|j&?ikU>@#bkLfw3ViR;@ruknKGBuBb1deV$m7=#J|bZqw$+Q|Ck<$wv0&cRAS zN;6sXm71q!t z{I2$j*3NsKmsl3f*C))KSa^R~+&4L@zV+-gl{dndfcW%bsF3#9+|T46d|@>y7yc?2 z=eQ)VX?K~|dkrt38)@_~YG~WmeVBS|GQAVD{7=azXx{?N?%eXP%QAh8svkMa?9ecQ z1E*}*=X72dO9qNvuQ}hXFEFX{1ogcw=Sy|)1G;|2ir|1Um95XLpVg1!mJ`U}1DT5H znj?^{503iqBx3PYM!!zt3k|caqd3lZ@t_@=hK~cD_AF$9ap(x+&$pu^LgPL|@hlD| zsib<>&$pSFY7&*yX581)uG!U!7~Kmv>=dx|6Q*an7R#kb<>A3m}5{!wL~E-Zd6@i_R%H!^l>TH5#je!E8ArZdUp+tx^ZJI=mDRf9JB zGg$?l*9kIB;-O*+TUR?%>caJ+etEWd;|v(}+hW?*^?Y4Bk5=(538Vm=w%5&P>-+6y zJa~cRvI`)_ii>6DT+Ghd`s9MAb>?Wu2D>IeAnI)_`MZ8U``{%Dy6c+HZAPBRSV>L+ zzfU?D)Ua50<-dEB@lpBOv0vBn4ZLSy_AC|@3U0$nCY*Nthp%_YRU8;O@_W@-OTD7w zR(w*fX=}W`)H@72EN;^V3#}`{9J%t( z&pP|7V%V+k+&}rQesBBMOuoH+<(v8x<5FPtM~fZZx)hic8g}bKV6pz^3q9QXdqxW4 zeqH?G-rvvm|KNKM!ZI0_2P%#UvU42Gq!gr~-#fRS>Vli=&k1@b@%o;z#jCTOfL4-; zQT0J0Kmo-nyLjv+Io@yo^;962GyWN8!Gi}|PVRUIii;@&+qqNhiw1-$0KRI_^198a z9w^!m77UecP0!bj{$Hjky6{XrRN&sD+-XywW>X@7%+s}~nQ>YJ z?q@+4{QP!xD~lYcc53JElG(>tZl!lWJ#DS62Z|e<2Otu!L>R+LTw33skC~7x{`%BJ zaqE`<^25@alS2c!O_F8fofgq{dDn_&R;Mv>n!g`K%XfUwgQJxT;g|=ZJUDx-siZP> zeq()}a60vUXD)-+@0?&v8>6}21#o->Ms~zd%Md`y961LF93ZjZ^&=c-m(#J$6zx4vWvFqEM&mLUK#n+&?o^t}|ze*0%mbAPQNyC?f< zs_3{XODR=V#+fgmmt6&`1x1{@+7Z+Z%ADgvwNF%3lR&cltpv_cF-qPkNLzHnC>cb6 ziX0h;ljg*o0bZEwY_O<8D2wjfnieI2_JZ0gaxF(b=U8_h-!~KI(s?bw?G8CX!-mkx zYL5rSaxLuOBQ*JD+^Rt-s2T?kRL+&Y=V6#u<26dZ$WLvfn0 zix9U?PIV@b9{36UbXiy;GPTvf|;(l**Nzoa2d zOcB35z=Q57)8nP+`=6ff8hGH#&vF((H0h?6cW2R|MUTH#lNs6U>GCu$u*?Tap~5_s z>lBPtQyuElAb@yEjtr2R)m4k!+Rk?ees8ub;ryJ1fZKxID&bz7Hv~ z#jn0QoNOZa0}l)BqJo4-+-!cI-h2M=!Xc-oiC(eJw#$Aass};+BZurRNzYPJp2_R% z{{5&N`M<}uuV!W-U&(I`!G2}n)Tgl1H}kG-(^m0cW_YHcjqm5GqKq+Dt2o&hRA$i( zC=T|mcn%iWluRUj`7^wne_YN7obh9|gAP`$v!wD7)$L-jH`aR=Fd$H zD?v3Z6}XGxx5Y?do@y2Ur6*I)!rJe`jCI}(No}ps?SGb0&N1g^>4Cc&pbiu58CTC$ z`6GZ)Q`h2>H0d{b2+n*UFd~$6Q*G!;4L*4H+a;UN;J~K$+E?sy>y8+CfzdN$>k(Ya z-y0=4Z68%_-GX(->p~YmQgX(}Yx1i1h`Ed;9?%tUj!`CcyI7z}mRA_e2490@yH_<>fX_w-}cZt_B$|fY&~l`^8fmKLhp3F#yAO# z6&{3nG#TTj1C#-ECTk*pmeJO2&b-OYsoq0)f8Mzh$YT^Yd*=z3R3L?DElrJay<=r8 z?``mBqiy}{?bQ&K)v4B(XaBtPei;Rvi#7toE?={Q&U``=4m>`#T5VWt&yd zsex~bbdi5-xCJwO12gOnK1k5|j~`{?PJIU52}4n=Q6ixN_kVBJ-{Vb~rs}*7lv@$} zuSSSq9-iCzuRr6C@TLw3doO=`uJpYvE>2U*2{6A8r!%Stf09*T*rmCl$2lz*F8yN# zJI&-aqzGDHtV!Wo0a}N5Su}wSl0eDtpCERFpV<7%PpWrrouha6b}v|%WYARqNV2l! zA6NbJ6(;2W@!Or`ou7qOSH8Fa7eUysH1irs&5vtIUc!STgU1}pKQ3O)+ z)Qy$6jVKtHbpj)rYhuP2!PAP)kcSbji)DrV1{xRsapTVJou7gHr<1{=Z640kx{TSQ+vMsQSqm z>!7;x2%kV*?VUub+v|Q8?L7Y+FsYNBJB9-eZg+dK!f<2YR^=RoMY9OX?zsKvC-4iOYE3vK>Q+|gXdNHO(_jc1tN(?QrJ)fE{hMF| zz_v@yckn@}4vd@WgI+i{KnRJ9IpBh%F61%6M;0W7%@OeJp8DA+;s>|@onL+ zbx&6LyIhqsK8J2HwTJBUSL&06nJ>SEKnZ!W^0YpE@(T{G#EG)QzrIvs{+Hc+^K^th zaxIeKJ3ztpquhIus;cH;Q;mW4gJ8^Kph&;68sx_>{Kr|NQUAxV&y~HkBLWsW|3L`L za2I$jy(r$0jTq|{ovRPu04lj>T3$YMKLGyrHW6r0zd>Nea<^M{F)cor4rA+3?A^gU zt#|i+4ekA4=ij`0AWi&1+eQp<+&OE)bkZW9D0wvmtaag!xlF?vhz?8h@+dH;I+=N%a z;52aiwh_Av2%le|q<@I+`7Bnx97QE4wR!uU)pwBT)GE}=OgFbq&!UM3saeI)%}x=( zZuX$-OW9v>j;X@Gynx4!jUsAvx_S_lbZql>Ook% zZE*e5nap%4pyV4+ADJly6WG7xMH}|7B^XqTYaItI3@PJA1*8FJ_nS|y6DUa12S=)- zZxXQ+I`Wy<@Roa}e}IOP0q2gS7yAM^mxR?VS(;~-W?q{{WD1CZE8}xbbLE4)(cJr@1`!4VoCFU*tEgI?5+J~J!0yXW%wD0=3WJMAR z1H;pvgGL;OOU-JY>~D^YMk{e>XHTaSv~wO*$&E+s2e|11b`)1KqQJrRgHF_`?@$Hh z_^16pJ+^M$5g10c?>S#jX73Tqctu?WHR+?>^9zr}#8b86PgHX3_bQ{^ihJUU(||@< z3*4e%p8XV_WFvnqvYq4%Pi8+7F;?X~!ox#d8p#m;0%SYk$tCD_0DM97@cpOX4{O^} z)xrBaTm(7fo)!Cx+y%{O}nTjU-`};u@vs-75h%*g2iS&vV6L(2B^%AqXO!T347#pC#;;j5C^Z<&O(`*A9kVJZmZuA zYCq9QJ^h?2X7Dc#84^~>sy>~?LC;xiXza*icLxT?N2$_v#44FxW}sAEd-Dlw0>%E6 zK9!Nly53yHJ!93~o(R1wP*~lLx+_MN`~rP&avQ|i#kzQH-<`|0<*B$m5)$($#?AgDwRvT5 z08`tnc)3bV4GxRZ$y|DBoq^)&7_2x7{dutki0!qlIxCybb2bjG38q`~BOTO0BpU&p z+|~pWrn(<&l6H0$Rf6o$7dlArg&Y@b>>c|>dd>sjA4PKW)N@9O2Z#Ab)P%}Ac1e0p zA*sH6dtT@ZNk4Fy#hkpVLa8grPWSYM-|V+izgbI#gVY%sKw7|N?PD9^;JM+izdfQ6 zIMd$HJMt`e$&{+pbig7W`7I;sH%x|x#ALo4JN2u?6rfl=s?@dJ?_UbXegJFiX3tOU zPagD_IA2~hu!*k8=6g@%b82b3m>T;G`s4dnU^8^a?`~AW)sESOvdr2j>=V1QLd`ku z4u6s**^l(^**>l2u~BHf$T@4PaE;m@D;TBpoYq9y>jQMo3G@t-26jq19hy+1Hg;gG z3Y2`t%4+!j)JdSBb-Moa$r2|c^fw(Hpt2u|bBOg+vAMfndY@L^ETWdRld|ya-QJVc zMlV$FJ)(DP!O8V0-kND|!ndmOUf!+kMEB4q=uh~2?Ww^*E6lK>npgV6&z_h|j26fl zQ%BR(4Vj_NnK>-YpGVxU(>Zi+O&M9u7Psu`HV>>l`8uxCevg)HwLQzNi(UmyuUBnZ z^6Xfe;dku&i?O`dSok8?X6+RI*4WR*{1UehEosI_w;xxBnXdeNh2Zhc^tHm(!ZSJ- z+25}lsrC&RPOecl`h&)*8>^OtY0sNVNfg)%LDT%w0NK_+a~Nm+T=`|$FI>o z?K)7C*%!b*x@3sM;Y{SC_hl-c4>LtP@@lU0&$OM5$TD|Vyg5m?)3n?npYC>i-IC7X zrxR?vSf6XOi;;g38)--Z=$nVpzxS!ltP!AVie8Z<4u z3ogYs8v_`he+d5QulV)voySdvb-=%PaT@;CbQ*YxCq$rs@ayrh`98-mzb2<5Z-rgC<7I zYXdQ%sLEcwrqUXVuLf%r@8)Icy+l<)#GZbM=O;_1+h|q0a)Hf2j>%+L6Ba|zLtw25 zdicG{8t&0j4r?n##B#j8qJs6$cBc7mPm)vfmUCEUIeDjlQ|Lmd==A1;jIE>o-x`LS zCC7rNUFssbNr$<3ee71hag~j$PH&PkHs{t!dYB+%<)0J7!Be~Kupj1)%k5-a#Z?20 zbXEsopd_RnF5hv%C|0(e^ZJ}(T)vly?7tBF9pe^y1q4h{RwT0aw29S7PRUw%W;u4u zor!C!Cu{rLVK)z9B9A@eyP1%faze?lpBFaWe3LC8^uqLXbC3 zGQy{TQOx#ebXfS?A~TPQmwA+!v=p*Eo!(&G^D@KbvG$cr=;9 z{dr~MM8mxcwm6hj=)C3j)VSXf_|v$hRH{PQ76#7jYJ9gp3KGqeYPuNbTjY}}VXv$# zCUWtL%|^|C>hel-*EX$H)r1*Mn6R8Vogl)zZH1dU$<8Tb{|Xo7Wa|ucbUg@(#hehJu$1Kq*9PsAur1GhEulI23ome%X#) zqh{|O~>ACYpAQYo+(hR*Pp z3`i|JOD-=vKqX=rvo1|)T^x5Ttp!G=>zAC+7d$Z>5-&#sMT#yGz_G5)^ zp%+}~1QQ(457m^aQZsLU)!?^{NJ7+?Z?Nzgyu-as&QVIvE5^mll@v!km3MB;FU{x* z)?ww7I_xlHAR%6kVMgrsNR3Fb+J)$J{7q{CYioX(sQbh%+xOUD|9asmmF@nyg}nO! zt?}yh1i7>hO?*7MknO@+B{Had;xhe%5`3aCw6l6(XHC~$Tk<=9;8HcLje75=a792Y z5O2~Y7c)hSlJcu?xOJ1`1D4@MA;lRP<~SydV-@Wxq)xA5Ppe0XAp_~>x7xU2hHlnZ z+D)pF%gkeZ?slu_hHlQI4poe!<0RO{A`6nRNOQfIm$-M$T2*wtTTV{WXo(n7HVL09 ztj2@rL9Y3kw(g|Hra_yi<^{~#7oJ)>UGc>Wr;6|QUD8x-v9_C?pONOj@pAXNax&N1 z<&AXW}dX#An``#0anIW)hc53%ZZK|qu(0fbvw%~ zXE6%m9PHAZ(Q*}64Js5YpW@(N4hw3~gEDrG__rV4A#0bx1q z@?q3lQm~^XJ=uON|Ldk=v+}$`^w3Aw~3quuptP(+jZDwm{g6EJyD76Mw+Egb=?&Ch!Gz73anPw)vDaPzAl%X1&L15gH;`M&zBmX#8aT8&VKnRZ%-yg7LjBT$} zTk^xsXo+sFAS{k;gUypV*r^5~HM@58 zn>^Y#^B0cJ3Nb4zfz0a+We*%R`l~lpsAExC&%q~SrC5b<6{5Sb82t(TIpu=&GbrAJ z|Ilk9o}?f9mMizuG45x*eI?rFZLl%kz0#C`?H^1b2pzt6L1icyNzDxZ1CMCInb{^L zT1n6E4pB8)Cm#zRx_8DtF3NMHcEIyc93i+EKP66k>*$V2B2)e;Tu%Vu8?yP(Y63&% zb^=Y**h#cp#><`MN>8xIs%6T_g=d#bv|ZZ398S1>X@7x8Gw`MVR8(d0t< z*BDU;$pVp$-^&gSk3aQ5%%L&SIB4<9O}+A4D0||yWA79W^X1*23wxQHcu7!A zPUT0d6tdz+0c?(I&Hu}&@5&qJ=EY+D+O=F$IniGWdZI8Vq=AcvGgujO+wVJQrB<8& zZi29yT;Q&{{X}WQ^iEGs*g`+KzJ^KTrYcxtYp~yW$7_qk+Khn88GT5v`R~WpV^@J1 zuaJAIWoR;nna2O%B`$2jYlAzchnEeOV1x^*m~<&D*z!M9iESff^j?d`$KWlt0E+$U z?!>-{1gC-#I5DdBDv)o`w_q6(>^^+uTSs(5v-xm-l}mvSWD?A?5JRc;C|H9c;$ubm z=Y=d^%T?)5D=8K?8_M+t=|4*#wn!lZXnb8Cv(`)C$vW$V_LRNG@xo{a%iWQ|IBZR= zREemEN$N^4Hx5iA=HEmlm5~}KkuzLfY2;A6c^$iLG3^%Gh1PwA$&;rfIHp<>*x(D)mriF}iE>O#S~A@x`-`!}vH)NHZY zF+EF7yGfq(FDm+DkY4jb{MAvHxGNpo`$I(RAbF>*_Z?rgb1kXXMLSH-z7bKo9ZpSX zL2;L~ZDL!uJ8=7x59$vQFTw8-G`cX6*}>&e4|}b5aZ>m<8<+Y|8SK5y)hnl*SH+!( zvflN2Gdo3)K#*>jO)W`7o^3V@-y@OCJ66q~4k0eiOUIB#XTAkgC*QbEde}Jy`5BRp znYAq&TQ!&{$~FFt%GDaAXg7anl9h=Fu)byXoeeGL3&hIglgp!Tkisi z0$D*0sAk|EcId>=guaU>4>%9w6Bcdi*C;nh+~!#q%EVE~*D|!XUT6&F?7ZCRsh)Pw z!H%a)Z>(-A?5+GXaK}#S;FSMJ@|*phe3*UsZ=D+Oyt_RTbnMPSls@CJVWvzLzE1`9 z6$As7O;`;Pd+FZ;zZW96>#m41Tuc;H+$%w%HhfULHB5{|(n!BgF#E zCp8u1@kF;q##{)?aK1YQn&FaekL794<6mMn9oH$>+;g{Qh%?g_`dZ`uU)%l}mWs+z zbR+JoA&&UcIeeevEfP8f4v0sMKjya#B$OpkLqJ)@^p?I)DXYeZ8R&q|o2%EKGKIt5 zf~zLh*8e$)%Ik>5QW;oKKwgfDU%&p zyW=V}Y#Sfo8gMGPElJe8=X-x9#v69(Fx9i~1o5fuo3@YY)R>;`Ax$ob={fO(71Xpz zY9nw9*{keCOF>M0|8jVIrRU3xrf2!(P@CD)pv_bz?+KBS2#^a9Y=3umWk1y+p?&yq zuYK~0;bBg?rw^W`tXObuL0^RLf^?^?v=`<8K_D4Skeg1%?5Vp{bG|(_$@zsB$jVcG z&7DOd#Sywl8r|(hp%Ot==u4Y)kPdj04v=-b4@X&B+ZWXgP+To`+%X$sr)Kw??gC9; za34qriC}YIzONpBntgV-RDEKkU545~kOP!)Y`){&45b@r1l~)I-Ys=t&7l%OTNq!MwV$l2T#YsR>_5_DS{>B9lFdB_S88W8YD13yJ^uv(0`?R4lGg>* zpsk<@j~Ae&<_Bn=ax?Cy?`?i)hExAWBcMS?T^AZoc@{qEPwzj+)9g?3TI?@CgQU;@ zGzHe?|H)d(v@R7Qvk(BD>GBR-(79uqAfBZy1Z4!#3-RFm=-~F%L4_3;kjN3nq4TRD z5CRcmMp?KpdDkFp+_i8H!iKJLKV1iOFt3#-IwSFZ;L`R50xG4b=|9gj!o0>5yjD<%l*VSRxgxhNeclo&0L z+)^5@BYQdB)QvVVNRgR*e@`0l=oAXCVe6-W7g+kB%9xN6 zRBbUD-+h&p@4G!O$#iT1+$EQz3uj0M+z@e5@GkYr%jTX|xJ>KSh>g{dKY!yr)6d*Z z&o&1^n$30rg;o7<`PndCYwn7rK-dDTHS2_TYx&mfI`k&k-k*n5Q}+Pi<}9hL#a_M$ zDjOVDWxKx%a7?m$ZLqMLxVR>+ua8=YLw$yQTi`LqH)y%6Kr(>PXe=NBMxp)X zxiyign^-I3GK;j9_0aWh1Q7b<)f{~>E^K8=Qz=f~KsJs3bEgQ>0!IMw8{-oFHmlQZ z%+oE^`y0RmZGeuX3R?6MbITMg;h2=KEvVTl!ioa`r}&)w)X&Ekw(ssZRCJR9f898HVrHNM9o$R~MvcXfKu(>|7AkVE_Q(X+I-bmvR0n(B>trDY)o=t|u} zfn@t}z?bAsAq8gf({4UdCBI6dIU`5o70?Qp>3XCHTUq!<@HXFGAY6I=Ehx2hN6NA# zYK1?9WZAI=l$%!=TeAf}I^LlTP*ZSaNc6ravG5(0O0x+mHh(Y!mgbIG065HFiR{tY zf#ez0qt^ly5ocKVypMmtr8eCGfU7zdeo(N8PL-1iwg*_vnysrpTi(WAv=hGEa|>Y4 z55uQ6VgsJ0v9WZ3K&yh@$oqKJ*;`VdaxU_ZZAa;cfFYRE7z*8=2_i{o={E>l4ttXnF;JYG6IuUNKsYfcpZqJ*3BbX+&mdEcg|XLq9#L^I+K2=)++=cT1#u9 zd?C!O=tLVcV?nj$4mfcJweLu44er=P*)jUhfc)MN7xP1}u(chO=-#ZwIJQvjWA+K4 z5A66q?C7;?-#D&)u&wguYVwDA@cL)hE`;1gg*9%Ou<}8rX71QWao|)qHUQ42N@Huw zvNOpJ*D;4HPT%v^aRzCCdg!r6>)K}mat`_vZBv460}>Smkxe(F^FBe(FO^$1_`~}Q zbi-RWja~OXLSVm2OR=J)VUA+0>d^>66tc7va6v)P{YtMwA#`z-BSb#@OLlaC>?nH6*{zx-%`3xf#zPe))2@>e~QSPRTb~ugk zIyV3YlbFzxrDdtQWtX`A6@a@;C&J0#G@vpufazTvGb^8mEn*5?yy8d#*qxm91x7Tz zX5G<=lBjY}9gQ-!jvP~LVwo`;Ro}Eb-48&{=nIB+9$gP=g^fVM2|v_q1SovBeaIaMvc@h@ zOZEO)$E2;Ib5k6Xt#&t4QdaE|abZXikm?DSgQ9{y$}=2 zTu}`GDek5dDtqZTJ`G2OVx?=-<(-B?<@hs^0?8kW55|;S`e~pipFdolvV|7_Ih|Ng z0$ny-R}7eh^rY3I1#mJ^LWP6A$34OOCzY!JZwOS7k#kVUDqzqj1%4zxr(vw%)%G@Y zmTSW+Ch&W=ie>o+ckUkq>g=zF8%9h5(hnyyo)23W>krg+C?Zr@_@HMwyX*Z)5r%;0 zeQ+twBmy((Q~#s%z#393PSD3ubsnK;zRt8_m=t<70HO;mnz7V&H0@c2Ve;*zgq^6~;o z-w3Zj7_MtZGUgt;q?Ww~Hl;8M#@ZUE2*~8!R)dwH zbxN`D(K6$xIz8BI1O(|JrzzOzhk4lV;$DH;WAgx>UWzV+${{K#5D=*uDN+h!e0~Qg zvgCzGoqK|p_)oBCG&Eg;HY6Kq2T*nb?EJ~~pmue5T=y%$KA8xs{@zr|UDf=Y#x>F^ zVq@}YO7@x7y{B#7ki%uY^N|C-w_AuH7Q!c@UbgU3VVT9HBrvZV7<1Xz^qM`-2|$Vs zYLx*kyPHR>>h4bEE<}fdQt<->ZYiq}ks~xLea7dYCbdyXL-2tWw%8;IF%2wA4GtRE z7k%idwcTBOOG`3+T9?lA#f&WJFqtXWq;zaNnk&CxY(XBvt4};yD-FK-rIJmOWSubd1$@PNfI;D&1nyM&EQf$OB_as??~@ zIY4&Iy(Q)t1$t{b8SAYBjEF_xT#_S6Q|EYw2ZtT*nye`E2q&q88+f89$7(yX0;+#Y zfzX?^ozKEDokO+5p%O8anKXJ9Fe#SQK(1)`(pL#a76d+l-gU%eGglgTAFmJ2iuhOn z!k0ODaLf#Q0jhLw4u&wRjiU)37nYqOkdkN^A>zEVRsbhnyC$O{7k_bY?l(2rb&gbY7laX;~OWxm&xq7WWkZ@1yxu#E^ zwu@HST@gsV>V-c9(BCSw9FAs5=%*6sFpY*0di8l1sKExXRq=13hZ8$)hfI1}$8PAz z(6ZPqmCWn_H#Tz}xU4mDrxSihn~AkC_Y-q@DK57I(^i`YYl>$4U{YG+NpfB9~myLy!q5MSFQ&N!;JYy7DY{!2r`s{KdAWxUB-HOhUK4eJXpTgr_Id+& z0S9hDl{D7hMc)CLYE=-Y5H2)tJR2@p1meNlT@O+05kNuyO+{)0@866e z_9zp=mvVZtcv(egFAJdHHD_BuGh5SurqQu7H|XljEQD3!{)3h%O+cZcSae~{F`kt93$iV-<0@g zywZLEjTl;1nx1TbZR<&3W5r!rT5p+xQ$tLarr$uK8x}vCi1LRoj|*nh&Z)Xg|IOl`U+jz0=dU+B)>|M<^0=)ZLB^ zXw3CPLKtS0XQ<>9MZY6BE7lj9k6KGj25{D%S|#v4GF8xK$-BV9cSNU-{F^0`8a=~rL!z|MGijR$GDB7&CB49$ z&L;HB(r)3bvVMm=v@+S#3cci1oz2`Y5{y28i)+q(qzqMKX${0s5@b2QL-7}^@#n|* z9b}aO_;_IT?;j(fa!;wKXibY1@Dgo}KWhyzDf8e3c6t)ve3tyWULE*^uIKcoY=6-#})oM^T0`tO#jx zs>6ww$Rl>in`Y}kZxX;0Ef?qItv~@I0iwiQ2XAZDG(Q3x$=Z|x>Lkh<3)s#Xf9*4Q z3kay;9^fgJQuyT6X;-W~H>h?X3}xY}hbgW2MNr<*1678?k(cX8Uid5~g~ja6Di8x0 zV+=0Ny)b}#%&2rII=`N}a$8as;7o_*XHGy=oCJuvEU4TYvE*!|9=eek8wN$OTTtyA z0gxRJ1;u&qhTVRzGT__{knnZQ83Vf@Y2k$lo7yh8Fb4ybh2|s4S*o&WyAeDw(9YPL z1zwd6Akv;AdcZ)qx&_=}kDhc-Bg6&=BA(Z~mAS@mx_D5{+sNT}``?Yn3y;wb${aJl z2e9rI?$(jn&h&)Y>D7G)(A;nJ!MyqH3iWd~=~-20mvb%019JF(n!l8$TU`>q{OH~_ zYEB5Tm`sz})6{xUOMMbNgi9Wm|5R*L(j_O7d3P|izO!*i)07RnM0|Mq0d`6Dc>N@z z0ngpvxYMk%9@t-kWsH9((TsPkd^IT_v&BBb)xQe4`I8#oVSAe}cjO7H&4iS%vVav#g{sceHdnt zxE3A&2!y;S_4Tj8Ymq>AO``bj-VSGN8IASdSWor1QSFY`CZ%p1Ymtc~2DFeSQP$oX z(+p)AU*0WpNgo<)W>%9}7WiUeVcqlMUfVeQwLi~B=C9HqY{1a{;%`xFA*PdhW`n#?e#k-*D zwl3kBdT7t*>#ELYDTid)Ar+&hsu?b$CcDTw~R8Wm|&`N1B6H&!n?5_Bsb>b=mgshV5~H}(!d_Kj5YuM=vymAR&RH>jWa2TTR_V8gW~)#I4o2IV?NA+suoX@m0A z!C?FX%VqV9RMd?Z9Rc;JlV6q;oBUVDHx(z>=`{Q$U3@E~>+dv6zA($`ieHd8Z4W5=6bZT)%*(UT+ERni^nN8)MiNpl&ZPSGl~upiXkfna}ByTGLm*q3H3Z|nYz z0)?M;kfw?L)Rh5YoVX_D_qIXl^1xpA_7@zafU9b%lT0~h6F3Ie09C`e?&5A(o7j_T z{nK)Kv2v_h;oCFdZDE)y0#wcwq4mKAPP(c_AFDbL?Jvce4IdGwmCW+Q-%=u(#umYO zxY9HN$>YsLa^a?4aOfYacN_LR*9qjUelK+Xblkn>wwmgUwt=OWO;cAY`n7M*TfS(! z<*Yuf*I9f+5KGLYS-RU4pLce=IwR@U>(~=$W!r*r#4&qjNSkfP&};stqw!?}6ijg& z@E|k-OUHPlqV=L3@7o2w&he_S^(9|dr8E{7398vGWtj?#0zZ`|xbW!9p}Y@Qu`Cb& z05OUAm_(-KfH>_j;b540j(}mxhiKiNTrta7_p|HOBMV>j>PYLjEPJoW8R?R48#dDQ z*7Me`NY8~8EKjs!Cx8IixxTq4=SnKRB%&4_a1#G=I6vA<8gk;NiA;84kb4jw27-|A zOZ2B=)I7`WyrOc}K|vQN1AiYt3^YmvSrnB6ZC32xK~bLTq{d1B^Fre;5z}2S<0^Tx ziT>3UKds`sqOUv|!;8LYlkHj~86Su$>NFh-0@^Wp3@Q`VMhZ-1pOCa}x~ zV`U>J_$Y5v7_MnpRva;|2)swXG2~cQ@N4hu_r5GCbLau8bK}sBQ=(4etrS0abn%dU zaMKfiu$0ooQAs5aYcR;qZ5-C$ipzyd6rz6URzEudr!1>R?kjMjI#A#TneRSz^aPME z`)IY$@$w9Qms7!_txm(Pp|0 zt`IYHNs&p7bUUUXC#sLR@~s;Raokw7G9j&})4m51 zRys9%eC_^K`AKmEvKEzvN#W#G*HNUewbA^=8HeN}ILg}kgp zSENq4%EAXd-7p3#Q^q}v+)O%WQtNavk1JF|QdJp$)iC1Aci{E*0^(Z(@X}&aP>=9D z+PZ^7L5POv2LpMHkyQVU#v!>!!0v23*nsXt+~eXC^%RPXN0xT46yhz|xY|tCVac1< zC$@e1Hr8H!k)UM}-pu4Nq!UyEL72ouTYzx0s=DQhu0c=r@2gIII{ACqzov2snu^00 zDI)sjt_p6sF5vCQ4b?qda%x{FY@liHXWxb{9R?R4`*=pi+RL%OOJoB8XdjN zF~ZX?mURiZ3U|PBhG^mwpdrF0wKsUK)H!y1beLMY_hED03b-x4z}q$I>sf_ z;bX2JJU-N}giNi7$7M#!Fq~>hZUH5X@DFP_O1R0$;HBy~;P$93b~GK2dSTl4dT7wt zh&8lu$yXB-Gj^7$r9i|KhtE2!!R>vu#8NP`z2RR|INdxX^;s-B8cORn^5`Zs29Qhp~2@1q?5rfMk6& zPF-`Nn)TA`Vih?5QlvvVXiy*4<*wzNofmCAk6&J?>i5KAjz5g;kD1Gz*%~^*lqeM+ z?79E~B2UX%a5-aCf^n)`ug)};D4Lw&%zZr+punQG!Nbpd>xC|^;euHk{`~RoV%=6l zDoND)HwiShg1T~mF_rebPA%Z=^SSnMyapuZxAg^!2P@qy8^#0@DQna)m?A{`Q4 z-~TzbZLD$`m>K^ zX?*}y-HQ<;`X57b+a|Z^c&a??5{b)I!0 qoeIM2R~Fj5_-~H{`EQ9&p&&Lb{ikM~1+yU=q@}KRwd}IZgZ~AyazefU literal 0 HcmV?d00001 diff --git a/app/src/screenshotTestFullDebug/reference/io/homeassistant/companion/android/settings/mediacontrol/MediaControlSettingsScreenScreenshotTest/Media control settings with multiple servers_tablet_landscape_62cae397_0.png b/app/src/screenshotTestFullDebug/reference/io/homeassistant/companion/android/settings/mediacontrol/MediaControlSettingsScreenScreenshotTest/Media control settings with multiple servers_tablet_landscape_62cae397_0.png new file mode 100644 index 0000000000000000000000000000000000000000..a99616e05fac81fa9c4371fa3a1fd65abb1b8239 GIT binary patch literal 37717 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 z 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 g%8~yk?TT`LF!?e;tN#}L Date: Wed, 20 May 2026 19:39:50 -0700 Subject: [PATCH 112/114] Fix media notification lag when skipping songs rapidly MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Two compounding problems caused the notification to lag several seconds behind the HA frontend when skipping songs quickly: 1. collect {} is sequential: every state emission waited for the previous artwork load (including PNG encoding) to complete before processing. Rapid skipping queued all intermediate states, showing each song in turn long after it stopped playing. Fix: switch to collectLatest so a new emission cancels the in-flight artwork fetch for the previous state, and stale intermediate states are never processed. 2. PNG encoding of large album art took 6–7 s (a 4000×4000 bitmap with CompressFormat.PNG, 100 — PNG ignores the quality parameter and always does its slowest pass). Fix: switch to CompressFormat.JPEG, 90, which encodes in milliseconds. Additionally, the player is now updated immediately on each state arrival (with cached bytes if the URL is unchanged, or null bytes if it changed), so metadata and playback state reach the notification without waiting for the IO-bound artwork fetch to complete. Rename artworkPngBytes → artworkBytes throughout. --- .../android/mediacontrol/HaMediaSession.kt | 73 ++++++------ .../mediacontrol/HaRemoteMediaPlayer.kt | 6 +- .../mediacontrol/HaMediaSessionServiceTest.kt | 4 +- .../mediacontrol/HaRemoteMediaPlayerTest.kt | 104 +++++++++--------- 4 files changed, 96 insertions(+), 91 deletions(-) diff --git a/app/src/main/kotlin/io/homeassistant/companion/android/mediacontrol/HaMediaSession.kt b/app/src/main/kotlin/io/homeassistant/companion/android/mediacontrol/HaMediaSession.kt index 98c3ce48d0b..e6f4418df64 100644 --- a/app/src/main/kotlin/io/homeassistant/companion/android/mediacontrol/HaMediaSession.kt +++ b/app/src/main/kotlin/io/homeassistant/companion/android/mediacontrol/HaMediaSession.kt @@ -45,6 +45,7 @@ import kotlinx.coroutines.NonCancellable import kotlinx.coroutines.SupervisorJob import kotlinx.coroutines.cancel import kotlinx.coroutines.coroutineScope +import kotlinx.coroutines.flow.collectLatest import kotlinx.coroutines.launch import kotlinx.coroutines.withContext import timber.log.Timber @@ -238,14 +239,20 @@ class HaMediaSession @AssistedInject constructor( /** * Observes entity state for [config] until the flow completes or the coroutine is cancelled. + * + * Uses [collectLatest] so that a rapid sequence of state changes cancels any in-flight artwork + * load for the previous state before processing the new one, preventing a queue of stale + * artwork fetches from building up. Metadata (title, artist, playback state) is applied + * immediately on each emission before the IO-bound artwork load begins, so the notification + * updates without waiting for artwork. */ private suspend fun startObservingState(player: HaRemoteMediaPlayer) { Timber.d("startObservingState: starting for ${config.entityId}") var artworkCache = ArtworkCache() - mediaControlRepository.observeEntityState(config).collect { state -> + mediaControlRepository.observeEntityState(config).collectLatest { state -> if (state == null) { Timber.d("startObservingState: received null state for ${config.entityId}, skipping update") - return@collect + return@collectLatest } Timber.d("startObservingState: received state for ${config.entityId}, playbackState=${state.playbackState}") if (state.playbackState is MediaPlaybackState.Off) { @@ -257,10 +264,29 @@ class HaMediaSession @AssistedInject constructor( withContext(Dispatchers.Main) { notificationArtwork = null notificationEntityName = null - player.updateState(state = null, artworkPngBytes = null) + player.updateState(state = null, artworkBytes = null) + } + return@collectLatest + } + + // Update the player immediately with cached bytes if the URL is unchanged, or with + // no artwork if it changed — so metadata and playback state never wait behind IO. + val immediateArtwork = if (state.entityPictureUrl != null && state.entityPictureUrl == artworkCache.url) artworkCache else ArtworkCache() + withContext(Dispatchers.Main) { + notificationArtwork = immediateArtwork.bitmap + notificationEntityName = state.entityFriendlyName + player.updateState(state = state, artworkBytes = immediateArtwork.bytes) + } + + if (state.entityPictureUrl != null && state.entityPictureUrl != artworkCache.url) { + // URL changed: load new artwork then do a second player update with the bytes. + artworkCache = loadArtwork(state) + withContext(Dispatchers.Main) { + notificationArtwork = artworkCache.bitmap + player.updateState(state = state, artworkBytes = artworkCache.bytes) } - } else { - artworkCache = loadArtworkAndUpdatePlayer(state, artworkCache, player) + } else if (state.entityPictureUrl == null) { + artworkCache = ArtworkCache() } } Timber.d("startObservingState: flow collection ended for ${config.entityId}") @@ -310,34 +336,13 @@ class HaMediaSession @AssistedInject constructor( } /** - * Loads artwork for [state] if the URL has changed, then updates the player on the main thread. - * - * @return An updated [ArtworkCache] reflecting the outcome of the load attempt. + * Resolves and loads artwork for [state], returning an [ArtworkCache] for the result. + * Returns an empty [ArtworkCache] if the URL cannot be resolved or the load fails. */ - private suspend fun loadArtworkAndUpdatePlayer( - state: MediaControlState, - cache: ArtworkCache, - player: HaRemoteMediaPlayer, - ): ArtworkCache { - val updatedCache = when (val pictureUrl = state.entityPictureUrl) { - null -> ArtworkCache() - cache.url -> cache - else -> { - val artworkData = resolveArtworkUrl(state)?.let { loadArtworkData(it) } - if (artworkData != null) { - ArtworkCache(url = pictureUrl, bytes = artworkData.first, bitmap = artworkData.second) - } else { - cache - } - } - } - - withContext(Dispatchers.Main) { - notificationArtwork = updatedCache.bitmap - notificationEntityName = state.entityFriendlyName - player.updateState(state = state, artworkPngBytes = updatedCache.bytes) - } - return updatedCache + private suspend fun loadArtwork(state: MediaControlState): ArtworkCache { + val url = resolveArtworkUrl(state) ?: return ArtworkCache() + val (bytes, bitmap) = loadArtworkData(url) ?: return ArtworkCache() + return ArtworkCache(url = state.entityPictureUrl, bytes = bytes, bitmap = bitmap) } private suspend fun resolveArtworkUrl(state: MediaControlState): String? { @@ -359,7 +364,7 @@ class HaMediaSession @AssistedInject constructor( } /** - * Loads album art at its native resolution and returns full-resolution PNG bytes for media + * Loads album art at its native resolution and returns JPEG-compressed bytes for media * metadata alongside a notification-icon-sized bitmap for [setLargeIcon][android.app.Notification.Builder.setLargeIcon]. * * The bitmap is explicitly scaled to [android.R.dimen.notification_large_icon_width] on IO so @@ -375,7 +380,7 @@ class HaMediaSession @AssistedInject constructor( val result = context.imageLoader.execute(request) result.image?.toBitmap()?.let { bitmap -> val stream = ByteArrayOutputStream() - bitmap.compress(CompressFormat.PNG, 100, stream) + bitmap.compress(CompressFormat.JPEG, 90, stream) val iconSize = context.resources.getDimensionPixelSize(android.R.dimen.notification_large_icon_width) val notificationBitmap = Bitmap.createScaledBitmap(bitmap, iconSize, iconSize, /* filter= */ true) stream.toByteArray() to notificationBitmap diff --git a/app/src/main/kotlin/io/homeassistant/companion/android/mediacontrol/HaRemoteMediaPlayer.kt b/app/src/main/kotlin/io/homeassistant/companion/android/mediacontrol/HaRemoteMediaPlayer.kt index 96c442d2286..8a14edb3acc 100644 --- a/app/src/main/kotlin/io/homeassistant/companion/android/mediacontrol/HaRemoteMediaPlayer.kt +++ b/app/src/main/kotlin/io/homeassistant/companion/android/mediacontrol/HaRemoteMediaPlayer.kt @@ -67,12 +67,12 @@ internal class HaRemoteMediaPlayer(looper: Looper, private val commandCallback: * Completes any in-flight [pendingCommandFuture] so SimpleBasePlayer calls [getState] with * the fresh data rather than the stale pre-command state. * Must be called on the looper thread passed to the constructor. - * @param artworkPngBytes Pre-compressed PNG bytes for album art (compress off main thread). + * @param artworkBytes Pre-compressed JPEG bytes for album art (compress off main thread). */ @MainThread - fun updateState(state: MediaControlState?, artworkPngBytes: ByteArray?) { + fun updateState(state: MediaControlState?, artworkBytes: ByteArray?) { mediaState = state - artworkBytes = artworkPngBytes + this.artworkBytes = artworkBytes pendingCommandFuture?.set(null) pendingCommandFuture = null invalidateState() diff --git a/app/src/test/kotlin/io/homeassistant/companion/android/mediacontrol/HaMediaSessionServiceTest.kt b/app/src/test/kotlin/io/homeassistant/companion/android/mediacontrol/HaMediaSessionServiceTest.kt index 0160b7ec293..07694aae211 100644 --- a/app/src/test/kotlin/io/homeassistant/companion/android/mediacontrol/HaMediaSessionServiceTest.kt +++ b/app/src/test/kotlin/io/homeassistant/companion/android/mediacontrol/HaMediaSessionServiceTest.kt @@ -281,8 +281,8 @@ class HaMediaSessionServiceTest { configuredEntitiesFlow.tryEmit(listOf(config)) startObserving() // idleMainLooper processes both reconcileSessions (from the entities flow) and - // player.updateState (posted back to Main by loadArtworkAndUpdatePlayer inside - // startObservingState). Robolectric's idle() drains all queued and nested tasks. + // player.updateState (posted back to Main by startObservingState). + // Robolectric's idle() drains all queued and nested tasks. idleMainLooper() service.onTaskRemoved(rootIntent = null) diff --git a/app/src/test/kotlin/io/homeassistant/companion/android/mediacontrol/HaRemoteMediaPlayerTest.kt b/app/src/test/kotlin/io/homeassistant/companion/android/mediacontrol/HaRemoteMediaPlayerTest.kt index ad3df3ca88a..52900108f53 100644 --- a/app/src/test/kotlin/io/homeassistant/companion/android/mediacontrol/HaRemoteMediaPlayerTest.kt +++ b/app/src/test/kotlin/io/homeassistant/companion/android/mediacontrol/HaRemoteMediaPlayerTest.kt @@ -108,7 +108,7 @@ class HaRemoteMediaPlayerTest { @Test fun `Given null state when getState then return idle state`() { - player.updateState(state = null, artworkPngBytes = null) + player.updateState(state = null, artworkBytes = null) shadowOf(Looper.getMainLooper()).idle() assertEquals(Player.STATE_IDLE, player.playbackState) @@ -117,7 +117,7 @@ class HaRemoteMediaPlayerTest { @Test fun `Given playing state when getState then return ready with playWhenReady true`() { - player.updateState(state = createState(playbackState = MediaPlaybackState.Playing), artworkPngBytes = null) + player.updateState(state = createState(playbackState = MediaPlaybackState.Playing), artworkBytes = null) shadowOf(Looper.getMainLooper()).idle() assertEquals(Player.STATE_READY, player.playbackState) @@ -126,7 +126,7 @@ class HaRemoteMediaPlayerTest { @Test fun `Given paused state when getState then return ready with playWhenReady false`() { - player.updateState(state = createState(playbackState = MediaPlaybackState.Paused), artworkPngBytes = null) + player.updateState(state = createState(playbackState = MediaPlaybackState.Paused), artworkBytes = null) shadowOf(Looper.getMainLooper()).idle() assertEquals(Player.STATE_READY, player.playbackState) @@ -135,7 +135,7 @@ class HaRemoteMediaPlayerTest { @Test fun `Given buffering state when getState then return buffering`() { - player.updateState(state = createState(playbackState = MediaPlaybackState.Buffering), artworkPngBytes = null) + player.updateState(state = createState(playbackState = MediaPlaybackState.Buffering), artworkBytes = null) shadowOf(Looper.getMainLooper()).idle() assertEquals(Player.STATE_BUFFERING, player.playbackState) @@ -143,7 +143,7 @@ class HaRemoteMediaPlayerTest { @Test fun `Given idle state when getState then return ended`() { - player.updateState(state = createState(playbackState = MediaPlaybackState.Idle), artworkPngBytes = null) + player.updateState(state = createState(playbackState = MediaPlaybackState.Idle), artworkBytes = null) shadowOf(Looper.getMainLooper()).idle() assertEquals(Player.STATE_ENDED, player.playbackState) @@ -151,7 +151,7 @@ class HaRemoteMediaPlayerTest { @Test fun `Given off state when getState then return idle`() { - player.updateState(state = createState(playbackState = MediaPlaybackState.Off), artworkPngBytes = null) + player.updateState(state = createState(playbackState = MediaPlaybackState.Off), artworkBytes = null) shadowOf(Looper.getMainLooper()).idle() assertEquals(Player.STATE_IDLE, player.playbackState) @@ -161,7 +161,7 @@ class HaRemoteMediaPlayerTest { fun `Given state with metadata when getState then metadata is populated`() { player.updateState( state = createState(title = "My Song", artist = "My Artist", albumName = "My Album"), - artworkPngBytes = null, + artworkBytes = null, ) shadowOf(Looper.getMainLooper()).idle() @@ -175,7 +175,7 @@ class HaRemoteMediaPlayerTest { fun `Given state with album artist when getState then albumArtist is populated`() { player.updateState( state = createState(albumArtist = "Various Artists"), - artworkPngBytes = null, + artworkBytes = null, ) shadowOf(Looper.getMainLooper()).idle() @@ -186,7 +186,7 @@ class HaRemoteMediaPlayerTest { fun `Given state with track number when getState then trackNumber is populated`() { player.updateState( state = createState(mediaTrack = 5), - artworkPngBytes = null, + artworkBytes = null, ) shadowOf(Looper.getMainLooper()).idle() @@ -197,7 +197,7 @@ class HaRemoteMediaPlayerTest { fun `Given state with channel when getState then station is populated`() { player.updateState( state = createState(mediaChannel = "BBC Radio 4"), - artworkPngBytes = null, + artworkBytes = null, ) shadowOf(Looper.getMainLooper()).idle() @@ -208,7 +208,7 @@ class HaRemoteMediaPlayerTest { fun `Given state with series title when getState then subtitle is series title`() { player.updateState( state = createState(mediaSeriesTitle = "Breaking Bad", appName = "Plex"), - artworkPngBytes = null, + artworkBytes = null, ) shadowOf(Looper.getMainLooper()).idle() @@ -219,7 +219,7 @@ class HaRemoteMediaPlayerTest { fun `Given state with app name but no series title when getState then subtitle is app name`() { player.updateState( state = createState(mediaSeriesTitle = null, appName = "Spotify"), - artworkPngBytes = null, + artworkBytes = null, ) shadowOf(Looper.getMainLooper()).idle() @@ -230,7 +230,7 @@ class HaRemoteMediaPlayerTest { fun `Given state with music content type when getState then mediaType is MEDIA_TYPE_MUSIC`() { player.updateState( state = createState(mediaContentType = "music"), - artworkPngBytes = null, + artworkBytes = null, ) shadowOf(Looper.getMainLooper()).idle() @@ -241,7 +241,7 @@ class HaRemoteMediaPlayerTest { fun `Given state with tvshow content type when getState then mediaType is MEDIA_TYPE_TV_SHOW`() { player.updateState( state = createState(mediaContentType = "tvshow"), - artworkPngBytes = null, + artworkBytes = null, ) shadowOf(Looper.getMainLooper()).idle() @@ -252,7 +252,7 @@ class HaRemoteMediaPlayerTest { fun `Given state with episode content type when getState then mediaType is MEDIA_TYPE_TV_SHOW`() { player.updateState( state = createState(mediaContentType = "episode"), - artworkPngBytes = null, + artworkBytes = null, ) shadowOf(Looper.getMainLooper()).idle() @@ -263,7 +263,7 @@ class HaRemoteMediaPlayerTest { fun `Given state with unknown content type when getState then mediaType is null`() { player.updateState( state = createState(mediaContentType = "game"), - artworkPngBytes = null, + artworkBytes = null, ) shadowOf(Looper.getMainLooper()).idle() @@ -274,7 +274,7 @@ class HaRemoteMediaPlayerTest { fun `Given state with duration and position when getState then timeline has correct values`() { player.updateState( state = createState(mediaDuration = 300.0.seconds, mediaPosition = 120.0.seconds), - artworkPngBytes = null, + artworkBytes = null, ) shadowOf(Looper.getMainLooper()).idle() @@ -286,7 +286,7 @@ class HaRemoteMediaPlayerTest { @Test fun `Given play and pause supported when getState then play_pause command available`() { - player.updateState(state = createState(supportsPlay = true, supportsPause = true), artworkPngBytes = null) + player.updateState(state = createState(supportsPlay = true, supportsPause = true), artworkBytes = null) shadowOf(Looper.getMainLooper()).idle() assertTrue(player.availableCommands.contains(Player.COMMAND_PLAY_PAUSE)) @@ -294,7 +294,7 @@ class HaRemoteMediaPlayerTest { @Test fun `Given seek supported when getState then seek commands available`() { - player.updateState(state = createState(supportsSeek = true), artworkPngBytes = null) + player.updateState(state = createState(supportsSeek = true), artworkBytes = null) shadowOf(Looper.getMainLooper()).idle() assertTrue(player.availableCommands.contains(Player.COMMAND_SEEK_IN_CURRENT_MEDIA_ITEM)) @@ -302,7 +302,7 @@ class HaRemoteMediaPlayerTest { @Test fun `Given any state when getState then GET_CURRENT_MEDIA_ITEM always available`() { - player.updateState(state = createState(supportsSeek = false, mediaDuration = null), artworkPngBytes = null) + player.updateState(state = createState(supportsSeek = false, mediaDuration = null), artworkBytes = null) shadowOf(Looper.getMainLooper()).idle() assertTrue(player.availableCommands.contains(Player.COMMAND_GET_CURRENT_MEDIA_ITEM)) @@ -310,7 +310,7 @@ class HaRemoteMediaPlayerTest { @Test fun `Given seek not supported when getState then seek command not available`() { - player.updateState(state = createState(supportsSeek = false, mediaDuration = 300.0.seconds), artworkPngBytes = null) + player.updateState(state = createState(supportsSeek = false, mediaDuration = 300.0.seconds), artworkBytes = null) shadowOf(Looper.getMainLooper()).idle() assertFalse(player.availableCommands.contains(Player.COMMAND_SEEK_IN_CURRENT_MEDIA_ITEM)) @@ -318,7 +318,7 @@ class HaRemoteMediaPlayerTest { @Test fun `Given next track supported when getState then next command available`() { - player.updateState(state = createState(supportsNextTrack = true), artworkPngBytes = null) + player.updateState(state = createState(supportsNextTrack = true), artworkBytes = null) shadowOf(Looper.getMainLooper()).idle() assertTrue(player.availableCommands.contains(Player.COMMAND_SEEK_TO_NEXT)) @@ -326,7 +326,7 @@ class HaRemoteMediaPlayerTest { @Test fun `Given previous track supported when getState then previous command available`() { - player.updateState(state = createState(supportsPreviousTrack = true), artworkPngBytes = null) + player.updateState(state = createState(supportsPreviousTrack = true), artworkBytes = null) shadowOf(Looper.getMainLooper()).idle() assertTrue(player.availableCommands.contains(Player.COMMAND_SEEK_TO_PREVIOUS)) @@ -336,7 +336,7 @@ class HaRemoteMediaPlayerTest { @Test fun `Given player when play requested then callback onPlayRequested called`() { - player.updateState(state = createState(playbackState = MediaPlaybackState.Paused), artworkPngBytes = null) + player.updateState(state = createState(playbackState = MediaPlaybackState.Paused), artworkBytes = null) shadowOf(Looper.getMainLooper()).idle() player.play() @@ -347,7 +347,7 @@ class HaRemoteMediaPlayerTest { @Test fun `Given player when pause requested then callback onPauseRequested called`() { - player.updateState(state = createState(playbackState = MediaPlaybackState.Playing), artworkPngBytes = null) + player.updateState(state = createState(playbackState = MediaPlaybackState.Playing), artworkBytes = null) shadowOf(Looper.getMainLooper()).idle() player.pause() @@ -358,7 +358,7 @@ class HaRemoteMediaPlayerTest { @Test fun `Given player when seek requested then callback onSeekRequested called with position`() { - player.updateState(state = createState(), artworkPngBytes = null) + player.updateState(state = createState(), artworkBytes = null) shadowOf(Looper.getMainLooper()).idle() player.seekTo(60_000L) @@ -369,7 +369,7 @@ class HaRemoteMediaPlayerTest { @Test fun `Given player when next track requested then callback onNextRequested called`() { - player.updateState(state = createState(), artworkPngBytes = null) + player.updateState(state = createState(), artworkBytes = null) shadowOf(Looper.getMainLooper()).idle() player.seekToNext() @@ -380,7 +380,7 @@ class HaRemoteMediaPlayerTest { @Test fun `Given player when previous track requested then callback onPreviousRequested called`() { - player.updateState(state = createState(), artworkPngBytes = null) + player.updateState(state = createState(), artworkBytes = null) shadowOf(Looper.getMainLooper()).idle() player.seekToPrevious() @@ -391,7 +391,7 @@ class HaRemoteMediaPlayerTest { @Test fun `Given active state when getState then playback speed is 1 for seek bar tracking`() { - player.updateState(state = createState(playbackState = MediaPlaybackState.Playing), artworkPngBytes = null) + player.updateState(state = createState(playbackState = MediaPlaybackState.Playing), artworkBytes = null) shadowOf(Looper.getMainLooper()).idle() assertEquals(1.0f, player.playbackParameters.speed) @@ -402,7 +402,7 @@ class HaRemoteMediaPlayerTest { @Suppress("DEPRECATION") @Test fun `Given volume supported when getState then volume commands available`() { - player.updateState(state = createState(supportsVolumeSet = true, volumeLevel = 0.5f), artworkPngBytes = null) + player.updateState(state = createState(supportsVolumeSet = true, volumeLevel = 0.5f), artworkBytes = null) shadowOf(Looper.getMainLooper()).idle() assertTrue(player.availableCommands.contains(Player.COMMAND_GET_DEVICE_VOLUME)) @@ -415,7 +415,7 @@ class HaRemoteMediaPlayerTest { @Suppress("DEPRECATION") @Test fun `Given volume not supported when getState then volume commands not available`() { - player.updateState(state = createState(supportsVolumeSet = false), artworkPngBytes = null) + player.updateState(state = createState(supportsVolumeSet = false), artworkBytes = null) shadowOf(Looper.getMainLooper()).idle() assertFalse(player.availableCommands.contains(Player.COMMAND_GET_DEVICE_VOLUME)) @@ -427,7 +427,7 @@ class HaRemoteMediaPlayerTest { @Test fun `Given volumeLevel 0_5 when getState then deviceVolume is 50`() { - player.updateState(state = createState(supportsVolumeSet = true, volumeLevel = 0.5f), artworkPngBytes = null) + player.updateState(state = createState(supportsVolumeSet = true, volumeLevel = 0.5f), artworkBytes = null) shadowOf(Looper.getMainLooper()).idle() assertEquals(50, player.deviceVolume) @@ -437,7 +437,7 @@ class HaRemoteMediaPlayerTest { fun `Given isVolumeMuted true when getState then deviceMuted is true`() { player.updateState( state = createState(supportsVolumeSet = true, volumeLevel = 0.5f, isVolumeMuted = true), - artworkPngBytes = null, + artworkBytes = null, ) shadowOf(Looper.getMainLooper()).idle() @@ -446,7 +446,7 @@ class HaRemoteMediaPlayerTest { @Test fun `Given player when setDeviceVolume 50 then onSetVolumeRequested called with 0_5`() { - player.updateState(state = createState(supportsVolumeSet = true, volumeLevel = 0.5f), artworkPngBytes = null) + player.updateState(state = createState(supportsVolumeSet = true, volumeLevel = 0.5f), artworkBytes = null) shadowOf(Looper.getMainLooper()).idle() player.setDeviceVolume(50, 0) @@ -457,7 +457,7 @@ class HaRemoteMediaPlayerTest { @Test fun `Given player when increaseDeviceVolume then onIncreaseVolumeRequested called`() { - player.updateState(state = createState(supportsVolumeSet = true, volumeLevel = 0.5f), artworkPngBytes = null) + player.updateState(state = createState(supportsVolumeSet = true, volumeLevel = 0.5f), artworkBytes = null) shadowOf(Looper.getMainLooper()).idle() player.increaseDeviceVolume(0) @@ -468,7 +468,7 @@ class HaRemoteMediaPlayerTest { @Test fun `Given player when decreaseDeviceVolume then onDecreaseVolumeRequested called`() { - player.updateState(state = createState(supportsVolumeSet = true, volumeLevel = 0.5f), artworkPngBytes = null) + player.updateState(state = createState(supportsVolumeSet = true, volumeLevel = 0.5f), artworkBytes = null) shadowOf(Looper.getMainLooper()).idle() player.decreaseDeviceVolume(0) @@ -481,7 +481,7 @@ class HaRemoteMediaPlayerTest { @Test fun `Given stop supported when getState then stop command available`() { - player.updateState(state = createState(supportsStop = true), artworkPngBytes = null) + player.updateState(state = createState(supportsStop = true), artworkBytes = null) shadowOf(Looper.getMainLooper()).idle() assertTrue(player.availableCommands.contains(Player.COMMAND_STOP)) @@ -489,7 +489,7 @@ class HaRemoteMediaPlayerTest { @Test fun `Given stop not supported when getState then stop command not available`() { - player.updateState(state = createState(supportsStop = false), artworkPngBytes = null) + player.updateState(state = createState(supportsStop = false), artworkBytes = null) shadowOf(Looper.getMainLooper()).idle() assertFalse(player.availableCommands.contains(Player.COMMAND_STOP)) @@ -497,7 +497,7 @@ class HaRemoteMediaPlayerTest { @Test fun `Given stop supported when stop requested then onStopRequested called`() { - player.updateState(state = createState(supportsStop = true), artworkPngBytes = null) + player.updateState(state = createState(supportsStop = true), artworkBytes = null) shadowOf(Looper.getMainLooper()).idle() player.stop() @@ -512,7 +512,7 @@ class HaRemoteMediaPlayerTest { fun `Given mute supported when mute requested then onMuteRequested called with true`() { player.updateState( state = createState(supportsVolumeSet = true, supportsMute = true, isVolumeMuted = false), - artworkPngBytes = null, + artworkBytes = null, ) shadowOf(Looper.getMainLooper()).idle() @@ -526,7 +526,7 @@ class HaRemoteMediaPlayerTest { fun `Given mute not supported when mute requested then onMuteRequested not called`() { player.updateState( state = createState(supportsVolumeSet = true, supportsMute = false), - artworkPngBytes = null, + artworkBytes = null, ) shadowOf(Looper.getMainLooper()).idle() @@ -540,7 +540,7 @@ class HaRemoteMediaPlayerTest { @Test fun `Given shuffle supported when getState then shuffle command available`() { - player.updateState(state = createState(supportsShuffleSet = true), artworkPngBytes = null) + player.updateState(state = createState(supportsShuffleSet = true), artworkBytes = null) shadowOf(Looper.getMainLooper()).idle() assertTrue(player.availableCommands.contains(Player.COMMAND_SET_SHUFFLE_MODE)) @@ -548,7 +548,7 @@ class HaRemoteMediaPlayerTest { @Test fun `Given shuffle not supported when getState then shuffle command not available`() { - player.updateState(state = createState(supportsShuffleSet = false), artworkPngBytes = null) + player.updateState(state = createState(supportsShuffleSet = false), artworkBytes = null) shadowOf(Looper.getMainLooper()).idle() assertFalse(player.availableCommands.contains(Player.COMMAND_SET_SHUFFLE_MODE)) @@ -556,7 +556,7 @@ class HaRemoteMediaPlayerTest { @Test fun `Given shuffle enabled in state when getState then shuffleModeEnabled is true`() { - player.updateState(state = createState(shuffle = true), artworkPngBytes = null) + player.updateState(state = createState(shuffle = true), artworkBytes = null) shadowOf(Looper.getMainLooper()).idle() assertTrue(player.shuffleModeEnabled) @@ -564,7 +564,7 @@ class HaRemoteMediaPlayerTest { @Test fun `Given shuffle supported when shuffle enabled then onShuffleRequested called with true`() { - player.updateState(state = createState(supportsShuffleSet = true, shuffle = false), artworkPngBytes = null) + player.updateState(state = createState(supportsShuffleSet = true, shuffle = false), artworkBytes = null) shadowOf(Looper.getMainLooper()).idle() player.shuffleModeEnabled = true @@ -577,7 +577,7 @@ class HaRemoteMediaPlayerTest { @Test fun `Given repeat supported when getState then repeat command available`() { - player.updateState(state = createState(supportsRepeatSet = true), artworkPngBytes = null) + player.updateState(state = createState(supportsRepeatSet = true), artworkBytes = null) shadowOf(Looper.getMainLooper()).idle() assertTrue(player.availableCommands.contains(Player.COMMAND_SET_REPEAT_MODE)) @@ -585,14 +585,14 @@ class HaRemoteMediaPlayerTest { @Test fun `Given repeat not supported when getState then repeat command not available`() { - player.updateState(state = createState(supportsRepeatSet = false), artworkPngBytes = null) + player.updateState(state = createState(supportsRepeatSet = false), artworkBytes = null) shadowOf(Looper.getMainLooper()).idle() assertFalse(player.availableCommands.contains(Player.COMMAND_SET_REPEAT_MODE)) } private fun assertRepeatModeRoundTrip(mediaRepeatMode: MediaRepeatMode, media3RepeatMode: Int) { - player.updateState(state = createState(supportsRepeatSet = true, repeatMode = mediaRepeatMode), artworkPngBytes = null) + player.updateState(state = createState(supportsRepeatSet = true, repeatMode = mediaRepeatMode), artworkBytes = null) shadowOf(Looper.getMainLooper()).idle() assertEquals(media3RepeatMode, player.repeatMode) @@ -625,7 +625,7 @@ class HaRemoteMediaPlayerTest { val commandJob: CompletableJob = Job() every { commandCallback.onPauseRequested() } returns commandJob - player.updateState(state = createState(playbackState = MediaPlaybackState.Playing), artworkPngBytes = null) + player.updateState(state = createState(playbackState = MediaPlaybackState.Playing), artworkBytes = null) shadowOf(Looper.getMainLooper()).idle() player.pause() @@ -644,14 +644,14 @@ class HaRemoteMediaPlayerTest { val commandJob: CompletableJob = Job() every { commandCallback.onPauseRequested() } returns commandJob - player.updateState(state = createState(playbackState = MediaPlaybackState.Playing), artworkPngBytes = null) + player.updateState(state = createState(playbackState = MediaPlaybackState.Playing), artworkBytes = null) shadowOf(Looper.getMainLooper()).idle() player.pause() shadowOf(Looper.getMainLooper()).idle() // WebSocket state confirmation arrives - player.updateState(state = createState(playbackState = MediaPlaybackState.Paused), artworkPngBytes = null) + player.updateState(state = createState(playbackState = MediaPlaybackState.Paused), artworkBytes = null) shadowOf(Looper.getMainLooper()).idle() // Future is cleared after completion @@ -669,7 +669,7 @@ class HaRemoteMediaPlayerTest { var callIndex = 0 every { commandCallback.onPauseRequested() } answers { jobs[callIndex++] } - player.updateState(state = createState(playbackState = MediaPlaybackState.Playing), artworkPngBytes = null) + player.updateState(state = createState(playbackState = MediaPlaybackState.Playing), artworkBytes = null) shadowOf(Looper.getMainLooper()).idle() player.pause() From 2ac0868f7a884ca6c7020ee0a46e930f808f2646 Mon Sep 17 00:00:00 2001 From: Fletcher Dostie Date: Wed, 20 May 2026 19:57:23 -0700 Subject: [PATCH 113/114] Correct prescaling of notification bitmap --- .../android/mediacontrol/HaMediaSession.kt | 21 +++++++++++++++++-- 1 file changed, 19 insertions(+), 2 deletions(-) diff --git a/app/src/main/kotlin/io/homeassistant/companion/android/mediacontrol/HaMediaSession.kt b/app/src/main/kotlin/io/homeassistant/companion/android/mediacontrol/HaMediaSession.kt index e6f4418df64..057331e0a18 100644 --- a/app/src/main/kotlin/io/homeassistant/companion/android/mediacontrol/HaMediaSession.kt +++ b/app/src/main/kotlin/io/homeassistant/companion/android/mediacontrol/HaMediaSession.kt @@ -381,8 +381,8 @@ class HaMediaSession @AssistedInject constructor( result.image?.toBitmap()?.let { bitmap -> val stream = ByteArrayOutputStream() bitmap.compress(CompressFormat.JPEG, 90, stream) - val iconSize = context.resources.getDimensionPixelSize(android.R.dimen.notification_large_icon_width) - val notificationBitmap = Bitmap.createScaledBitmap(bitmap, iconSize, iconSize, /* filter= */ true) + val maxIconSize = context.resources.getDimensionPixelSize(android.R.dimen.notification_large_icon_width) + val notificationBitmap = scaleDownIfNecessary(bitmap, maxWidth = maxIconSize, maxHeight = maxIconSize) stream.toByteArray() to notificationBitmap } } catch (e: CancellationException) { @@ -414,6 +414,23 @@ class HaMediaSession @AssistedInject constructor( } } + /** + * Mirrors AOSP's `Icon.scaleDownIfNecessary`: proportionally scales [bitmap] to fit within + * [maxWidth] × [maxHeight], preserving aspect ratio. Returns [bitmap] unchanged if it already + * fits. Run on IO to avoid the StrictMode CustomViolation triggered on API 36+ when the + * framework calls the same method on the main thread during notification rendering. + */ + private fun scaleDownIfNecessary(bitmap: Bitmap, maxWidth: Int, maxHeight: Int): Bitmap { + if (bitmap.width <= maxWidth && bitmap.height <= maxHeight) return bitmap + val scale = minOf(maxWidth.toFloat() / bitmap.width, maxHeight.toFloat() / bitmap.height) + return Bitmap.createScaledBitmap( + bitmap, + maxOf(1, (scale * bitmap.width).toInt()), + maxOf(1, (scale * bitmap.height).toInt()), + /* filter= */ true, + ) + } + /** Immutable cache of the last successfully loaded artwork. */ private data class ArtworkCache(val url: String? = null, val bytes: ByteArray? = null, val bitmap: Bitmap? = null) From c2ddecdc40235e0d6d0b837797f6c1805191a259 Mon Sep 17 00:00:00 2001 From: Fletcher Dostie Date: Wed, 20 May 2026 20:33:53 -0700 Subject: [PATCH 114/114] Improve album artwork handling in media notifications MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Switch collect → collectLatest so rapid track changes cancel stale in-flight artwork loads, preventing a queue of intermediate states from showing in turn. - Update player immediately on each state arrival (metadata, playback state) without waiting for IO; keep old artwork bytes in the player until the new artwork finishes loading, eliminating the blank gap that appeared between tracks when the URL changed. - Switch artwork encoding from PNG to JPEG (quality 90). PNG ignored the quality parameter and always ran its slowest compression pass; a 4000×4000 image took 6–7 s. JPEG encodes the same image in milliseconds. - Replace fixed-square prescaling with a proportional scaleDownIfNecessary helper that mirrors the AOSP algorithm: only scales down when the bitmap exceeds notification_large_icon_width, preserves aspect ratio. Runs on IO to avoid the StrictMode CustomViolation triggered on API 36+. - Add detailed Timber logging throughout the artwork path (state arrival, cache hits/misses, URL resolution, Coil fetch, JPEG encoding, scaling, player updates) to support timeline analysis. - Rename artworkPngBytes → artworkBytes throughout. --- .../android/mediacontrol/HaMediaSession.kt | 122 ++++++++++++++---- .../MediaControlSettingsViewModel.kt | 6 +- .../views/MediaControlSettingsScreen.kt | 6 +- ...ediaControlSettingsScreenScreenshotTest.kt | 16 ++- .../MediaControlSettingsViewModelTest.kt | 4 +- 5 files changed, 115 insertions(+), 39 deletions(-) diff --git a/app/src/main/kotlin/io/homeassistant/companion/android/mediacontrol/HaMediaSession.kt b/app/src/main/kotlin/io/homeassistant/companion/android/mediacontrol/HaMediaSession.kt index 057331e0a18..20621f4efa1 100644 --- a/app/src/main/kotlin/io/homeassistant/companion/android/mediacontrol/HaMediaSession.kt +++ b/app/src/main/kotlin/io/homeassistant/companion/android/mediacontrol/HaMediaSession.kt @@ -254,12 +254,21 @@ class HaMediaSession @AssistedInject constructor( Timber.d("startObservingState: received null state for ${config.entityId}, skipping update") return@collectLatest } - Timber.d("startObservingState: received state for ${config.entityId}, playbackState=${state.playbackState}") + Timber.d( + "startObservingState: received state for ${config.entityId}" + + " playbackState=${state.playbackState}" + + " title=${state.title}" + + " entityPictureUrl=${state.entityPictureUrl}" + + " cacheUrl=${artworkCache.url}" + + " cacheHasBytes=${artworkCache.bytes != null}" + + " cacheHasBitmap=${artworkCache.bitmap != null}", + ) if (state.playbackState is MediaPlaybackState.Off) { // Entity is off: reset the player to idle (no playlist, no commands) so Media3 // does not create a notification for this session. A notification for an idle // session with no content would replace the foreground notification of any // currently-playing session (e.g. another configured entity), hiding its control. + Timber.d("startObservingState: entity off — clearing cache, artwork, and player state") artworkCache = ArtworkCache() withContext(Dispatchers.Main) { notificationArtwork = null @@ -269,24 +278,49 @@ class HaMediaSession @AssistedInject constructor( return@collectLatest } - // Update the player immediately with cached bytes if the URL is unchanged, or with - // no artwork if it changed — so metadata and playback state never wait behind IO. - val immediateArtwork = if (state.entityPictureUrl != null && state.entityPictureUrl == artworkCache.url) artworkCache else ArtworkCache() + // Push metadata and playback state immediately, keeping old artwork bytes in the + // player until new artwork finishes loading — avoids a blank gap when the URL + // changes (HA sends multiple updates per track change with different cache= params). + Timber.d( + "startObservingState: immediate player update (holding old artwork)" + + " artworkBytes=${artworkCache.bytes?.let { "${it.size}B" } ?: "null"}" + + " entityPictureUrl=${state.entityPictureUrl}" + + " cacheUrl=${artworkCache.url}", + ) withContext(Dispatchers.Main) { - notificationArtwork = immediateArtwork.bitmap notificationEntityName = state.entityFriendlyName - player.updateState(state = state, artworkBytes = immediateArtwork.bytes) + player.updateState(state = state, artworkBytes = artworkCache.bytes) } - if (state.entityPictureUrl != null && state.entityPictureUrl != artworkCache.url) { - // URL changed: load new artwork then do a second player update with the bytes. - artworkCache = loadArtwork(state) - withContext(Dispatchers.Main) { - notificationArtwork = artworkCache.bitmap - player.updateState(state = state, artworkBytes = artworkCache.bytes) + when { + state.entityPictureUrl == null -> { + Timber.d("startObservingState: no artwork URL — clearing cache and notification") + artworkCache = ArtworkCache() + withContext(Dispatchers.Main) { + notificationArtwork = null + player.updateState(state = state, artworkBytes = null) + } } - } else if (state.entityPictureUrl == null) { - artworkCache = ArtworkCache() + state.entityPictureUrl != artworkCache.url -> { + Timber.d("startObservingState: URL changed — starting artwork load for ${state.entityPictureUrl}") + artworkCache = loadArtwork(state) + Timber.d( + "startObservingState: artwork load complete" + + " hasBytes=${artworkCache.bytes != null}" + + " hasBitmap=${artworkCache.bitmap != null}" + + " cacheUrl=${artworkCache.url}", + ) + withContext(Dispatchers.Main) { + Timber.d( + "startObservingState: applying loaded artwork to player and notification" + + " notificationArtwork=${if (artworkCache.bitmap != null) "set" else "null"}" + + " artworkBytes=${artworkCache.bytes?.let { "${it.size}B" } ?: "null"}", + ) + notificationArtwork = artworkCache.bitmap + player.updateState(state = state, artworkBytes = artworkCache.bytes) + } + } + else -> Timber.d("startObservingState: URL unchanged — reusing cached artwork") } } Timber.d("startObservingState: flow collection ended for ${config.entityId}") @@ -340,15 +374,35 @@ class HaMediaSession @AssistedInject constructor( * Returns an empty [ArtworkCache] if the URL cannot be resolved or the load fails. */ private suspend fun loadArtwork(state: MediaControlState): ArtworkCache { - val url = resolveArtworkUrl(state) ?: return ArtworkCache() - val (bytes, bitmap) = loadArtworkData(url) ?: return ArtworkCache() + Timber.d("loadArtwork: resolving URL for entityPictureUrl=${state.entityPictureUrl}") + val url = resolveArtworkUrl(state) + if (url == null) { + Timber.d("loadArtwork: URL resolution returned null — returning empty cache") + return ArtworkCache() + } + Timber.d("loadArtwork: resolved to $url — starting fetch") + val data = loadArtworkData(url) + if (data == null) { + Timber.d("loadArtwork: fetch returned null — returning empty cache") + return ArtworkCache() + } + val (bytes, bitmap) = data + Timber.d( + "loadArtwork: fetch succeeded" + + " bytes=${bytes.size}B" + + " bitmap=${bitmap.width}x${bitmap.height}", + ) return ArtworkCache(url = state.entityPictureUrl, bytes = bytes, bitmap = bitmap) } private suspend fun resolveArtworkUrl(state: MediaControlState): String? { val entityPictureUrl = state.entityPictureUrl ?: return null - if (entityPictureUrl.startsWith("http")) return entityPictureUrl + if (entityPictureUrl.startsWith("http")) { + Timber.d("resolveArtworkUrl: already absolute — using as-is") + return entityPictureUrl + } + Timber.d("resolveArtworkUrl: relative URL — fetching base URL for server ${state.serverId}") val baseUrl = try { serverManager.connectionStateProvider(state.serverId) .urlFlow() @@ -358,7 +412,11 @@ class HaMediaSession @AssistedInject constructor( } catch (e: Exception) { Timber.e(e, "Failed to resolve artwork base URL for server ${state.serverId}") null - } ?: return null + } + if (baseUrl == null) { + Timber.d("resolveArtworkUrl: no base URL available — cannot resolve") + return null + } return URL(baseUrl, entityPictureUrl).toString() } @@ -373,18 +431,31 @@ class HaMediaSession @AssistedInject constructor( */ private suspend fun loadArtworkData(url: String): Pair? = withContext(Dispatchers.IO) { try { + Timber.d("loadArtworkData: starting Coil fetch") val request = ImageRequest.Builder(context) .data(url) .allowHardware(false) .build() val result = context.imageLoader.execute(request) - result.image?.toBitmap()?.let { bitmap -> - val stream = ByteArrayOutputStream() - bitmap.compress(CompressFormat.JPEG, 90, stream) - val maxIconSize = context.resources.getDimensionPixelSize(android.R.dimen.notification_large_icon_width) - val notificationBitmap = scaleDownIfNecessary(bitmap, maxWidth = maxIconSize, maxHeight = maxIconSize) - stream.toByteArray() to notificationBitmap + val bitmap = result.image?.toBitmap() + if (bitmap == null) { + Timber.d("loadArtworkData: Coil returned no image") + return@withContext null } + Timber.d("loadArtworkData: Coil fetch complete — raw bitmap ${bitmap.width}x${bitmap.height}") + val stream = ByteArrayOutputStream() + bitmap.compress(CompressFormat.JPEG, 90, stream) + val jpegBytes = stream.toByteArray() + Timber.d("loadArtworkData: JPEG compress complete — ${jpegBytes.size}B") + val maxIconSize = context.resources.getDimensionPixelSize(android.R.dimen.notification_large_icon_width) + val notificationBitmap = scaleDownIfNecessary(bitmap, maxWidth = maxIconSize, maxHeight = maxIconSize) + Timber.d( + "loadArtworkData: notification bitmap ready" + + " maxIconSize=${maxIconSize}px" + + " scaled=${notificationBitmap.width}x${notificationBitmap.height}" + + " wasScaled=${notificationBitmap !== bitmap}", + ) + jpegBytes to notificationBitmap } catch (e: CancellationException) { throw e } catch (e: Exception) { @@ -427,7 +498,8 @@ class HaMediaSession @AssistedInject constructor( bitmap, maxOf(1, (scale * bitmap.width).toInt()), maxOf(1, (scale * bitmap.height).toInt()), - /* filter= */ true, + /* filter= */ + true, ) } diff --git a/app/src/main/kotlin/io/homeassistant/companion/android/settings/mediacontrol/MediaControlSettingsViewModel.kt b/app/src/main/kotlin/io/homeassistant/companion/android/settings/mediacontrol/MediaControlSettingsViewModel.kt index 4eba6117600..4ac82ff4d95 100644 --- a/app/src/main/kotlin/io/homeassistant/companion/android/settings/mediacontrol/MediaControlSettingsViewModel.kt +++ b/app/src/main/kotlin/io/homeassistant/companion/android/settings/mediacontrol/MediaControlSettingsViewModel.kt @@ -42,11 +42,7 @@ sealed interface MediaControlServiceEvent { * has not yet been loaded from the server. [entity] is null until server data is available; * the Compose layer uses it to resolve the entity icon via [LocalContext]. */ -data class ConfiguredEntityItem( - val config: MediaControlEntityConfig, - val name: String, - val entity: Entity?, -) +data class ConfiguredEntityItem(val config: MediaControlEntityConfig, val name: String, val entity: Entity?) @Stable data class MediaControlSettingsUiState( diff --git a/app/src/main/kotlin/io/homeassistant/companion/android/settings/mediacontrol/views/MediaControlSettingsScreen.kt b/app/src/main/kotlin/io/homeassistant/companion/android/settings/mediacontrol/views/MediaControlSettingsScreen.kt index 8405e9506ff..0940fe13783 100644 --- a/app/src/main/kotlin/io/homeassistant/companion/android/settings/mediacontrol/views/MediaControlSettingsScreen.kt +++ b/app/src/main/kotlin/io/homeassistant/companion/android/settings/mediacontrol/views/MediaControlSettingsScreen.kt @@ -167,11 +167,7 @@ private fun EntityPickerSection( } @Composable -private fun ConfiguredEntityRow( - item: ConfiguredEntityItem, - onRemove: () -> Unit, - modifier: Modifier = Modifier, -) { +private fun ConfiguredEntityRow(item: ConfiguredEntityItem, onRemove: () -> Unit, modifier: Modifier = Modifier) { val colorScheme = LocalHAColorScheme.current val context = LocalContext.current val entityIcon = remember(item.entity) { item.entity?.getIcon(context) } diff --git a/app/src/screenshotTest/kotlin/io/homeassistant/companion/android/settings/mediacontrol/MediaControlSettingsScreenScreenshotTest.kt b/app/src/screenshotTest/kotlin/io/homeassistant/companion/android/settings/mediacontrol/MediaControlSettingsScreenScreenshotTest.kt index fe26c0f4ab3..72524d929dc 100644 --- a/app/src/screenshotTest/kotlin/io/homeassistant/companion/android/settings/mediacontrol/MediaControlSettingsScreenScreenshotTest.kt +++ b/app/src/screenshotTest/kotlin/io/homeassistant/companion/android/settings/mediacontrol/MediaControlSettingsScreenScreenshotTest.kt @@ -81,8 +81,20 @@ class MediaControlSettingsScreenScreenshotTest { uiState = MediaControlSettingsUiState( isLoading = false, servers = listOf( - Server(id = 1, _name = "Home", connection = ServerConnectionInfo(externalUrl = "http://home.local"), session = ServerSessionInfo(), user = ServerUserInfo()), - Server(id = 2, _name = "Office", connection = ServerConnectionInfo(externalUrl = "http://office.local"), session = ServerSessionInfo(), user = ServerUserInfo()), + Server( + id = 1, + _name = "Home", + connection = ServerConnectionInfo(externalUrl = "http://home.local"), + session = ServerSessionInfo(), + user = ServerUserInfo(), + ), + Server( + id = 2, + _name = "Office", + connection = ServerConnectionInfo(externalUrl = "http://office.local"), + session = ServerSessionInfo(), + user = ServerUserInfo(), + ), ), selectedServerId = 1, configuredEntityItems = listOf( diff --git a/app/src/test/kotlin/io/homeassistant/companion/android/settings/mediacontrol/MediaControlSettingsViewModelTest.kt b/app/src/test/kotlin/io/homeassistant/companion/android/settings/mediacontrol/MediaControlSettingsViewModelTest.kt index 1c549fc9cb0..f16ded4c226 100644 --- a/app/src/test/kotlin/io/homeassistant/companion/android/settings/mediacontrol/MediaControlSettingsViewModelTest.kt +++ b/app/src/test/kotlin/io/homeassistant/companion/android/settings/mediacontrol/MediaControlSettingsViewModelTest.kt @@ -196,11 +196,11 @@ class MediaControlSettingsViewModelTest { viewModel.serviceEvents.test { viewModel.addEntity("media_player.tv") advanceUntilIdle() - awaitItem() // Start for tv + awaitItem() // Start for tv viewModel.addEntity("media_player.radio") advanceUntilIdle() - awaitItem() // Start for radio + awaitItem() // Start for radio viewModel.removeEntity(0) advanceUntilIdle()

  • 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 QX!+Go=p4^Fdg04(5-6951J literal 28833 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 diff --git a/app/src/screenshotTestFullDebug/reference/io/homeassistant/companion/android/settings/mediacontrol/MediaControlSettingsScreenScreenshotTest/Media control settings is loading_small_phone_66e7bbf2_0.png b/app/src/screenshotTestFullDebug/reference/io/homeassistant/companion/android/settings/mediacontrol/MediaControlSettingsScreenScreenshotTest/Media control settings is loading_small_phone_66e7bbf2_0.png index efa25245b4b9c45fb92d62bb2065f42df630177b..64c12d79e7bc599296dd4c81a0972a08701d4619 100644 GIT binary patch literal 32900 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 Bq}u=h diff --git a/app/src/screenshotTestFullDebug/reference/io/homeassistant/companion/android/settings/mediacontrol/MediaControlSettingsScreenScreenshotTest/Media control settings is loading_tablet_2f22c4ea_0.png b/app/src/screenshotTestFullDebug/reference/io/homeassistant/companion/android/settings/mediacontrol/MediaControlSettingsScreenScreenshotTest/Media control settings is loading_tablet_2f22c4ea_0.png index bc547624d3cd9890e3f3868fbbb95c1aca9bc6f5..2bfa327d06a5a7d995905d34da58fccc5dbfc3cf 100644 GIT binary patch literal 21654 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 MPgg&ebxsLQ01O&r%K!iX literal 20744 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 diff --git a/app/src/screenshotTestFullDebug/reference/io/homeassistant/companion/android/settings/mediacontrol/MediaControlSettingsScreenScreenshotTest/Media control settings is loading_tablet_landscape_62cae397_0.png b/app/src/screenshotTestFullDebug/reference/io/homeassistant/companion/android/settings/mediacontrol/MediaControlSettingsScreenScreenshotTest/Media control settings is loading_tablet_landscape_62cae397_0.png index 65b80980ab1b039e309fde157314a06671d184d2..54a31a8ccba66d27e88f93f0e79dd6ca2a5ba623 100644 GIT binary patch literal 19192 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 z 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 M*SVH@#p22T1rI9!5C8xG literal 18717 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 diff --git a/app/src/screenshotTestFullDebug/reference/io/homeassistant/companion/android/settings/mediacontrol/MediaControlSettingsScreenScreenshotTest/Media control settings with configured entities and icons_foldable_c908f502_0.png b/app/src/screenshotTestFullDebug/reference/io/homeassistant/companion/android/settings/mediacontrol/MediaControlSettingsScreenScreenshotTest/Media control settings with configured entities and icons_foldable_c908f502_0.png index 25d6cb4eac3e73a8f47d446cbe2da72398fb0886..61f90f0d864b25758efa97c8b38484055e9dc70c 100644 GIT binary patch literal 59285 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