From 75e9d8baf11a5831e0e6cdb715f963627776208a Mon Sep 17 00:00:00 2001 From: Fletcher Dostie Date: Tue, 24 Mar 2026 20:10:39 -0700 Subject: [PATCH 01/92] 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 02/92] =?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 03/92] 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 04/92] 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 05/92] 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 06/92] 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 07/92] 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 08/92] 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 09/92] 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 10/92] 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 11/92] 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 12/92] 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 13/92] 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 14/92] 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 15/92] 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 16/92] 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 17/92] 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 18/92] 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 19/92] 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 20/92] 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 21/92] 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 22/92] 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 23/92] 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 24/92] 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 25/92] 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 26/92] 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 27/92] 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 28/92] 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 29/92] 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 30/92] 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 31/92] =?UTF-8?q?=20=E2=86=92=20use=20;=20Remove=20the=20f?= =?UTF-8?q?our=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 32/92] 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 33/92] 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 34/92] 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 35/92] 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 36/92] 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 37/92] 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 38/92] 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 39/92] 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 40/92] 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 41/92] 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 42/92] 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 43/92] 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 44/92] 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 45/92] 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 46/92] 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 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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_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 zcmeFZXIN8f*De|tYk^CpxKL3rL>CGoO_3&qVnw>rl_nx3LWmIpAyi*12trhvbd+8L z0s%r(T9i%#1QLo6X$cVmp|?E|*LushzrC;X=bY<0*T=8K%*@PZjAx8-k9*vYFK!xY z^X?Pg2Lge3b#7cW27$P>K%ifg_HqONvRCD*3kVbh(z$xc6m2^*H)&+~a?lY4 z>Oo-{E>E&_&1JHu*pXuLiC@DlPYdXAUEX`j{N(S&*-a0A%{~~`5AzZTL0!i~KQue| zTrWW<+^=qHL?)u;zqGzcQu)#v5m~&D%UN#8@=UhtEl@=G_|6n>EK=;`=C5(Kc_4o0G&eb9J?7ofqxby3sUF~X zg6_A+E3U@YZH#Z=Y3{8MpKq@>v^CdmZISfk#<3b}E&&a^%HN2`J@jE<#NgXKQ)!tA zvAiNm->mR%$AXKTtsC_%;HkUyxS zPuuhIF>s!(XDeI>8?LH#A!wwU{qc*VTkbB75zOfgJxRel^MV#T|Ha;Wl~vyfQgu`B z!{#FmRVBCUg=$~f1+0#zMf5LpYSxv0znPI33vU--I*?K5n5B`x?Ts>utyIM9%L^T6 zWK6EXLf0cGI6J#L+#!xicVlW73lN8&T5$S^6YUAw$~q&f9p2Y@4Xi&N#kqmID?r6n3 zg)A0Nt3q8Z?EFzkKO-o+acUG@^%B)8Q+|l)w_G(M)5K-&#N~7?ZQ|YBgO)txf_R~I zdL(GFxsIspL>!|bt;u49~3g%C+fq&gPuO%>Z&o1i z#QVS_cWU~N!1b18{mI0&hRq>sNuS2W(u63F#Cz|?gDE}(eFut<9~f2LXp##kR%y;k z#+IzHO-G~OepKI``(<^ zn-_~vxu;-UK@|0k8Y|FoZ=-%s3+47M<@LX-8%SF@yMP)s7LGciKJ*GBO`kf959ZfE zm#T}zw$L|}*!m^1@+n)KENvp3P9-VvsdKuzmEegPj-JU3*`p{YBwyz1a{2a!sn_D* zhS%DnakG_^$sYC92wTtm7KHl6^V7wddnd21>-ZF)NM2}RSkBn%$v1Zp@n~@8DONcJ z^~F^!hFIBM({i48JQ8PHLpY?IqeEs6xKm&W6G%+~2}zT_QWA6oO3lZw%1dJX5>C}b z_JyrZbVsCr9nPSha?B~v35dO&4DUUKD$?83sf5Ix@{b%GG001DmDdqf(D{3D*$n9g4iBL^767R%s!#8o@&kqEwi_q^ymiIrd*x)Gm-Vx-$HISZ+6f7^ zV^`-}<%DS6cPZ`4BZ+>mS(pG5bo%X{&o1t5GFJFQ_G>5NZJZMynq(|wY)knI4@F>^ zO+t3ZlgJhCC{n?8>r~3TkS*H2Behi z1~Zh^Px4=(Y zrj!mVOk<#t_z^fxkG_+(bM-OqzYMKRC)`JF9@?~nJnK2M$16!3P8MO3+_M;OoYuLD z;c>b0I`MRf?gK$Lztm}qhDWFcYi3%O{l(1_MQj5q{2neUDf3ImSx8`O2j4g;0E(m`7Nj5W?f}`_yWzyL9C~a z9b?63UgHzrVqYF4LzUY zX%oXjjqh}l_){w$;cFgdbY-W?{^F$;bGEs{V)JswEy7}&R5G#CSS&p&bVlhH>;kRv zLi-=y`P>EzLe2G9JKnvvK!x#;RgDpbpcqrI-+V{$4BP#QO&8zJRwp(2aBf54);iW5PY$&FMi)E(?>Vz(|bw8CW z)PHb*(-=2&-S7Nf@JnH2ZNgLztJ+bVqEIeSW%Pv7GeYfl}FZP0}zSyRCooi*&~)ze$#KhXX|+NA$_# z;D>E@j8;$Bt+rT9K!+sFl;sSRbA;VOwAqNt@t9jfJqbq{Un#$x4-oqSPT*-eiG1C8 z`Kptu%Pm~$W`e5eS6N!UC$5^P4W5?4$m7pKGZVfPy=(~!pN*e{GYteg>2c|s?!Gp{ z7Ung0K_6!SM&_9nYb##+Nl7zZk%Orai+y^J(fE>hPsj|aslg~eLj?YXVEm?)@;A#XS2JD z-#*xgi=Is4n4Pj|t5-7Z&a+)L5vF5%E!1xvu@KJKT%lv-WYU^XLtjWPQT z?|J6*la=X++=ST71XG&>S2ir_)_RSrr=0$jHc{sNtim?v2QY@E&y{zjjmn1~@U!F% zSPx@MvxCn(kqTsC9(7+6I^61ld9BhR)=BG05FaLzGd5$Qn8qfz7pW1%$`=TH-jaRn zEq^>)(wM~TbysHJD6xo}zp((zN-}RWD_g`|(`e)|TTW$Tk8d6=VxtJ9w;yZQDzICW zu^e699e;BOfgxmake5xjSA+aow;NrZ`dWOj%5*XX9i5>nTGtAto@M6-zcCIpp4F}< zQ9J{c!@UY~+I%K1MdE#W#?erQzaY+G@hsxaqlko-CygvmGhc}xUJkcNm_piC&wt4q zRA9T+8&$XX0T}*w0j{Z`Cy9ao8jU}0e2u0{AdIB(xWY4;w_D-Y-< zvepJ;+{Fx@z|^cg_55<+@^)+m$+TTaWa{_1qD21!148o1p@r8@;jd_mv=BtDLfPYR z{xQmGX`l$CQFAR%*0V%~hy0laOVP$EG?77!G)J$Y)M?9jAjO~jqc+79}-GQCc0g!qp~Tbx}mKv+Ck%p3lL?V=t3a8_Pp zySjy>V*CHtkDg!<`+;jU^(uB@EZWF+JoAP2`WPx-bae^^PQFg-de-8wQc$RDqyRdo zdCqQG;EhFGVl(JQ3iVgqqao)w-l0!c7Xf~Rhaf#|IRCW&(KJkGqDO9M+URu3s>}WQ}CPlG=?* z*^H>(LK<6DnT-u2M0_cXCjnS|C&0Ah=JiXGy^Jfk)QZa|;=_F^aI((VM?;oZ<>Vg?o7$5H}w;sNjM zL>cXDr|MfE$d)GKYBSfXV5I=Ok{wUHp(_eRt5}YjC>E1aziwF-qYN}`29B2rd_m|^ zMYuxQ3!Ba`XAPgIghQgN*3t;Yqp?_9$|$Ui7vAJ3mmEK{KC&GE8~6wybO%tn5xl;% zby51hQmPRrG+N`Aqs~`TA!p2#^@VfxwZ2@h&`YfpZusDJzx;c1n*(GA6d%<1-n(eJ z;~6+f3?qL=8X;x-Afx++y``b1F1HOCqrF$Q1k zxP&_6L8^|fO(r5?r1txJaq*ddntLz&iBirni&9dDrB*66RO7rNXh`K1dg(Dx<#c93 zsH5UFgX0zyJ_}gF5%qDAdX|DEGI>h%5YgwqaS=>32~DZmNjrghX5)oOfjpchoIOFf7_rosTmy?+E|c)lG{_anVo z#ZBxKsX<8##ZH&}?-SP;?#2!T5M%mxUu(0Ored9hJ+CT`Gq_JgkFSfbPALWGX0?_miMbiHoB5|Hsy4byQvaKx7fxIl26Y2Dy*LuFIQ8L z$-&_N>4;A+1-yIBEDn#3CQFyj>iWK=tJEq@%@zd=Niht>;U$e?cJb(MR{46Ej2zn= zHfjP-%ApFp=6(@lzK?TPBWiwBrVaT3>n$D12ZadYtb8ZFrGziDCnajrClfcl9p)?Nz^7nYF&BHsTYv#k0s{5PlY_Q5sJfL8dso*eb+-9|6LHQlV=|j(_P6GxU5Hr7R`{8^?!{{c zIRBF?$dtlWf7n}&v%P~-mNWK_6n1HOxneo&x6poz!1*+P&inq`iEFza5%8x;O1mzk z7J~T*nWvK*&$owqh-8brb%MmFnUpvV}vJfN`9Nh00+;x!X_J}#{J zd4Ro{a85#*!)la%B(kijcqgp`x4-$fLd-&A&apmaWr&V{_iC;zG_b3ZvaYmx!;%1bk zrUlEYZ)p@1`VPF|l){{VsP3DJ+44~5zsgMKqalkp-lL)D?@KE@u8GsRpV>?e)C^BB z!@UisPdEgtfw~G6KUX_`kL02jfJy+*}j^Qn*Mi0$ST?W-$FuH#6)?= z{vj3#{fpJ;iAe2Am@8?iiD_9i@zeh4V~=wQ3o^-$kA%5S_&*S=Zb790gz6CmLaw01 z+AC~0?!5%6L1$zKuMcO;HSM}UsEYuRlQfpKMveJQa@G>U%X|8tjxRpBe|+*54BCN+ zyq$irNg;5fW9+!T7{W1rvRlkxGRfPvm{M^s35>Qt*wEoK+xtY%(1BM`aXh77rWwq(XQxt(M50&OKnJn0SPl zgdTg5!BS$ol`zr)yoL2!(EsU*BO32>Amo-=k52V+OT?hbQ}P4t3h$f_&Cb75QyL$) z|_NJm#$thh%Ez#+z6=UPrDew_)=whzS$V z3dg#ge8zt`;s&DYM>-0bzVkJ|x@moB> zKg)G5P_FZm@}xZ8JTg3Wnm-;r{<;T@)vhrbMdl}u8vty*N!+U_rA&8FV_E^*O|U9i zsMBx$jIu#BRS4^__*omroGYb1(=5`cBgTfqAQI4+8lfg z<@vrrRaooyQOrHLwxPl-?}Xtqw=(7Klx82Y^>&yj=HJxx{4o8z!uC@+^Ec$VB*b2d` z|AGvg*WPai!=TAZiTcRqEM|Tw#by<5@&O|b)Xs=Qbn^Q63AeiG>D+VC5ma-L*!Pk( z$t*804hWr`)f*)N0+O~P^LvSb04*FFv)`z1T0`brxT@03BS|P#8s`TadyNpC=8b1O z?J46rul`ABDQkq^{#^b8Lc_;2u+FC%J=B)ZE~@gun~9>%-N@0DTwl<)8`>NyrB)K; zCH@aZBZmn+z~BZjm2jt0G1G_LCV_oKZp`y%tC(Z|D(0pMdjvY=kBPo{Lts4_5KCwM zXi%_^hP>l=-~M*E8UVQOR9?iVR6eNvpp|5XJgqVwWiru7R5n{fsuc=M2QymkD{i>< zuKfOAKkF<8OMt%YSgy^h^qn8tzrnv6{7|`e=-S!nNRVql1vv3!PAt+h2P> zJ~QNcktMpn`fNCH6)w+G$a*`0wTt`VFvE2yCS7v)S%e+yy^S4MnH{OR^aF%NE1xtJ zvb4F%S|glmHc|_TpvhWDh+gd)F=H~1H{qh2M;`5CQ0-?+r>+p$j}X=D=6=VfU2cF3 zP0n1h+Vz}=noVar0mTemM9rQrw4Pc!9z!O6fcu3;aWG{xR5fYFEEAx-GHdp6xL~t2 z%d#?Ap3fm4FEJ8YVzd*+qj%tNyI9R7-5Qq%JonfMlaFhEbBGN?!L^Ma&Kf5LCOhWr zfG-@rWjDj20&RCPT!Oipg~i0F#l-Y)mjpYZ4^)AkWu%d5S@SOtINjBXJ|K=s6vFw< zpH)Wf22~3XR7DoF)b&_GxvO}$6Xsc+!Vikb#UHWQ10xaFyW>-7SW&aN zb88tFw-o*qMx+6)jVmPn*~#H&q(80?D}GM<$6;@Q;T;Z~UPR1gJzX$crhg&bfDMA6 z>oX;3KCe;7A8bVN$McCdGAnY=KDGFfB{P$NEV=bFOa35zA|oyY{NoCE9`onL9_M!F zoQ>bv#;667XQc2*6w~Q4gtl+}X4YNkQE)c2pVjk%N9)^kR*GoNbk=@c%X4av3f9v$ zS2ZP`YTsGf&)1#ns@L`(o;COxlQ_ZWi@n_0&}Wr*7jd$cL!rQj~3w8jZMu;7M>QmkP9>IRR-7HIvEKR zvkZf|vlRarpqLr|7HWhMH2a==(D2qL!=adc&u!|acbZXq5%yEh~Mf}ryO!T!yFRpfjpDv(VU`2m@a<+&!8?=(Cp zs3gm~1(lPNk8#gpRu&r#_2jHs-ph^JVd;k&#oCh{Th!Wtxw~Xvj&Gir=3dBWO0s8?kUkTIJ@QF!K6=j7{iZSD9M3f}~&&y5?#yij@dc8nbp)Khy zxe8Sghii|W0c?H)@;6n(6;5EhuurgmJfob?~>`7Xg+{X`dfQ;9wZ}SzS6Zz(ilH zUDAn7S00{F==|h2!OHIdsubVFZ?C$`U(KvB^1F!yMFYKx-?IrmI+Z%Tzx8SKN~
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 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+j4(3-I%A>3IF6zqpi-rdGGd{rND&C2 zl+Xf32|Wo8TTl>iL_oTzfQW#!fT0A3CN&NLVhGJ3C4?4QfE3OX1oz(a{mwdnoVCtB z=VQ4RYRdc6`@ZgW-Iwc7`G!7k)qekO*;8*J_`r(XijF3gI9+B-F@MSTym#slA^{unS2m{_ z7nvIbQ<&46MEQx*0Xa;HL8o(8kmy~$t<0u=XuooLFEU=`39Mbq=IKomvA?|LoQeEN?jfdgKw~p}2aub6L7+Ks)-IgwpH>%Nx3x^~>YU$+egXSS?T;iP=3 zPV@@(mlFlzE>fv9R7TC>Q*!Ot7*L?;V(CfobP(G>a1Os|SqmMrs*Ns`nS0_AR{}OJ zqcZo-8C}Zjxj$klyZ6)&v2YV3E;cR&(t2(22LC`%Qo5c}-uK?A)t-D)6AK)rEygL) zr^Jc3o^=?Eg^tE*nQw6U0Txau`F`SoZn8?|PIMqyX-g&5RdRp|o#nA@oX{GlK(U-6 za%sKogSS_d>*71${W-;DEi|TOj*DK_tsLMf*A;py#P^zK9?BiQ^28>EQW3^dvDc?M zAN7=P&=rk3GK}w$cSK9YhdJJ>jjE07#7vEVxEeT$cJw{BQa94sW7uNalrWZ)E-UkqR76R2EZFs=^10)r|9z8 zn07s#yzuM)aS1KkD~pz+Yyd|{mN@Vw6uX3uCE9o)jV!R0*Z%L9@cX7g93m~Y@1p2& z-6snmrKa;gO;->seTj?z*c?|oZl~<90+f&quMQwmYo39L=@u3(r>8T9qH{R8?-G7# ztO>EOIQ?<7`{~(x{FB-HfmvS5(`ghtqh$sWKu%NzniA@73YHTv+7Lsl8GGD*(%r=O zLZQdN6@M&$X6&5299>2SL*%4y+Edx_8o)_ln!56*PSAd-$*WR#8`ERpr!ME7y|&U{ zv(#;p_ zANG_W*R-pWh*pbNPs4S7~piW!I*QW}ffVZu-2FZifv5 zZtcu_r?M{fM{VmQvz7iTkcWIPw$Cfa0ty`?OE@CFWh#m{Zbl-SzMWUaYv%s2QY{st zVP+peDczG3;$~}qHmm#n1H?c~%eQaR`HB6jATn8TSt|eb%Se|sR#V{H9|C^+J)7|= zOw^as1qX=#t5?P&CoH)7M6p_5y+iPEtJCD48%H_%i&NL&8CLg00Y_S(-1$C547;r% z_j~7@5*#e9zy`tad?pd{S1yqxI0ROGKQYw4So&CtKJX-iw6hR>D^R%&Yp=f6d{ryx zu{?Ur9M0VGlL4#>$Syiwc*+ONn@;p4PO0=NjSW}UP8}b2&};v`eSBAKcO_?-PZ`3! za4@aTi(Lc4C7N~*7apUzi^vvPIJi`NTg$EZH1*p*%v|oK7vJph&T3~X4hw>4=2O7z zr)j&U@nI#c5X3?&xfd?^5Y7Vos`>F;=C-N|&dsi6-Rk8FhT<@QgWpV)(5ne!Rj&lA zSFBKGK28GlJ@I+OEW#V2H&QK!g((WDfn%JikuOcWdB~u#fewPmv92JOq zlfiyXAM4Pe2&$O{({Ad+$6>DuAO2|{w_+D+-L?0t?KLjAj48L+P*gXA+MmZ8*u@lw zRw@B8{p^zLMlPf5NMtIsQd4P^a3BQlwO=%B68~{HK$i2w&2&?y*v$Ix-}2R9+Df9~ z_{g^Vz)PdHqgNL8ugvtI$?Pbf^1&NjO=anCrY%!7JKECRvX`vTz3SOla`oJ>RP_>i zildxca_u?l;oYfq!UId5e_quMn0}do{jsQK;i7b{`yd`wF}yF^TVIaq_a`vBPK>c@ z+WQ<3ZyuM&kEKLrFDTn^KmDD@Y@7Ir?<=PA>HA`a$D}E#tK}{EAFMH~KW`aQM%yVlV-RitG-(xIV z4m`%|vr(D-$2N>bJ8|XYi>In@*d6HkaAjaKHQ%B@I8EsOW0h1H603T8WuLp~s~{(Z zV!cVUA1Y_Drydqe6_&YK{~5%hD=sUQKUyvaEMFXRswWM}%M7++cUywI;*h%mq$#f% zVx4)xcL?yj3`YeI?CoAF8?(B#acSw=GZU5I?9TCGGwr&cCg+5`@g(KaHF~^HEW2Kv z{$b*P2*{szWZ~LS)z9oK?p2}_=)h7)Gq~;=Z;_4o;$)6rcwRg}cbIS6w)DK;DZz{q z_8I}-=1~|(y5!IOT{4&VDpTECiST9j%Kg}ny?%`L`zCPTMW-EO5q$P0&GpB)4Pa~b zV9MM(Q|Yeod+?Cp$FLQ-42?VUAYk1yWoh<^2eD5-YWMegi=PXRII%19&aNxPu&4zpkGT0f^(o7%n2F@K^s4=ip1sjEur1@4he5Kxsf zxe-2s=G15e?V zxlYg13J^L|{Qiper+@9qEfA}S=O;(>XTK?6Ato21Pl4D#qHyh8p#(l4fIVgEQBftd zytH(;`?riFe%4UGhZySD{<;VTiod}Lp94NzI2}>VPuR$f5=!xZy}qF%Bwfkh=Vzrx z)CvNL;Cb9yDR;S60p(oYZ#(?m70UI|f(EG@grhHR0{6p54~pn1foYUqdrq>W9Xn&C zFf8{L0|Y%Yb4!FYFTR}G->1(X>~1*uex{9)&C_uB9uvHIf0w|@DY>RptNFglI$e}G%Ex+Ghq z;MHr~ZE54xPHjS+y|iAzG%X(BU)yTapFQfyvqpaAt*3`$D%jl#35bZ69ilvHxuu5} z{O%IH^1WVL$H#@i0-t>#m@vG#+tjwoY{stE!8~Ti#HOgczrXii3%_U8c_lCCS`V{Z z)nso^kZpmE+6LtgoD zkNV_?W(KEr@s*In8CeGI=_;;4*ZUjW@>hoH%pr|*05@Y<5#0Ude{}y%eYmHdhV*L( zZX%hm#F5v#r7k_uSe5V=K}FcC{rL-AM_ljU3+^UI=i}D)p{Vuo*XSJ{$@9SO?KdMg zX2#f@`tc{P7^TKK>yL7Tsc8dxfdJ)N4M_=3ahvmfjt?YNJPyTND*MOP*X}3rFS3VBob~II5 zJPK4MxGdFX)sRlWF|lL4#&6i~`2kSx%guTa)E)&ar6o_(edW=3&qR#n2gRk20x}v; z%Dwu03uMj|)B*SOPg4GErv#2&jQ=pj!9DHGvb(MqW3AE8`Fp>=OvsJj1T|Ou04GDr zVA$OWl;Y>E2+f%<2?+T%pFW~Hf6z(3MxPGmUjg-?evQGUb%nwkR>C=)IoRRwvz|zB zJ;^v-C6BweUJAm#D?BXcm2>MswnF$JRxRvOW)FijgG>Fx@p4WgZDklPYOqo=jfxn= znAY7>HoO9OCeF-q^y15B?I!>X0Gx*|3T7@q1LfSU)6!zl<{^)BF12XcG+CL z#PeyXR+8B;EkEC?z`8e1b+7u9A_b4?1@mGDw`Bb&u<&^Kna>dm9%Oc*k}N^L7*|QL z1wPdRj`dE?4aY;2%HfmoC(HcSGOK-*gDT#w=c1zrJU!Yg)0fX(D>8_M8^qT}>BkqE z?o6s4lE-J-$+#HW_f&A={$^oP&*_Y}6{Ca7zl3I#+nxwR&TGek7OIQQKUsTb4A>}{ z=8rxi_MKMxOZ{GV<$;{Usr5c1k{9dJK{X((76B^CiILJo2%fq)%+G=CXT~lAy0Z$+ z9u&Gfwe0*klmS8p;j+J&;X2k9u~=7$2ZXKU&qJYeg`zc-r;#}8vaXQC>(}Kb<`Qkr zW+>?I7<}wk9&IH%L6de^p(0@l;X4(bmZtvVm+0V%f0=9*5|senDH5;7IN~XAbgj$| zD1vCox+F=-h^orXNov_ z#pSb>V1v999O(V^q0{gJr(J?Z9oU>v8ZR`-9hc z)T5;g%b8-6JinAllt#!55tLWw4S)OhMN~$aqe9|E^0S~vmkYjM-dO&jD7%xP6a4wz z*}OR+I$m+ZXQ(E4ed-L_&}6tOCit)GLp2MpURq`={890P)gF54WN*D+$8V-0=$+>* z4$$xKn<;*uhi9=b37;3N{*pH95i~%Ra=k2fWHyD*OKca1y7uko>msOzlkZcycEoe0 zJsnYX6+ZNSApAdsmkaThuEuu zMSRw}-3w0YR-Q${o1ge{rr`#^d;qF<=#bL0&tFo{%UoCLK0Dm~EyRgl7d#MhvNT=w zR#=p5O#5~~|4TaqXB7#(ouq_c#{B=b)PcgCE@SJvNeg35mOsD@+5bXrVgY`X`AbKG zCp(3RQ%iOPexT%$O4x)b^y;Nyv&r()I%*MdPZK|ZS1I_+aGTuvzA0Ou?M$ASFIoM! z-;G?$aJ0E*o&e}w$;JZV`{LJKYWP7ey2c=&1yU#`@bKK*5905Hn{;+gRiQl;zT(BJ$3S${JXkL)jTIaesxL#pQ&4qeUzsq2hZKs4t?xK`oS z`x(T^;$!3f$G62K>IJR*k5UQ)x~uRTRs7^HY&EFf)r~Cg638zLoHDu#AbdzEhP&R1 zs2tRM%TL~fXQ29)G>Dp+e`J2w+%~$M`SPV!;kdX`@Vx1s`ha@8j2OtGYXzv~I#vjJ z@_KsRWqL`}*=(Udq{PIwHbf(Vp!5X(c4R9m^kpkwe|}d6vUy81Z^Hfsvfk9|W`Ba- zlrrKIX&|XJgU_*Dp;LMkRD%aBfTa5VPUjuWf2>vvut8A#WXEYSzGW4A(ko!z?mB?{ zBF=*KB1*M9+Y46}e1QPI1tM?ehAB7e1%yor%uU++F2H0$C;b&RCrvLQ#^Uh ztz-AO+BmW1H>Mp9W`EG`JwNPd=3spG-go!zJv;sTcYeEnf1LbB&9}h>`Dnf0hX#K$ zeCml$v(e&WKIm1aW@oWAsl90*Q7q6T>2_=1f=Zk1p=-AhHUf9H(lC3x4FLy)$ciCV1lLhmfWD=IT3-7geDWS+?`v}&raSt z&iSd55bHy;^4XI0MCGo99nQZtvB{~0b1qEG;jLM{vKFd`Ewzn5vn|1xtenQr#8-4TF#6A-{o>)_S9l zh|uw(Ai_WuW%u@iMZP_%4>=M%U)$O)2xvimyCj%q=Um7d4gkTf)DR#W`-6M089 zpt#We_z6|WG&9Hv?N)YRTf~T(Sh_oMgsX+H^$D7&~c(UKQ; zy%q>>{c)}=twrR{*8Du}wGIi@7ijvl8oU&O4%^fWZ$A!)NR)>Nv(1?E3~v;{|*)8GL)A5Zc@%g3=?w)f1r;4`$EW7fsn5spwEir?Omh{9Wf&hU+I z>Tlj-xxfXsL`k=E!2lEl+d<@UW90{J6k)YiG;Wnjf|+3YCPdlNSfHFOJu|h z>j#FA@EOIJU+uMeB_PuMpsa2Ew@kPw5oL?Y7U(urUU5SY~fT`oFo7TvYJL1+Gl28}2z| zQPhcJL~XBn=c3^Wp?d!|^fmy=--zWvtBJ~IR|IbNzKBS~`@<4z7GIq*8)j@E-$gX} zW%P2mSWaI{+06R&-3{+f%S80)ZR~M@Otom}uLqX^9?t1L42NtwXH1;B>d5F>N89O; zQ5Q4p{^Wacp{2RhKo{Q5v}lv8kRt8tebKZuQu1EICuOfzn;s>n_L+iRxaactZQ$5? zKT^8$8nuRKpHz1>T{94cd@pDc-5_sg7wTi<152JQ=+zufseM)z@@bKRsb2mZlNQ4e zuf3#;(K~mJ=wO{r7@^$YZ*9M?+4!R2+?q|<#1j7OAWTT7j$Cd1T1f@7@V0-E6;Ikv z<}E%`$W(GStUh6HC^@SXtlY@DvJs+p4r$CqmL-b|TR1s{#$j-)O+JQ&rv8wgB(b&A z9-B*N1yTF3Cf%rf?EpM%@^e)J6R*ssbl5Gnc{^p*g&57uQMGV92in|#k*Jfj6|?T^ zL2^212w{9jlcpQSUVYj9S07okXDO_Z1~t{ac?Nhz_M*g84mI!>p`Kl(ALSjzw>(Wo^$SG}wFSima% zfe&IZv?#P(Q^Z96obIlo;GESS&>4&nI=ke9MPY+lU-utBJ{X|K4dS_+Pbmr|VrBISSV&tfe=Gs}B|>WOZ6u7-k_@RQRCN`eJcf2N^*jj=yf{>xo>*s#?BJbNbb( zdW8ATVZAQvA7`k>D?;FAVxuIAfW<5xR}n%nE3{osbgd&e{nbU82{SHw1c#MdCEUA( zQCYD!UiQ#$-u%!aVL^ekyME;qd^Vl3=8Y)q>gzIpa9~gvtEtKkQ8Gk7<4QK7;08GS z45Yj~Bt70IXM)c<$qnI!%0ew4R5FSF)PNgL<&5h6oobIrpUgZ7cVnJQ?rP)JnAW)W zgSiRSCvejny)|I+Gk|jMqRm++ zysZ6>Z{zqE7|jL2k$nu&@Pc1evQjZw!b6pl6~)-k;yX)=N(jXY49EBU0SWJ`q2$f%h<8vAuF)O)B@-tI$pZ5`cJ}Sx zIQbTf0*7aLIdisH+|8(Y_}D2&U8V^{$1w1+5Q}kYZS)b@i=%&@tkIwE`kkDO^m+1K zOpR|lM$?V(@RE3PD}TuU+zTHV@6)Z`7lPqHChQBFoLDTITkIMu-W7z^Q4Fl8N1+i_B5fOUE3T;C5u>o)0%}dBI3$luU z3_K_oZj-#$UdS+D736sh8*yIa*caBW;qr*E4E;=eRpm56N7vBWVVo7t-ruXzE|c8F zomAc#J*+7C6UH+=E6^}&!&kT-89!B8=HQ|&)zDbg5imf~P+4PZRT^X#?$pvJt2c z>O=Bxi=2w70fuQOk?|w`^3M+sRc<2#uJ>o*dK1SkLkGG2bYWJ5B6@(@HVxP6o2{j+ ze!L;kTjl<4XPQ?;O|u5Fb+XFeA5XaIuwR=y)KH{lU>$P5PhyqRvL8-M1Y3=IU|t~w zVW*RJG#&KTa%Z^A_f2)p$5G)Tpys5Gg72jOOlVLGHkU1-@ee`f=nCmwr;iR<$EE+7Rm4ay4CUs{OD&UEDbT9n#v&Kg6t9;zQ8Yg(D0gv0Y*fPx?41aHx2G2J7Und% ze#tDuEwk)2e~uwv#H%c^*X9Bs4#Br8Dj6w1?hhM8#W=q2Ymv;Q<9!qLqp-I+pChnH z+Em_RmUmUj=V>Z`h8S}mt@$lwT|y_1@mF^X^q@A^Irzy7`N>@cOGrN@ziQg2>5{?fTWDO7kF$94L31)-nJuRWBiE}qX13B{-xd^j!E=KK&e5aRH&5po2aGn_ z0qOb49~R_Qu;G7tv0g=`xPP|$rCMLjqZz~5Wy);F2YeL=iAR7v+TAi~Oo4)GvWG>9 zpW*gAdc~Mwl<`LBt+&*NMc>o)BV68)TUjZ*TfgZ!(NjuU4KDpXM(B$5%uhG~}-wlNl8 zH9FcZyjys4-mpjB8l0>BJb*kYqdLz%-^xdYCOJ%14z5?_dE$8lr{(jwB2xhUfG(5< zR@vxK4qX$OGT;wWlzpG9&#T(-#JjU&c@aT81s6z$P=9md)pCW& zv6h_p(TTl=$#@Ct+!haw>FKM*M$Jygf{#**rWe}x$U+t?w|`7K6y8i^ zM#d!Sy#(LHgmRMxR~mQ)qFlJ`PC$u z^5(DV$wtAE)<3=c ziGUn5AE(``azKspgqa-HNhr?g=IWVN$=N{5;HOj83EA1+{CX! zZ%=$cILOCW8;mGdlb0tjRy;d8i-99&bsmXfA+{m#hSZwCd?{)zs@*DKYgB?-o$Ym% zjx(qU5{1|BGte7f#=vQ4v4(@?SwH*y1jNfSB&ur21mOLxOQ^*0eOZI+5(>B8j+&dg zzL$WHYWZqO3XYuCQ(%@^RNjB*7p5FpOD7kFO|ALJXM?r5&+##~s`1-4r`E~ucZJ*d zetd+ka?qgPe5wM|ik7omyvS6&2u8wG)pQ$PLa!^YJgrO-EKtj3zNCffKkn z;G_XtbW%y_Ri9)ums@ove<$C#I6MQb0vp7YQORyKY8tZ`W2F|dS@up1bj?vw-4+t# zVTpWlxLnWep9BZ}(+C?APT$=d)!+qFSXaq&U#`RcIqKJ2tN~C%g|uk+ISLTZ4e|Ha z|E|%XAd7+&UXs6ml%;k9%h>~&D_xeK%4OlOtP4aSrr80%d8%rac9?H@3J13WXE za5YL07%P{TqLMq>>Wc5L7f8#u$Emq=DpBy*(5~_uLyM!k{`~g}&ASi@cAWOIRB|IW zi#y%ygRPYSE7S?CzI)WN=wvT)R(e@y+9!{EVDyAqGMtKDO4>oen+w-RV9dp;{4V1L zi|jYh=QltO2_1*pzH|T3KtpeUsJc2h-?5XzS}MkdVNcAhh0XW1)haE%vvjzkqoSNq z6x)u=^(H>4*0Co~<`>d3^XLI?Kyb)Dw*;3@3>z@`oPs~-eyqK(;$*?+iT;#M=jCj7TAAMn^ILXQ}Brurah!e0RRZrn42NyY^?|_K1C9>sN3vua+3N zJ2hv0jc*P-V6psrYH8nYdyh7+qMWp}(*C5ddWS<_4xASs0F}S9G0tWbV zae2y0dK6mE>$_G+d|88_w>NEY);Q$8W;AThp-#nKoDXnj2)&TD&|^1vQ8V%9xWOvT z%w&s=g;rqUaP|v!n{lx*4W1d6{vgV+^f4zfap&?LraoV8NXzkI?V8cjh9kw1&0vov>WS7rXRH*h>S!I z_Z9mr15oN%^VW58Kkbw`%bt(i0q|V)i7B%gO_mQ}Q)>Dp+mT1dOHFLFyaK=f1S|ka zX>O}V{QfM;y6xyPlUYa%4Ixr@CtGj0wZ75z*MY>qHJP=4TembEwHq#+$FQf98MtY< z+R!lRGA`gbW7}zTg}`?=4CZQ^hR_fX~qbU@>A(8U&pn7j=a6#JnQ=c^W!H3M=mdXNVV~T@5vn| zp0&_RE}ZFMmL!O-9Q?pwz-^bJoI-nvv&sCTnT(cHOkeOb^C`8=p54N-BQH(tMgxE;g9g2 za)(U@{M2iOJ+y!up=7DFVmPZz(cWI%DU^tc@0%S>@vR(fQj57gVF>=S;mHyMjQ=Fi zZAuLWP*Kc;Gr$#U>j&A;{M6!tbZA+6302Q(8j?aqE;9j92ws?6$-7xRpD^xpG%kFk@3O zFC7-TEPl+^zFKBFKfXxO_Zkp$?$3mf4-~85W9u}&O^>q!IG2yH(ekRe;37F;RM$Ew&~D~*#@OD)RN7AI%0E#>i=F?UK1uhSCMs;fCLAh zTm-NUJ8$Iecod`VXU5zZTo0PLMT{M0$#Xux>(`Gb&4BSaZF@FFi`qoP$$mvc*Xrpb z&5*=o^HnKmV_2NnQAajL8jko&gTW<#9bCaJ!I2U$e>$Ec=nEZvLu4LbAa39!y{d^{%AY7jS=}5#$3$-gj2&$9%R*rh^K9S^Q8W(;a>K>(Zm(>A z8j+?5!V8X+>0{2&M{62-+qJB|s;CRaWuo0oR_>@nADsTnO&BdpI-bBNTzW3^OXjcL47O%#mC0( zYbQ_0UloKB4i3RbxnBbl2!3F~WATgoU(g$JzCq(^48gaTm0EXH4NPG0r1deywGj}3 z0FjVpcER>CYNvuD;n6S-(2qCtREt@sxOKFoGIIwY?GR?KGDY|!^jjc}dv$9->JDbD z0yka16M<^gI9tJt7oU7UgyuOa%|T2G!ta~Q+8+ETpNqS~pD(91N1r_;?<)v(?yvit zN!b3TX|pwfn@dw5X4DFTWWN6+W|Sc?Z&=A+%G!76I|4sfj3+AJ{d;?BVvU9BFR0ey za{}(SFE#i<^qtv`2U#izju`BhuPUbMS?dvy zuLJTsfx;IzA#>M{y*}F|A>{lG4gKqo1r2>@$cctNJmlAhI61$)VfpD_!x>=5|2M9_ zeP15^zerW+_A@1fS_6JN{!jg+8U&aq`9Cke6LjYP1~ie;tFipvxL^JSIWI}_sb%>; zSN{bpCD9Z{*CF6}QNE$0WxfJSuo zNKomvA5ng7UNc832SzZ!3 zZ2^i9ZU9nzMILW%qplES1=dtCo26qCm2BMEp76fc*P8f5wKJ-ykJqF20dh%y99I>) z)=qmGA=cJM&Hz2!nmB8VWix+0I%E3-Qg(hPNtCQkV1Z|$3&pH}2~D6ThXTALbJ^Ulu; zG$AX<*pY#ee-6;qm+#4a2$n=m8WZ4Mqvq~%KHZmeU*aznr@ERanh3j<3TES>XQLm* zVg8p_DtuoIx4%5GC8NTR{wf=^@@i1upRiIf0ZRk1jy-EHZJLK2 zDqISc)DWuw@~q=`UkDN%WkHWAN?n7|F8#-ah^55hupDiEg;a8wIYCpTdk)^SEzRop zJ`&Sw;J3c+NI$h$p<$AAEI;E@D5&~?drK?ZzWJGoEigIWQeVlGP_ijH)}^=D0X%j5 zTAzS`x$Yd37`OJMeSprwd4|}Ha^q8O-snm{RV>R&foJCH$4NNnc^j>BA4my0e;MAB zGu?M40_zqte9WGM^6gX9+*#0&rK_){UIQjR#hNtZx6PyU8h~_b(fi7ZlG;;Qw_NCRNy=Q0+2}LFY?03@+=(3b z#p7l{L)`a$mf$)3-s=44I1Pj6nCJ|LFbXOC_-keEZj1&%Wtv!s*b7W? zYL8i(rn0@$Vf`5G|9Xy>46jc#Nuh1$*5oFcTzp7?_6pkJ&yH zwY3*D^#hr{K4u@mMT`Nt?wa;a$wj+nR5k{DtB<=hgTQXel3WX&d@fetW;|{0GT@-X zDBS>Td*aX*va=6l*Zbf&^)r7C0@aM~=PHa17T2MH>{-Hd=8WHI8O*1A9W zn0Y+)h@1<)^N6=hzzXo;tJJO1d|=NH#_N?<0oL2nnUFtctGl48Z`vY5xDt?j-~bZ% zNo!a7|6_2DHJ?QNj+lcS^&2z&6_gVaun0LQ3P^-9x;GV32`dR=(xyw6f8j-$g!pWj zZ;qtl*&wA7#nstUMRIAu`%^FXX-`j+A#EAJ$qjDDL>3l|UhBJtC0pYQ6mPd*XdR5T#R+)Jb#+9Hz)eoA836-0!QJ8u#j9s<_9V>cD}e&* z!nVFmWaOiCVqnH~w{D8jNNFf9m&UM?=0!GNhvx~71h63A<=fZZ-g29HM5M3Jza^r5 zuN0N9gGvo|c99xX6keL`Xed;VR9_9n7VHKVd~9wD+}QeCz&e)MS%?Lz5Kh0>vZj$ z7YV;DRIhJW?r|B(Z_v@WQ;WO)vnV(+`}PDEHo65{fJT)4=sP5I7|?0NK1&4CL_D_m z&Rp1pE+y3*4amm394&W>t910CMuiPmPveLn0ba{qm_LByB0|W+^H&WPD~pgHDRihR z+2l8^5K!PAE$v&C&F3YJ1`V4nDUdB6bJ%xaZZ7>&f797deyk?~T%I~C;67ZJ8(^eKUSv3mwMkup!;7uHBB9X^I zMty1_qYC(G-bJ0VmrRBwbh85J^f>{{vP ziqP4TU(n47b@F>wtoYt=(0V{PM#+;OE zrqoviWB2z5)k(>F>#g`>Yg0SOZ9BvrK9pyH3tL2IPyWtnSS@hkzFMhilx#%Ku(6yL z>@mK^ptUI#A4^h!r6NcL7#YT&=j1%suQj1K(gYr;@Z1YHG98hd3V5x}Cb}3s4o|($;D&ftp288{UYv^KyP)HBU<4jjb60PvQdQ8JB zLu*}unllq>S!<>^G5&dSeqz>~QlBA$&1?J5ok=mO4d5d#c*_N+k0)vdgC{c5`hZ?K z1s3uC0a!@7zcaPf#dB{&Wpl+QM?29ayb?ewH}=J*--2rHz)~c>lM9*5rtq!+3}%8j zB7wc;2kw7vanr+-gMP(_7b||+IP!uWEuEdmXlrDA26V~S>9zloZn|_zD6dwJ6`|cH zPFQWqMLPsg+$s#??<~k~Fy-Mb=bKVq(N)hkGDnklcURig;6546q)DrT(NleMSSAx%imE8$d+cOEI*TjUQZau{t- z*89HlJ@95tU%;D&HLxeqUGhzY>-pW0_yBD$V1Pj5vaE+zo3;A77ED=#7e%lxZ_;M- zGJt-ms~S%QbvVbmB+OZZ1+8I)kGUe_ooUI1CO}IStd0m9K0#2;^;qJLLD#8eHSJ4m zTRKoRlmqC(*a^TY%pAw&t8865GGi(G}N4yQIduDnv;SV z0-Mt3=tp*#hVej05PJso51f8J);BpmIKfw&hMu{G7LZ(eq0rP;}b3cpUh=jG^ISH z2OwLAvUp2*lv?*Zi!8^mwRWejKC&nST6K|U+mbK_OWC{Jyrr60DRR1vBgge`YYW{$ zZj1#2Ekaq>ZcrNx^t#k?QMew3UC+bXQQ_-laqJ8H?h##mQO!9foF%G4i zhel$pxY!nh$d{t;}}wu4XZ}&k$N9Jp*9m}pTA_D2fC02lKg?~CCZF<1Q^XX8SsTj{oUkUIRz1w9 z;M38&vjKpyEJdM^13_X^~A;08d2j4rVd zNhnHE&E1v302~W#KIqCXXkjv75)TOb)eAvd9F;vsAb9d==N63(cRrMJ-+;^z`A4f!KkHYYYLv{UuN%v+ zy+4=Q*W!H;Mlw&A&5&CJEY=-;qU(I|qvDhfY)F+unQ{}LIJ&E^q7;;*YayhQf3zSk z@#l76mQAgitHRzY!0w!C%OvuF-PXilmGEzL7g<1=cRkU_aZ=?oXTt^i%!PCLA`WLZ z=o%K8F<_c_bD-YVew#YR&KZGHr`g z?emA-GqfNFgnACGwp1b6m|fv6BQk_FQkQ35hIQC{gnS21G;6&luV0J=7-`cGq^XWs z>l>@$gxw#i;uFkuKuY*~m%IKD$6{m2f|6=Ydq7_*;dAa&@Yd$QjL${z+t9$h*YmSL z4gujd(&Do}?D-P>@7WFn{|ts-Ceu^uyEq5{eIHOYa-CF349WTfbr?Xo<4V0-Rro1L z!LVXfO& zuHRDvlw^f0FLDV}=?4Tu=(@0S?Hq!lx>sbu_JFKT0C3NTifQ>u_rr{JQ2^FyBG{jH zVYTf^7JQhwijiVr0kMa>_f*ocYgc@LSHp~<3R)BUY>LR=to%dv-+b+5~ z@B|P829f3TRP#o|aJtJiygyx2*ZMew;jSitQjCevDA@oH9pjoGa~Nl8j%pM!#^$#4 z(Bx9b@Z$sX#ei)b(7zejTOJ-PqRtqF#bx@+*Kx*F1N{#pQ~aG!LiPJDY4%7bfz!af z+O8s);mG6Dba(WrPpy=QctJ8`Z$F1XU|_(#o7E--=K0&Z+fkc z|A5zD)N=dI!Qgo9r%35iR6ZYCPy!B&f7_m{O6*I%j{=h04;Rnp*?=>2|D4VH_iBor zknkE92faT1)XFL^obLTh-U>@S4zoTjZE8 zz?1zW6&c#bc=RBs`pu9H)T0|riG(XXC1*QU;$`sw{*%m91!du$ni&0A<+Ry@y_<(Z z8zcAv3FEk=7D*C8LI!AD^UkN*oLIyim@puh0~3%v=wqfZ-jR}^ANlt7gm0P44#5#} z{BXR$O_5u}>wT4)vI?`rfhu=!|Gd}N?<-_Jnc1|?oFAiZjr)b^_cgtCtuguCVodE0 z>9pso-urIAzjf3A;7T|{!BXUru6~+!4cKPNe+^eN1o&!(%VDE#Po;$~Ac@3%O4hE_ zJUseX1kl_!|N7pHK~wbx%io|4i2)sfB?SOW(sJhQ1#%9*QC05Djq{mB^xrw-ChH$Z zN(kjOlU-ny)bg}~tGz)+ z1G;lHYQR5+XB4&fS>OP;HPH3drLXYM^YK5k9ksy9YDTw^s$krcACOMH&4%#;j(9{0 zkQPsc>iGhO1PFQO(3DiB2tZE2FWQOI2gGmS5N=-2Gz);WfuY;z_M;SQ5m#BOY_Ily zYlVviZq{7TkjrBx{|%%f5c<4%cGg4%n3uzr(J10Jx32Z&h5)`=E389 z!S3b2<8W%P1xI!h?eS7{dVL$FX;Lr1*u6N}I9Qx|8c37fOEqa_Q!P zKjekY?w3x7d0>`)q^uTwiEhNEm1}%C56(;y#a0iVt6safuMo8F4A7iAEiBuk&e8k) z(5SS+jpj(8;}Q<7q{$U$__K8cM}BxRd8ycPPz+`XxK7|C98z*}7kbjDn9Hgn!^2cT z?$(zPtHSW=_I$E7cSgVDxWGJE%WKmBPMT4%pLROE@6%8WKFF*@gjSLSbj{mYd1DTJf&Zz@^9oxYc^8e`-+ zBf?F5%0qN*27oF(MMpvax$oX{GRWT(tOaSHhuP2e)R(=S{6v2?o@qW*5HqUbn~XsN z=Pv6hHQRd%cvgM;H672#Zg5{dk88tu=6n$!_t-qmB0&8NivdQJioK0H-+6j17AOia zezP-Nd;qy|7o8h1+Wj%3=0tA>Xx?N7tS;_~@|>aGdlyNFfZ<>OU`RgOJ)tV8f8OxfZ~< z;*+*|?rm>MJ+oFGSX&g$>mLCwt4sDbL`DYUi~c49(s-XVzMo=-$fsd!pWTp3{vrO8 zCm)fwL#xZ9tWcn>UCw6}<5y2rtXJ>g5Apa9I+DDA&~d-El==vMIK;JK_(Qv1JzMiG)ECiiBPrD`LQc2-1`i6ch#`p$XwABq}9JgcuTvz79_L-=CuMkudaW`o_f&eg5$#F61!GNsd%_sVrq1=H5TmB7Y$O9C+Ou`^@scQyV zloQtj0A58xC^t`<;rrj;-re5NJ=@%Uo*UG=YGG^@L-ozd8Hc5H#cH(fB|ZL#w`Mw~ z=wgph*CTi0zLvOeHsh=G6%rp$ej9drq1Mt%A*re%yprIBp3o8Hg-8e3^S7N9#1MXMZ&#ges0|zKRCeK10QBth zO3cYv6+L#jp($055=F}IUOal2!KXS-2m;sB_TDLy(!?9&0L#%BgaAeFl7tUq65d>+ zsTbKkEb<&zLM7%v$h+a9{s=!ie$Tu1Tlri@>GP#^=RUu>+JF!OFChnQ60PaQvk;;M zI4g|{gDi+%nAv9l?1qA;&oDr;NyHXx_MiDCXgE_lem|LMb>nd#;9Pq@OR7bKiwnid zk{qfxO=r1b48iJrkMMFfn`IrpUPM|dobC@z{0!j*llr)<;;tuVR#nO=sel_UbH3pk z)OM=j4>|eLxzI^l8-Dc?>^j^r?_e09jQ~m6s9NyXbdFT z+rCXWY_!CEW&ozzL=$4A$d8l*oZN>HqpUFlm4N!yobTg5uQ6fyZ(iRN{sfD3ml;0& zh@lc_jh-SP&CSm#C?E;{R2o%=eNOJKifcJ3NahNF}D zrhQSka6%jKD=krX%mRK&8R2H}rqX+X$h_rR-RC80Q@;ctqzv>+c0%yf^$|lQM~C+@ zA?ct^-Wh@UGVm9B!HJ4@ECKY!Ye`Q}?!SaeDAt*PRXxygP+xfmsVhD+T_e*ch-Hkd1)PV ztaPU);Fi`c{%YNOqlqRxij4m;_J^jwSlJC2W^mOuW^Eu;Rq@So-RezN~L6#u+4|5ys?3jF`{D!3_+&=8I%lx8T@YW>TRGm`pAhs$sB%tMCQ9{i*h3A z5#nd{y;{--+~&WyEky|VNl0=}R)>tXi1glo9OtA9@xx)@C=p%5g;Pz)aWWCy7Wq3vmY=0gIT`1z{hX@pgxW<6b7w|Ij0#veLY1!A>l z|3koz@G3JnF9c>0agOx@(dG2u4sRFAMJ(ADL(VchJ@HAG8eTRR+>yk;1rk$LvAs|32(7 zr%>DWM-gA6#ns)-^zxv$+aH|t$_&Ga`qvooZ|Pwgh%^1KEwdV}bH2ObSjTPJCK^7F z?SNbhhAF3z2pGWM3L#VtNshEtlk7c~#r*r#uVE~M1A$i&z)Vp!4kqHJ_Bd0ul({cJ ziG^R7OLk9qRUUS$vpVFA0ngt8UG(6pykam;3}fMAo2Eg?1HW{=ulku8#;dK_c9o%i~@_ z2Fp-}0x`9M?uEH-%J4&9;OOyb#HRnc_gu%|mQ=lbNc+l5b)Q0vWw6`w^|~`>?~njv zwW0*5<3`9>A86Kh8eO}d63r5pxy|+}a;7?@da=k|ICUl{1$?Ui>qmPmK11u@B420> zJph&~+1JHP74?N>&77sNE}iV659#W#_?i zJh5q|Ed$-KuT6k1L!y0t1i+iotz|AVQ~$a3o+XM`2O;u5GY3ek^CZH6s~!7MZ)6FI+zTdCme&eSm1V_1t zlqyax$;n?lt(G4PXH`Rf8AaM*VPH*FX4>#-GPB8Gz=_SAp%Cu0J-9z?M!_Z4xMl* zbIHHRSUW=t^slq81eB~fd~kCv0ynpG%$E#VRH+>~zGz*NzP3C2HCwXDDd|bRdKXI0 z2ZZy;h74j_>NCe++oLinBS5X<&$1vbK7sVm=LFvaxfU6o8M2OeheqtmdDk=aYN6x0#Xt`9qn0OqoL=yy;?X+b{|MyZykllzltK2}df{A%t z!8>I0tlGY-l-P@GB((MS{wWi8?j)Lir@boE`GG`?~n%fV9CvuV8aC{}G0CQ|@ zj_3)4I}xoJr{X|wyl&^w*@qgcjE~=Ulk;eJi1#+Bjv#iqIIaB9(~Bz`TB;YDpQco2 zBpertblUajTx%d4g z!Nm(wepJDFNt(KyC_^VvyJO8i!ig{+t6Rc}_K5pR#GT3j(|)s4Fd0M+dZ(E%P3Z;}r+OtD2wWibqLI9}Jn4GMwgW0FA(7 z(0lM5FP;vTMNTvuh)vdKae?7}Ji+4!t}kv71KHnVD$~nQ%9+un6Wy|e>Af}8a9j%u zi>eAHRC+7xtpyI7A|?mgG6pp}eQ&>AUl*{anO)u9XMX<3G{%M0EAh3Q2xPCu6hS>>k&bp|9rD z07%XF!;q>(M%h}C5%kOc-Ql?Vo3_?xy*Y9qt?nK>tr<&K)&M&SdS(Ek2d*g&{welV5)_ zu&;@;)isT1ePhduu%?|Bd?tS)yngl3^Gx$~66mKKNbN?GB{R3gQ=qdfmSR6KHT6I9 z2v#4zb>Qt$G}xOqL?^9UK0hncQ!Ta+pSPd$mF9)G>rWS#g8cWTs0G12WiGeD#ax$< zkOGZVwQclr?G$X^07&Lihq1SJ+GP*n=Q*olre5Q_%aHhkMB29-H=8GU?g9foIA#}w zFOl)?__PCN;7Cq`YW8UVA2woxH$=7F+Ob%2kkjur|Aq-8hO*0^cCaJ{i1do z7eAdDe?a2}-LhC|lsnlURoW_Rh+FOkL&`Z5s{cmRL6d;3nQ_INSy55+3bb7Ct`WU? z@NefOR(Vj z7KF8O{!Pio-`-nPi#||^&Ltj)gJ+$RsNJ)D28B>L5c6h}yj@kE)$)7~^4a2j`J%*y zsl*Iyt{%o>ZASBgdF{v6Idc&yqez#Eg%HUB2;YPZT(UTJ-=4_Emb?KaVUng`C_X7`-IH=PlhHlVk=Zn>0E7xe- zWV)tZUfwfRYlw)6_@L3;rp(=+f$aUgzxF==98R`eGscTAwPNW-vY`k^RBy3R5z<$Iix&Xq8~nTAe(c~Gb}_w^`eYAo(}qz7|he&7tPBTSn= z!RDEb7^&!$u?T$L(Xit^72*psOD_G?XvCOvV+nKiex)dlTD%Ny7M2{kc(ze@&_J~t z_jW)~YnFpI1tCQ#p*NFfx58jy$rd^t->t_q(Nk6vM}ed;$u(^bmM)&kp68dT?&n5T zx#fSGP3wp*m!==}%QL)FxoZ;{OWx)?8f4^vuKV z!qLfBZBwjeRP>H>XMf(&b=|PMkE&}NlC5)l=N1~GL1IL~IK;uZ8@uIXZkxDC^}fSWW78uyUg?h*s9MP;mJ&x!p%@oGtuZa$sftbZ z4y>MvTvfF&WLU(UlKBOq=D9>4q2g~d7#QFpv&8(kpo~+9N|+;CX3VeuT6tAinOvf^TQCtl^nR85JuIz1So?F3*o? z)Sv$BmuGVzh4h~Mmoq5Nsl!kflt!{@sAWltMb!qQNbI4C&6W__vu{|It5Q)3Y)w`6 zaUN5@vv&Bw(Igv0n#QK;TA)?M2UH5r$fUQN9M(uqu`MT5M@1TuxeZ(cC2QDX)RjZb5>BUmHC1K|CS}HK=vyT89<}#n*3~q%LnMbp6|SE9#s(tze663m~RwLxaQx^U@Ho~+d5lJj`Xpe}AAPqJ~F*)sxD zSKHeoRd9gvv%R;{N71HtWk?$D!o3d8PhHty1e+%}_9)NS9;v|zPCs|E7{dM#f^wsT zj6I@`+dT?#5vP*ufezPNJ%^~C+Y-0^<}G9Lb>fp1?>eNtV)Y21_w=Ew%9yMU^BB>aEx0@2cH#vPwzDI3gior>V_Mirb7wPi%AqS+N zT1i;@NRVO|$JWQ)ITH6EGf>BEVTSG8yp{kK<(wH-eR=yglU~fP3=)4PyO`a zp~!FoTE54jWOGyzB9#mF6S&eRF?s#wLlUWM`}PInHJ_TgeVa=I-`D4o-?pGu3PYc5 zO7&IrXvKch7oZ8LGU@iHRX>T%GoJh&1*~N?l><(5$L#I=TBzv?8s1v-9>nmOMGUNF z*EyXl0qg1nbH1xUMe>-bpDV60g`qp8y6{*K>8glTd_j@6=d&s@NVbT;k8Xnpicd`y z#;3ntX{==|cJ<)!p(p=#?r|M^?O1;8TY(UZ4#D`Uu=`KuWg$V>Hf4LO;^rz8Bu3Q~ z_STW(HIVn=)oN}H23ay=K8dB$s?BY|>-}#jiMma#+9A0_=OW2vXO;eL2Oq+YtqL7x zJ8)$F^*bZQkV^ehEGs4N>G};#Whugn3vC4hz@I!v@-@8LWy_wF=WG>aiaJYoO5EmHUch4c`@l39HssWzm8AsS;5T{koMx;)H{`_JG+N*(pTe zkH%FUdb-Ifo6$c83Dld+qxM>As*NuBl4CYysFesW#x@IYPFH12a*oU{d!y|4@E5}NJe_JpK8!YyEZBT3V0++?7{u_N2Mfk?8#ZKPt%Z1 zV^?%iT?|Xhm^P6ydOlHH3Ux})+@C{Pj}K?c)uU2C=3bs`^+DjwuX^i2CsYP-Iy7~G({y>>b@yqk%pgN1!?D3E)=vwd^Go%~{} zs%>J!#C13y8Q$84(4=H(q@DcxO!@_+vXV+*?OYCR00lv7=mAk8WJ*&@@%`S+kH~n7 z)9+XA`x=<;nkK~Fu2=}DN<<2PxWTsrYT&&*-WMh1!~TZ=HyRq;dF3RKR{*w+vvBoFr^LLvH92N7D;_>@3L8!22WV(7da zdo^UT1KBRzN_4qP710|_CRN-CovF%gl!v`KAj8v6zLDT|y5Tp0AW$BmY^hK4z6|fp zDsh^5ePfD8#=$Q={Z^#d<|-P1A+9FGr=W<8{ldjpn5Y zMKU60qvv_(cM_|AQnloAf2LRHwHR*Y9(4c?5?xContxBXuOm9|fet48ZU*T`-6cA( z@`oL{CUnjG^w!Bx9tCZh7Wd^>zib~SyAzCX#Rj6Aj`^$8H)h=g0glWDoTNKrlW}u_2moP|KKiUrxq9oEP-6d0?8W-@Yjc{^|i(ks5 z76^M3_Ety*2M+1c-!=iMP^J7+{ME$FC1MJv~&eG68wk1U{{U zR~cAnJW`Pp4&f=LVQ_Q6EuzGUm%Pt(JpI5$;VuMq;2+q>h7Jf%i>dEmxfN| zUbkCYC+Oclay>0Ui7~0vJ7*KmLv&#oZg(2`3)vw@wdc;-kWpqphLj5%jVMc+&B1!rSrWV5D)~HexUN;`9GEb)TPmJeeLzRhf8mqtR1SoP znc1dME*7)PtgEs-&j-!~SSu7bk&`7RUXF6wKgfpSU1N zMZmIO%Zrg${GIF+$W>hY>=|@xGnr$vBkAB14RU^HwSK8 zcam0_m12{cpwwS-(CK6IH`yr|v--A0(>0#R+lxqzisryN7%H!6&AynzbQlKadboq3 zUCz5pf~}YaL6LrSzaQ_Y3HYy>%8g{y{F|d@zdZ*8h{-Qe5ks!U(ch7rWBdTho`D*YhXlO~ghuXdU*jROwRLJ9 zIa;w;g$bgYU5d?qU(iNvyxusL&P#6!^P~2isLHzp;h$Ibt!}kbX zk`e|r=FUP2z<_XUjo9;;ya1v6GqN$N&Ja(nZJkgPEgCRf7L^hjai8{j1WUbN2c9$7 z3qAVks(kf3X2lnG4D~?;+plW)NqsbnuW;Ab%^s!bo+RgAwQT^T8Ofv{0lmH$-1M|1 z+qwo`LXK|lAJz;7Fk%(#N(9FNY$!Xl18|FK(P{(YaRy21b1ZkpvOHfvUHTN>+F7Xh zyOW74fKQx?y=}5nBCa3Pl{saS%ZCF;Zfua2&(K%gjV=Of76YpI^Vox!Leu(yna)+A zD#iB4{^L|rT*&)C3cO>?9Ztyw5Z{Fa?YL<={$?wOe;NPj&&Lyf?*auYCu&x-xc=6`?HQAyknVp=*ETtpbm=m# zIC{{zdjLaMtR1^L00=9SKH2Ky_(`xU*1{=M4V>Qd+DIR(2YZG)%#!~cJ~cv;IC$Hg zIS47|(}|hr($_cLW}q1C;(k>{$g8^;L~CWKzMSZ#_k(l?_p8PrRnq(!&I@n*{#r_wgx8PJ6Sguenx{;iA6AX3l z&5#>|Z0w$D@v!74TD>8dC8w-G!^Be_GAeRzTB~@xkjQz-{hqn{yG`DgHi+|w&ny+~ z(%`mqjp$3nP|0=}U4(|bnCE8DxquAEf!tzfVoLoeoT24CuI95h)C|8#csAn2Gq@Pj zr>JJfl42B(H*&~Sy%>8!yyy0@kC2u|w51ybmX3!2&2%q(^!MX3voYB(Z^&bk{cOYm z?= z;~~(urPlFFVD#m)Sp`D1@s8pt2oQ1_isfgf`vIiR%<~JBq^wKdw7V=yA{vm^S|yrS zLm*|motvO)j5&O&$%K>_fb@01MRCK4@*hpt}M2qh%lJBQJp9Xw~=o+75Gy`?DR7!oY)6muE?H$Vkp8Y1@^WI0~ zb)$5znR7`~KxENFgvD&}+OD1W`d5vNkK*e;K0X5w@(i2Sr5RrC+u1Q4bYiyKpWhOPl8~nEirq)?P^RzGTLEUvTNF!b#>~NlixNV zbRT+;wHUI(h4Z!2WH|O>nP!ZJvGnc#Ry{l3NEtV%pS#8?xpi77H+E75gjN|6nS6#o zWBDCuX<@=W?hJ(n16SO(*}02$=`4#A3YuyKdtxot9!7Bd(g|-Y;BIMu-c}WtSni2^ zJ8fX)25)as8PRA2-Af)9)JjrY2KDB#Tcd0VL%{GjUfQU~VgW4W zL$QH3zxw@XSy~GOV2N+PqZnVj?dNSlkN3{HN3iCeI6KXh|C>#4WhC%QiSte!vpJPR2*s|qX|#|)Br2Q2!FOGsziWIumrtc8|p1X6q6um47u zp<)l*r7o9!hzzBd5+^4(WE0AICs=`mt!6%86+5pq%3XhLQcG!Q76b{Iar_v8bxZYbLEik@I3S{_fdr#MUoY^Y-IUQ{!wp1`i8x-Amj;-jMiA37H5||x^q%f+6Is1}N zxs;y&wG09dyd>_>fwfjjM+M0v2K7y^c3vNd=r9BG?UI;Sh$?DmEdi}xaQB3Q-Gwe- z9hS)FqRE2}-s-14WX{I#3kKj_inC^f*eBg6;RQDBAbq*a0)aF@DCUW&uZ5K(A)WOX zStY}Ji(PbBVNqrXU+}Dp96H*oQ!!P0Qz%?=g=jsrwbSodaWhrU|3;~i%fZ_2xmcf^ z=nU|e4c|e`i3ZbitkyD3-?9fliLJ?a4O7sP2^KN&>$Ts#>yE2`z8Qg8TApk2+wVJ5 z@oz;|#=yy`9SK;)s?hP{Wf_dD35PmHVsZz`^E9jE-s&&S5X5m(6_g~2*&(m5DOjva zUq1Xv4|{gE25O$$fZfE<+T&mg?L~+%I?2onP&235 zySpsAfOdN}12J}&5$aXYa-!B;!Iv{*8`7(0+~6!IGB}|Z|LZ<~F^7A9)(3TW>*~&dvFC(VX~teEvH#wq>hd#( zk}cqD!I-3z^8Wj#_r3wj#}Vm+<0ume^W<Q(V-A;mUzO(b*jf zdBtr~4*UwTAt=<;`%0vgN!Boz{}sNw_@NmwS;sB&KJA=DG|X|B|BoUf@~a6P^0wZF zcs=KG-)8!_!CxASe?*D@NHM>ksDG5I|EtdxF6>(Uw?EA-%iaI>!JUKIsP%vQM049e rm#kj>&$>tt#XpAuS%y0Y$7!SM1AMc#XN@2p>es`zhl&om|M7nS(iwk> 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 47/92] 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 48/92] 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 49/92] 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 50/92] 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 51/92] 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 52/92] 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 53/92] 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 54/92] 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 55/92] 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 56/92] 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 57/92] =?UTF-8?q?HaMediaSessionServiceTest:=20Remove=20red?= =?UTF-8?q?undant=20unmockkAll()=20=E2=80=94=20instance=20mocks=20don't=20?= =?UTF-8?q?need=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 58/92] 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 59/92] 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 60/92] 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 61/92] 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 62/92] 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 63/92] 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 64/92] 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 65/92] 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 66/92] 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 67/92] 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 68/92] 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 69/92] 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 70/92] 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 71/92] 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 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 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 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 NXsGF^7F@p<{6COJ`EdXM literal 30980 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�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 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 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 zcmeFZXH?VewmpgsL(kLO1k%wR(mP5IK65Z4!;+3JkWSUOxPb7cb5$ zzc~5qz*Nw0{OA!H;dfjyJqjYBx0lz=<>f5fS?XC)P9-+I+)P3dPG7dAxPHYM+alC$@ z!Rq5Pa@yXu{p#@IQl96kK#>boa5MjMs1ubg;xU@XF$j)%;CU~>zPnMmDXgj;?v zDG>}*qRv)0bSB@xZOxRV-(P}ICe{4YxISuki%Qe^<0a?yg9t|9|M=v6zHz3z7F*DBNN=Zc3Eg|f)EUp zdRI@$FR&ANA!6P9=A4bu(T$AELv-h%-)^=DW0E8DSQZ*qbUB$AD=&0Q4^ISc>|Wiu zdX)Z+H06L-hUMY$8I`nHpY;F->cJ-O8wY%;b2aL(FPGoRv0`F$E@@mJolbt-9r~)c zIQTd_^YAa-5UA2lkJ=$R?cAJ0+)sWy4h;)=KK&!)!*3^iQ-J}q*8-x>DYBDrF39TU zMq)Iy=g^`u_Gm_8G(0Mc#gEuDRH3uXLwoQAfk0m0#gE!g^GnzI%+=#8yd776xOb_7 zPu^PH*%(ph4cK0?irgq~7jK6Ncn7l?zZgbMan~Pz;+IRNY;9ooQf@r)Yd=TV&2r%o zH%N-N(;#2(&{*Yz7Ma9O_|Z2d0(14Uv|l%;Kww%v<=Rntj}nc|+xsCrnXfSj(b($7 z%#jpGd<(esBfe`+2Y)9anqKyq+NT&^SZ=r6m8hf6*Q3E>;MAa-KSOyl+pl2d&0Na9 z>XS<9=j(9KjvROKFrht-lYRyrU9;u4o1wno;NU8{6y=Uu2JBSrTz~T?G{mOkVhjx% z(l9BVsp(g@uBQ9wvTw<5)etMNq%k*?4K|C|53G}c-7%=s2B_cvkstsqj#!e3GYc2S%i9UjHx zKM&k;Q@tj~o%7&Wd%fROBX;_gM{y`E7SYi7!>g}PI@LwPR~=iRQ4Q)O_Ql=;Ml0&h z@Nx0?AJp=0BdA1Wm-!#H5VO24r9I!$fv?>bTv$T?h*QFle8~J>=Fd79{Bur0#!o;$7bYc5k<5MDh1%5IKa? z^@Xnd(wC1->qO@gaz-eRrVICcnDp?SxrHdGqQ=fnFuTQz;yOw`Iod$?CA0kEhg+Z3 z9gF#AqgrCsM~>HS4Evy0I^__LI{Y{4M^pvVe3wTzcu?c-GB!-uqCA+?5<&%cWS^vX z<{vlo7v;?p@4k`z=o2H3&E) z__bYEDmS+`IU{I{K;hjQ|4b`a-{N52AeIJG={B!~;f5vC-ZM?zWz%Pkcyo6R)J1P| z!e2n}mp2>HGMDea?^YAdcCW$eA+zHkE50VSX1U^Bt*)d>7~YOrtO-gcR)pAKf%0H7 zYWbdU-F~s&DX3suVP}@_w+4Wo>Y8f-lKRr7r1 ztt0Wrs;m=@Jz!i>Yr{SZOvkjTK9I}U?PXl;RI2&FJ(43PMS^tVctK(LtDOYn+zbA# z{BaMLW0*8ekPkzU7LhKtn2?yd6f zm;uQNpL2}69j|pop(-VOI+WMH6z7(ALU-N(UJ0o(WsjW}2?#FVESuX(zeAe-VYg|R z&2yK>!ZABW|FPspc4bxpPo+dUF#?j?;K)v<@9Jxcqq9qyHv5`o;fzFOM|lU2GeJ=& zZkm_{l@nicCM!6XKuIWJ!#Gq|!5j%$%krkcLWd4f_Vr9&60+CGq(hRgK1*;a_P$%I zc81=W(|c9@78Ob{_^iwsN_=F`2TR|juh+2#XR3$2XKsD&bgEExR6f+3FZljJb$LA~vS9>~G{047dI}zLdMff;}@9}FI{Z{vv7x^rviV3>V z<>HD?*@O|Hl$cJo7+C<4WZq9vRGEW3xgrFCe@pgm#`BT zY#VDT;5}1RGYhrvfvb4Dv*UzU>WLJ$rQ|nlFSnE9u-mpyR8SfQ)U>8Wx@t^wf+>__ zm(5{MYhSE5<&!*Yvg9sAsT#&RK7BET zbU7`*?~oG<-`Mt6Kek#=lN$hnytyYNxHKn!_Ka+f$d;-pEyeCGWp_;0EWc0gRJV6S z+N&W{Nf^d?NO4Z4wPUSEt;< z_gOh+r{6o1(%6@M_iVzxkDQj&gU7XMa8(Ruw1(tb|1l7SYoayY zk8TD=UgM#6(RZAwMUOZ;Z%lDfS#P;8$SmZUW!DsMwuzP`Z<=#S#;<{HHL0kO7qSK+ zxkPPlJnYsNFw(|LoyEw@JNDPkR1yeHZK9qenZlZ3?;yYN6b#3F>z*rB`p$AhX zf~gbUv^km3b?3{iX#@L&d#gDUjPHj-HznarVEQZp@0z zH&N%mS64H=>#R`7|D^W`Exq15)gQCcCz7k0d`wn{ zn9c9z{pyJfuRcXE2vg@q8cv>FD+;@a6saqY&{*Y*8B%NS&yB32-nIFz_*X&cQZuLh zF9AondYw2Zx5&`!?rD!%${W7v_iH-`6c`=HX5`pyU2Nk{_$)L&Ssjmp=J4FVd&wM{ zJ|UGKJ^Y!L+_ATPP7lc%&VCCj2p)1#a6W?bbQ$-kOzyP|_fl>FKddsee(?9P)?0K^ zz8-J(b`}B*NX{=$E1YwwF*0K^XLgJ%{`h|4r$&7z3^OFve?MwaEo^6|1gjWzMwUnJ zK;j8FvxftnUAtJ#cNg?iJElOscGIs$J8mBiFg*MrbdRV%|Lgzf40kqsohB?-i^&HsGZyp>pB0T5ay>SNBaTqpr;do|dEz zYIQxR)vseCN~QCk9rO1KP)Ye>9ro#@NZ}mmhPTMvK2k7P9gkLM#-#ZZ)i{q9k>$fR z!X8O|i+tQW%CQc6+kkNuub-9Rglk3}kLpMdNfJs+S9`LC#F=I7#RAOK zxUbd2wqZDVfXAAzu|V69>v!aK`T(0rdR5S1%OG<(I~e{#wDLxG26IkW$-=uB+$lrP z^J>sE=KAUjvkRgQdG+Pa!j!jU#-4Fc&ClgEDaxdiFigUZ;=>r*bg84Za*L{K+3KkX zvz%a#i5qO$?uEMbw-YNDl-mz1{YYzBD=*-249qX&I>}T_lrX^(a_XjM2L%`b7PZ(& zGm#}#w`mBbJVa-mX5tZb&}fyQ;bf8B1p8D+bPpa0JG=7DGNWM`?Uh~8BbLUO#nU~Y zCSlQQn-0A(5#8e%%Iz5+CNZkl@;uXWRq5~C_5LGwWLoaz3IEEShhJSA$lbTUbEo}m z801cj48I$s3T4k56%utRct4fuBY`a$;Z|c3rgr?wT=02r?7`ELC1@J8RC!yw_nAK+ z(s}Tz@eukaE0TG4l^tL5*Oyo`#l?%TkQ{nh3sjdy>aC#-Ur%4DO-YRu8+*sA90ppe z()J_HA}JKN6%}InmzbYTO;KH=tgdH$c{7CukG_A7a!XOb&u6|CZ<|F^p6E-Gt!m)z z={7WA^R?IhLVmnbfWMuR_j0Y6=Xupz2!F$O8!5LHtYLhWOgLoXM2x~`%32F=fP6(q z!0rk!C;Y>uE@?4>au_AK&MEFr)H=-J#`#q0%6khyApAsz%UXCq4=hJ~C+l=TdUd86 z+%gIv8bT43>vek#_)Q=@=zJyI^grik(9L7Q)q}Wf6ZgExERLD*Kjh?_`P{<+&W9p< zbLNZQk1s^1bF;qk$L)1rIW~2znryW9(*B%?PFr<@4bwEiE63R(&68`UzuO10u;q~e z;BCrAos4vZ8*lvK#$>uP3b!z}?z3U8L8+aDQ#g?q$e>W-;}&iMtV!R^idhN4Eo04L zQfmf4(Jj#%hr?nQ^E8=|)J9f?%@mAA@Ts;l^WIv*Upk~ml5h0USdY<-_q<^kWv|~{xG6`B}R(*)8-0;q@w5Br0D0KlF;AAc~X!sCRKAFj%8nvME zrN|DfhxO3t2b=v_s#rp~&51cl$IVm)Kw3q90K5p%1g$pVM+A`#UdH;tb}CtYBv-?= zq$U(xQgcrD`I1f{0y1%WxMr@R{G)7{mfN(PzG_|P3cgbNxYR3mN;&MJ4)ICGM4;Dv z*O<4XY16}oe62T>R-}(Od~)dDuZw6Gu}dOGCy<|T5B_3200A%nWb1Ucy&JEY@I}NZ zHoSP|Q@r}_v56Souc9g0uA6)rYk@FYc67QFsV*YBnxaL9@o@^2_`9pG{gtso$^8SF zCOd+uwz-nRq}j5N{rhqS-uA|3hr_#zI72{M9P70ko}v7x6W@5Mfg>?m;htPxefYvv z-&|%qnA>w810Qw%n%LNbfU%c?sinAM6UcB&ub)Ra#cCdj{(7vP|8`E%!hdtZFxh&x z=CD_M5w362>^DeA%l7AsZppw zE!Mp;TBTGnldY&F5w7TdotctV@#IgV`4KQYEpOBO#!$YIKY9xAZ_Td;JD&5kQ#rdj zTB?(^fUO%W`2%5)By>ryO8hjf@mx}>zQC7~t-E>pcpk%-CbpWnY7$XMcs;Db0IJZd zc5X4>Mj3Zyi*YCO5s%I5;kC3U=ZIM@&TfUn(;P$$cMA<(z}@^PS&wq^zr=!TeTbGKH0t>X*wo~ExF1gDinWFu_q=Idtk z11u4ZYx)5tzZy4&IpwE082tLLLP5)UzO(x#_2OlajyF5ZIymWoL_<$hyXJ(#gb>f> zg&w|aB)5+22aZuq*Mh6FBzp~TsUAC#zyx1{S&P_(WzK14Hl^2Dm;CAQ}H2B>je>v(AXc(PMWmjjJLgmq1WFRi_(%a_a zm2NyrPe+{O-yrne43$iwi`9V)@~v^ILVtx;UdVU2)Ulkp-p6T)s+9MTNS$xI$b+&- zjCRZr_?fIs5es#GmlC=CbM?)v3qYfZ$qD7HCj{vH%CN==1JK>sG%W zcy|+^zX@X<&iA|wJ%54DtfOz%e~poQRHKf5EI!osRB?qmk^AwNzw)rWo&(l-Sd*VO zx|e{ArrLksy~FA%Dh1j1@(j!a_kDpaxNbuu6(SHghZt~XJ?^M7J}uHQn`ExqeiK21 zZ(g=6Q>by2qkc|s;&b<7j&WZAD569kvY@WiS!9Nqy;gKbQw>Eq@_3_a_{>c9Ys@}< z8QbMll_fEnC9%8skZFSbmbu$S)u4~w*JU(BZ}HU(fkU7lfG`Iv#v=u*j2dsb2+MI# zSr$H{&+>&PzZv@Kq)*_i+$4sRZ@9Ze3#THrk8Y_dWmul>v~j`J@2-feBt^q@!h7Xl zGeGDp`k#+ATre=I@^&Q$vHfy|_T;3o7hub?0*CT1yZp$xus~A1z?RZ-ZMt5h6$`3; za2~cM4>aFT{=CWvuHK9Z`+Tkvbz8xI)Q_m{1F8R|QVaoxm$X%%`iptuT6ad>?M>Zw zE#h23NL>n1-g6l;p88_&mcWob3RDaYfHnQbR6qK!IPY$6=3$+YXT%EbeYw=76(u3o z!mG^A@4#Jw#ewJ*r|eiU0I(R4GKk~NMRnU zmsJ7t$B9oAGLDRo^eVnmSowZE4?7qdFxin5w?#d|e*f*3k9l43aT}Trz_W>4zB45| zVQ@K%=fy;kXJpNZO4#n8xMk8fti|yEbb9~E`lDtH1g`{h7!4PAyYfsZUKNg~)9t>! z2u@T=?MLY!k3RoUzES(o$ov+Q;(mn?sArL?tH)<4GnP%nn&+(Rt&hXcAt|#$VhDcKKyQ2n1SNb=hlG6?9G_EknIbZ1n;0G+)~5+=7=BG*?NuPW>m zXBYgkVwfXxkl%t+8=<&G?m>KyzxG+}+)+oBFAaF@b}oT2=koI!2!6gj3&~dQmH$&+ zzRYBtCttk0-pS!yc^hNNaueP0?s|f9++>zoUGoTfAR?5C~JD0TxKDB63+jS8t**f6A^s4)RP4l<1F#A2E|M48Iiw z&Jvt}_&Ao1cRsZ$S;3}{Lvay+VjfFW$30;nb<@J$E?%FtZq1NUKvSBpw@`uJPI3^B zNud$ysOUbVwlag)K035ccs?`x&Xa-LWS^RN-C!TUZxS|8Db-ww`#sLo+{WOZdiAJ4{!5Z*NEeJfk_>R|To zVO(TqtA~L_O{Cv4f9$=BTcCzuc5@gi$FN23f4#~^8gQo~ty3W@CPES0XIHfU74{^e zZTedC{pAH9=NeEJ`f_LDFRq()U)d7wzQXZ$?YOLxtufd)ey@?ns>~lo(!}e^Y4*f7c-=KLfK%<9$b$;9LRgmvHET1?qpg2 z`=Y1Jjy4AeJnNvc(|nw^=l{gmmU*u1E8_8B>j6LPG#IH}!@iw-HMlF71VAyjd>22{TljLVUStst7jBAq#oya!Ky*mn4{Jh3@?}#621S1~k zPJQfHZpeG zhSN@ls1iyoDw_Hsi~RL)X)1lSG*)qZ__kZCaBu^QABjG->1lWH+gF`q@v|Grt34Jb zVAge^Q+B4XM{!o-p^@+ie}FpFaB?Yk_RGJ3MRVC9d7$8Ot(0niq6q^ETrodd1d?1H zpilJn-fRJrMTwE>x`igHOQrHUM~zhX1-Ld{Nj1?aZ{$5_r10pcZy{fV@Ges+Pjunv ziBl8cvOsryVrqosmm4I73CcR3ZUk3qJplCP!ohsRuK+^^_N`OD3ts!Rbx_b{!mmVJL`uBf-YTh3-X-&FLuOX!}wPLo9&kRk5_Zr zJ_R3#S2q8_)j%xJr{41%v_*p{T%Ve=D!|iU4zb9;C5FbH<6J-NnySL0Ah{-|3ib2; z7viv%Qy&}n_m23PMJbu69#g|!SWGWFo1}8=^YD3{@;_%=_CWGR5nl=-bwAp(lSv3& zIO~-|@RhGN5ejzF9gF{2sDq;qT`So^!Ak08A0~e)C~0y+_x=g9h4OxZHj;J5UpQx} zMVyeM$H4I#KG9=mLms zP(c6ZldS<@oJj46H61f+8F0RZC1Y-49b_WPR2R0o3QmMc{R2F&Iwq0J{h4a*v;P~K zYfPZ4Zil)6g%6@>OSwnHjCIPdXmg5r@2vG-57s3}N31+I1p3P=(4pt-b zTna^D60~x?1ZJc5>(`&m-{&lf7K!}IZYjUU3G|ONc;x|~UD*FEJu;7+F7AO5J2THMxs?;k+=PMYWanf|vv#)<#QTyRN@qYZ7Nn^S2uI1v;W z083!A>7%lx4QG=+neiw?r9!(2w{4-C6Dj6@mDmu$jK+W(f6XQ&O#cqHfZpDXn(5pN zQecZ^DFyVBnTI}?vc1v;g=5K?ug@@l^8vw+0SH^utpCq>kJYH9A4?1s1Y9wD2o%^v zVoNh8;=W_K?rJ?4HR(E0tHIG{ojA5t?83G()z#&pM&cl!lsiyJEfdKuDz{)R`& zUx2^R%T5rxG`q2^tGM~FUPHV@9uXn^Zw&J93vmC6SXAov&Rc!~q;G4e=xGmscwSOx zDm?O}h2tD@FH9t5E-AcKR=dC}W)n;j_1muzLz_z8|2kH$Ve@zVV|W|!H;ik1Bj0+T zkMKilr?G48ZZHZaTS>Q0=(Y5KGao=^4_-NIzFN4~@Q<*+vabsP$hzvk9r==dkt>0& zkEsDnVX|Fa6pTy_QKxZ)`0BuWz|wIHu?~)fn89MQC(#jNmI1_I_rE|9zLazv zp+&!oCf@V-tpcWG;&=TgxH7FSNi`95l$;9tB);b+WK7_Ibfp{0hRq}N}G7Rxx?CAUUc_bgUJe+ZNF zCN7E;J^_=p?+~D)`mT=b?e?od^~UbDup`izH#8c|DVCeb8exM!rRx1kWRtojZeTj4 z3RO&X@4S&PCc?Seha?zSwf5%@FK+*PdmHKts61zxLslj0FT9K44d0^Fk0l*j*7(u>m5mKnur;=Kn24z;M&*Q>Su^X=bp(o+VaM z@8jDOV754uzE~F3a;$!~T+3QTY#p3*wSwY0Cp+__}$rxF8V{2-fbG~8hc<+ z+xf-hK(t_1=4+&%b|$8F?q=n&04aK2pV=}paCPxYP7ZsGg?()4hog0^F)5xLiA~j| zeTrQGFnuK0)%oY&R*5|)j6SBcz}N!xI@iUJm{bXq#A%(!3Pzs5TxE~HnUQ;ednJGN z!9K^$LUKpp55&@BgxFBQX_^`qJ|fPPQ%ZCyV4_$^rKX`K6KzHl~QJjp!N1V(-bpunVhiAQ*^SQ@40knu35<1t`*$_SG+{P*cuZ$PT8L!m2; zDA-v1yNo#rWXx|q8B;WzHCFtD^+RU%;W$&fgzp_396cvR%(e#gFT67`HDvOcueG=S z$ZLlCS|^_~zzUWBORRQ0G67!jyr`O(ufIi0U;-R28d0h;-r|gP;)m#lY^_DRna^I^ zpH%ag=0Be)uJ7FSP;=mXVCa|=9=D@&#LpcQF23SxPOEbYn7X;hzvJ786)%Z%z<+RM zJtaxkA6z$mnFk&zTc_*1Kt-IMPL@7duu`lU#pLO;wpstnl--l2*i5Q-dBoOD7z}xz z*O(Ub=B^UV}PkFw%$VGXG6gu+vk)2lgE zslGi?4~%l(4tbK`*RfG2yg5pB>ef{em)MSEKgDMrTlmv5!rVdoCOr8e_d#Oc>rtu@ zqVc|y$8iHpoX?1_I0RA58mDPs4YS+W@swF_w;EM?SqL#Ry$oENkd+#!;^voKUop=` z)s5#(!q;aVsWRkgTfgDVSF-zkTp>UVF?8DmHJqbE6Le%!4Td~5hSp&zZZ{h?1Yxj} z_|&^4W|IOz#fV|TZ+LD}XIU|c4~b0ZL%-i^AebIn@vJI(TjMm@nUX{_X5}{;=5hU0 zAwDYs96D1!kp8RMQy|h&-sh)R2~g-xNO<;3&^z*HuK`+1liXnuVw(MHX*wgt?RWFc zY2>S5hBnrZd7N*lvM?ynk8!m)CiSYpWaEc?o1fMFHDF)JInWEVW+fsJ;v}RWOE_FL zYFC(nbBM8Ye*wMoBsb9DvJn@Y^PWcO$_ghc1vCxGqg_?wde*O*ikzs*(l)ix2_xEs z-w>cl40Dqzj@_dmn&Q3}OA8LrHNNv0eagTbJ~R&o4-bLrD0PeNlaNS#R`H4o_gH)% za)ACTpGTk#&0v=jD!55A*m0cbCX}mg-hsZOsg?#Kzsp9}oqf_Td4ie|=cyYVZk8i5 zpPqZ&X^bpQd@Ft6a{f%Tr)s}i5El``hm~|x@xl!9$K8)48f!hS%9xWMQ3WJ9xie3r zK1-KctU>e2-6QpjYD{H8-tWXFGErt`fdvT%3MnEW6N$tRQu1~1z{8=CPld`8O#SA5 zOG`ba0$@oJ3O*x#KR)p$Xr7Jm=uXfyU=t-^juDYM&1I%orN{EZSW078EhgrEKDj(R z@0q{ewJp`3bv)*8kVbo9`6r4DKuY>9!m^#CKvVCb8EK+s2z*z9mpgrQx{7E<8ui9B zI^8V*-!cJ=c3tGQV%wz&Yw1?~8v@EAsrjpOihd*&sI+r{8OJRxBgg5ddP_1npwHVc zCINi4GHQO&`vLWxI?u~9m+x7j=?Mn5X1eNONBnAj=3!Dfd<`<4i6!gVn3m#(<+fWk z_oif~W1a$)qPM>?mGAGd`YT|6;yxfYku7bsM&;-x=QlBB_;M*(mtY3h_SRs+P*v6s z*N}&$?s$#(Z7?;tXRp614wIEbkH*+tx9`->)*{*J_M`kyZ@K9X&&e(9e64G;;E?R! z$%Fj1je|kFUi|6;q-K<4Cu@&@XRW-i)@T+hO5*7E;1L8kbyX}Ncu{i-(uR2qJZA)Z z7>0W%)4Pt#{LNa?E@xah{5}CG+g}3XjB7A4>IW*MZcgvvt6;Aqmnn%ZHC*y-1wib& z*)N+e9rEOC{AQ`#VYl6YwhWPqSWpxl)@KKCzzWSa2P9)0aO9;VY^U6C&lv)5LVMjj|K~|{rWmc{ zekPp&h1<2#>f^!sbAP@bcvGA15FMRNVlnFnrR_x(JG?Y=K~c4tWWcU(J>%cs!|~@m zJplAm1puMN5XfYrF44o~tXP_v(&O8O(A&U&T^2^$(*dt^f&Difwfp%g7)QJD3cz2F z1OC?sdw)Mx`i1{piuwO$W9YAOU>Sc6EZv(9!wo1L7{5y&g(|EWt^!lJ`o52t`A?F- zzaRc${g68jCigGG0U37y2D1qNrPr3@A#BF?F318kDU;?I-1_zU$}E(Qb%rJ2w~9!~ z-ZV6zTrVdESb}r#W56JU2FI8D5)15636PO23Zd3;t$t)D9HPxsJ@;h5I&@Iz(Zdpk z&9fi)GB1OpHXKivDgeZFG#OkCj)qz)aO07b;_3j3%*>886S;0>dI zX6`CUa8|6g$b>A%w9af1fxwwExRO9%g*;Vk-TQ6C(@FUS>+R>|;ADB(9Q5Mw0!CPU z*7uyQ@2w}KJ!rcNhKH)0Xs(r6sPzkhe#W6pbSwlW5NH%WSPpODeo~2h2H1lMPNbkP za%;$PcR3CRim^TV;D>K(j`&LGls+5lhqZxfUe*te!#ihu6u!0Gygs~f)nC~ZY;rYR zJ0Q=L?A9inrCPVaOO%`gq5XRJkwW!c z%i%|fPq1GtSeCDKzu8cDlXf>2Y*8V!>7XxY>mLG4kw0m^DxBMd)cnHxF=kG&vE}wF zT`riH!@%Y6T`gsKAz;s^^i6k!(yqgvq}ZEZvKc-eJ@_2L;YF|&kyLwyR``jwKc> z9sIceKl6Pu@m>|vDou8Rm=%Ks9)+rgE}*(Ad7yZ8T!k#$0+Qg>rnGGmQtq9_Cf&tb z>SAzN9lG|X3_S6*C2K{6vcQ0u{2c)UiGpwhGInQmrt$q}M9fnB!OV*Qg7P?Cz%jx< z-<@SlP-kASO#;;0Fvd|vT-G~bvrbb)xv($5W9wb#yr1Fb7l3Y7jkEHy6#ShIvM?kN zxCXcILrbGNX*SzcAUh7^W*Zg@FqoaD>9J%Wl$Yrp&<@N&?q>bBBdJUk(`nPDoe=B9 zEQKx6Ri0*O;ty!FEx2o(tRGl2H7-?z*NphfRbT;KA5;ta>6bDZ6mCZJNTQ2vu*HK> z3xu=Ca2W9eoIu(ydJRU|R@6ycpT3{};NW{6(z?yT_q77HIgLEyV^?+XJU7jvs4xF< z^pzzYANDPQ9$>qU5xlL}NtOM`z+F{2Epwm{k#?oxyF}iKg-w`LCeW)p)jHNdL9idb zI1Jv?MUsy7VO`JWe@4{(zx*!^AwxDY)HXmMm?tuSRI0j}^-)5ohahb^*$Y(6F zPL71f2k(gk1O4|MKM-J&Lv6JEY;|Eiop$xK{?x{Q+@%hwf1MaQ{6C^(4*dI7E|0gF zScAdYlv&#d*qN~m;+N}^U-?dctHOLv`$00W)Z@fzew?Ds4D#M1{q}Y?aAOflJSm{) z;eaoT8)!TJK?j1acgkF<14~QjBgfAS=(tULMNUZ|h8wgmt~mcw$Q@M= z<%2={y2dsIT-0}Vc1i+vob3XD*V}6H2@RcXaW_uHZc_nXkKOVyk_GZ|6Y8xiaJ_p~ zf>1IGBzVk$nOS)ANG@)ZX1$~pUG|Pt1vy!8*%=N!Y~k^70cLV`rp`4`YfF=Cy(}>z z#I_)fu}6sD?j@R~9tS4TnE>(Hy$y(t&;`RmGEn{sJ>XFx$eud+z3OGk)wX~(Y@4*E z=-k+IR^1oHpaqiwfP^+q6G1{~_jD*=ZwCjavnM+er9>02*))%u!NBA>=zw=pOY_sF z-gUQnp}Vj01kUMB@C1LoAiJ5X!INYTI~v$$UJDBryXjdP!Jc zzD6Erq(ISjbTPrS?pqfOQ`Kmh*t5BQuh;*TaKzA~&rCRAYm&JW2ORXGU>zm&lsWs% zMOb~Rq#tb)#W90=HK$J9(F@r0neZwb=y@%eN;dLN0zW)i%Y5SYGU@f>(m9H?$L_lH zY};vD)(=~;jXY{wV6W>`iU(c;2TrNdd+BIPz+dEYv58Kijrk50v*mDXKI?~SC>sMX z-*^j2Z^~U@85d|T%#UJSZWT<+TF;BgC=}U=g|vg)C{Ox@R~>XB2xiH1_R&{hhxq15 zcvTMXK3-MgEMcJf=}>ituf+t9?y`Kfya?6Bat#1CUiow?ZO;wtTg@5XH)oz1NOD;5 z=RlhF+4;j&*x`q}+&;R4_2VAe0u(78Kbp`049T=jlXs3;gXzsiZgk?$MK-j=Yx&Hq zgV`joNhbhS`erp6FyIfgOU(D`&(8!dE^p5v0)Se5~{FVKWU zg8<%1ni)w_dCuSE9+=*s-MbW|9nP!woG0*&>T8L`Y<4uHKP@d+E8Ref5IlLbIVKv} zln=#trdJ5jrVzD<%uutNE!v)d_qW8reHZ?DWE1U@G^7vCVyYDO_yAw7Bq zxvG_p%&Di0K6V2Vj9s`v)VM7(*mf}V6+2Q?UYsw!05=aw0Wuy$Gou0VHT1;Q(D=%_ z3$3xdV`l!E{nM9WlVHVxIDExOSuX_-3H{z<>Uz%9@NmYdL+&^9hx^zypCD^KiM{932!{fmOl#gf?#3a#T z^%*GQX3mQZbE_f*)j`_@oCxcO#6S{_V^SNZbCO(o+M;(`M`VGT=n{Qjgf$jSnDgcg zA%-c>jZx7*rWC2OHfTdijfbh7cjedY_VV5wXcGJ?l?0xcDBWwzL0m3s-}+3+gxaj2 zNOSR7A{&n)r^@)JpGKp@WkpteAcbJC7sT*E>Sa;rWMn{rzJHwKihubu*(etI&Jql8 z!bVNSz2=Y81=e{h9PpipF;QcYU%WZlQBYp`<&@S50TmSoI{PRcNb9z-X}3RZ<>V9Q zGRftkvEz@3&xcFt)z5%MmG6pepZd%ZFw{lW{yfb~-)TD`WsmefQ)StvFR}=PQHGB_ z1{_Hh9IS_SSle6N>A;@VvuhZl5U^h=#Fw3T6dbW&viZ;-bJ^jPa?thG0J&c;F3m!x z@Px*U{yR%E#eCgIhOU^ytBfdTW9C~ieo-E?>&dzRC2|(s?cb;t`%L8Wb!q48W74SJ zKHIWvP^W7@Evxh-rElFo@6;=bFV*S={l``MkRe58`xIpC&P!pi$q}VN5SblK81~h> z;kaRXW;JXbsFLkKB^q*{&QBh2K!@osA-M~-01~-A5{v!)>ovSmdyCQ`*BJI7qUv(4 z%h64jTPD*nn1b^5Si#Q%CnfV5fL3F_&L*3O7<8`Mw*}UM3s&~MOn$A$0AeOScd0gI z_zR25yX$^5;QnceCidx>18pYI~D=!bau~|J?L= zfdHv8=K#!Q@|N@0&~fZ^*iQjsLz;`MceE{RqQ9=r^^#ZY@l@(Ty7XcTC|yB@9jCtc zDQ~bo$a&)ZX@#9?FrZ+9;jic1VvzfNia}~i@?I6PhiV&Dc(#fn{L|UkM<~32?Taz`n<>VE+U6;I&xnX8kjP*5%mj0~tCvq1yVWb5en_@C-wr*VOtFFLAsnYvypR06N#h2T(Vysaf0sLcmL71B2g2neW@N<2W zqc)rZRjzl+CtBXeq~VcZQN({s`)HOBhSUl3m^H0 zFq(Vi2UL2^KgZrJb{B`mvZ6*}``w-y{Qx$b1o+ClYEo0%h^Jhyj@dceu`p@z?@%+w zthVLPu$;JFTiX3CXSAxy^8{xZOlt}~4cb`NpM(xoWOjKC%<0O_Npgy*VBzhr8>Byi z^wwRzUhneywK}NcnB3&9>xE2q0ri?fn$$XZ{Ga@miBlyZX*EOP8u@N4f+(IO2Mv4b zRZWTLHKUl4$UT^`zX@(~=OLkNro6Cy+bmR_^JB&R#UJc+bjUUDgEHsVfdcdKp{?7r zs1(=gx}`|BmNm<#BHA@Or0JD-^HSWU;j`UXfjQ5)ThnQu~ zv+e;^OLyBzabadWhM{qx=;T&ND!q6VbpVWe>Dw0uKFKg6hU+o@s;xm9vjdKG|R*(e_M-8yK(6ri^{P+PurQKvYNmB#0 zfuW}sd?OiW%=wU*9V&199x$||(3dQui$Py+Sgv?tCY`s^9&Qx$bgMX}$+V>A_bR>B zaFUP3w3$6#^0^pvu51u7?8taCCcApxV;>tWKW?-lGsplX{KuKXegQlfqh- zy$7}g?3d*w(|s2jH<;(0IW0HKwfm=IdXTiFXEGkH>Rsu)g{o=ed}B0lz_w8g@`mWK z9xwS@{>|`dEmt(-3wh+07%V0M9=Bj&TVT&ws6p)i853eVVNO~L^%%k|eV@wMD4i;M zsaR%HBRW$s8T0wEkO+3h$xR8BW7EGW6>ajb-0Hk$v|>t*0mB7*3DPXUg%Gngz-^*7 zU1K?HIqr$9d}QD~A%L0PolUAVj#9I87_(>qX)LNRK^H|TJP za+mlX)U<-I*vtc*q`kd-Rf;PAjpMmJ(k zgMnIY-a;-L&MJFYSHl(KR$It)(p#Ko;`vUqGi@K`suKgt>*ZR7SQ!V$U*(LN6W4rP zyjk;H5|krWPeqis52I16M`b zzYJbC&w4FUAvDsW-2SAiyte`bY)%E0lOZN|x-MTyeoN9~^S<(eb(f7nB2l(j({c^q z=FSwM4pD591ISc1THT*%qF1eSiLFkAU4G*T-Axz}DtXp>9JH4rNn(ITKr~-9%~@?o z6&kP_pxc?v9A3sr=x`)tg!wFi-LV>*$fc?tt=<*<2O~Fgv893o*PQovK}Z0o0|Y=D zkY_y|{vtevN|9elpK4^&)H)*&us2{6QKjcLD1B?yQ}wTsm5sInc9@5rfPXJyJ2%R% zMl6Z037`;(rQWC9YAKCk)dLr+V7&+?pR#sQ3g>h0B(43SEouay_DS|-)G#SEDB{AF zp|n>FFVZWk!rp&fcSZo|KU@~#i|)J*QxVirnP5uY8ROjpOR^JwQ-*6k@4DTWgant1 zCrW*@YCPv4dz)PWE|pIkR*SY^W;)*nx)h@ukIcTa_@(DL=+mQnJ~!n-JJS&{bMrp` zlF!w`l7ld{krOp7Y@ycu{(w1ae7#b~u0j>VdnOF3Zl*p_@-(XUuKt*q)T@DU39Wg)CU*0a~lrTa2QyyxZ=lt4DTB7CE#IA{NdFm~X)PT`p8{!bi zz`B{|jokFL=}0Lr^};5D+x0AvEr?_^6F0A_`3Is z@(A;H*8Q7NT+ee}vsuhM=JxE=GY*&qN3-;rda}iYjqjXt98%VC+o%X12Dg8g#Eb~IJJ}iBp5S{qi;Xb zNex7jL}(lXLcD1asx_i@ETeN3C`{2?VVV5ZSsItFS3bVN!}@{pZP2d)SS%rC!c?7; z$g`xZ5Xa?>P~`W<;;1J)t93OLpviITWBovh859Z&TiI;MpEMe>S@&8M(0f5s^{TH> z$PNkO^(BI-UZ2!Nqoqgl${mx(6*62$wDrB#2kqx_Y8w{dT_0QWw~VFVIB))Z*NH-9 zwf|k01X?I5#i&E!@bV!03yv312ak)s*x8+}G{C-Fq&a0Q4CX8j0hh7Y|)YvQ1duc z4C9=KNc`cSEErgSN4;d5lIO&EtD)`4(mocrc3}Iu7|Bs|xB>G~6`I69HZ8oIi9xpy zEZm6EiG?^m41vslwK@13`~?QBuQ0GL;u4)fo85f;qRF)?76zFE@>!mZ{6w^YOZ4fI zneh~c#`z*y+M>o5+%HWRT2$?r+@)kJRpRtk<{T8U{CqM65ZNaqeosV(fvwLp9`kyD zzo|WSo%;y#ZI$oC<+JdkD5oLn@H&@oVLk%+`F$)e&-83cS|g!OBV~lPX1mNSk0Po*El9DD0%AvxLbr1>$k+KeA0hFfl1eYPMR_6_Xi$0E;h&{u zZsR)3jq#J5UxVqZJ$9tJW4TV~cT1pJZ7w@Iyy{0TcLrH(7;}5Swgx@BW7Y*HVLw>FT=_4%q=%T5>N zYFS_f7ccC@4&=6d&!4D&GU&8Wkm)80b)X@l&_&(PkhU6;wNR6^=1XZUpwpJv)YI_5 zlK)zP<)Dy?4hFc_JXYIE;Lhm(h;napw8M?UhYjV;>It9^@KpETLc-0blK+{jdOo0 zc8FdK?`P09pZwi6_l>93f;vSI`mR~T>0UOSuIvIgXlp&NwY2u(Kp>v=*L=3Td_u=vaP@8vpMj~10oFsG*^n!V5aX*Z; z%;FfQYrd!%*%^zCG`1UeLGDFWviwX5fkz|OrI#uHwPx61I~aEsj?Lu1y8NNZH6Xs%~XC4pr$u+ zD$jWo=sh3*FjHf>!*z%00^V#m^uzS9=O5;A{c=W2Z;Fc164D^j?aWCsunRRl&Rk+1 z$ABQDzA)tZ&PSI5zq8rNT&d28EoXKnB-iJ7Ck3XvrtS^!HVUCb{)i>3)MsAFuxRnD zJM*7b*;LN-PMM(dK97G_h-&WMAx_m#L$_@Y1%eRA2l|)|?I=S-R0Hq^>mdyId*?qZB)jwu#gfH3?0XBPn3bFF~R_M}1?j{;H z-}=|G{k0r<)#6m<@D~sMzwXzHVr41+_bM8#7bwW@`i>HNdtCq16ju}_9HD`_Q;P*q z^99hGMGywLt)#Peh(E|vdf$(hf#3BFkHNp6 z4Ra{C$Q9PG+e3*@$9C5MKpq~#L8nKQ13;5#yF}s0srp2Bv^D{t&$czglzEr&* z-O`yHy=eAUqyI)uw?@XiNmu6a7NYgu1K#_QJSJ~bnI#F5EAa`(bEm&tf37DcFXy7V zA05g_;q+9QUealfsz4r7EUjskFFwz8L|l@irO-e|5-1 z_Koh2fy4BoZdvT0$No<&552`ug=Lu)9V`@U?#6U9wtkuA&cOdY%bm~89M6`1S~vx0 zi|=PDKHES1;%PsD4a0Fmm;8)$2>X_oYvIQrfWH&UZ&eGqrbLA`?yGUMHL|Gt;#~B< z)V#K=(Fj0OO`E9>8KdJ+p=Qw1F208cQ90S3un`o73^MUEj!e;-g`1t^GPG@f?`b) zeRBl|NHGzy9{Z6jA*)5r72qXEx;E@5=(Q@9h02Qnq%2?pF8#xf3u#%-l4|#gdrpla zl|a#y1@Z?)##3*mys~YJ@$lcI5bVcTNi!}S$j(WHDgDzFPtkWW#su0CIU|ZdXc@NVBl( zJha9Pb$!TnXo5)MtHGSvE2h4p|9uC~BE^%HuUY($=N*xmJIB#Vfj2VK0dApY|xc zi?II$Y9%T~U!_aXpdTXr$FNJqe1 zE|cZ>%D@XyX}jH7u^IhOAr^NXSW{k6gcw^!@zNZkLq=fCe7PGzkiHwp1fLAa1RYr`z z%1y~EUmN+t{1}CQVSday5ME1>;)$gma!EaAGKXH$f049Ix2=j`E7|K0Trur3_$ycf zd$HcK(6DY@O=eARPnc-9bSAg^HE>|Pa)i}~q{2B82r_mZ^7;Ng=cdPD} zk`{{~C-icZ;o-aEyT71BmIcvb<&e`iH;f5HvMvuo#W(BVLEx3AXHw>Vv>Z;o`_EZT zk^bEx1mxBM*?>QvkjR64w$8QZq4`ta&qJwpKoqa3^!@mUWT__LfUVTyQs_TjzAGnD z^e<_?zx!Y3H(jkXhcRM1jQcHRXQ1)E$x&Og149u@?R;(ve24==e444hx~Vhrl2Hn( zh5pVytp6zA2(Sz0#HOKIYvCIhVAo@A&7nWzQaF_I5xZ8~@!vNPu5ELN(lAaSVOM>1Y1!>N0hD0v^8BK$`Y3RMdACkH&8P4IeRfR-4(03>#DueRpLLxXg zAGRV3xK3~&;&xYZhlJieqjz25VL!c*NfT0B40%elc52tnE+5A%^_}?qV*3b`a<5R< z@1$D;eo{DnAm~WTgWUB$w#gPx*$-VwI(WeO(-0V@dp*SU@a_4fEf4Ye_v&FGQypt_bEEU8i-5 z;YPoF`9sYkWZSDkaFJ+K8HOihhtFx(w(L^mJiT9h(@b>lTVCn*aryrmNIX}h|FL-c za_N6;U*x+}A3=_!s`H#Fd;1m4hQyoV|K;IcejjOVWJ3A8eX3~YWMQiC(c;gUYR8Qv z*`q1~3ib#>p!_EPhW$sjoeYsLO7xD zmp>40)X?w-dyx7c4MhN@Lt0@q0O)c7L8Q&%AkMPDZg>YJAOAXMqW~0D?)eJr9U{qR zGbE0C*xixVqtsaD;!RlRZbJOV;nSJF+*HaQ|I2lW1k?$itV244G@ncF@-Y1dh`NQ? zgjAEzRwZ5?NQd>`5X^==W180mjayeJHXngYS>9=vHRJuD^4}%rNZy!Nf!p}ElN3Ju@Zve5$L4Y{P1*OoPFFjHBN=-;jW*@jd zeC1R&6nL1zAnDe0?u~o>@&Ny@?B;VfCh8VDa#|Z=v-NskJ{iK6JU^06ZBZ2s8@Aua z$KeoSgeET!nn7)8c53^W-)45GC1Rt06(4-3b0h)Dv3?HL1d@C_A2C#GNm!f6jA2F= zjyVS)n@`#AY{+H@4PU=IjF#YMSslb`;XSXDu0mkmBiX>ftd7z2Z*g{$s^e1YJ%Ayp z{?H?B`H7&tKqYSWd|MEDSLIck;q$Ek|F%B0Q{K4MB52?Rf)bjSc4jNr@mJlQF*Og% zWsiq>klM%lHPS~A5m$7oifDg&@IJ_|z%J>|*U2}SDz7T$$0XzFv7zJkVD`U(MxowI z6YXtpse(HjZ;Vo8^8c`1b3Bv6X_0ZZW_*6=Y!rh1w_e*1-!8_VJkB>Qg1Yy?nI`*%FW5A z{$>DIkg$v67Z8jx7_VQP_|4SU45_77^6(e;Mg85AQV->E_u zN_dh;=I<8|&|>GoG9r%5Lezgb%5(~lP&SFMa-%WqxC^&%Ju zlih;Iv)A;1hpwmbmO}nbW3hdhU|# zosIyA&w*vI+7>xU&HgnQEPuZy?rDrQ43t`coOsj1!j#2O!aKBM=cX2>3(jMaDb*x5Xt z4WRcVy@5$||3VzeRs^`P)A-43K&en!lKinK$LLWm=FPv)NU4P6Xc&l9jn6g)`c;Ej zn0tR+$(Bj8lou0T|?D(Vh|&mWp9o*2JZS6{RlW$RpZZcVyq zj{7M+(Q%S`!Rbrk$=LA;0oW5g5Jf0ds_eFiX^Fg3L$DIM2v_lNMGqfEarEPH$1BX%<}PC6K(f%MpE~|97F)+C-@F@0`<5(hx_pSH3BU706AqDV ztw=QLCZOslWo;W0t;Gpf*qyF5BQ+Smy-P6Ic~IINWtFe8n_|&@%A6tggZ^!_=1!x6 zk5K)ATjbHbi>dd4v5aSb|LU;*Vs?k}k9MhM=227I$F2q>cyAv5Nk@dB;tOC>x6Kt$ ziPVQOU#K%HLoYou)y0G#{VV&fg558r3ZEUoTTK`BfGv~<43O*N0hC4aus9YdiiG&# zfP`lU_*w?(bm=|I?fG>g0SZiy(FZu2{;rkpUj-l$q(^d95qNIti)ROm)Sg}8A^S#L zq*I(U`{<%AV$a9V>;#G@CDY&bJ;d4A0iqJuZRAIL)`tgQ;S5KgSsE@2dF>ADXv%qd z_!{MRSH$7W`UQInpzq)f?ERlY6jm0#sE$$$$}zHydbWR`MNFld`4sC(==d4lKZKe6 zWyrOdX5&BEVG0#02CPRD%U!r@B{lkroOkclOL z1uyj_FE`xm;TRR$Gd_xQXfKM!gYV+ml*3(R#eXN}snz#GVX#A@P;fW!L(@F{`ZC1Sg_1sYGBOT6quTdvuE>xNge2DwkzO#9xq<~pk^k}ZtaHY^$virj@$Q{Nixr$3R zt%Z+UUYs;WoDdtA)DJ99^xxQ_#F?!IQMJlrWhl6>e1E*{`pWKY1e$M`vD_(;Zp3A} z-}pHg2-O3kjfcew;T1YSML=qLYS^sH{&0m`d+Uael-l-J{F=cFqvb92Ck(vj%h1MX z$^Vz=fM~P#-m)Zh>T@r)NjS(oLv4I;_bT+Z0g8?F5 zNVi6A{BPpPCDV1qVOO`5MMu26eM(*bmB6n09gewMOSf40chcP!%2f)r4U3J-j!%Mc zKIGL~bl>)o5A~jwfphs6^IQhjs_rQb{40C>&&m2`*Y|?3W1(T{0(wfzm+dzQ*&rCc z`N6kyQ5~-FqEb|UN1<7Ay?+tclCf->459rGd?2$hlKE@cCGI~MCslXp*Sjfyt@EZr zaPZ62mi?lMy6Sm>j*p{&Fl71bXNC2sTtwSpD#l%9$Jy!G7El(Cm{+t$x?4`>-1=~FUO~>S<7xW2 zOeOSls}mP9Tk5pDX{2=;u;|ujvjB0 zugw}EO?JZO4ZCIE{GbTrn;XB@!SI9g?t@7o(QbrcNMnjwrbw{XqUN zfAO#S$3rW>Oo=1@%U7k=$E2N4(Ps}*P76ePB(3KVJHQXG)g8kaxj7)U-m$4o1)>j+ zT19^Z)%Q;mVzZYNz7zoPxhOF4?Ly?uNq{lk;};Xdf<8-LfE|;*5VcGJ2;QT@Z7hv> zP&^OszNJjuIG&;EZdUp3xA>P>TS#UC>N=sJ6V~xRA1ZHYga$z0t-4&`6ulS%Kh5W* zNH1q^(Pe%%Wv=HiA;I_a$bwfOiaP~W_y)ZGLF^>NcCG}>8Ijab?7}V?(D{H<@kHn! zZZg&dBNPy;B}#SaOhBlV#R-ffLS{X5P@gS zuVu{tj|acU&u=5~gd_-QN!jB*)dKWM#_H$I9 zoc^Dq7zH(R@j!Vosn8b+=?)XzwqaO18X@vHB)kv54Ey~}0LCzHr|A@^sMXY2`;@W` zb>0SOa|_W|hd`<23kXJy!QJK=hO@s@w04wRjSR~RcQYj~pC=RaaW(O6i^o?!+}BDJ z(P%Fp$Sxk*F&do{q}$)#W%ZZP#R!f5f`66%CMxjnTUMblXG6q~efQ_dVee3O#bj&XjQJ>!E7#`q8Zs%?= z|1eDY0hZ$m1N4q#W*YGR%kQ&vaZkXSmtAd)U2cPBURw2QOPzv$30{GI1I|d?vH$xe zFaiHJA^#t2h7p;5gUh=zgSoO~grs~ge8{$>zdXmLCiG0%My_;Ixg*yz<$!U{QG+w1 zO9u?BN0$y7xQ{NmEhRqhpA_XEmy{F%-?W+4{Hx4ZI7TEaEp?;ZDfwmOZj{kN=q{AW z!dfNe0-vvT<jOw6j|dY*M`oV(^EF(mDP$BW%4>rAX@j{%YYVFiZ-M=thZD-QP( z00Fr^`QBMTLcll!Ne z98o#^ft=S%xe1dZR+>dU1TW|u-F(7lQbyl%?b;EoiI8oLyaj%L+ByQwXNn#Js<8sT zgB2h2qYfHRIW5$zFNzplfj%kv-nA~_Xx!|vjmHNH#S{lDBRaO;v3aNo7Bcza0@x56 zV!dEsx=oWaiTl31YeD0PP=gn4?tSD%@I83@h~cew)yo^ghAWYWIX_e#FrG49sQC%{ zl7`j7Wtf)IDMmdp`2Y*EIv99_&u)!guwV$x>!d}d9w=lsO@dqk_&1hQE;v%E>#%N{ z{BprF-sA*-p6waYaW+mqbb29lM&Szd>Cu}-gRl_)AIO_rcf*KRl>u1?jCYnQ>I!eQTw5=^ zDL4Y{(g>O5uGbiWS74{vRk@y7zqkW>_wS;Xp0K*WGpvrygfA~Y2n%&zzqj=&<}!HI zXS!o1t;6!L^o9h?Bw46%HDYUshVrVgVQsa`3W{sF{=3g@BMLQeXOAY895P&HKy zxf+i3QDBXUduB~WdAHMEm9D-)PnMJ++8rL3Qa&jfpzg#D{>0xF&t$tSNSeUR$|J$wbMUJt?aTxoNb9Z|O!ByQgb5Hp{KDX^C zt1Hmbs|CGMy;wHG*&Ormuc#uF41FB2nIfrls~>aCDEEk|2LZ zKgd27harZp!W^2=c9kle>>THTo<=X6+jO{PZR6{*?j)Cjz*z$x9a$a$8zi&GPQHiP z%O+C4UX?qnkZVqONp*f<7j! zBSIbUD?DnbkJMhqvGrVxT&o!Wmi4yAT{b;Xd3n`BmC}tu9ow{Bjuny>DQi|(6qP0O3XRC?8WMEidVdINndxR zTS?>VNU5BXZN1)w(zr4?O*Q7y%HzzqrODEx^^5P~Mn93PdSwP!wY|9<&#HEuJ4VUJ zW<3H+H?!XuO&oP^b1INF%+9fJGq88qT=s8**3?V4G?UERm~?K*rg*gJ)CvbgVA$wk z2M0ok%j_D5b0>|u$t>OjS8y}LDcaK$WE4V`-?A_9!t~Dgo#uK}Snrm5Z{rl67+Js3 zdWb_(LP4dMP1TtGY30Um0q`d3o`LixasED?j$$PjTxeYZmrhjJ#|L{DNvYA85=C$XzF)a|LkZI z7lrg&^WWt@%xgr$&x9%DNW+4cwC@Rc;2m`_?cL7$C^%bE%;56+I(2#inwpyVLRQuD zjcxhL@|&THRY&)%Om?ve3I;g-ZTC6rmMjc2;}#3O3+eDw|BQ6E&2Ke|`y^*GO5Hm#sn#euqAy zr;Y3_8chmDVi?3TepUhaq!V64R)SZcgAwf{u_`b>r6|;3DX)aeh(w{Hd}&_JQB39R zj(UTx==`$kr&DL$C9xJX-&ZKojr?+fc_Oid``U6>WASq2`~57Q11n_3rt4b6V;`!S z%DnUHwKdo)CuJ0`Q#cwE5@xiZoXoMt4RC@8bP6{iuYBJa=CKr_dNc{v#qFIAfDIN; zeiA)5T)g1_0PW?CO5PXZ0RPodj5Uh1U+I6uJ@E&j`g{-=^3i{;g<-8WZ~SJ@xot4W z(tiG6FLs?isb3r<8ls$y61_VnTpwUqy8b~~%yr-lZ>8%_Ja3^Qw5rXVlnbGJ@ox!3k0XXXx8G50wY>!TG6+gAPz zoh~O?D9xX6rI$3U9zd znoQP|)8x)El;`9;8DlaSU^+^JnC;D^J&gs;>gL2(1dVrI4m;ECCz_ne=a|H|eV0!U z5BSh-{@Ce-x{v|yc~g3bE7-WwIYV|kqUli_O4CkBtn0MPeD72j*6;M_^5e{M_^3*1 zR-pEvZ3ZHJ{Umnt0g8+vU>W_@=CcU7wC|JH?@Cz8?p`@ghCEln#*ab`uI~4n30K=> zOm;Ok1|WqiDS=tNp6|ptO1i4*bMYMJxsE+NgkgG0X@bsP7<*Cs9xwK#`yNtyhpK&@ zvssv0l+&oZAOl}u%^a}8nC^0?laL((lyU7fYjj@XG;rmS=bOjAzPHr&0 zi7t}96LM@}V}_tiey2>Aa6ghaJ=)dDz*pwXtyyA+eAC<#MsF4~G%kXz?M%9X16w<4 zJ)d&~Hx)0cOvc_rd;3ke2Q+p~RLoyV0=DZ|+r;mR}=gk*bcb`7|?NCe%QPG}~OB z2&Juy>*Pd3o!e_8_fV=VkNk7P=M!zR&*l<8pbB!6!t25) zEdO%SN<)Ss4PSoC(IHXGF>Mb!&lHzgUd_5v;Y1tvY>SQI>YT29yd#>Z=Cb;{D`}6< zJM6vimwD4&UGPm-lc>Abi*l3oZ0+zsEV@h^tZ|xW;y!1*(iCfn&VXrk97{A=(a;$D za7?J2F&;B^pB>Z!r$ITYThh2WB2wO7%>8w~ z`%k3EwvNxU-YXNK@PEt5hB-rf+p?bp)4+l#mOZxm0EYVpbVrF&=8M~2#N+pUUa8WJeJ~;uV zkA_vXgu-VdPz>2^ZwdUxS71~r+7a@Y4xKg!u88VPCzU^05Tx(i9d4!w0c~TKMIMzuY zu2lNMLpb!WfP=v!`5%_WWYec2t8?%C@DCyDj0jG*Qe0&nzj;B3S&{H#JXmaE|b&q zs$%H0?)8nPI8$1XYnrnRxaJ4Q#)C0Bj!`FWrZa%`cu-p7+1c#vOo-%<`;)_W641z> z;lOo1Bh%obj2z@DDJ`t)w(NaL#1^0Fg}3+i9<620M1h@%MGw3Fl-<@#dT`kB+sF^~ zgYbo$iQa3%F6kevI%F_%k}0>pbvsw-Y+e(GA5p-)(NbMQBB#dv|^vZ zD8p>%mKhV3N>tKrB&5Vj24N{T?%elt^T7`x9Ch~FQyH*oD%n{0rpvQ|Y6F>IWP^PW zW;$ueanp&x;sjM<+J6;84M0PJEq8!1p@yFFZq|6_Hr@(j;7`mtf=jd>*BR8UPi$S0 z-Eu7hx=u>Mcq4^@w2ZRl3fCAF*d_`$ktUJ2QsZXj_l`U%COgCuC*7?r*U}M%g}Z)0-IDoWe$|pX~fw5hxMumbYE#3FM2GpZ7O$K zsEpK0bl6x*X2L7EoHn;z=EMi0v8^4WoCfGN`RBy=MfC)Y0pu}!4Uxe!K1Blrv;-B*dB0ixufBiL) zy2^B=TM)jk+kad!jT(X@C+1$BS^7w_;e6a+(frWP$)bLn^UV*HRi&$RrDjMfIvy`} zM7OPQdkgn7YlqesHiC6vk&S^B6)Z}!>hF}(sxwlBog#bN=AtC&7I-wkRt!-o`cd6_ zpSeRvWfi&E2BGwF?}4zdJ9^Y#5?Z6^;l03H$(uEzDW`!*K&l`OE%`PQ(ONRYk?@L& zT(Y3~$vE?FV&~`%i@qwnwTE}kf{2IXci$}IhTuqkc2w@Fn3x9U9#5ZB1E+1Cwt%Kb zs39p;FPqnO?QnnJjXPP5>izr1aBk>UY&d<^+{;h#%4jBkX6T&QKFik> z#(yu9D{hxRPzB}?4ZNv*S@BK6&)nDDauu`nOK&s09c#gEGnAuP`?O+B1~^mcv>*>) z(NYN-`?*g=!jyFdwu0(>U>)?-`0@DhrOgZr(~o#lY1&M=;K)~yU_ePXRUSr z(egl)vbLlz^N8vlX)TmSxFy!~@|QvXCK9du1gB)rR#pxxcv2o>gw>e+Yj2xZBc4O` zZmGAzP{~npf+OWskRxWoyeQrDtIpiTOrM=!p1@^LS$8w~H%EKm29INU5Du#sRNRds zC%nLOEQFX1hYUUS9%w$jo_;rMtzI!4-XD4%oEIn3qz1GlU<6eV9L~>7Y^1%nl$RC( zVdaiXD)aXQF0bo5UcSj2ekd>b>}_r?CD64o|8vxax04^WLRr1kaT$bV-L}P^M%e+# ze>{rIGn{ja{*@^1n_lWWzns{}Auf4p+>e0XyJ}r$8<8GwQ5_@1;LXTYC(al~z zlYAT`$!&L-4o^!zyKW+bGjXFRr~k0hKs^d zZA!7@$YdBS>Nn$)Cob1WHGMcXH?Usg$OSHGljONrpNo1VM&vYWagBK$CWWkQq7^TY zMDJ`wM9$tHuioWP%Pp3aocrYskc+tPJtK;EYQNErCP^@pL}$W=DdEGX{XAH@Cb3Ny z!J-w=$t^Kn*hib}eQ^~r6jtd}58n@9Oa?p{c-78A@nfp6Qt+7V1I0+$kpQg=%8r_6 zxs3Lua^|EF(cw|47p^=!pqUoKz*p~@zoj|BR+mPXt3HOj8okrHrriR*YAkEA81G~G zhA<^a=kr8-;-JIBj{4_5gojiXVr`yp*x$-JJD)v&`Y&t?=3`120P~vAWxvMsP;; zvk)rxjj3s@+`Vn_jm&q-M)u$|uvJcb{w5j?WF@_6BlVVkg%eu3m097$m8msm08FaM ze?5x#xy-w^+#rxwKB|wKt@rjNC>zx24It!zYc+PCPA9spR(R)VNooz7FbpJtcO}K* zXdmG)jnoG9AK3TIvf(r@)h;pvTwDLZeD=*9eX{wYM*hogInr_9JTa}Bej`lugINZ5 z5Zl$(o6Y&u?+quc_7CK@mkyCshkTgD?t9XdLeN;HSQQ2p%&aQ_<4Q9=3yy>>NJ#|^ z{F$0|J(1l^Vy;=L0LZ|5;NjHDl3@mzc?7jSu{O$HiB4c^9eS6Vy($b6>m};iv&>%%AUrMGqIh zhiR1z;8i(%5L8pBAz8_F3g40*(3)A13Ts=NN+~l zmaEuX-!|Zll#dd*pYDxnDn%4%ta5?U)NbIvq?B4P{a5&idBbYKCzw`UT_gC40}0j( z+Fu?CsIN(7hljea{N!Pr+&wV5B*x!J3l{m1dzNleCX=d@Q!5zTwg>ISF@|~fH6VI0Kqp|;?618_*Z60e=_fdUGjmz z{MDxkWPASNHB(=T!|q5M88t1YEjrtnB)=@%jlwKwe@O^rs)1XowSzwj^g-jU&vE3Q z)rcRUw_dsS`L(p$)@yW*B#n#ldRTPI>6H2gL3D;>2kcl zyf~q*;&Ao=E2`QWBsYE&Ls>{VX)N<6zCcHCL@CZ*u70)kLYdoi$2E@@Wje?gfi1NQ zb!MUFQ!l8|2LDn(7EH8Bc~FxnE}u=;xLn&k0q*O#$C=LhKY69A#vU|wIs88}he3i{ z&(!iB#&@?sIQH9@oC^#l|K|UXUyh>S{gs6e4j3nY`EN%guz%lvy!;T@t#7Xt{C|x;$a;PG`DNU7n8Mc|4jAulf!Tcf%Vhavkhc2vqU8Z#l)t@LboT$g@ax?C z-<1B}rulL*pkpENE>+Rq$^p=)nt)d1r4nbN0Vm8b^K8J|kSMW+;DX2(8uV&HL zvhtMbS4X{vY%&WA}#!x7?NE}FO^0tj5g7zi8@mSGkyu!Q}KIP z0lcqcPxFygFrdE3iL=C=Uq1Pz6UYzpKbZs8;#JUWzc)yxZ++a* zJD81Qv3CI#+&D9|icF>2jmfCZ$*~~X_}32wx|@z0^LGpt6gw96881^j-913t*K8X0 zqVO$iv_rbINemU@WfHd8u~Kn$xeTN))D6SSE)cNY2tn_~-)U?rP}z?Sux6Q{x@*NL zfqfHi_VsCezCKM8Ov?`IZM*QnNVLa}7>QhAMQS{hX?v!Y%0B0i$_D*)FhgQmLnM;n z=7Kk&$Z@0d)L8h)0DUtEn>SRyQiXA47Ur6yxlQXZ!s#3*EE!Z4|7tJyXSOv16`ZC~X=cb7%I0Vk ziJ0&8)!a{62{laF4T(>A-0Us|1AC)6l+-qDh6Zm}lI&~dhEoD(H9(u(8SYvVZ#9Xg z^VOu|(*<7Pt#GknMUg`hn26;ZSvW{$f{Hxvgd%%Q5bHWP=^=rPlCGvb)eLIiiN!R< zi@8sKU8pHH{ufJ4?V!f(KI&9E=|fmfE}HHwZR;&@BIpcIec^-EDg$SvYW+-glXA-d zV_&^AfwN6Bk_#G!DCL=D**y*HwQUk3t~QNUpt#K{pbR6(S?itF=TgkfS<57@W&UHccfdma z)QH;LxYqjUh^=2zYryQu!b~H=M@UPyV(jgOQa@8+1W=&i<*BDR+%(2wKE~~H40{@I zWuU{wLqQ0U;DrGKtNlb0j9HMA*t+s~kKo6LLP4%gzt6wjX%0ffAke^|H}+4Jx0~b2 zQMBbMkOAgM!@+`YjEWK8tyKAbeBPS~T)PnDWQwYXwpxi*k*}VlRYr&kFbkfHS5!yOhO@aL2m6 zgbw6PO`PG}S?bpf*F7s7Eq6mDg7fZ-L9+TorYx=f`LJ)5Za~6`3u76gk@GRMjE`}u zE|NIjD#2tM~DjNx}eekG{IzTES zUJ_AP#-NYh{}@2eDa~X)E~owqfnjMHUcDuwL(Irv?5uB-KQBj?d!w(Su5F4{)+OM( zQD(I6Bw2_f%)&7{vc?wb7ZQN|5~czM&O?24WOuxPFX-pML;y_)8vbKkMXe-`4kUOg z_SJqp284HD3Eg0WAbsRa`=BnQ!N3QRg%jFv^$b&lXFqmkh7crcLI^l4hVjtZfGUCG zMUkJ4nreqx=ziKW#wG~pQw$3oCv=9Q>>Pg77NRp&SerBC&5~7M;vB-PJaud`3*2F( zpY?~RXUV3*t1E!&=3V<4(0>XXi!|$bR%9M%AV08j3?oZAx2*x_-reCGp4{pt|?Z*VG%#Z3_p7AXVh&G2x*Ao`>I|8+b>DayBrXenA-8URAeU zsI~X*0hYX6mB=xUn)PyS>phbYwfb|^U0w_JluBt8E`R-G01naz$ie8`*phg zhE(2ktIp=?SSB{!;)jQv|>U&rIIOs{8V<*RdD2C$6QI;u!UMj_j#(?N~7%NFTo6e>Ap;~WReTWnvN;Z0~~Gr?lA%ef^bQyF_c-*U%L*f z34@?tEQ3&Cu08(9+tE%>jxnACWc3FBwvU9?uOq&LJ|pFKlG6XM1B(R8&l$Z;(C)CQ zIYF`_@M3<_L1`EfSf2Mvn1Ld3nLLsmJ^+BZ@{&%{!GnI_;Oc-L0GU|SVZjmc52S-Z zl#0w8t^Mkb^geJg59hHKhR;%kt)EI~$t(fiqP>^Ju>r`MlJirvho!?gJ^cV?m<^q+X&lDM0F&6IiynoTq1b`CJsH69!% z(P)d&LIMqA~DU4#O={ju}*u2+W4bJ%}8l`1VX$u4H0Vh2^{I~pR2@~h|j~#k+Cu?pi)KCf@#xBUX*DCE+VucCCgxNfujxMG$ zT=urXs%LKY0=mGv-ct>bP8G$9Vr@3>biJFT770-^BgmnGoeWgeOsa3c8(ct zzq0KIuAbE+5oukJ5!JsViA#vBy&u#MxwLt3`cgLgx>uO3GVnwq3==qpptn|qI?JlW z<|1GL%a~5*pHELN1+~U}zpXG08nj{Dt@Ao{2~P#|R&=ECr~Qlvnpvevg3^t{&4J7? zYHhiCLg2a$ULTg&W(jiTS{7KpA?J-I=j&dlJ%0w(MY5m7vCSg}`lo?tc2;jCTsVQE zKD!Lunyo zdmFR~M~6QWm@hVc1nL?iaem0+w(`hHUAl*zSempMRjrrd!T^r*BMUR|8z$Wd3`aj%aT^$_na%K+^#2)=jZYD=y2K7f8W^o4^U1mj#K{>nB!Q&xA-H zJq{a2ZukJWo*XfuYD&6`!UUMo$nN=U9fuR|2r&XlrZ1`i0P)zNzbjv zsAFqp?1x*kpe1e7TumI+E8hn zq10K~@G#|xNSUn>IDz=$KE2uHZEhAN+{_seR874`Ma@q8)7`(!MbXU)cQTr55Lj({ z4g+0Co~rjk6d2T^F393H?4M)xw*_Gbfc94^#nvz~9%kGX962M4R2x7KRd^Y$lqIRdgP}{+3$%5VL%o+V zTK69U`$wpuHi-_o6*uX?m(`G#nOhmep*6-S z3y%7-z3!`a+^`didhh_fxA2}8EYX0=FxQ0RKnxaCERN(HdCMa-%Un z3EtUHz}-iz_lFNJWqXHzS@MjM$2+1p`rrHLEomycsar~ZC;5*t1>BWjKT3$=0q6I_ zGSd&VIUOk1K`L-1VEOKebHL2xx+jWIPfEkiEY#%=q&Z5|lz~f+-~k#%@Yb;%i)Ngz zwEFH!6o^ce>?vPY7u*bwoK8H8Okah(FjHP6&}VlWIJY%hUDs#J+mza3(FslZw2VFKF?#P6F_TuTzvG&qU@Q$`w2C0!d zqM~B!#6>Ql>uJ0EVgnbC5R>jI2tDH z25A?ANMKVJc-uYndV!mJG0e?(Vwx-oqp-4wE{g2?pB)i60?t?VP==pE6uR+_P4v)zmj>TqB#nx>uDcyC!2 z6f1gXT0tikgw!CSEN4MN6JU1%D&%_^cc>D^FLnm#h*2w(v{H0sqVU*Z&^P+n)L8Su zJkaKs4wj*DpQEM>iErtgM51$+MUQrkF47qqUqZwL5PCyWG-2`e@9|R0&=hGz{#C( zFpuoyIk}E`GphPZlX9fWzyx4x%dP}QO%>*sbBN8kZ(Kq$(9%g;(*^D!N}g$3HYRLA zr)r({Wk?5DljlcTA|?>}f>#7bAbcjiO++@Z`(h4yCOaP*79K>_708of4!$R_LDkT{ zmx7&9c^4m^oHrm1lo^}AwdN@4roTE8Q^kGD;}Dog1Qt7dQVNE#$Dx5y7R*>#!r}<< zzHlwl-jO>}H_rxb@Piw5s)NP*bk%$t0GrI-BrX`-yA?w74}lz1j@dM|jDK>ef+Haa zNW_%pzb7kfs*o1;<;-64pUuwF9jwc>oSmy}{W_bEcd(l6Hh#?`F@OtVwQ&V<0BMmE zWE84Y8V%-@xUHdcnL+VlCz;};(Ke{;+d3d)-}&f>MLF^@_v7y_z@Q!8TvX;AA3$eC zGTD)cx3|2BNv^Ou&MH9$b_VneySei86let#g0=cGhmWZ7s<&KbuNyAmvISlV_)_I1 zrxL21z-|`br9L+nBfD`0#JXVS##CU5qcdIQw}Nd!co;mp`FdecbCUxs2kBt&Sl3Vj zCoWu&G@|Y}(AQt(6>njteK1_Aku?`gtbL;G?}o)Z1o0?;R%8W7w7d+E9iyU$x&puM zE)aBJ=Y0Ls!paUsI%oNy=DdyzN97o6!xHy_@Nm|>*s8Qu#v%iF87x5VF+w*Z9RhnS zX&Dc}vAjdXDxskjryZF4sDYM^D%UYd&xc z7>-zC%J_SF7^o7sV7aY9;=UEe$q~}(Zvy=|>>U7gw#ig;=&~Mg%9~<$NM`gx@{^{5 zXlBHuF0H=k^3&XK0MzZ)91d~u1A39YbDffDWT#hGz%DIeEq#NYO+Pi?Jmjm}NN)*% zHu;DjKn`OrJZ+(A!DQO^c6~ht#{1PXRBsLJ-893hMook8$4IClhCsOZBNlm;L%>L7?zomiHb4*-Il z_QP}mb)*`o@mD!!2Nm>>qNr^Q0rb|>=p#fE+8W9w&04^tFTd*JvcS@+(B!fMO!4%V zZs2+Z_d{*!!AJA&k%3acV@ViI61x@+R5&?%Agz@ZR{1D_sIv?EjA3?Of#;9gaRkda+b3^se5%)sB^N3UNo$mB5F zeE08kmx66F|0bw zN;BT@niilTSL{O+k0NWlY31IA-yV-!G*l7oVk#U@nU(W;ECa*XRTTxvb_c}?&_FzH zIS4wgHdT61;sE6u{p7goxl$&Q8BY5ZJB%Z8XGb&X8*cn_1JSY<(#a8dTA)>3d0->3 zrr?{EsbAkJtu`6-c;esC$(QOr4wo4IDaTYX6a- zJ7k}g4HoTR4hv8u$}s(Z?0xw^lx_R}B$YN&DxoCz-CnruOO%QhDk)?cMTHqd$Zk+6 zviG!*Z7O#ZW+cYGm8}v(jA6!>HOAPP%ox7MHR^fp=kxvk1>e`_`SE$(jq5tE^E}Su zINr+<{HC{KP@7%QW6{Miae*OFn-Q;N1*k4ZT>km%?>A3n-+serh1<{az^`3+see^@ zD#71JEK+*<+M->mHdn#;JnN#=aeyk!5NWg-v^Zven&0>j zp!oOai<))|)ihhHgzuW){(QA(>UsH7X};SQ*>?o2TnfmlRiH}0V(|Pgm?95lOAi1B z2N5fT9_R`j9EF(P1CdD%$_q23i>zs)s`wxD^4oRTto)x(Wf)Y;+=7R`7x#}9Nki|k zTS#GOY|7VK-o2Xs<>`Si=mZ};P_KQC_AC8@jd9PU$Zq1<`T)(2n(Gpf4*mx!9md+K zPpQ^DFR%M2fI4i!5_W|6(c-pyd=z5z=9tUpF=ek;V#7GnGUEr-mX@QNnSY0veg0EANLW4$NygI7sj4Kx4OPXF5! zYxk2e1ly(_ewDQOUjFS*8js>NJ)Mw8qFrXr%i%Idi*`v$GGVK z^+TF;#ek;W+~?&h%i|N4Wh^w0qSO{_-TEHss}Lj32Bb1`iadg&hOJn|D|=@;cVzbd zUR^XX@%xw=W!^CUs~s$@v+K%t9AjXz{S^6zz$7W;2bU{o_2Wh*#6;TF;!Z}dyXEib z=v&d{lsFf!a)rWQ7U&#Wz%IG*73`p|7%qQM9SJrBjy!vdESr=3SAs`!Euhz9?0&xK zY#GJMqsLei8l+$AZ8*zE*nZGkky*O9CYGMhIv9iJom;ol4%J?DPGjirlx3&rkfUVd zl)Q%_X4PXn;fMN_e`D-Vl>vq5Nw?-tc;)X8Vp6q1ZQy#uJ(^S3l;_`HMpsKk?b~5d=+OW&BVCvC zoyepo$)C^Mk?srw>k9P$qIJ?WI{)4>4*3$nHjXJ(~zW zPpJIZPTDVghX5yvE^@kLTDuC_COcr-G5z^B9c~*X6nbpgUJ&&|sp+P6+_bGaKNT#? zAj)AF?a+g+f|-q0j;-%xEEo56MI*+)hQY&=8yeGq3lvy!C8L_Iod3iLw|kzX)sV0@oV| zbha4^OG+3xppat~Z1o^ps)l8%o!Xq~(96!f{`p^yhUswFTXS%lHIlVlkKXDC!y1di z+e29EFxn3!6gU<1KZE17NGS0Qc$S_qRke6NK|14o#y;%9+Bik!{$@3d_m`}k`mbs& z;mS#h&)nXM-U&Lp@n5KoLV`~=>Y%gv_rqLQ?-aDzC3!r*lU;it=V$&K5)=R&pfPg!WdvKdjmLBL|8+SZUPtuQ;WmEIqDE0>*IW%0s)I zc?y^U>6?=oCv+%E#S<6N^c)9cV#(aWyK%!a9dN@Ymep+SLy$Ta z=PYtl?>Y50ce8aQM3n;M+QQ6y2N;052Hj zie)K(X7#ZQ^%|{3gDx|{Wvb8I@Ual_***UYp_YwvCt*Q7gD_F9z08S?t=2oq; z?hMetjU6MUYcnP^=8*EAe5fVp6PN7@C&Ha9$?yYUV`HXwOIaA_BKowpc z#upS~7~xue(4Z=uRcE)mVU@2vq2PpPRGiw)ECEFztLO$j_g);zDOpu;ScicigS6S< zA5H#g*DyhM6(VYO)~tt>gEGC|*C2DJTp0Ua`^_yi5w}#w7=P$4TJwfY6Q#F23D6W< zHvWQgW32yQAyM% zdZMVBkk2W$h`V=UY2;K$DOTc7RSSxha9}!H4SiPBzj|+p5G9WEXXP}hpd+o_+S}Jb ziud&RtD&U$4V2sN1lLQqsc#4jso@!4=>z(H!mn6IKDp1eMT*W)S%?!9G2&p#sie{Q zR86N(c(L!k?#<5O(@}#;9~;EoJCt^*r6^KZCdxefKgyghb;;VExb1#v`lV3dDsPir z_P8`10Nla|yb-%Zj-Q-v(1?rlRKfLLOu*p){((lVJA-Q1%~&sq{_489gR6PMBzE;rE|=Y|g%Qm{>|N>SFZ#kbD)2V``_G0!Nh z8AnJ2ro0H%PP4TEJ!V-8j#5SD3~aMm1~Znz1x%177+#>F7o^;=Xe3y!@E6$}NlcQM zDV;t{q7_+GW5%M)^^z;fGW4i&i$vXw0&x<;Yu9B-S(&NAHDP?0rRCtx8k!XE8sw@S+)?Y!1;e z@d~<1Gy~7}hV&>Cl4YCs*ykAqoTood|0scZ#syu#LXSy`nji+PWX^F>R7{Gm$*xad zb-a)@c4d71KJ|{?elMjk z#ZHs$Yj8gio0cZyIPbO7+1a-}MLU${V?1sh%DsY@4ztTJ{p1C7huh>M9b7$2&m{lC zA@6PE6o31vjJ`)Kg+xzdA@fjwgmpsGF421zRm3acY~z!N<<~8{butL@FV?WZP$5#> z#T1sDh~6su!PVE$CI_7%n!vE%xa_jQl!W!}nyr%s#DYHpymuVaCpr9!W)l&;n|8gC zM#b-%|Ew&d8$W#N;}438G0sFEUENGj_(m+`fln_>V*wDa2F3BWpux#Nc-D zR7ry>!9EIcinOmM;(Z$~(WV`1M6RYO_jA$=ZKmzWDtd1Q;&N;1@M8EbIk@zc2B^HA zn&Sn#7fgr_+)~k|HKuF`RJY>o{^aaSDsmr>=Bc)Xq>FxgBi&gMlDbTjMmE1L*B~u)(%8Ss(J{dh|kbe zymsWx_s@a9xJkOhMp?;p?#x=BG_d0AEt{I%keru>b7tfcO`86Qs)sIBYGG~{jEOi- zj=$INd}Vn>NcrD%r?Mf8{*7oRDfFGH?)%}=61|pzg)fX?YHpe9)fQ)oAF&>V8DWjD zyfI9dBYAUDjLzU(dgnb$WGPBA&n@qiyHtCJ(^=w+RmMfdbKkJIX6RKu?9mQ#oR*<` zW@FzKK?0R0d=k|@aOEL;^cqR7l3qi_BVAMTx_ky9?Ds)2haQzd$rau=j}1V?IgkWA z7xVagKF|@yzN~yP;EVDDB84aPIqPpehN9ISLlEEmEH5~AM-F{o4!x(>$0>OA%*w{u9esspipRpslbH}uSTk!w8B(6D+FxX*!3)+TeGZ_=*2|kR z!z`Qr&{1?#Mnz7gjVgY!GoIgzDeR4aE&ub^md{uri5k3s(Z~`WhavF2J*H)x%S7Vy zP`OlFF(b6BhlU~3Z^!-$fA6H!`nu#TzHdo$+pzKjtd|--N-ZY!4ByX9Zq+`2m(XGK zye*c?{uiMjWy7oH-5JAw>edQLC(DgNDqH`l;-W#61uoC}h5G(`mY%s_H%Y?FI>I@D zo!v=!!(qaJ;ITAZT%~h zjM?AqJCb##X3+!3fkJ{KYqy-JS8jTHxMD-*oi<0EujF6v^4zRp**M^foikN9H9)h% zAWtiXDrygACYuGFfT0Yl*n43OVu!b%abrQ2)$2-FpI$i11T3q8d?;l(rDpU-^iHL& zsg!qVV$2>A(!S}$O|Ml#&Rf0Bbtm_(bW&lO$tKr;e%9sQkxVVTo4dphp+ws>nkxgk zmPU*KOA1b0saf(8!#A4AIl@qQm1iEmywfbWgf?>%7pdteZMYRRhyqJzN(Q;H)=wyK z>c~>pp2!ve&>UH7zZdLo`RNDc zu|{&IUe?Nqy>(;o(Y(Dk`%%Gl;>%`xFz0u1M3|Bv-DVSxNnMu0j?%Udd#2#*@@gC zzAqO0;BumXM!hU-%jlgshGv_SAK4zN#dHAV(Xsli8*U%F_V%5Dy~ueFdPl|E{k3A+ zaoRLzGqdQ~j6(9!0@jxUnF$>3zy3TcG3KD%xtG8=cD&>mxnPx{yCLtw<~w%A0myWD zGN{PXjF$6k(DJ}#_Le82Ir8qDz4m`S zxWH9Co5TLzrO0WC!)#DBhIZWir6N(Sepbo4jX}Aq(|27@YiWnE4CJ_jtHLV;_uZ4| zE6f&8wC-R-TPcGYgd~Nr#D!3!FI31v-P+5BKlNfs1uy{G!IHvy@v`&9ubaCF0|OJR zX8M&H0O;;)?ox4Vy}*#ey1|3LF+@qp*445QN7mkn_^-k69?M66-Z|dcc^=L6nVak< z$GPO`Y}KjYXDtu@MBV&jpeJS!=4zOjGPvxqOzJw>lon#HB=*Zd-0pjVFL5w@DYLXN z{pMI_2|3O&_NZG5a!T)h8!k2cV2+&9;I`pRgf)yM#IDp>JhYI=J`lky*uJ}2^7mb8 zT6N@2WMR~!G6lS|JLZSVm?VEolUE0(%RWCoFTazf^jvP)E#+ttm>_3DOo@q&D=CC| zcvhFvw|R2iCKUOapQ~oS)_BJU3o;9xtiNhA>kDgPywpmJvbNohu{nr5yqr8JFu3R0fH-6oRVW<8M{IP6ayBFKhA%04$I zL3PtKc%vGk!hZ3VRF@sCf5DWIKU&Dd%ox&<>kYFBHAp+gU`MpiTCNYYT|Y29-9I54 zGSqTISm8Arp~8@@1vy!0Pm<*STz?YWV9+})@tMhadDil50eTSFrV{$t>b;eiB84Lk z#&0h8z!;CBl#KN}-KQ$osK7ff#MlI3n+hJZ>d=DSnJrX|{-IUY*9wiAM2{Y_$jyL_ z!%?L@MWUmO^`aX0K*|aV_nD0b-I4%#D{Q2-kkg|lpnOo)zIPcndd#@vHtT^_T49=D zzylQ|qPU)7h@pbDA|`H+NxI;uWNZbz*70x*Y1H%cpE1oz6=|?!?^Is<7mvDjIOgb> z{@(vG$o?OW85E7{@7|lz7t!0-eYL9;pXgw2dmVkn7f3XlfxL<#b_o4+ec=li*H)NK zd)u@~p>7;d;wJI~hqu;mzU|JytTC|-8U_wTL)(rI-;fzM+e9Un*^mxV)blhkhJ)K| zw%4oC{G@Gi29d1wvgDxjwR28I$mbh#-vL*`u%dY=^NYJ-^#pQTpS)nLJ*eP1*&kyK z)#dMFe_D9)BMc$Cl+Jt&cid2Ng9>WLG`<(e?-^E8mLP>a;WQ^3baCEnx3;t^Zu;c> zi&y5pU-qR=udl3WTd?H)%03^UVjsoUS|=ezA=&7*%-ta52GPB%MbF8>b7#$cU$;JE z9v5`M(nu^p4{BMB!mii@iyd;895$KUk6loa4%ncejB#>nj=M`s6RPR;=|wB8$b=@g zBT@jF7cG@(jH4P?=L0xR=2mZ!`WDiWgL*Q9%wq5o z$GDf|sE@wDU&2VDf`>U(mrFWT)0%>V3#3rN`RC8Z941;>&q;{Pp@V=~v<0Sn=n+dC zEm@TQUzhl?)q&d{7A*A7fhX>z4703POf#O8OQk6Oc*4aDV}??pYM8CQG(c*8!_KfV zrLHR7zbvD-eqiXX?-erUvfY_B#d@`5=2(`Kqm$L?{0(1qaUwJh^+T?F z77m*FiM0y*6=*YxUj|hO=gS7=DivcYYL0J11tS0pwyVUK-GcFPaBDxteWP>=CAI5? zGt>vN&FKO0%w@N{AYfyf`q-PAlxoaN{;x&`d>0Yxq?+lMFjX0ADimM!xh+A)+>doR`I;LZPm8FW@Ad+oSu_i=CIW0}76;dQ3z6;=r20t1i-f{?<<2iJucELIype8yQV->F}?|sR)#K>|c@c4uvSM zizlN^OGf>Z?Ow)+8=2!HCq-6QPsH(+g;)JIp_Ut0i|#(ujPe4)zcEd!No0_9&_JOl zkJUVI4f@4anS`y@epy(q8akW*(_fthu3r68isxz=%Tq38$e8CAYyg(ffLRT>cmVQ| zJd=u#V#aF7kQ`!4Z~$}#i;|LI=eMNv?5M$RL4G4}&JeXOoT|Gv5ZIO#HayOZF|7!? z)g)!BEBQ9Wp~->}qwf@*ML%MS7}JPw``c-&%tSM`I*qR(J-QpUvKsSkc{l9XEsQ+p zvGBZud_n)gS3aWb zcm4V~Boo-u^0b9y#lWOlZ;2GTgRowklb-q?&hHjT{>1;|_DfH`J`f&nz6W5GbnrdQ zEHSb4`hK5mx7z|~?K5zB+vb+^v_}QY%gwfHdA)0Wf1~zE?63;$s~sR8`w%1Tdh;?- zI?=M=z2X;R`wL~|dKfdatTZ3c*-#b(gih>H zBCF!3(2}umtcYNF_*dzL@nF)e>l%dlzCB^c?4c@{S#bryM5_2LF`yV{kTq8emgkV2 zyGnbYFh963>%5pd8~0h8(-^e{;nPllvXDlupBGl=4{4TOnV{*lwr2 z5v7=jkYj&>yz8Rx_H{jHtvMGb+TAEr`c0*O{>hYmD1h>lHJjR03P#@7A^^3g-uwXX zjA+6@?^k_+s~m3-tzjtsKVt&sVtV%I%$-KEksf5G@dV(19xc3xXivEKBbrV?zDqca z3^}7K#Hug35u>K=Koah-CNQ&bIL+MZF(?X4egbdYl%Zqrk&_~D)#o9tE~X58T?cz@ zrMYGN!OW=#Kux$nUHFxhdWVbR#R?a?U_B zkvXtwnS4p*?K-MmFSiT++mr}90zP-P&>Mz-W8K%C|K|(9w}V|$(ozqJ_2u;Vdg%RX z8uu=gEwUFi?l2({(D+X0Z!4HLe`t2J!-8SAfji4Okc(rOATVsALs}GQ9c=(4sRF#9 zV|8a*vf8TEfz~j01A2Q&v6DdSF~D)_oc)d4Z&j@4Gf59x73QeHhYy3^-n$mP$4J@O znq{j$=x1Bf->M^!f$Z@rWN_m*W!oB;3?!*bx9$X9E`aOde0eozh8c#46*je0l|=4) zmX2@zBk4Y%&|46Z;9zHEi57GdG+9+SeMnV{BN%;Vva6@!u#gIu&bepbsC{N`^^=5nz;Q}$l^YlIIG&^BXluDubeEyxp*=>=CW zExQ#YT#$H-q|P~X_g_(deX?Ya_d++>BW=dmWP*@Cjbx>X<646(Q*)Wih~gUZCM5hUOfPgiM(2+R^p`C# z%ShX0xd^L$^X&&}3u%|rG2|;b(%;RrQ;k01HxE9?(h*K_CRVl7qO4byPq#TX@V~_3=Avihr)#p#W}P0K+ZlJM>)5S3Syh$&f;+MvRAZr7|BO>Kiid zwKJY+QH69#ya>C>og|1?lt;wsN-CAw=EN0vPVqx`f}bw$PLWnVA+2XUyY^D=bDdk= zM~S@Mz5e*>>FSbE-{OUyQdj}&Ov3`JBf&!{yD6D<{>yF^^XbAK32yc3sU{Z6_5NQ5 zbw+&oMFh$%9_1x$VGmop4C#&%Bg{6b(Qal9jOy!f8cDoe?ICY*Ztuipk3xrMn(kr~ z(a`Qhh29p1TiINWNWKrLg-(5zv7qi;cI$G`8>C}uw}1Rcj9IEXv}4ICJwLs>HpnjQ zn$Kv_TWkkBJJBe*K)YqE4riC`4oeWTYh9Si)Df?Rxxp}`)nFpM&?C2CGhBuQbaGS7 z#QbG;lyb1`-yWT+_4p@Pff{=H+$sT?6t~D3Yd7BBXnYN*QUWaPlbXj)Y z{4(rPrY-BpLj>oHJuQ8aSMw!O^l{;{RzU3_YPaC)ai;yWo0%xJmU1VI4kx$Ep6$Xm z)?Q4@9Xo{Nxu~!BwYyRN02yMiL&81JES!cg2(|Amb=@$;RbrwYRd-FG=U8XQw!|2= zv!cMEkI%HuDCminK@~`*r`c;t%W<@5_wAVh3zWsS%UsU@wkNqkA?#6>dc*1p!1yO~ z>fSWui?}#Z@wT@|Z&NG;A1zLwU%aF_DjTJBG5v^G4Q5T?;)L{K)|T)aE+UiuuhoJP z%qRE!<)FLXWv+GYMh_j{O)2OKlCnB)8?4s)(onDu6*=@SwTL9N-S&xtdzn`$m#CvD znMwJ%>?nyvUU1oWx3yh_z-dn9XrG@Ww~3+ji@ekNHv}-ZF4XJk^iRo=@y`4@^s2v^ z{IXku2h~q)KM`&~%=N5TuiA`RsoW7#b6P0Sc0a>x?EPs2e38%0uz8>vSO2y0g$ zb$2>;WAgE-QU$su?di?l8E=@U=uWNTo+CL-A`!5j*cHBfj{F>G`GfiT1$ABvDMfbK zNTjRS`TIMI2y{OaEN{ZD2@Dp!R=v|WYM~}zUZ1wW`$$DduS0azmZx>Hhit#JY7Hys zP4(w;9&%e|rQA+!YBFF;K8@{{f5Vda@>-mQ?$FT!k~6umP1{5`kZb53kMO$4z3Vpm zA%t~oS8S&$EnGL;WC0ZNXieHdz2q9PMtFNUbKa?4waadm4Q8FrIBwCQqbCAXS}wUz zew1bx@-}*_99pX%G+y2S03g|;RZWO*H1-Vtz0A7u3XfEBXcL{Wj4wBn36paozhn6P zPL$JWlvW84O0u?K!Uw`;JW}J)>L(1HdLa=bQD-*FoJI#Ir>xCv(Ly?&wj-@s$t@;2 zfN+k`%dGPsACEJuQK3z5WF`){MGW0@v(gduTBKU@E}KdsvJ;|{O4MeMmk&I*gU;T= zM*5tkZRHIT^Usz7;;7^@d(yV2KWJXgAsgffZjTY`2504qIs1Y2t7R)A(BijaLgTZ0 z_5>&4tx$M6iyiNwU8Vx!tFLC!nKKA=8;2X(olS*LwW?&v`|9hjFC}>rWx1J2IJY&Y z6O2NvxPCyYjP*#Pj&v=sx(ex^WKp&y1H-eip{jRl+t2A_Z$=HyIDz>0yoeu3CexQo zbjGKfD8|>UQCuBpTlamq^d(EI^E(jI$KX?^*DEJ)kyY%)GuK-G)Md5DSLW2n6_4u@ z6L%{DAkfk0H(z|tCpLmMXwW~1fz}c^?xH{L*|J-HJNgzvX5NZOsa?P(e|DUKSaNJk zlOIZ^Dgbjt#tfdzr|Ai+_Ba=mY`|U{!23RTA~wTuTFP}Vhg*h;MuA;KKo($WJ&4r- zF~VQwR(MN#OSSzcOU1<4Gx_vt0DqdvM@AjoeKP~!6WV~FR-85}nJnpMD2dRaOf`Xw ztdB8XPZ`M46&@D8fto)LVFkdghZl~doQN76M>2bsMw$)hN9?FZ-lIAtl(03IPAjC_ zOQ<8ULIo0#h4j`UPv^lTq+e-e(=mkM@&vkLIVI+jO(8Y(&vSU@0qeOl6EM)7Ham7B zm*cSe_i2(|tAWynZY0(nHzTo33ac$Ej38HIWPW4i%vbx5=>ag zc6s!p3k=Ls(TlVzRWObszw@f%owebamO78gaV7I#2S&T!Y*yv4|fd`ZZiIidhzzY zZ3p_L^(x)su@IlGAcH$SN&QIaf-B2ixjK;hkUdr$AjjY6!3DoII$ogr0bNC~+#UFb z6^nB^i>c{}X!d@+?ta_)OF?9KD$xF5eKW4aQ*1S0e+TqRcKx8M3VgI|s)liRSC}!N zhnkGu4o?+-a)XrYxv3c*uWJ!cc{G&_(R=+AMiMLp(y3ponb~6ODMiAZ0a3eBs2j7`OU>m1WAvwPUvmy>e>;yLG5Fgnn%L% zgxbF!l>g(w$6)5RxrK8X&x7a$*szr{f^B@gv|~v8`xVmjddC&z>KW+ln}$%RC2D$l zkT=;_QIET4MBmc@GjCICJlP{cRB)hB9=7KqsvFX-x5#2E^5GXX(Uq#akQb-@Nr3kw zSN`q&_7t8(4`^UL-v8GUU%OP%_02K3Ty&wDJwSB}ag<%Tv7bJ74%L2v@c@d z5s7n}pSZW+=~o9X_MKn&8_K|%=GoXtWGu9+siA=mui5xKm7W$C;lE~X{`aQ7hglO~ zrzuE^oUiLC`gVHlofYNl$vB}vrrtJ`HA0Kc-6bDS8U-!IDVOf@JLVk*TGI{3VSl{a zcQ?tBMu8Gq&gLuU8mTB&-gU#4t9XXc2#*>WyFde_w0; zh8pyfdP;l1K;P&l(g)h!%fGcrNSKbVcW)T{^KL3qnOos1C2dLZb+-4VnhkYP38{?> zV6AW^-Qj?L$&-6EYY*qYFxh%j0_6<7h!(i9H~f@L zKQ5I@^C^d{MuxEXg1sF%oL9wpdR@<|l{es=FgT$oZe`80FgbhSI!rMR=C zjayaj`)1=a_%G0|MD;F68hHT|FF%-Dh(-<+MgwFMRge_kztp!RH#RuQVFzb{G>lmzZveb+(2!D5+)E1|pU?&7?)NjF+6kpKih% zZ1HsTwX4QzZL|2-4%1_Z?lJv91XPwx=D;k&VC%+YN^h`~cNfG+L!J2$X|-ve(drKV zcldQ5DmHp3jqcU$&aH{799RAQ_;r7vBFA^3?G^A?C)>tXC&`>NFIlybcNG{eBABWA zaBmg#vqVQ0`mGoGo3*ndS;$qB9%dAU*bZQ7LaZN5ORSc1mY7)iFZOEQ-Fl-SC6JJ$ zZJ%nfaAv8mz#+W;u(CyN*%*D#sD4mt!R!SoEEr91koC8%qhYuc2A#mS!E@i`KyS{x zL7bG|6Kalo3+2PDzdC8IxXT&bgw*GeMqNC;v`Bd0%(B>BrF4&Q(9agR`O2VU8l8kY z&+?Me=jkI`QNdo-yFxNYH?h<9#Y%f3->{;1=^K8nbPN|nf07M2`#ZK8F1r=3hrn3p zpV5aPME74n7?E&w8LLC%O}`k@F-ls~AyCG}O2bOvjeGk|aqhQh?v zIf&pzvC2buRyT743)bc0^6myDj^YV3af*q7n-t|T71~%W-X^YIQixqkl8%88JoQl5 zBCkvH*cdc>(Z!IRCoV?3O^Z2fWuCqsK*CHi0ofPE2L|aIGCzo~FSZ5WBgiEZ7n>Ty zo|z(Kju!uYWh$v_1CRTe^w}a8fyq|bD-a;PmrAbKx4Fq~!K?2ua*ure?!4hwUIJx_ zT@M%*_}Crk_DewT+As&!UuM`;A}EkBbk)Z~^6?*Q{a+bK^XcE05z-^W zD!eDwP3K+7NQ}GpQ3ZiPOJ#SbBg!VeNgOd^x58#@cuMgChgr0sExGJg$Xi<=;f>I} zXQs%Rcw%dbuP2c>6wWo9D?Mk9lIod@5PdUe$q2Dy0be}Pqp&-=;+t2sO-JjHUd=Nb z^WNB38hM(DE~VPNg;Us6g4Zl!wO4OV#)2Gq~;JIfPMJ5x+? z=9w;lhh}-$WlR8*bI>CtC!$+6Pcu9<$tTSWGJ-DArwYVjzETgc0WvRj(=sE28&WSV zoK!16eH04*qKwOP>Y$VHknvnJ*e*%&&74{ z`sQ_XZ_|?@;!Q_t?7ziotK~JFHAYDVL_MmQuw?smRNijN8rzAdT~ElQApK;Ow7mVJ zRtAPU#!QW*b&h^gZq##9?W5gfpwv#ZCZtA>k$2p3Xy!ek1c?2PQ3|1t%5fjN?*BEJ zmvdF1Tj-Q)w8XJ$uzYCR*0@c^Q7{^s>{f#^Av0TKpM=YOjTh)d!?!li(zY|$EcLRB znAb_4v&fl)isg+O$N@sfV779igGM^Hijy^$Fld3&+FB)%l6Ba5+BsvB1p815J;K4n zjU~UU*c)u;G?QhLdHI9LHaPlWz%leu2=FCF!rzq+#9=j#nN91*kK12>bmjCcbjC|t z$yign?cJ~kX730rw#5L|t|Z_kj#P-6teH3gA2ZPngKk?;%X{Um zeqrF*4zWv1q%xWJ2Wm$H$ZESBoST=8^9zH6fbbvt)uFdk{B){Y<@=bf)SSgel!!g3 zvJz+Ywxi^r1K?2))CQ^FXv$?s6WtGeC5EyT-m5Miq4jxe{nrX8M~KU`5;vVwd#MIK z7oi9}wlx=Lkp<~Q4=_7fIW+A0?p)AjnP*rP<+i@NcHAzp+e}}Dkc|=-U-b(_al0J< zsGN7O?@`%n_(ka2H6=EvAPmbY_zA0dsE!UM0ov6A{jBGc0P<``5?$QlNGW%eDVYB~ zBfEasU_B4fZD;G<@=mxYSS+G7el(SbpfN2ba{qjb8@Luhr}r0V^L4O}TGFcn@3?GO znrQQu8qkaaCVF;JjT8fBJ&RARrza6 zp&IIU$_7l8>ItZBLPf>?e*YAjhnTbRPfdHtwfh9o@0N`tR~YOb5Bn^=Tf#RhfNN72 zX}kXF(!=~vdHksC`J?iVEsiKHW9R@!VLmv@3;c5L_Q6WF=B^Gnt0%Cix@a*p`+n8<3s*Ve;=_ zsJCQ*o7N0btHWKociR``%d3Q?ei&SaX*3}?1{%3pPp9RA|J2d?W`KyqB zCGA@_KHsdO6sj5zPP^_@ZD5d-H5TGgKN~Py$Md20JxciNp-A05pE&fX%TXpua0^Q0 zH0tXM`UAa*2e*MQ?m=A>$VL7Zj=(yd)j-;c{EMr*=|N@567aX0AC<3FK`ns&-Ua?@ zpM7?4XbtKNbOx9j^?bVG^S8(@AO#mVM>l*DYq%%+KcCwGaRMPXkcXj}Nn$BtniBae zLAv%-8z^PKXQP88H?ChLbk#>xA|eW&-Q1ost6PLd9^_Yn4p?QgE=`{FsO(DFBfd=l zAJ(0HPJs_RkA&1M8Iij2qUGSQ@+M;M=$~Vf;ix1+kY2AWN;_u@J-g)hi>2%mjC?_s zD30{0>l#ubu9g}U8+?WxECPLp^cT_ccoke);(0kZ92qQU!SVS&lq95=jlU!}B(Z)k zX7YvgckHlz&L-PeYrXyMYzBJ~Np(M95HkW70NjKR>1{EMY7$$j2&aY+!9`YzYw@Ww z-hWKrS-vV1xn;9+S%~|?QWyh~%o4y&yjVPr03TZs%GO9W=s#?rDz4&=m0726Z-y=3 z=^#hPBY6;sdAXD_DhYty)4QiaSp9cK>_RQc;EK1+H4Ak~j zk=r#x2{56w3cM3q3rhX*N6s~_qGBITr8_OMoC7SNWwoga7+1!KE$iMSzsb+$b+-X# zru<#jlVp;~La=XW-2$zSi0x9TiT~`z{jf^<_VzKjIpgSC*gwFk=MaLa3J$8dM?zGf0sSltD-8s=eA&c$pC@H)9*e1P{R!6KP?D*x$WT#!x%Tzh}kvJLiJt3+leX{h>at zH75EmFtko@HpI~=HGthlplPUz3H>ouS|QY{;_1;~)} zreQ7o#`}5P&+L4^+}_}IpxB&y)>C@&T?`|>{tf33$r-G-7=FhGd%v4V@6O}gYXFWn zBQOyz|&&q$3PX-BVJx?IiR#gy#eYU{XjRsu4s{M6hyLuwX<|J z^FTar^V(g{vJ!kAiWU^q9RwK?TKUUDDAyJIRNSe#+Z5&im%hz%gCw#A^AY41QhHA9 z`B{pR$DCyO4Hx7c)sk33_I#co-DzX;F}L`V@b~A>^!gm4>$UEe>s-x?nIpvEU)-%&5;JBukqq`*&?J`>UkjPwD)k?{A7Lc@LZg(!HPme zmJy&YZ#3!&-r=`D1{a?Xf0f`Q(Etv~*(&tE=#d-bKR%3Q^1$NoEg28oL+I>;a%0&K zckZfJr*}XCf?Ry&hHp*n#av&s9Y94kh8WhU0RXIl-##dcrzsW6MdeDyNC}&aO@Moi z#&^5$!{I2>kh!kG*?0yK5oN|yH(IN=$Bh=Oo-i3yLNpV-}R2Pc0ojLh$aiLuGCXv%phs$F@i&{EpQoFXpTnlp;a5Q#q?W>%z3 zdupRFmY+)Hn5C<)N^{9D3s8x)BC?d}hf;`jgLr5Qc?eWnO3JqFy83mdL^nD5UW{Mq zYw_piM2jL19L3!pBpWS&e&=(DMe6(2r4F8aA%XpSfD>yn2Lac>7Ye zIjnb(4$9v@!l%eujs*Sa=Q^4Q9DWX!6eT(+)?{Uh?UhO{gAq;$w|@!m-Li4ntzD=c z=bB;`nhco|TqQ$MO_1CwkR3q?*8f%cHR3*zuA&=aX*>fS5bjij7($NQkldH%u5eeG zcIo8NXSDf|%@X&e><6L`R4Pinynbbq%o*eIi<_C@{}JDQ{D6pWuX#VQ{x9)uTJDng zR#H~Ntxhe8ks|+>Uj4whx40o&O^>5;B=5D*;uJoNS?~VZW%{)EAlAE8n<85&SJ3yb z>J2$!*G7OxQZzfHI_#amqEMG2Uf})fA6Awt6dnj@liC&iiF_|a)CxhXo6F)s0(>_t zZ4NZTKObY``p9OC=|#9n3TGcS+Jlt%Q^oLfvgl9p^IbU_U*uB`)+KMW2IEXpFVdYp zqF-_OWUNs~CbGBXTg3jZ;v`bzR46BR5G9%p55^hQe!m(XjdPQ>InzD7q@<1B|KCd5 zTL+hvv}83zN&84)jWTT=Z0FcgfR0PZg$K)?+4Olf9ob<@=NQy{D&$g(Lkp|ZG1V= zpqnFn~yG{Y~p65__ZVhA z2FY(l&?8)3-;Tkft_Y|T=Q8s--@3M9+Iv3mP2u@)*E;2rV#p+#b~yj@3+bV>R#N3& zt|;gAzjd1uDnZ+%QCtaTntwTqP#crM1tb$U_UHKn63p^h3_|%QvbxUl?@hO8l-hrE ztu}zu7$Xi#BoFS2xa7a!X_4xfuB!XWlCPTNg{PI-cm!f_Bk|ZB(B>hv3I2yxjGDGRz5a(p z=z}gq2)XE;G=o8~J&mR7aBwON5jWP7I^e1dsHDfikcK*QW9r?mqaj8Ypy`L6cubi8 zJA0rHm@|L5C$v6eKYx4Le7TpUHAi1OhKnDOqAzcdD8KAV$BHiAA2$kp7psly&FlQsgx(woq4b1pcC*!V=Y~tY*ZgpqMb6p1 zS#PaPRL)RR-fkEL@SMJgxZoIYwfGX#r9|%C2EM}S=j+9us<2c{+Oc+n?La{>X6Xe! z$zy+0L9#T*HEWSPh!h9#Xo1P&etBFh%KifAb!U-smE{YYs0D)rfFoZ`0;=}*4{Ixg zs*hT`_e~&fn2by%I8VR6IRE_RX{9j&T*l4L zmlmGSFePApJ}1AGEBx{5m*K##tr&sm-NN9EjGN$!Xg?Z{oz$dyI2R73z|HXctIk9D z`YwHUW>s4sl;mJ&@o(v9&i5th=+Q&}w{%oA{g-q!?rYP)l5{lO5w5+ItM5*0(f9D>Jr!%$e^ET~#Q`i$V*j$p$y z%TDnCOrwi8>Iv7WHMUHC@2WV%W#iyY3F^v{cFV{8jn9yW{&MX~dr=DWGvX*q;=MZW zYPb)%s&8hO?K+h)YMQv9uA5_N{gjYtv=s9Def=s$^>ZW)i}2i863>TNp-IyI%!=e+ z(u-h!@FQ+g!{1;-K&^WlQko(Sc}!Vsr+Q0Cz59P%VTd}H%*O)JSvT zRTZ~o56P-ofH4wH8v=+kk;GTL&T(qmtVR6?@MjewoJbVDXj1P15@Ea`VU-|!xY%?A z!L2Ex44L{oiSS^=2F%1%LZ1-iQu-{IHH8e~z?PjoT=4fq`&nuKpVx32OfP@8C2i=x z^GA7E1=BK!25&UBJBRG^?p0GCZ_RVI-V+#V6nKLL!w*b~k>Y z9hEA8P|CoYp-Jf>32Hv2VZF&Fti9o#ulhPyl5`Ef;*YC%&{Oz?;MAHDR1gn zPba6zuZ0p3a?9$}w16nv6GE34imb(-EU!yJsqrnKdPR1n+^)k#nrGg6Cw9l&(z!h> zr5o|=KQxO_it~^p5*=5!5Q_S1ETHyKUh}Zewi!1~d+}`)OXZ{MkybUrBVuxch{-Oj8>)oK88EQmpw3|!#LOb(`f)7!C%I}2xw&l|a zwZCtq`$!mILKw);v8f6r+0Jaj#v&Ylpg5bQ<~p3Xx}_#k+q~3ouDOeI|CqYh&}LMP zP?eUllN?}stbBbg74VoK`O^#p3BE5N47 zDf6_`9%stU^fH?xZLVdAmNmB|Vktz39GSl0g7g80ZRuTnb?BzaBaytGF@=8DB<*}L zR+V{9Kh}0b^6+EF=FI+UoZ`ve8ovao7)Zsm!+6Nh^!!y?8qfLXb3A1nNSgbd+x8Mn?FoX$4$p+dtTrhE5xfy zeU)hiO+XlQc-=XNbia!~jiq2MZ_=%KCo~&H`rY-*pJG=kM-F;uh<>bbJM!57p;0op zzFi+IPA2p||D;?2(ctTSn(JesZd)a{c_EofGUAqJqMG57CxYB)h(@C@Y=p zaLTLj(_WnD*k@|%~-%fIEI{Im%H#c`oRL)_*f0oe`0z@Wr)03yU7$d&+MHE=M4kGErBaA<*CRL;Pl za0oWXA&@v~9C(;(_=VlaeApSLz@t@FjgZc_4N_r7y5AFcFDT;Z+fk{}(4cbKSi&E^ Vu%LUg>ILvPjHj!g%Q~loCIIJrh>HLK literal 58281 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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_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 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 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 zcmeFZc{H2r+cum|Xw|eks3JP6QaUIqL3Pqn)KqGSqG}9P62#cj(rTrxsi>*MSW@#C zX=~a=6T}=tQ6h;T60`8$(RTlS&+~lG_kC-+#24J9WEr-PbuC=W!m_{rt9` zmcXuqyFeh2z|9+14M8BDOCZozB|aYDU-(q6I)XsKpqp1UjeTHKgF7pZT}xVAz3NeC z&=g>Ky{vIM)5-BQ&;8r-Eo4i{`;9HDbD6J$J1-06ML9sBDh>-r|+RCg$mLRA-uzbh6mVsKX^{!QPb zmeXd*g!9IIQe|MQ{5>cP=}KJ?2Mi~REe9@oeB=R!HSx;QPic+2+PuLAz0P_0FUqJ*8tWc10jJU=dHNX+8mo5=!iJfV-q9Uf9i{xVS9SAN z|^P?oXB;2+V5;ktCMW|^#?8Y}H+RkzCVSVL3{ zivYozEsjPg$YZt@wqAev7JRto#}ocJ{Q5lh+W6GI^;P^vHS1m4;IlXnU|pcR>Ctgs zjU~-DfergiqdUl*fz%c(YNEvL7bi-#KDB6 zvvnG4BSJ~dw&i0s67sEvIa~N`&hb74y@U-mL?kC0-L~*;)8vimAZO?@&YaL*hH1+H z%Xf;1UMssP9(2fdEu%9cr&I9OHDF^~DsJXz)F}z}c#j!R7!pK=v%Y6Yj76XGSfOT# zk}Ic*TC}O~F@$BT;_v;<6d$>=)P)V~s=PQPZ)X+6nQu@XUM6^JQ-fpr!VTK9efjj& z=8cKIdz6QK#t7Lcz7@PxW1WiSJB;@7=+-kAGAwHx4}O{NvBvKmR)RZ+oi(5>8d}|* z@7J@)m?%HpzqCzcOu7_yD+YP*l=<5Nt43XCj##EgWvzJJxwuD>OX~0w;|FxC;wv}{ zkcgot=LO;@+X^~e@<-A_Ih{K*YRB`G4XjpaO@27Y1DebR#yph0F1pZ8R zP~y<{`vD%`lhq)@NHUzYh~MBWC%6>c)t(6h+mKQ8d={gOTo4`GJhs%$Y-Pn-xWxxe zUXg01w8k50)8ontfxYyut#CDW?JsdksuV`N&#gU^`*QTa?y-U9GiW;!)Je)~%?sRZ zX7}ny;5m7imnHjRm8b3N09_2xU^SC?)Au9dHPXk-mzqhvC}c?2mBezyGB^t>u(|%o zaSvDaRT?++*OF%Z9c19QLneBP2Mapfll?fCBr+NFMUGhJ{93g)V?DzXz56X*vtZ^~7okh+r$pz?i&|030sSRI zS#!NTn$3xT1MkHzH7LAb)NmN?3K*g0^n9@lUAC%xcPb@E9R0{BYk0x_9DVE%>PIpEP`EA}0n;mzu`mm{9LxI5i>PZjfI&)AV-k@Uat zH4hl2J@Oa})R$M8__t5_MPoaz#cX6m=`{zfvrNh`1RYe{zd zX6Ph+jU=weEf-Wzo106=%wbdc4{!p$?v(ag&{&r!-4+K!IgO*kI*}E_HJeHM+$m9{ z-&tJineDi&=1k>_l#tFuRq*P0N8lS54Y5VEQpvn;g*(~XF3lW^pl3Z$L?71yt!aUWtd7M1txBl%v(9m4epSZ13XOU6~PDkPiMH`G_kf5cS`_ zRwb5^zbm2pOCX(isOPBeTpTJuIi6u@74L!)q$yt10uN__=WFA>sUSn5%LCCK*mE9$ z)vmjE30W^Uo4y#w1AZsUr1_Vu?(-?R5K{6S)`UsaBp96$8_(2^T4<WQn-ZeGRTR{R+`O~qc8D{anRU=4QFwQ?VB}>W zRUEJVTXpX5qdHWM;g(kv$Ep3shxW^v-8MHhly6N4eCAj(x4t@4o)_~Z5Y!M;JgiW# z_uxJgn*#pa132(Jf6VpeZnQk-Hho`b_;hIx3^VJYe;+xx*9LUe`@SVmz8>W5sk1|?b$b#B(MX@yHLgJYyB2>NVvG>I zF`(}9Lru>GMOe*OM${}gv@KK*&tPEoT`rKq%%J8~X~Z_J_e3OR4rbQX%W|5f|Wj z8BUT@)S==l>nN-Or8(8`owttu-!o3ty_(ta4n1T zj){{9OIuxn(T}@sG)1^Ils=XUq#LH1T-2aaM#qnL>g>HQ0JKcLY zU~yl|Ng@v11+rwp45TC)>Mc9QiOw-2LGuQ8rja9b<|{p_ zGd8?eAEyys3bQMfaN1Eyva>1*h=j5ono-!Be?EWMX$Cg@kH1cP%mbWc|`IIrex07 zMp6o042M?K8gb2`(_VrtP4HPDz^&`uYnLY)<`CNsf#JGQO6~ND`h@pcpNj{KnU2;q zG`lF)0iOV&miy%bIh}8$o)kPCO*92eTX00T_*O4s8~WVEk6T_Fl<)lViT2~9y^^i5 zR|g|q-FwK_p>}n;IxaSUkA@N^syE+G7hU6IY^teXT<*QC+v=UK|FeVX!qGi$tULgj z%!XL*C?nT|f<2XKO(uLo8fy=GwAK|DE!T=x+`OY3Vy?${5!DvuPNz2>cY`vlx<)9?*YcTHxu(-*Q~FDgbzqVWgis$VV`d3QHyZVN|VtYkKdN7#Ew*Xl|&oITK3DY@Xm z{@Z8`md-2X|B2pt8`YQGEs#cT&>6gzTf6(pQb$~^v3A@ZeQ2RsW{=__lhKGz0Fo=G zGfiQm5xYvmknvT>ikmR@$%lMZy~XrzGFk5pz1Pc$pIWlj$?Ux{%k$3Vbf2GndAEFj-j)3Ou$K#cKDG^+QRZq&yOV6X~WrGks-gS;ZdU;Q|m`$3w=v<@$6q?AMT2zek&5Ml)`^%%q zDhog9O`E?mO`Pnta(SVDNQv8+z%wAmX#EUem=;>y4EjD|h3+ zu$$)gaN1MTJg?H?T7NP}IFN2Jd`j>EpX%p>z8&F4*rq634@x5VO%YYoU+bOZmygwF zTvo(#KiYH}psUDRC5)a5rCB@$V0`W#jdMK=-k{X#EnkHcOrRGsJy4cT>Kv+mT(^)S z)|PLfP{|3%5rCO5Tz2c3(egLI7L}+8@>VQo}YMy!q;#z?7O4lu?skP(sP@+c})EDbP@kdANElzIjrM z^|P9y3-$>sHs$K-zjxXz-g6YR zsdc&ybekxNsF?p`RYD~( z8sXX?e=A^NqXzHiUWvOhwEef3n1GMfe)<%0+=TH^12ulUw)m=dSQCAcKz`Vc33y3@ z5-Kx*py6rFG$Ph!zbIBn8 zivs7;OH$46I2|Nd=T-sMYnnMnENdUR^jB5^9qFxO;}V@rRV~9( zAXL?#Hr1kHe}`&T)sqb^~EkQfb{rCN$HgR-=zg_E9`T%qdQP}cQ|0>_g;|_+};U)>sTZOlbbcf1! zp#KxQmTZ)7vJV` znAwXm(1otznw!mM3uO0nc!BEE^QjNolnSXHOsGD1{KQkO)pK`O`)B^KnOd3%zURnx zt30y(HsYT!JCSFJjsoZ<*;m@mq0Dd6DRP2kPfoeiSVDu$HAbeZXOcf9LrgzSjhpKAk_GDGfCo6H@wa()vzlf$Q)B*amI~^p%zDR^64CLuLF`tx zb`I{5`4V`so9X~MCLdOIr7%}AQXoOp>Og3Yn_`kK^tATcUn&6`^(hn&!tv6fPO*h` zWZHsiRFG8x5sRb;|VxBxcc@ypUMavMO^u`3?{qmM( z^(g>>m87D!;{!fsakl8oQd4-X^yOYJlCDlll5?Aq4wRrHiDvD0d25}MCu-OwxP8Pb z1oc8%{W`PsGuUs+z?}HUDD<_Pr2nlzD$Io2lEy}TlcCMJyU+^_e%8Edn;FnqoJYjk zPj=Eu6dC`{Azq>p^tVds&Y^LX1ORFVoc5jx%t;AMrP)IdTZJ48*`74DQu_l zwE|sF7ME8H*BA-iqn#p^SLO32H^R7muY8sG5y1peYsny#jqf|iIj?n@UWF!A&hB9U zh2oUcv89yMT*>|DntD&OXVSO5+Qp}psCO3rbAHQ}%>$E}s!AUg)!utFitT}|?GNL2 zh^(Klt*}yv<$2d~BgOCBpdom^b5IVHzWfepg8mYwg5$H$Oqw_>Un6ILMw1ztvyR0X zRNtI2kD+>5JYxQGZvW#$>x5wd$ww@mxsbpK6oQi9oZ{k5VEq5`>S%x56$1?N#NH=*tR-Y0&!i~oUPhQEhNyVdK%5&`UXjF(P|$P+kJ z?bNF#X8!pX(5wR!=wSni5S#ZFViR192u&#u*!4B{mpz_STs!%{dd0O2RC?;PU@U(u zb`U`~{7u7fo|sKDOaX-JHS>z}V}Tb}MQdlDcKo-dILmSDSS*_h{B}IfOa9bYYTWS! z)Ust#)f%dd%sHS)1lu=5h$BywXd=?R{qvfH9@h_1X;@mFOjY7FzqDL*S099Kt6vAV?cp2gWu{m(QTwwahTSwLHUp5eLFn4>#;s%K0NAh=T7 zO(a#?Bm7-a%2h_nq1Dq>dExGcOSUGW55OrRqHUR;I1FHw=Rr59OyxwkoI-w0?;DLy z|7`-J0^a533x(fKBu2+Bs!-mVyVG|21?Be792)n_$^D3eH_>}L+ti92nFfH*YF{IBfUHyOtBk&~e%y}Y|bkpL~J1YeZ`vezIe#;Y)z<<|A~JTlPHMgF;&79sw`C!0tv0UrQ@;pc7hb=0Xp5l&7~cXV zpF*o1007-4Cg_^C+J#0If;S z63bHhl5U9xhITK%meLoPW>W(T>KmP?3S&e7!0x>kc4ow;R3L=r0IDy()z}n(o9~v* z7grSfcS}8i>Fv1;eP?iuS2ffHiz^H7k@T~fMh@aE7Oy_nTVYd4I?T;TO2gM#HLV=3 z1)ANsZvN4&`BHQxD+Q@tX*~co;Jgl6V>UtPE(by6onl4}LaX_o0G3|=#$vW2K-UpY z&b_yNrxB>-vHO{aoBg|{_M`g!fd@)WdjT`+(02f{jnx<9Q=9gqwVVshRnWo>Eaqe- zpNcI70&aB6>)bIB>(rAQs)8OU6UbD2+|rXXL*9e)@VI?wPx+krOv0zdtXz(uVQpM) zb8Zh38u_YOlP@8wt6&eQM0*!nZNW_D^tDaoeG0}!-cfHHIEM_|s-a)k!@NNaUy~43 zdi<2@lH$n9y?k+^Og%rSgeRm_lKt(!0K<}tX@5yP{JdpP$Jljq4Yvz;?BKJ>r!>`X&P&Q< z*WzUIC(#E=0c}J+?>(mm05;!BT*O5C`^f&Un*itplz>f@Ip~Ud;bRT<{rRSVRNI=Y zRz0bBJ3I@_U-PSyO>I^(Yq5W^9Z?gK0wVyiKUori3_uLjd((O&M5`4Rj+jtRY!CPn zI2$4*myfNs8CBA<;mr3aoHjiUzS_1C<6iwT(qPTZX-z&0fEo*g7X6?V(#{s@D7L3) z)Pt~^ql|b~sexdW{|ZhbLs3mB(Y@BUu(m)A6%(PhI8bb+r_fSHl`)*7ce!!H(-goN zEWmZl<+4(h?sF#}r?bw93<-%`9@IJE$8;>N*#v`eJY)4-HTy}`2Hs>Y>id{1SI^evdyi=ZUQMb6^Nc1!=|Id5}&_vxJl{FUYvQ^|^ zly7+ex#esP0CqZ5uW|8VRGDUv!VIdXTAQg0^dv`M_UF`3P*Q>dWvmoW7pw?ep7aJ? zZN%u#0;3y1;E-OlvA(Lm^d^UYUPl2};;9AmY1LvW(J@ec_2v78mgQO{#ww!<(y#iR z-7W-dak^(8XN9CH?zLg-ki;gLg+Agy;KEYU0KyY~Qo-h@mG?1##QnBhC!}GSG5oMj z0K<7*(N0?U%1lsphdK4Z6b%n5gPcz)DikeTd6hy4$qd=4x!RR~n3=m7#GhF2ZF~O& zaae$a+FSx1Ip{61YZpxn9nR`75qEDm0s<1 z`L=lK+<}QFUHDUeBLtbJ=zu9Z4Clr_lnAal+BhrGtGOH8eGwX(v-FGl^j>TNa zk7Z4~vA&rjieOxF#o`uD#hOemr1#7@YSA7tid4KHK`{HA7eLR9Eo;sb)c$Sme+ZA9 zrp=xis)gVtUphcsnf^(>>d27It{DdZ(B#2X)rXB|Mrv_E%Vu@#O^3HRJpBUFJ#DXH zcbfxT8S`z46SRvvYV)wX@G5sDb4>cwULGJH$0>aQIv-_RMK<&^u+eqtxwipmF6dPBKz!?dP@fRA{4b z`;X#5y%--*MnQlP**;~IpVn_fteISEU`)Qz0^c=nbpAE;cvh+*!|(<=G++`wphvPx zm#SPSh=-+-TmCY_{4|C3Z}J;*Mnk@VlWAcu5V=DdqOi9GvjEc++p#**{=gTQb-^g# zkK*4NDj4=Zz6T6)_XP6Mv%yaUCbq`iS|3bU7En;KPN>Ryqs5ED}Ehf zYC2(vzRAt4zLACtP3c3X%mGvM+zFYcih^6=O`vc^xJym{RqWWPM>4cUcOTG!xme=} z=}n8D6yf5dn!NC)OrhN2EyB!`Q6J)3dY;Y_E?V(8sVJyS?3jlN5D`X zah;0VfpJnaJnDz!^uE97Id`6*lJ1iRmr#6?*=~)yHCP~x*o2zdAnSnnt_EoR;mMX8 z-e9n2>)E6++n$J=Ek)Ka8A+eP$uJY>3yCKSGtIKtDf5x7Gh8DX?LJDBxy~F@9-26V z{&GK=Y#<4cPw;9+S(5kRzSK&&`64%6(qHmhe~+v9yN9|yrV`Y2HM5rwBebsYRgvr5 z(zT(W4>J5FO$gEF0;>8raCvMrviH2g$k~Thmymw`6^SP({;yF+4hL4F`U86c6fn^y zKr+3k^nu?A@hmT}-|5X><75*(dMy@!rOMqIgL>_X#36g_nz@fzFZX$U^i!KqK#d;V zUV2;!XAOqmAprn~1ppj?*|_Em5e}6qIi;M#z$wDDa=9_ZR^`T2BoI?h9d~@YHFNR+ zcJ`(kFQSHEK;!lTu$o1agy{0rX>K#XJP3M|`I|(1a)RP?u31+>mn=#Q zm{&#X;=@8t!0Q0mcSnxw(wwci`yA*mMVY9_$q%SXpEGj4D(>h`3j>?i3#fvQq`U2b zw#-)m@`;MJ=UsLhQY&p?FSNWBiG7ERgd8nUhhLYaDWtivpvvP+G1QdYPZNb724i+{ zIUlx4b@%W;qVa_1I$9xaJ!9O|&=AJ?N(`%x#Zn9o{Hl9O07W=%HzL7p%U;nu6%M{{ zTR;%hh@Mc;U$szpUxG$ZpcC#y!o)R--0qrTfQ7)YRl$@2QpFUyXYp+hvVN?0GAs%# z-YxN^pMc+3#mB`ueMnjBuR0#m`B*h7i4wS5mKc@el(_FD$v0>8&2S*C0T3Q&HNMhH z?)PWdUf@`r80);Fdz~Y8XT86JaN&X&B|B0JC$%3vr}Vs6L4-ZdL(H?`=ziz-*;Hvo)+n;TDZQ+h9?bUi3CKXu0 zdV987;@1WJvYQupblj94rzHEiH36evBW)>OuHcKZQy7?@y3F~qCSqcL3H&Zq|6i^9 zdwjeOP@&C3L-hmaqA+Y5u{h4;1Vv-Rx6pmYrwIZ`pjgEzoR5ERGNFbmZ;z-88jaL! zje4c}%OL%yibc%My=?hhS23lfygT@1901i7Hs-NGNyES(YFQ96bz58inu9#gxCsyW z*?;?2QfohW8`iBo8unq>#$FS)w_*05;MwOlO_rJus4cBE)|u#t$aHV~>L7+~AQtyH z%%czO26T!F4#~a`9EMYTC*s#qLj+G@bhHB!o0BSKmYaSUHs2#>M91e?I&9wQb7yQH z-;y@f^59bsF`om#vjT3yEbe=dI8Mjn17*~2xA;;h0&lyG&O*KE4^jm9>IE zx8U)wg0ayAjKP6_zS=1zdPOM);%PJ|RBzbaYFzMZz4x2}G_4X3@ph{v=|K=MrMwMb zj#lhIB$N*#$!oxTEvOdoGN5{$4On6O)AP#-FC&l8=QqSkCNPVr-G^4wh__+$V#N=>pThW2FMvJ}Q-B1KCD+Q;K*DyR zp==9{1E9MfO&z8W&65vi$fLBsZ5)EKy4=Ovzvt!^B;aQPW?IUD=YC8_`@CoE)zxs| z>Yrw|Np4)|HcO8lx(YmctLhj+KF_D5+y}kgVsGMGXly3XYc^sF$X9B zih2oB8%s@Vz*v^vZv#kN)-ufsOnZUGUOOc#m5{nk2zn-nTk$K>(dt!fv5sTtkloPw zuRlHmdZmu#)zCe9e+L07jftRD^6(1=?SK`EidiNDdbf@hOn$B>{R)Tr^k$HJR4% z$Ye$zP%%MXjCWQZ933l~%h3!6#_f%zr ztqt8}F8P;hg3nYjBHS3(-d`mRg?ZXDp0l0%W%-tan56ZN(w#^SY~}R%Aw=f4%3EC-xcO7nF!HZ77Q$`tz9%Xx0P@t;h{(q< zP04X27fk*W>tiK-V$cU(l(uk$98i4KBp050m@z3z8A>^sblalwXjB1y*~32~>S zbMzkXCFtBc)!8_J-BxUMYKKPfUg{#A1gqFaPh`O{yRVJOb2#k+LIs$pX2oDMF(#E^4het;6^yEIF ztv=bouT9q`DXC4G@ZdDG6qgPNg?jT_b7-a!E9U?KKqexST6wFz37BsBoQr%H&T96h0B0mh)gxxIl`sR;a57B#h=9XpqiwD`~#Op!n~)8jI*5iXxq)b z2N62taERY!>8j}`>jM<^9%`rRe5Vl$5Efv~uCE@{&tpCo@=qmgIp&evX|sQHOqyqu z$ge5c*1w4LAD6}GokK%2cSDVz^YZTX+RYUJt#L&qP#KRd6H~;r>nl>Vz~xRxm})4X zvenqvVhIRQlRQ5Sq38%6+0MuFQ^mynR6tT}Ryd6gWTzJ}&mzt}OO*zXDkf@;Yw1T! zLQkd8+ID$c%Q|x0j0`S(yYj<810YNl|K9&Z)p*_*=nY;Fy!jwAHJ&n7^GD@{01wqX zsB5(6N%N!k-Fd9O^xAnNyd4-(NCn-%FYAxIQLqT&fgk06OL-j+l>l}^hWNif2CMRSKDNoC7=&Hk)Lhg8X)LBJO^^oU zG{1&NwBS!I^+{^9HL@pBO{XQhPGLIxd5T2%JOp2*>egA=M<4tP=KE3HCwq_g)BsSU zk_gAETTdjqo=fvIrS!@hl}piTc8%y*uNcZ$=|P$Gw(;EJbgd>ce5YoT8&d7!c(lr#mO?(}{*{J5)tl#RhR)q+#PY)4K&91aZQh z7hOmfV%`b>5@|oD$|ae-2=hiKL=v&XJ;22fkE7X=w!AjeUZ?wvx8%JF&(b4R(z`W3 zE^0YCAAQPoT1?jK8iKEt7<=VCP*(D91pRo-TcwB2kp4RQB?6!)ZDs5mWv#)KqDU=2 zx(N~xl5Zw#o;X09+?MoXB+?d9-ycbSH?1P@1-aGPjUilxDB!6oHZd|hnVoJXDeQq7 z=wkt@qpFg?hvPA(`&*KL4jzALkb z5ym60`1#PFYRgq`ov<2bkW4+cn4sEF&EM(N1LtsA^d|q^1p07pZ?Z&t+2U}}Mu(Eoq*)kbsOzj7sm}LK82ms+``Q|^a&}#a5heLE zhwdK>Xg5qawWBX&UyN6ExdUPdH$W$_Jm-9L6jjk8Ume{M(xQN`F(as7e2pT|``K0J zCg(4D#J7fS>@DzHO0e$SI>w{mJ> zep!F6*&R}mS45Ao1X4{$p+Hd6JEYOc!$BXr%(!Oc9hwU1fmgA~mB#bF$-h17z6qna zKFPOiPc}7hdzF#Oc0^;?5*LVu_ZaPBs#b|BLzhznO2|{v=&EYv&`oi2@&{8elor;z zMHp9nEbzI9Nz;Q}gE#Y2tIHW|WgGQ%z>mv|t#_evPryzDZiMk%o?4)*rZg1Snsm7n zt5o#19ZFuNWv#QFkFt%8_*C7IxOb|}SK6x2jw%9#Cc?gL%+qV=avMnsIrxs|!B=+> zB&KK$qjczC7w$lt{}lGmKY%`U7gO=7LrMTrM(wGp`<2OgThhDa627$D^om^4D4_BM z0=%g}SCmLNPJ}8+`b=ioQGmkzpzxz)=%lxX7o|XzGeJzTZZ%P0R;!FsZ3WerejHf` z&PBZcl<$+90u;3t43Q>{X7an0S|x(%%0l4zE2EDxAx&e%)hP!J3-elQ4_@5dp3xYh zF#FNyHbIrtB?wrqBWe2ZNg{F;2$#{j!@0C_2P=uJEy6_qd7~gysR&mZAYxsvu}SBB zgcV6<`M&qekqrT-?9rFb+H#`W&2@n1QtsS1LVmT&-A@*5-{bl3Hb+E$%RQ(QnXJiBSJxDau)kW337HhnPD|bxrYV=VRfncAByp$CZkQRmm zNct5(DUo&^24n_6GFW==^SQXkSFm3ZG>VWn66ha#q187(Ah_w#2P^?8Wz>4BK3h_MyGrLsR7d$a3(By|-cQzE2$tivh(E^yj_kF2b zL~!-J1tjcj!CSxS%B=8e0C+$=n1fU01CMm1<)=#o6uP=Q6_M43J*^ZB`fe%%co z!2F@rRAWBNR6LD}=Gj@M=l9!?>6%}Jt8iLJyEC^4V?FO?IsF$aKIN9r2B8hj;VY>S z!WEU3$#fm+9VoF%H5dp4Lh|Qg&u{0^h;2fM6>9JEnJEoM3F$;e7ej09{!KN z?nxn>KAjck5_S(#49HK)k1$r~*qQnUg(Sv&{dEmrC{V~F>=^@#x-6h*)(Zw(0wm2I zb)y-bLONTvX8TWzGY+Fpx*w|gMca6jq)c@)E6s{d@qZ;1N6f+1pA~+ zM!rw96_K%N-QX|4lz;E2V1(wdhp@i*ha4r>DokXIu$MCG{X~1;9v`H7k2F0E zNeDpa-YuLm(2~4xINw=g0yzF~%Ni4;-0zs)Q5KR*klU$$BGl>A*Oo+t!z@q?4b5RI zTpwO@P-n#-89MqqP9Gl{l*yNQISNT*M0{M`hu<^GmC<{c7AKdr8!6jVUg)trA2bo~ zpz6fGU+!-J3-#FIxF`g}(6*u!`*fG*t}yP3HaUUn&s%dkQ(*9`+Q~*fe@wg<*5-2N zj3WsY-c$K;wEe$$^5NPm8vwX;lTpirG}I-faSMKg&*1TcUz5Ct?wS){P{?K8Q~yNm z$AdmM+Vz_vGbMN00F%u3ukVyfF?9;zlw6ap_~Vo$Z`hkapoStduNbsRFp+(!DbOKc z`qxmzt@jZ=XsA!8(DRnN(8)a-uhPD}UTXNs>G)xIptmjc^$>rWaB|J_L60WMBt?$+ zkWeZS&8uzuZ|UhJaTPdyVrs5@gL+BtThP8gscMx`ZY_d+WZR=N{>R9`SupDiwb{?x zFbF$15CE!iCIAd#o~%y(ckq5IMIBdh#X2cV+`Y!bDgMy(kK4R1;ig&CF|@|e^9{Q7 zhI!xPRK3Po-(9qaFGy;tep_*$FN9`t^A~p~M7*bJC~7k@7+#OC-08nfcmv+UN~KJ^ zCVYnH*^jN1!s8%IKSFeFbVGYR&u5|~{Z(7kw#db`MP}v!yi6*vR z*wC4NW}2Y#cd8_J z6xHr2j>_>Y&w2HLm~7?Mc4`38V}-GY0y{KVDD@4 zJQ#bnTbK_jW$AdYW>?^(8BieRmcG5XH1jUJCG;zh7Oc(n0#`^WdS-e_4{@cA{L#p-sX2<)C&vv4?1^?uz*kfG7jkXwaNPX@Iu!#mw}$DRHr4UH9Ja85EWlz zC7=B(*_+~})8&(c)|W9}?Irh4VGpwpf^L2blEnJ!UKdZ(ypV4fCjz&o+>u;KgqQV& zDq=lhraU-xEhFov+#;ebS^bjcy2fry-FD~?6ntU&3kn`hAheW`H?u}645$g$j41U+ zhK?^@wvBwOUIa!!Ki7bwAm8C$G4iZK$&2DTAd^L?271_n;#yTPFVU(@=q^n%y}Odq z)pyiGD|SvaQ<^*I8BUP~u=FqQI_anpskYFo$NOsTVZDgfEtQmn{u`3|NC;vzO?vC) zC7`Js_C4#V@(hKq2L#Io8DXh*Hswdl>}uT(?oZSTs8v7jUkfV`A6CnUBIzGle*={y z`yfaJuCMwuf%;$B3$PGF)vT|R zOKym#01%g1#*W4OYEcwFi7G7i+My9c5$V+v7eJK&T=bfgjC@m83?ORV-e)}*v9cks zlyt)Ml8msx5UnDNl{1fkj-8nV+%%rq90y>=vGyTUj1`tKIS91@8IuToUYpz6W&v#L zO{3LGx1OrhYS@LOXI9o;4s(E~Ihe}q2++euN?-|KgC;$H3X;!*a+gNg0shm4bS9l2 z-w56&coKevws1xAF>|nR@JZ&#b95T49$tR*lr^(bg?s9yrT#LwO9lZHrhRk-fB!W1 z1ZDp-pYb#&PPRBmM1U5W>hJAGJKk_bNX^(ai`GCJIZoXrq`q`dM(xgKl|79K^y|D< zIr$-C>J&zJDE>p63+UMK4Vhn!b912oQ0^1e8paBYQUlbVfXK<61z9P9Rb~Yi;SeIP zB!by2{0LW?qH< zvG_y{>(F-HEZeNaqMEt3jKGZD!8g_lp0Cc}@htXpt4snW4%UCydbP_XLA-sCaQNhg z5_fYXe7edzS5E8FY*QiCCi3t$W6gxEbnfY@QItUN4XgFl_G8vSy-HQ}X%utt%1kfT z)K8mC5(2Q8yOSDIl>*>wy62Nc;Jo58Kz$j>i9boUZS!&h#^kypS#gf!d84ivu^Imh z7vp3S%6@HLRua;@&=u=6x9LHbyn*&ZG~v|ITNY`exJHFoJxq>eXO3{$QAE;E)HTU- zHd1Uu3r3>V1L5>$yMe+zs`XQ~ljA>-xD%a^GZ?h%v`lD2)kp*8_L0^%cDQ@U6zh zzzI#!CRc#1l!d*`9}|5tByhin9_A2#^FklxQQJay-V_S1RiZa|=@*DT37nIE{lTJ% zP+{a?^qcDsPEjfofu~D*U9MQ0Ytf+|cxl=<-~TUI8oU=i)!W{J*_RA7nFNTSt13tX z?s~NGd8WN8aN19Y`8av&^WiOzfC3#G`{iCub3xB90+QROY{_sm0_u9cIiP4N#G^Ex zTJZ#9l}bg%uFw4B(^N<=Z*q?~T{d~kci$79%P8C`FNgIXs4!r)0+JAZQTf&&KnXRD z)>!u`#G+R0EEh%JY4^7QT2@@fDnRj_jvNN0#fiZ2pTVSsTMF0E)@JK*__gE1fIwH9 z{Q1X!S=E&$LVo#>`BeH>U@$)5Yg1t*7>rjc5gBs@lnO-dnb);=hvetxg?L^8{{di( zvwX(_ZelL_-G`e}{y}wHZ~Q-xCnBBxZ9H-2BCyhuFW1H4(J6pda#_-Q;7!oR>M&8E z;>Q#Jlz@eA+(WMB`_=!`DmT9c_|N~mx8Q$X_V9o1)fMlY*L|1w&6$2wlntW3>|%)$ z&5j0*v{o*&9P*Piyt^$}m zSovroOY~z6GKVDsYJA+E6=dG2*H^~>`#KLH<+k-vWZ>gTDj97Tf zuM0r8k^vgCT3JrxbdWm9YKvn$g=h{5s@p}<2GIWIPw=-lec>LN-T`tK{BVX%M?fWy z`?019&P}f5U(+YhXJEOF?L{r8iP5H@%-y=r=QHhF;J+uTAPt~$C@0L(d~f;gxc9=K zx-r`9&*HuT1M9mFCK51_S3vJ}#l|nk8Yc4o{-qXh&u=ZmHO@J8!l2B*NCI8^G5 zwdkDgD--_x4O~u1(1&_4`1p7JJFvXY{l8zKvPn!Zx=45A5xcj3e)|KkLu~)mUw;G& z0oHu-boJjIc^@rkd$$K4f1Dg>1aTz)d4CIsJIla1WA0)EH9=-?vn5O5M}Pfk@H+P} zU#yi|P4c?gYByf*9%;+HbJ>!{evafDzwgcg?w(yU`n_03@^N}Sh%eZ{;J^I#UUxr6 z@3Vm|X#3~vY_$^ju|K!J4>a6E6>GbEl~&>0E6h81FTrX#(kFgyTy$B-cAP^%%i8ZC ze1k@6;H;jYsm`^AL>#_kx&k$XUn7S?arYwzby_}u`>-(kss(H2Ec<&eGq{gb^9WE5pm?%4${_IM+m+4jp}z z=h8DB#s~O+yq)8CC5C`Eh=8CPGSLxT^1cth2CkD}(y_5(S50^WPod!@CMHAHW%ID8 zM}!mN+YZ%XknLqLzxSyF*vj6al7TrpWll`JB+i!9^hHN$xU?iCPj1b_sZ!Gz@dJ46 zz;z3g@qnBz<<_jz6{i_Ys4#UgbJG$+|O z$a-V2q}eCx*uAG?@(PSBITm3SgX{MC)AiDq7?*%ylzT~Qq zsGikHRTi8|eWELMLG4Zc-5#mI&T9r&;45# zirZVf$HsY<31P#-A!uTV9Y^p@_E>>0i>n8s*58-ATAF7ObjtgSmsG4;txS>#FuIDk;bi3}#o)w15Kx3$01}{qst21P450SX!dkbd9nFW51$?PPi=Z z>W+!RGNu+aq}Uk$g&m6%E`w{g)-&t&$99V;m7>f3!zP!twqDRl3LHB$J-IJY-I>-a zu)09x4J;&y;Tx5uWJh6zb<*1O`s8W?gcXBl4`cj!&J$OrL-ExDFdx@+;IyvS!$JZr zZbQFzlxZ4UCfTYoMqcJu>aRNg!-n)^99>nx7W?9YT=jCe)KIYJBZ|pMVvy$(esX;2 zoYl~hIJe5CP`CmM3z=}SoWJ3eSlCs&aH*D!ugNR1Hc@mG?(X>!%yVoC8L}^ubKQvp z%yl&vIHi6P5a6WDU1T+OkTcWr5z$h-%oL1xX>Ug9;gz1NkQpc|>ud)Z#W$t&+XsS478(`X zlD}@wp7m=RGlCdmq2vte(N((3y+hNtQat;x5Pe>sahx;gY73QhIbkkC+FCKc?t9EY+^ybeb#X7z|GTqu^Y;ZW=X(*59 z60Dfser=7L22p7^##B#d`q?+0$z?|0+E7E^{|F(mqR%RcKjD_?wl%*QRSStGSGf; z_X0~TANeh$fzlfpfNMIOfpeSLqeFi&{mN+9I)>R)7j)p zggGs1L%H-wm(|c`t5I=pmoj~^2SM$t z`s|;NYusj{w8>o#4fI<7>HwVn9HA3t3}x|$Xe=aIV5UKanS5&>1WH(8mU zkI}>bulC+Es>yY08x5j}iXx%{(gno=0wN&2DPdX`^H|s)-WW`{oG~Vb6)eB*Zi{I z%YEOyHGkpTwtw>6u$TYZ2o6|LU|y)zR^iXZtg&459r(amoLsv(|LJ=J{a>heSM|8J zttfvy>uc!yOk(9@>R~(5pY9UPZ>RP^Z6f!NvAdZ*I&7#m%_@R>&&O8zo6@hBIN1un zu%eQd>t({N;}t057yU`7&(Bx#ye#&6a1Q4qnl9 zzaNbbuwg#knaq1TmS#bY(I0hAbUl%|C>&%Rzw+~b#$+CrNRW9vvUsx2ar6x*VgQ7p z>ZOqUTb;>Ff^d!uN0aokOqicszmNW!1}7?%(C~ri7zmPIbm&+0C$gZ$%y2 zlcfyeQc(*Wy|{<8|G9A&hLc=QdQc*0`|a#I)PBG&*Xt{gc6m?ns(-BT;hAQDVY-)} z{=J^o>;2Ocg%M^CL{SIG8;$0;;&UOLE$tgchIWHWGq98|Pqvadkbn#6NcSCjQaj!uiYpX+4CK3w^!m372Kx6kv34Oua-e_QV-KBcY{ z<^N_Z0kb)tb7V9v&+Xs<*`><{PHX@ucLk*a!E0@7yH{S z1Yh+{rDxy6D_Ml|Au_5BFWk;e{m~bgaqGsa*(HTGrOIDl&LEWAJ<8m-c;01W?g#Vn zyj<;{OD9oeS@riUNRN)LFcb!vV`}K!U$*Bj7Lv%tVHZeEv68wzYyGi`y^*^ zJ&x*S88A-o1qqy=aN+%oSV@)Qb$YL3nz%6{!QEnBjkncIJqh=B&y_0QLRucgOOc;U zckw8Fq4W%Wc->pMJS9J*yMP@v-M0uHx?6_z{IyuqGpuv6kt?W>zKj2HhSJ_pU73J1 z8yO2Hib&#zWU9w#dMrBYDF z2GNxH+vX5QE7t~-KP0_*mRVZVR7WQlH6oAtxaaHU1_`u5a`pu#c5zom39ouvuRfK( zbehA>u8^DLuEVMBJ*cLg6di0mw4BP^ZeHG%k|8rYpTab_T-|wuo#-$)F;$~$LB@L1D2pwNVARK5>2iTq*hPN6{HXRl z6VGa7hWnzDYzd;g+ADcuxpQasRbU5EA>NZK&Baw$1>LK0FFD`LlGEH6fYb|2p?t8JUEHjeV6;D<+J|DfE zCuq+|fOsvV^uX5jSB_AM_Sn2Oo!ZXv;+P$3yXFH(5{w+j7A_<9@GtWN{~7RITfa@Q z-wFq>Y8lfh+C0M=7e=|P*0E*G9s59ypCh(j>MPKfA2t?+3syElDz--VI%@mXmh+5( zIBY8ZS8?kacJ$)d^^LiJ%B;FGGF{pKOJI6pETg(qY=2z)dyxhGD|PLz zn%m5#n7v2K67~x=$g2`L#?>eChqa zKLR4r?LQ9=WfC=8%nCY{=uuZ6^~t>TD;3&$c`98iy!+;4YL@MFK*4Hg!Ad)o^ zs+cHRRv;zw;8-~ojfL#1J0r8@ik-Gd;V5(X1+Ri62{Ci~1z%$1MHH)*eVLhrGJqCurdo_;%&G{{2FM z*+Dd0_!SBzLKH#$>s2#3=oJ6{tD48PsDCL1C%UqtHdkSztWsv9%Asm;XG*{}-90RO z&_x4ZuiY0E{bXRW>#vu`l=i-UVWYImK7~Cf$7i>b^lx>){-(<0xtCo^xwB4jr#N+M z*YmsA^B1Sqaf?!;Zt|&kP}IOnMOA*Y(pd02Z_7ASyW%rMmP9EMm;yHkgHhWW;v6T< z=8(R6ZReqW_TNAH|2|L2yO;wxfMs2eh>ErYarxT`@~2RN6oXa5#+vyw5MSP%2hs*R z(duo{3b)I=-%uk^G0gnOG|f*rLwWQtWSWH}Knhlso55vj;C+Oj%#mrFw#;M+i5w+6 zqdrpnz-^(|R)2D&_ZN}6T5FacxAU-=+){cJ>Eb`a9x>xA3#l+Pck0T(=#hUvrezum zG~PSLE~?lfDJ&P_tH^hYVz#Yi_do^Rl@EypU*?@pTmpD9OMdJ1IFRLx5y2NSYWZ!A9CO>w>;-|okyc|3zJ z{!?RXI759Wzuu^_0Fq0 zuUj`p1J-TROifpx$a5Bs`ADt_6xynCOpmWFtsqH3e;}8f0rB2y^yDzU@L4AajrQG4 z4ZpLF&}qHLG7@qY3cYGwu(MBx+ckxS#z7c4-~@gHB(LpCxLa>d`Ai&&iG*Zixo!#v z@Ym}R6$RJo$CT+b?zLCXF#BIz9?Fa>oSV%xU(3m3UzAjkm zh6|_z)k8YG7n)6aEbi?+;uH&P@?z3RjOLlKoDKdRJWN-fxwmVm(3Q^eVebbti#D92 zs3Y8*)hVy)rl)(QETiRx?w>QGQI~5@l5(?2leMvz1p)***;7rhp#+L(#QPSDQV#~= zmVZ69Mny}YTs-PLIK98$sYfUgt5Czx93ISJzVwmhNUHeZv|WlHfkUhR*7)76>uI<% z3%fNMfVkCtg1TjYOVTn02H~*_#pqrr1^jmNX}Z$vQhk6t>tOaq^tR~p?G}E`W=lN{ z@_KYfyMenCEiLM21q z*Oy0gXXpIgl9&0;rLaWb zZ1VsT7%riTZnnM55wtn{)2S9}Omn0~Q7H*tB!$k}2v+rtnw|1rUoq3p&s(Qko=n4O zZ$CZ;iosZ292D+2cJ>18F__^`!32t*t|d)d+DPb_=aA1Rn#go~qNGDRLKzO z<`-QFn$S7AX6E@P;%_uI#rEu%b8q4AeteesES@{V}r+m<`HuCYg!q{fX7=!aKQDqMdLRf$3eoxJuF59LF zAn8YJ*`9NkX+BSu5zOKmVy^itgObYC`1%>`LI$*%yvfEqDt)l(;B~}YRnnW1tP7=l zr7aiKhDx1*ahOMn6i0;`o-F+0H8qx%>g=e91qt4B6tE1HIWzAVeSD^n;vMux*y;S= zJ_;|m0^R%GRC4(b0^cBFhTn#q&bMIurAf^}kVajwBQ8>}*kT{ZH08(+k++VT`QB@& zq6RL%YeaLfrNNKuGe^d5iboGH~b9XnK-pFpE7*#M%b z2G2m>DgvwA?5&|D*(8Wi{n2YZgtYFpAZOZWhy3@MIo;07x%*e%rt{gLe-hKg<5B#i zYOr_K{q$4c;2iK0=L1jVi@8wU?5_oMr%=0?4%RU>S#<3TAHVkHja$1&OvT;#AzZtu{CYgb#a>R@YCbJ<{N4|F!`;lim5ATANh8o7^ zDvrPuR>xHAZ8Uj|>U_d;&Y-dxJyX4hL%Wt)WuwwMY8GxG4_St5z%1@s;fuCdlIHC*AP~-GKm%e$WZt1DLCScp{20&$2leGEjFiVr0Xfbc{__@yt zCL5LXit-DEQE2PwQJmAD_jVqn)Z^_=b-}kKaH~j?f~aQjG^M4gWk2d-EXhTq9>OBY zDayw$%&2dU@j#D)$cNqI(MT}+IqOhp*9X)8d^^we94uOXhw=vt7{ zZpDQ`FG5Zf{oPj38YPjZ884f0BQ}GT1L`Ty1l%%bJoQPMIbD91FBBhwZye7*Mave5 z)c$o9j94W-FRAMQy?w$fnV5Ayroc|g{K%0vwfh`ObV%2~G%_eE%iUap%VOX}6nPCU z(Kuq^vmT|LoSm;?5w3{ebZa}s6T!t{(qeFC{mMwq7Y&*}3DkksdZFb@(xOlZEd>%!{aRxe;_S&FD znACFZE*0KDOM|ep!a*qIwC@bfNJ8Y7^yX7wcdI6w&5PZn`3wv~{rT8P0*IzZ_#&@f zV_`4JoIW^&e|;(b58tKFV5#%@Sbu-|cz;i>{DVCwNRd*%5_6n6UekSbtDPt0!sp}T z#fm9VA8R>1Tu;QZ@b)Qetj?l+I8Mu;b|EBQw8Gucl3vdP#ge2K7yKJ~%&ie=i-fi? z>m;fhxeC6S1Di8kS4w*nhmf+zVjEIJgyc}qE9$Mokgq4EG)x{0;$d>#8q^K`h6Xqc zIZ;2hg_R@TA6#LsXa%~SS?TvbC}i*wBjNlF!`)$vF6h$b{>~kR;=db8&)(i@-gLuK$b?n^Sk;dB(GnxG4RnOu{>za7}PtMawdS^rmn3vtWtS`apJl|eLWkF0_B>4Db zgkU=KiuvfZS9nVewSn@6+uPMHs2$YZSJ$xIGa$`5-L!!l%sDKkdRWNl8fH=C z3C+6MJk_MtRM%m-eBLnes$-h&c>ZX(DWSvdvMpL8Pu}eZ)LuJoI!8L$u2<*EhJ15R0gbsk4Eje%P^ga$d~}oL?xjzE_~;dnzhV=! zIf(dQVcq5dmAhp~YTLO9OP?geDi`{4+YVFzUez87oFg*cZ0E^42NhBtg^s;N!!m?r zZII~KIS78V%WaU;KgjONg&$Zs&My6Tn}{{rScorL7QGq{g$?I^k1u6yj(M z(95OnI^Z$8z#NC#1Uu-ib?Fhwv3hMGR$}{B zFkKU9cL;mot1hELjHj5AQCG71-;Yr|`VQvi$F>OSR=+J@AfrpKNFA1i;)Tyl*BjJ7 zMrk_K?PJGR)h);Ja8aR0?$RszzPgHXo$u05u(o}6TQ$wGi0usOw^wq0fVJ#s zT$=#$JrM(=$q^=G$B4PG+--g$o~!GHJ`gx}xdL?qF0of;d91Sdel3aQZGlQ(rzrZL z+|1Z8R5asW#$a<)TM#!eFUbSHXF+W#@iK1+Dm}Pw2hVjV=RMI19M)a)f7EhKQ6eX# zO*b07TTiFyAP=>;MfDv1@NIjD8&bc>eOfP%wS5t}VqcZzY!16!M|ub9p2gP!s;N#i zvCK$1rWrqXSRnOzq^pSH;K|)KODDO7c@F$y3vVo}|76U1>Cpvx z*KdZlaY~wIrKhw)P&W|8vD$lY;DR`WltA1b4i$)hssQ)OT0K(!VdBw+uBX|_arteM zJjNHP{(ftq}2To?0d)C%fy5PCxz)yor5f9-q&w`<_$iW`?}O94Qnd< znRO{rg1YZO>+m4=Qq9gVq*;p<>OcqfxNmK&)#vP9Ye6$lKafe~W?N6|A)t9^`OEH?@lVI?I`OLDNJ?YI=U zE=|(6lWXVMNZp7!8jFixe}AL=Fc+d zIFV{KM+o2Bqvnf8{DuUwO=mR-VKk0Yg$NPO|Ejak#{0GsZgN04vf_bpw#wUikaPG} zz6a1KlL7EgRlYIgu0(AtMOh-yhDSYV=FV`rl-sX!5;oc4H0}O863gFrD)hWct$S|E zFw>A~yn_cR_irlFyZ6iC^;sW`Qo=(5lclvNr2D%1#>8#jwt05 zkMXO5g-^JC$xI;hkLcZuRk2TfSlJCB>S58#-^CIb#OfIFp`P{oAXN1GPq~5a^mO>-E0%!BUb<|vT=Tw$hrvr3K930?h(;`Um*&Kf-|*bco?UF`OsQz# zvqr1uQkd$*leeK=6T|X4+&`pL&T8!_^T$Y;JGI7PpJP@LLE z%+J*-uzULDMiWmS95t?F=e1EuCm*1@Y-E z8g+*KWlzT5-1_k`N1Ndp824gb0lE`cll7{-qln2bC&1YkQVF@=;CaH)EnEe#!?Q=39 zF10(G@l!($#%$;einZx&-3)q6%<8$cOPTvvdy$|`R3|=aA?X`gh2e&m(ah=YDT+$P zD963ku~|zIc^8)Ay)Ola3UGO*sq+pYi((%$aZcNnv$dP`)JI2>wTs#NDm%a(%NZIo z+sQLI<NOZZZ7Ws~Ksg6Y0I2qT@LU|MBV-A3pjf`$q+ppY!_x=nkiAmHaF2 zYS8h%&$?aPgQVF#0g4b^%Ydd-x1AZAJH6p~uSc}zNU@+Y!~W4pWq%vWYGU@Igec@4 zVV}AH*yhLKVHuj|zyBSW;CP2nwmoD1&6cmqdT*vhg6pAn%w1?~sKNEp{A}SPpJ!3#{oUjZgA}{6#TRkf-GnizRPeQ|4cD=CYg&Yi zF2P7ojHlmTyVQi9W|`#hjMgjtp4ZXpFU$&Pqdf_d$~o7vy7C^Uue+#XbP@|o|NR1O zWi+2*6U+ScUzKZZc(TTHtt2*nM;P(NmHv|JZmWMOY~acZxAPRb>j=gke5&1m@~hbU zZ1$@~dO2IrJ~DQ(BG-3$B21e`5jkzo`8pFmglRR8m{f6e|8uYnL;J_X#+xiMFvl#D z3UFFk@)ea2N(2q%P#T)|>MOsDcSm@kVp8l(+|1%Ni){et87N*DnRcNz9u$$MJC4$z zeLomhdF)F6o-^;B%d*fCmPflHBv7H4-R)+FuLEpE^r*wKw2c;7H{}$`o@0e3Krd7< z8ae(aUue_R7~~(r7N*jT1FrmeW&lw%O3o!;XZkdAsiKncwR`!xHeTxPixL_y3|n4L zHGgX*c)KnoW1Y5T-Cs|kG?bL8cB(q#Xrt$R0O4{<6J!y)|8hzVn#ui-y&yvKxt_(` zBqi#@uM(Y$0)?Ts?b$VZF7)fMU+V@$Ftp{>Rg3+8bahyU<#xH`_=qFOAZsDQH0&Dp zq*E8pKSr09CMa|-PJ%H?Y1Ka|w@|jjnXGbpbMJmZI#9)DdGWWDgpNCu9Yj|klc-0d z-uF;mf&ovR!lD~rVv2BFdT*J3Xmv)g8CBXVaBUo>h5{p203sRuI^GI@l3xN=X7n%!JkY;kV z_~X{vdUkX7$&KECyQgdP(^&&RX;-DphjO284a`xQYt-_AcGVZmp!ZH5JE=EIt;s2N z{-Y&j8kmu#f9^t25eV{C)h7`@Nwq?IVZaTa<1{f6oge_SjjOBf9Nok^!{%74y37%%R3xOphB zlQtiGfVXYO*~q9H5X+HBe)Y53^GChM(JRwSWz;MYD>p53VBM8Vb{2B+4WVnSGo{y| zuJ9z(?<@Q?Sv8V%`pM~Mm{;0oAK{6BerQ{Mu<+Zn#`~c7<;bM6(cx1iyZ5TTl&9x> z`goMcn@8>)hfbzKDUB~L#rdG?tG++2J%-j4Ze z{3+51j^IJj{7MGEusC7TuzmA8Hz4SiXI~NMTyzLAPi|1OKgF$q zD(ccR1|YqnA!YwSQtd9dPImVIf_Dk*1D%PDp1e$ zyU+S9Oz_SRV@Ew=+T=Ta(2cM_zo{uv1Y%V+tQcpUOmQ=HJZN5BWdL<;9a^cirYh}# zgz@=gHJnE6LUhm2!b3^k0apwsv|??H?(2!!erm_!*0)@Xsyn+Cl}ohNf&eP2;Mo6~ zkE73|iUzrGzi1nN ze#8c+VSXP(&5?}S-58SNIrpUbWY+Hel=YS8C;NLZ3b7zmDvg6le#?=P~Qvx;&Kj&kYh}hLD zRr2S#n$AHVCu?Gij%W?XC?sTp678aGP6hQmmx}N212q1@Kx$&)qcYA=|NYWfp=!9G zUEjzgM`0v~jrt}>z>A@;d>4N(z0Os2GQKp2eN3!{tYVg8lWPLeWkiv7x59v%_OI4t z<8R?#?cR+$bdTQZjxK@W;5tNUGuE{gphmf#m|$*J)iEYtClgb~neANd5@MY_Ot_1v zJK4w9t$9OH6k)n5q7?pbbMxfMG9N`5qAkB7lIxM*s2gY5Cwbf{UK2r?ptFad`^WZ(TZfYaBk3)R$zr~$ggOXfg^#Ly#wNS#{O;$O5gKAgU%C1|30 zB?>h#YeU_p-aqc!+(I6Mij6_tsHvkH)i=3)(GE(_>>d}KLV%_BgbV%!JN6uAb>~*= z$kaN$Pj2q(@ZCLUUJXS+7XcULN@|3N;ybpLKBq)(h3&s(wr%F%pOd$u?7%9%|NhZ` zr{I6*T`+bBfxpxn7z37SRiz#Vr>;%dcKIPvaT1N2aORhwU5b$k>r2DXJQ!Ou7C5ukjD(p_yP3z%blZb6mNDzqFvgGHKg zGRnso5YZs>Pv~JpUC;6bE%Lr1Hrsu6>iGqv{bYb>TK0FNRtl(d*CF( zBj{sqqbvc@fnbTCbn=u(n+Nl|`EdZbtB3KnfdI&h)kCu3{Ee?GkY_%Hq)b%JN3`IV zKr;k?ZBZuD+Z;i%hd=D(7UTk%wBam;HM?oxALtX2T*c0#`}YS@&Btm}5QAdXbcD;f z#@H4~0?uUS1SeJ2uSKFiPuE3um*OWp!n_z9hn!Z10nYn&nsy>2hS{EFj36D0)3mF% z@VnKf^gW6n5#I zk51isMC|26Zg`C?fQqO0L8oZTSS<;=$6mSmYe7q`P=g-eGwA~af?|X~fFo1k9shL8 zPdd`zXXUE;Od$=v&>L4%Dc9iX?@9q-c-I52Y15kO%#8EHdDA`9a>Iu8i@!6YAb6{M z_u%WKA2m<(RWnusai2k>JrEM3qcTzvX)^0Udahye?P@O2?dHYQb8#RYpu-XJfxRS1Tn$07au(%=lnLm+Sg`OY)Yd>a-0Ns0$oVl63BthEn@Rdch{l6u^oOkv*jNl;2|p}kU!qYCo^=Y}> z?pjxKOZvecMQ7+TNWzbO-ub{P^Ao5}#^^h66!tCxO4q%FGh2w=7ER9u&TuL3z2Rl1 z>mR`XHQ)eklX?W`!g+sY67!zHlT z!^J`*UgL@p=q>J4vbPq<5eGB*?q(+@T@~gY7k@Y>M@8rjl8#%WTmjU)<}so_F&VEH zhHYn}UDixEBcu)L9m6lf&z!OqTqOzzWH+YaahUD&cG0qt;Lvy?a$aK)gRz~h<&FHY zE!zD;1yv{s;6zgnkY`XKH86y`<0zzD>q;=}ml7375_&O|BA0?3+|!_olBDE9B?)*;Z~ zh}F2DbS+i#8KnjUjX-L%<5kCNN^u0A&E2~BI*Qv&Y0_qTDviK&RmM7v4 zpH=%|6+}N{z#S^t>jVfnF2^}&7vND>)3hC@ObHCQF2^vl`KyeIM@2$Lqq{?^tPWpX z3weIDfTaqKk-mrJw~J=-&kQ0b5Pj6i*sx)UY=x1w9jb#rI%%Vk?LjOu^-1=wV%nF% zr(A&379M&_FWU~NwExRCc@t2C1UGrsG6nrFZwyIZeN~lHJ_O&FX*QPi=dE!$CZUmsgHD ze{?&dmk9BqaQ=1vzmKB?97lsECnR|AE4x4(3^ITn7XGhg>6c#7SW-~!8Y&v?Sb$lIwhs>U5g1J#K@T${`lU%)Pf9rmen~xZnhq1 zUdHqK3YN9=2BjyrrQl4jaL zKJQpYH2S2uo1BT0B;P}Ubtn(%2P;FoSnJft9@`iH!KpyH%<9cki6`eQpKlr9*0+;b0b@M16ijJ!STd7+lOJv85xsYmbAEgr zOr@pDbRtGq0klqE4?}m4t85DyYf4nkBJL_GhMOs*ZpLcaV}9oEp#)BseLCWB5YetJ z1Wtu`<0mBNNHmxuvAN#)jJfwL|8$0l;5Mp?xugO+$a4YZiEB2s1+&1?aOxe zf;qw$Y=lhNaPf?EZeu#+saK_|x&p@`?QW19r7${K&a@JdZUsz@h#6#bg(X*{Ee&7d zWLW?j@SbZ^^BdAhgga*y?*^h{36`-G94@Y>fR7VYcI%>xU}C2gT%=p!-AMjme+=4% zgnAEcOuDC5>{YB*X1U zrjwoZjvWyOFC_HN974Lv;}%mKCTCATGB=MxK{^%P?2kbF84{m4NuV2O30U3KNU$O} z-4wV(`*SFwRvEAZLJtPkJ$&F^a^$m1#`+oHWGS#-k%&R1SB+kByfl=v(N^VvsM~g_ zaVZkZ_bS@7JV7TbEDpHk&K4f*fp%xXCFAwtLCyp>#Iv;UZ-HxlK>7vOwTB+Z)iJ-+ z4p3<`rf6j8y{CtB)?L8S_Cvu6HbihR}0Rrhs|a zpJ6~A^7RorO$nD)5!#KYQ(uYd3afhLS3XX72W3ISxX7M&Pbw_F$G;sA;OhnJ7K{@B2Z|Iud9axa9Q)?Yrx!t^hhpcvWMIPuOxLqCMP!b2uZrG8`hdhU zO0T_?U(g7#E+Ap*0s}CIKO@Y%R#}awiVbG$2rU)O)nGsyomi>McnlF$8%Bhi6MDlw zjP`U4Lrfgeh;Sq3Zx*tO}%5=!bj7INRlDt_bIBw|1kHWbpw--B&`uw7v+#MY3Ub`^EN zvUnw6b%Yz8Y;Ytup<5(okxG#@5I2H1ul8cTTetN4#x8}AaNCs2At91waf^h*TwF6G z&z8V7eu66D$K-{;3BMG1RnFSgytA9ZZ@kL@{;JCrW;OXMfmpgL`2kMrwAGmHQ97RMq|WU6<r%Ad9gXJgNuPhHB|>JS@i6T#$V3UAbO%m=`!lI_ zZO47d@yEiFcqi$;`JI&Kqa$>TKG5@f#E_-GcIn)-iPhm+kkdq)c0)Ux-kE@Q6G-;Z zE-Yh6C3pN~kO4jnEuEIr>k>OME>4Ydnaw9gAMIpky4zW%d6NbE({H=Z1%Tic^U<4x z6cKf!`#goauLkkNO0Cjw+fNt26?1P02fwwf4^yRYKeZZC?z0m57wTipfk5hyt_Bo# zDQ@SOui;}SZ$X;$pNarObX(m(#G3CN5`G_UVcv^Y=>RNZhyw*DMq8a4x^ z=OKZ>ql)5RpiOcFKFAh@rsqt>M0?`$G}3a1{l%!5(o5$d?8~hI)CAg#&+^&$A@S2e zC3Q0iLmObPP{(G0^4P6#B^e3F+8^+20eY+=V8Q66Nk7!uoq;!1&K&ypW7M~^_$-N< zJZ}R&6(s9MJp^`d)w3{!&`TYiVAWV^%bvWj512o4?)8WCA2TA&0~{XTx9i9hZ`D#o zdLj8FBf6exc?2iWaO~RXL9U84|D&u^Ta3M{xhM!c+?lcbh3Z2PiR0QB6@|R zHJ`^LuFVy~GV@{pK<$n21&}8_n9lmU;lF>~Amb*4lISJT_$2Q4NP=fVj1q}Yl=iSs zYt2D;M@nqohXXffKk$n+l}mGy^#8!6+38dZk*q#))zl;4iZcfmY8+S)CkK(5KeUtM zmSUF;QUkC{;F(Ce_Uf`6*+(aBW5DLAlODCC0Kwf$*Xji1bxi;YuICNrxI)brQ9P!3 ztiCJsA?oV&#}Z7g_$^&buudT3Wn0 zat$tv*l;9;L-CtZSRYZK(&D}y%5`8l8}u(yOrJl``G1jO91v2>?48j+z(2(aIvhHZ z_x76+G0&;|?Qr#~XnVanQ#u3I^mjw1cw4?M@`DBd=jl3U!L^CjE#I zG13pk`rZD;^KmW^twqR7@8C(RjGvnr?j6NE*v$2b?P*_zwA>Y+=AzFltdm~*tb7<}$wO05z;(puX!}>c%k;vH za1zB#KvR&dD19a|G$x>-u!OrHU~9D{0X$(XaT4!9q`T3{tnZSM(iClm=uBzR%g+)T zX0&xZp&%+gH7TKcXR1}SbaK?OrTZ=d`FA%5A(3d3*K0U&5VFQlKmCFdnMfQK?xTFKeB{zTQ zOnj=n_&cr_I=(EH$JNZ_`^d827T-K|i1a{R4P-7Bw%nD2(>8H?GRRb{<=cy7AgSw3 zAq4GF?AxpNZM?4F+w2T~i`jV)xek6-z({HkZk+YxrF(oenbIzWkU>2V1L0Dlc~nrH zw#>({0+_|#R`C}@Xh=BI5d5W7ZZYv0gzRy*8k{$$#{##b(zFGMkAeKLNAZ)ZP$9Rf zbO0#BGT0Tjsj{Q3MW6B{b2o{-CInkWN@cd?C;L|TpUf{m$IdrpjyaiI=s#Lm6+CF- zwzk5#MNo152SH_XRX&JN2`c`-Rk-aRAF~^K8s-0!Po*^r!#qPXX2Nhptup*f`73FC zbL>eQsh>_Uo=n>rD<{no=JUP88`U6(&DF$3Bx+2&jwTV=ePOueZDU65l~EbV zq*1G@f6jAPFBA|qHt7oa{hk0DtD%K$tkY+$mRqebj1|jMOz+aAU)v<|&u`d{D}6QS zk7}siflP3X#qWO9PuOFeuJY?#qgMDpRvu>or*e)am5frm+TSp*Y12L)lXNMyz@QT3 zJm@D{_oO%j1IptF4R%6_k%tyk4G&<5GIT# zE&c^~ttiMMWwM_c>c6uC0Ua5tC|b8Y#GYVx+|LKDqqR&~D+ z4(RPkd=GS;ENPbFE2Q}bD(mFEbALTXeV#;~GpL$1Ak;cn`BAWcvr9bw!7lmtkha(* z5m_Dbhmz}#H)cBtzF>ArBd^Yq`u55q>*nZ~yzO33G0y_=bHYASiDRd_hZsEapw|68Wj~x;{EX9N?Iizj09zJ9 zS7Q%T(eKG+dus2~@wK(^c=rH&(2p&E;R@$lgBo#uqZM1;x#uYXdaO-ilMC`c%bm&~ z`>8*VsIbEc@ZuWx>uK>)fR5^oGxX1-G1WbP)T`)a{o&bFNq%N2C>iMk;EiVKW^8-Qq8By!4VRDuYgpxX*bAKuvTafPbhR#^*KP0 z>k9v#`=7I;DVlL--XKLlg4Ejo03@k1Ayu*-?KbT&U-HOn!nzPr8sdFUQaA)Jp&BSMVLnM7)&_8kXaXO|zt&&-+40V7$N98>>A zr0W=Qd8{KVp?JrPR{^YLHv=A#0W+oH`(n1NUc?y#60tG0!5U^n0qctX>2LZ zx6*XA(oCR^&>_60pJ$*8J`N`laWTHag$_tTb2Qd%9^WF#&z()-@up1O#sgazdM2yL zFGBXfzJw9R{WaG?125`sG0&ajZ1ulOah+d=E434rG|-bL!O;#zH0cW`1zq{>dMa#lGgIT^7BS(%MkP zep_gAVfy#Mz#uad&D~clr7}F5E_6lACH-3D71k+6=R>Bobdp+#4E$u`nkKt%u(yCV zG%YJ#6lNRq0hgW#~MhU(o&LBU#OP>98of%7Ey1u`2mEGzs)sHpgdY|wrRjM1+)CGoO_3&qVnw>rl_nx3LWmIpAyi*12trhvbd+8L z0s%r(T9i%#1QLo6X$cVmp|?E|*LushzrC;X=bY<0*T=8K%*@PZjAx8-k9*vYFK!xY z^X?Pg2Lge3b#7cW27$P>K%ifg_HqONvRCD*3kVbh(z$xc6m2^*H)&+~a?lY4 z>Oo-{E>E&_&1JHu*pXuLiC@DlPYdXAUEX`j{N(S&*-a0A%{~~`5AzZTL0!i~KQue| zTrWW<+^=qHL?)u;zqGzcQu)#v5m~&D%UN#8@=UhtEl@=G_|6n>EK=;`=C5(Kc_4o0G&eb9J?7ofqxby3sUF~X zg6_A+E3U@YZH#Z=Y3{8MpKq@>v^CdmZISfk#<3b}E&&a^%HN2`J@jE<#NgXKQ)!tA zvAiNm->mR%$AXKTtsC_%;HkUyxS zPuuhIF>s!(XDeI>8?LH#A!wwU{qc*VTkbB75zOfgJxRel^MV#T|Ha;Wl~vyfQgu`B z!{#FmRVBCUg=$~f1+0#zMf5LpYSxv0znPI33vU--I*?K5n5B`x?Ts>utyIM9%L^T6 zWK6EXLf0cGI6J#L+#!xicVlW73lN8&T5$S^6YUAw$~q&f9p2Y@4Xi&N#kqmID?r6n3 zg)A0Nt3q8Z?EFzkKO-o+acUG@^%B)8Q+|l)w_G(M)5K-&#N~7?ZQ|YBgO)txf_R~I zdL(GFxsIspL>!|bt;u49~3g%C+fq&gPuO%>Z&o1i z#QVS_cWU~N!1b18{mI0&hRq>sNuS2W(u63F#Cz|?gDE}(eFut<9~f2LXp##kR%y;k z#+IzHO-G~OepKI``(<^ zn-_~vxu;-UK@|0k8Y|FoZ=-%s3+47M<@LX-8%SF@yMP)s7LGciKJ*GBO`kf959ZfE zm#T}zw$L|}*!m^1@+n)KENvp3P9-VvsdKuzmEegPj-JU3*`p{YBwyz1a{2a!sn_D* zhS%DnakG_^$sYC92wTtm7KHl6^V7wddnd21>-ZF)NM2}RSkBn%$v1Zp@n~@8DONcJ z^~F^!hFIBM({i48JQ8PHLpY?IqeEs6xKm&W6G%+~2}zT_QWA6oO3lZw%1dJX5>C}b z_JyrZbVsCr9nPSha?B~v35dO&4DUUKD$?83sf5Ix@{b%GG001DmDdqf(D{3D*$n9g4iBL^767R%s!#8o@&kqEwi_q^ymiIrd*x)Gm-Vx-$HISZ+6f7^ zV^`-}<%DS6cPZ`4BZ+>mS(pG5bo%X{&o1t5GFJFQ_G>5NZJZMynq(|wY)knI4@F>^ zO+t3ZlgJhCC{n?8>r~3TkS*H2Behi z1~Zh^Px4=(Y zrj!mVOk<#t_z^fxkG_+(bM-OqzYMKRC)`JF9@?~nJnK2M$16!3P8MO3+_M;OoYuLD z;c>b0I`MRf?gK$Lztm}qhDWFcYi3%O{l(1_MQj5q{2neUDf3ImSx8`O2j4g;0E(m`7Nj5W?f}`_yWzyL9C~a z9b?63UgHzrVqYF4LzUY zX%oXjjqh}l_){w$;cFgdbY-W?{^F$;bGEs{V)JswEy7}&R5G#CSS&p&bVlhH>;kRv zLi-=y`P>EzLe2G9JKnvvK!x#;RgDpbpcqrI-+V{$4BP#QO&8zJRwp(2aBf54);iW5PY$&FMi)E(?>Vz(|bw8CW z)PHb*(-=2&-S7Nf@JnH2ZNgLztJ+bVqEIeSW%Pv7GeYfl}FZP0}zSyRCooi*&~)ze$#KhXX|+NA$_# z;D>E@j8;$Bt+rT9K!+sFl;sSRbA;VOwAqNt@t9jfJqbq{Un#$x4-oqSPT*-eiG1C8 z`Kptu%Pm~$W`e5eS6N!UC$5^P4W5?4$m7pKGZVfPy=(~!pN*e{GYteg>2c|s?!Gp{ z7Ung0K_6!SM&_9nYb##+Nl7zZk%Orai+y^J(fE>hPsj|aslg~eLj?YXVEm?)@;A#XS2JD z-#*xgi=Is4n4Pj|t5-7Z&a+)L5vF5%E!1xvu@KJKT%lv-WYU^XLtjWPQT z?|J6*la=X++=ST71XG&>S2ir_)_RSrr=0$jHc{sNtim?v2QY@E&y{zjjmn1~@U!F% zSPx@MvxCn(kqTsC9(7+6I^61ld9BhR)=BG05FaLzGd5$Qn8qfz7pW1%$`=TH-jaRn zEq^>)(wM~TbysHJD6xo}zp((zN-}RWD_g`|(`e)|TTW$Tk8d6=VxtJ9w;yZQDzICW zu^e699e;BOfgxmake5xjSA+aow;NrZ`dWOj%5*XX9i5>nTGtAto@M6-zcCIpp4F}< zQ9J{c!@UY~+I%K1MdE#W#?erQzaY+G@hsxaqlko-CygvmGhc}xUJkcNm_piC&wt4q zRA9T+8&$XX0T}*w0j{Z`Cy9ao8jU}0e2u0{AdIB(xWY4;w_D-Y-< zvepJ;+{Fx@z|^cg_55<+@^)+m$+TTaWa{_1qD21!148o1p@r8@;jd_mv=BtDLfPYR z{xQmGX`l$CQFAR%*0V%~hy0laOVP$EG?77!G)J$Y)M?9jAjO~jqc+79}-GQCc0g!qp~Tbx}mKv+Ck%p3lL?V=t3a8_Pp zySjy>V*CHtkDg!<`+;jU^(uB@EZWF+JoAP2`WPx-bae^^PQFg-de-8wQc$RDqyRdo zdCqQG;EhFGVl(JQ3iVgqqao)w-l0!c7Xf~Rhaf#|IRCW&(KJkGqDO9M+URu3s>}WQ}CPlG=?* z*^H>(LK<6DnT-u2M0_cXCjnS|C&0Ah=JiXGy^Jfk)QZa|;=_F^aI((VM?;oZ<>Vg?o7$5H}w;sNjM zL>cXDr|MfE$d)GKYBSfXV5I=Ok{wUHp(_eRt5}YjC>E1aziwF-qYN}`29B2rd_m|^ zMYuxQ3!Ba`XAPgIghQgN*3t;Yqp?_9$|$Ui7vAJ3mmEK{KC&GE8~6wybO%tn5xl;% zby51hQmPRrG+N`Aqs~`TA!p2#^@VfxwZ2@h&`YfpZusDJzx;c1n*(GA6d%<1-n(eJ z;~6+f3?qL=8X;x-Afx++y``b1F1HOCqrF$Q1k zxP&_6L8^|fO(r5?r1txJaq*ddntLz&iBirni&9dDrB*66RO7rNXh`K1dg(Dx<#c93 zsH5UFgX0zyJ_}gF5%qDAdX|DEGI>h%5YgwqaS=>32~DZmNjrghX5)oOfjpchoIOFf7_rosTmy?+E|c)lG{_anVo z#ZBxKsX<8##ZH&}?-SP;?#2!T5M%mxUu(0Ored9hJ+CT`Gq_JgkFSfbPALWGX0?_miMbiHoB5|Hsy4byQvaKx7fxIl26Y2Dy*LuFIQ8L z$-&_N>4;A+1-yIBEDn#3CQFyj>iWK=tJEq@%@zd=Niht>;U$e?cJb(MR{46Ej2zn= zHfjP-%ApFp=6(@lzK?TPBWiwBrVaT3>n$D12ZadYtb8ZFrGziDCnajrClfcl9p)?Nz^7nYF&BHsTYv#k0s{5PlY_Q5sJfL8dso*eb+-9|6LHQlV=|j(_P6GxU5Hr7R`{8^?!{{c zIRBF?$dtlWf7n}&v%P~-mNWK_6n1HOxneo&x6poz!1*+P&inq`iEFza5%8x;O1mzk z7J~T*nWvK*&$owqh-8brb%MmFnUpvV}vJfN`9Nh00+;x!X_J}#{J zd4Ro{a85#*!)la%B(kijcqgp`x4-$fLd-&A&apmaWr&V{_iC;zG_b3ZvaYmx!;%1bk zrUlEYZ)p@1`VPF|l){{VsP3DJ+44~5zsgMKqalkp-lL)D?@KE@u8GsRpV>?e)C^BB z!@UisPdEgtfw~G6KUX_`kL02jfJy+*}j^Qn*Mi0$ST?W-$FuH#6)?= z{vj3#{fpJ;iAe2Am@8?iiD_9i@zeh4V~=wQ3o^-$kA%5S_&*S=Zb790gz6CmLaw01 z+AC~0?!5%6L1$zKuMcO;HSM}UsEYuRlQfpKMveJQa@G>U%X|8tjxRpBe|+*54BCN+ zyq$irNg;5fW9+!T7{W1rvRlkxGRfPvm{M^s35>Qt*wEoK+xtY%(1BM`aXh77rWwq(XQxt(M50&OKnJn0SPl zgdTg5!BS$ol`zr)yoL2!(EsU*BO32>Amo-=k52V+OT?hbQ}P4t3h$f_&Cb75QyL$) z|_NJm#$thh%Ez#+z6=UPrDew_)=whzS$V z3dg#ge8zt`;s&DYM>-0bzVkJ|x@moB> zKg)G5P_FZm@}xZ8JTg3Wnm-;r{<;T@)vhrbMdl}u8vty*N!+U_rA&8FV_E^*O|U9i zsMBx$jIu#BRS4^__*omroGYb1(=5`cBgTfqAQI4+8lfg z<@vrrRaooyQOrHLwxPl-?}Xtqw=(7Klx82Y^>&yj=HJxx{4o8z!uC@+^Ec$VB*b2d` z|AGvg*WPai!=TAZiTcRqEM|Tw#by<5@&O|b)Xs=Qbn^Q63AeiG>D+VC5ma-L*!Pk( z$t*804hWr`)f*)N0+O~P^LvSb04*FFv)`z1T0`brxT@03BS|P#8s`TadyNpC=8b1O z?J46rul`ABDQkq^{#^b8Lc_;2u+FC%J=B)ZE~@gun~9>%-N@0DTwl<)8`>NyrB)K; zCH@aZBZmn+z~BZjm2jt0G1G_LCV_oKZp`y%tC(Z|D(0pMdjvY=kBPo{Lts4_5KCwM zXi%_^hP>l=-~M*E8UVQOR9?iVR6eNvpp|5XJgqVwWiru7R5n{fsuc=M2QymkD{i>< zuKfOAKkF<8OMt%YSgy^h^qn8tzrnv6{7|`e=-S!nNRVql1vv3!PAt+h2P> zJ~QNcktMpn`fNCH6)w+G$a*`0wTt`VFvE2yCS7v)S%e+yy^S4MnH{OR^aF%NE1xtJ zvb4F%S|glmHc|_TpvhWDh+gd)F=H~1H{qh2M;`5CQ0-?+r>+p$j}X=D=6=VfU2cF3 zP0n1h+Vz}=noVar0mTemM9rQrw4Pc!9z!O6fcu3;aWG{xR5fYFEEAx-GHdp6xL~t2 z%d#?Ap3fm4FEJ8YVzd*+qj%tNyI9R7-5Qq%JonfMlaFhEbBGN?!L^Ma&Kf5LCOhWr zfG-@rWjDj20&RCPT!Oipg~i0F#l-Y)mjpYZ4^)AkWu%d5S@SOtINjBXJ|K=s6vFw< zpH)Wf22~3XR7DoF)b&_GxvO}$6Xsc+!Vikb#UHWQ10xaFyW>-7SW&aN zb88tFw-o*qMx+6)jVmPn*~#H&q(80?D}GM<$6;@Q;T;Z~UPR1gJzX$crhg&bfDMA6 z>oX;3KCe;7A8bVN$McCdGAnY=KDGFfB{P$NEV=bFOa35zA|oyY{NoCE9`onL9_M!F zoQ>bv#;667XQc2*6w~Q4gtl+}X4YNkQE)c2pVjk%N9)^kR*GoNbk=@c%X4av3f9v$ zS2ZP`YTsGf&)1#ns@L`(o;COxlQ_ZWi@n_0&}Wr*7jd$cL!rQj~3w8jZMu;7M>QmkP9>IRR-7HIvEKR zvkZf|vlRarpqLr|7HWhMH2a==(D2qL!=adc&u!|acbZXq5%yEh~Mf}ryO!T!yFRpfjpDv(VU`2m@a<+&!8?=(Cp zs3gm~1(lPNk8#gpRu&r#_2jHs-ph^JVd;k&#oCh{Th!Wtxw~Xvj&Gir=3dBWO0s8?kUkTIJ@QF!K6=j7{iZSD9M3f}~&&y5?#yij@dc8nbp)Khy zxe8Sghii|W0c?H)@;6n(6;5EhuurgmJfob?~>`7Xg+{X`dfQ;9wZ}SzS6Zz(ilH zUDAn7S00{F==|h2!OHIdsubVFZ?C$`U(KvB^1F!yMFYKx-?IrmI+Z%Tzx8SKN~
    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 72/92] 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 73/92] 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 74/92] 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 75/92] 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 76/92] 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 77/92] 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 78/92] 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 79/92] 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 80/92] 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 81/92] 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 82/92] 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 83/92] 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 84/92] 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 85/92] 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 86/92] 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 87/92] 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 88/92] 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 89/92] 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 90/92] 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 91/92] 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 92/92] 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()

  • 36-D!;|6=Ki6RaOdem<~R7A#=&=x0`hn^-ul;Y6^8+j`gxP+Vyq5K z7vq+cJ^M4H7K{xv=HOp?g?&~hwwz>^qlIH3e?`>HZ3K1V0)#D2TWdE#pmmka`s{j! zVI=Zo=ha@z%(ER2p^j3-{+zkXXAmiVIQ_17f+io`8-+a+^&?u+{L5r&bE!W8g^c}l ziu@_96+J#P>?!cOsv06?{ihj8QNVkOy*q30L#N7&Box*4JLIdH;Tk%cJ`#!15@ zYGA%};8udW%mv@aw^}+tFJ)X}W{?AFgszLcSq6QNz6XmRNj`772ogE#3a?AWXi!t9 zj_9!93(l-X&FmF4@sFgdd{dI$UTEK%_ixH5(@#wUukcnbm0t0Bs0KCNUH=8aJN^;# z6*;vuCc1H+fu39P<4Al*tuD=Iuu%(jJH=}_R9Cfw-OQ)Pp%BhR6DwlFRq<^$zf>fj z?R2f0P7Q?^qMsUCria?c2z{d5YH*aI(W_5EyIwFA=GtDO`l01)SB=3m1vZ|{DNw9h zbiq^m7)iI6LLxw^>%L*Vl3d^k^0dc}>mI_wx&BEeIr(Ua89cwOv02)%M{EGqqj^82 z49ffHtj7rz6Il3H>*cSCo8GQYRr%%4 ztH-L2c%_NUnOPq=|Lt-6vtYLljdF(4D~*F@$Mkif+QKVhFh5s85iWLwAl*dA>R65%dG`JRq-7cPJ+BzI ztyWB#>U_AXzscwJ*EIcCb?4a|F}gyCtl3I`JM_}t@10`2B$oldX7=z*gsM5SSvpvw zAJgoAb&l4OtE!ShInOMfl|3b5Ctt|KzTh~EG-k|mLnS}k&j!;wr!l%ZTJ0p(vY;rl z!LHd5LVf_DNJj|fxiOwZHXoii(|g4-e6$nb+1yje%oBrEZ$v4WQJu`<^G*&~m#Hyr zB&$SPGK10gKj-?FN!B{?6MLib@g}{p!8+B!78u4CybW6oZ-}l@gU(%eW}&G&w{qp> z!|MK1A}k+dvV%wa5_y)g?9qZ=+|r87$2hpdphd^g5-?Aw+yF`DkD>IcCQ4_ zzxosq1{OE{JzeIS<1N!Sv#D7q=PR^{SnCm!BK`-No^6h=4`)&ZEQLs3XulfB8B(o; zLU*;{EmAN3tMiqmw++81!Q%Q{+>RdWnJ=o}kD-DNYBXsJA>+LjYS!kqvOC)FZm2V| z3!a;gnUzqu09(a7IpR+0Iz#zt&HoA zoxD*Wg`SM2`kE=Z!^T}lBF(&O9%wnYb!VS-a@H`1p;KqBQ~gssN6;T?%;0xH*)*-I zHNEwj@K+K?e=uR9@>-9pBP+MC8WL$Pu329lN!ow6Tifs1$PHHqsXJ;_6`2O2J=UL? z38<-Oul(Y~?1>}Pa&mP7jN=4DFGxhzmkJff578=Dt+N$Wg7X8ufA9-e7bw%Pfh66V z9ImynEH2gDPJ9q~nVgQ8F&FXZiWeO7Rmsi<*4a%PHg*7a!JCC5QG>aGpOO|9SY_U3& zFp|s5nom(@kV*(%vCFqasAViy##xh*vC3?u^>Z7<6n3hMG1*3GDmj_FoGY^hmeyC` z-9LN_wlZls8UF>3VENDKF&PS>B(<{0(c=)i_JtY9%g~d-^n{-v%l; zC>bBqJAEVL8Mogt{rzE2A(2*@TR z2nM?R64F;}c+o*JUSz4y%C#-s!t~LZ9)ENO-BQs5g8$?q0g7u zYr=3ifUv26I>SI9qf4pseQ&s|`ylzfc6TVtuBG%3^BnrD_@~@E zpPHq$P-Pj(D=}EOOs2*Q2OX;abeT-xQ-MI#lP>!GNIUuVIJiop1WjQ=qadM~i8|`d(>yX@;My0k_*nq+ zJWVOE{kf?BecacU692L@wN5?6UP2|w9e-M6MJyR!5KJgx8~2bWs3xr!o*^`KTUV~+ zJ*??Jg(B0MS`^!QqE$=GuGc+MM6|c&b-PZYI|#pqGwb>e3w_Jrl$Uf!*W#x=PdMG% zM!51!;q1U@>RmarlhC(k)k`XeIu~abp zK!a^yzX%$Z_;$6VDD&Zdb*6pLtouIRypPL0mPd?W*~8cRJN1**xq(X7$ypr)D%(>W z<*@0uk*tZJ)VMn*AfvZd@I<5pwo#A=IVQl+u`Lo@d$ zN_TXgKBEsAER|EA=xmHflSd{#m*h2K8?y?SL`M0bUqOi;I-HVO=_lL=c#n9t8nyLf zrHbVzynopVkPb;^9hE{Y(qux*9X_-Lw-M%dGZ;-WJmjW%&}oRad~KMU2PGx?t36c1 zsi&6T+Q5?0lg});QR(Qn42WH0*q+MJ-S@8cUEApu>~eBC_*v1pahZ6!!NFDeu+BfW z?^U4e4{_Nym~A2&u=X(Fbj~7ub)CGi&cbvkzj$dQ6zI=3!Ciit5xOW(PSK$y^Y$lc z1yt*Ibq};AYmmg6;N*TMA^D#e!KZNM5GqYKK~_uISesJOmGya~J{@FmZCjqZuy)dv zgHy5r%F=19nBE+jTTq$P;+WR(6RuFdxPtFuZVl}(@7<;u}n7XIg zkv6sj<{zH15QB>5$plX_c#0e9ls`O2W_CBlQ7OAil-dACu3(rW2O|uK(Y|gcD79H4 zlHgh%0^No$EIz!Lu=LM)(N=Cc$o$=wXcVUW(PI1kB>y>WH6Qu*T>V#{&*N`lvGeTo`1 z)vGm^5Ua8ff@u$~H%Zr2wS*!p!zX%S<)h`#Y+IsO6)riXe#k(-d-lF(7lplrp{*P} z+G=kQPoWXgf^^ffir$8ARes|M=hjK`Q~V<Jy6j-Q;Z(%)f`Ya*hc6{86*=1?GxZIhY+t*qTkLqs*9k<-?U3>e*EK2xx}L- zxqy|>;VTWGosY6aOf*M>J!Km#5+s*xkAck9A6Y$v@V>1%8NAyFqH*E1EN6!;TkwmyuutEtRdxg_p5m`mlI)=GEHz16s()3Q!C=x8ZM@x!T_Wy&q;dWY$+I@rd!8 zWi+>cg!U1=0G}}~uC<~&=_Xuq)T2msdZ6LXZ@HHO-#@??EB?M@GO21=!ycw7P-b<* z)wuvEMjvD*-KOs#dOM!e>vla(GZV`NRW}hwmgl(UG!LZfaTwgdk()RBREgtTwcK|j zIbeN7FJ3IFO_f%y8e_4J?t3Oim))1z*)wA9^&JchD4v;;2eS5Ve3tXKvCthsPbGaM zPs-p@7Ni7<)msb?7q7%fkwmWPsYx+2jcfXq!0@YjSZTFE8Ii*gqXlK=&`AAQgZtI73QE##2wv3OtenqG=ybH!R@BLu$sty&o9zPxu zrv2FBnt-#Jr8Bmb>j(T7wy_@?+VPQiNDZD%5oc6_Nq|-8BZQhQ+Xp4tGYSJZx%v?| zXe;{to$N{mV6?I-^U4-)p(k`JpuCrCqXp+a-}#NA)BVQjZo2r_dC-rw-gRnEynvxH zg@!&$F%r(U4IC=SO?ZvAU2XFR1j)0#0`^@F8WgY}?dda~^y&W#EQDr0+TT5Gb_b$s zW@&L#pKmirSOw|)M8Z56hfZg9>dRVX)-#!<-3F93ed?oCRlnyNa^0;hGgGruY<+F5 zJjm+qMTt#7XrU$&qMQ$$&J;fEbJ4VrzijSSgC<%cd9$|tJooT7(*w3GhRKi?|AU*^ zkI}Bxw(aP0I^W7sg&HDzGDEk3}}p3#^@YEgbvo zfs&dnn22^A;g%oLB(m9{IL$X=fDwGOnChBr^Z`^KBQ!y=4)-vzI~Fyk%!N1OLnXKE z7Xy^D-=r&`_6(+;+%;A8*aCZJsJW8v=5`lM8antB-J24`EJ~h88h2*qW5=OhGL8g7 zwKa)XE7UL6Q4j=!qeR!FT^XbvwWyXo(}XqYrwk9HLss>3=Lt7&Ui|Tk z{YYsQs7ddz+;|NbnTD*hk!HlOTh2qY)OA%;IMO(C9gQR_c4(tMXp}bepqNHoBUApR7Up&%E$n0^|i3^s=GI%J3ERq7(&=F74L` z<1g~1_k6^$OTlEiLZekpvH?;n zo$*JGM8ksFwwY85wIF_e`)*U{E6vsER$Rt=aPNY^2RFEb?y%k0CF8vF%@W{fLtFRsx9zQrN%dD8j~3ukabnJ1Ck(bZRaHxH^e*m36PnXa z9aL@09@d1el3zQ!*)@p4XHy!P8VvP};zdy1M1-jj-y@P9bnY%7I%tgE&Qe(EyRyj& zPHpb_cBg05yFa2}1BMb|#MYjftdtSX9G9D4hvEioL+25oTWs-F*;nX)X;xOCn9ywa zMUjjY6zUO44a8rEWd{y0@dXrB z54;Em9Qlah=cyiP&0s?;j3@6Pa#jU{vsKOLmd${YR-tJ$zu>3hEqpA4`dyuJUcJz_ zaNj)nAzN{IsY@!ZvySzblR1$({v`E92{{T>W8Fe8=;!yWGQ}H^>JN*?~ zLqRXOio+yfP^hHRluE|On2t)~&SF#s*?7v+AT@Z`!u9MYeI|IDEkwXqDLS~<^&i3J zw7k&~!3^T~l|irJy0a=oGe3cf41s()ihHv-{fjd<_6zVHA-sa;sZ2rhaKo+lH_O0C zoUnAEdZ+%}LdmuR>gRs+)d96di0rEj?$oYzpTupYVcIhR*Z`Wh6a4>c^~FzoNm`&Ts>mrNFd915#fXRA{r->QdOV4}d3JWplb(`Z8o>+I4x za2mHB%tggemuGJ4?Dru+E%%l9SKe=)^fxiGFcKrjPy6KNNN*5kFGZpSG&B6aoOtfO zQNUE?;59bB2CB>;n$x0S&_n)NvbH^SB`Ldl&17xS(J4`$)q@Hu?=`L+E=xPnyDjW+ zcj>6~(cY0D!=BmlTl%;r&bfA3b9=pGR{n&Rzk&gQbh?;*v&Y4BFiVVn-L?aDN&jat zFkTV`ftXZ{Z%0~ca}z)m;Md-e^`is|v6?R{ ziB2@~q){fJ5#@Z}nv!1r>oc}{)0x*2L@{G;;X?90qkPxl?2-Ii>fS>3IA|V8Zd8nIAkT+N4k5BgKpwDu3+Eok529q zh}5lwD~4B|(hm31!I%N1)vx3;ittV?H_#4??Prl@m^peoEkAjvXbao!OWO5})avvi zMB;@UG+?>cf;O)GMMb5U_d(~~IxdOpHu4!OJY-7#7esWZ@6I~f@Bc|kaX`BAyqNbf zS>Nr&E;mQKDfvmE5}X0wY~!HIaR11RI{S+GbKOkusb{znP!)J|gQ^2J+|jPiXq_i7 zyH5i8LMU&=n#rF1AIad5$%e5AiPg$D2@$NBh_Q;Wdv!sK@7Fi75Qn_W7+UJ3MU4d8mT!x+w#ID!Fwvn(_^DRlEtVdttX3-#`(wQY~c;*@)KFXSgjZR z%L!tu+dEVw&2Yo-vEWcfgSLTxah^Lm__qY%jK7KS5p1E9E1T)0gIQIaLW0zu0c=Q@ zPuXbKmA~--%gUjaO>s%D?*It@Aqc9GB7oiV|1>JM)k?AQ-{B0d@Q)C3eBl5 zs5hu$0UpU-GezF+DyyW(xc|gvi3k)jnRux3E|fIsL<8||Aa5mUU&?&=yQ@;Zu>~W` zj)M(ixGk>)&vKbkZgb#_$DH^VP9Zg+ZN>vteA0X~SI8F!o=8#>2o@ZQHUh0cWv6I? z4-g^|PYZ)yfDipH%i!ZuWyQNX&MKvl%ptk@GlcNBgDfz4M3+yFB>%>xeuj*f6S~ayF-( zth9_?EoZc=b>tc8^Kq`cRG2s!gIIAmN&ZPJ1i2rS)X&AnRc9^&0%m%h(_><&?8NCe zEpK{R5*jTS*$|Z?*8FEl_$R?&IxJ2jM8vrzDX9NU4~!43#o@iCg296zC@92CxjLo3 zx;8i_DGygM<1d1LPG>pRCxAia&yo;z08Vu3AWvFyBZA5B=Kjkq7Fe4Ie>;;lP~hFS zNq0j3q&uVi=_k-nK~y>W!|Lk= zw=jW_SyAsW)5rZSay5w;rp>Zmb}M;~dd%@x?ELM)?~{yZX$yNz(W`o66U!X#u)30D zTIxFD{;FOAZ2ulPf>WoHmF?iJ0X~ECbz(CPNL!(Aadm%i=Z&B<=xs<4{MWtD#@AD; zK}D#dTc8kF1?VJ?}GFo9q*}0IDupaPh zp@L=E@QYp?=haMriCKe~{Ic9cnO~uL;U&WZ&)AQEzG(1tMl`nt>^ITdEc_WR;6-X? z)%Or-1%Yg~hLJF=b$~nm2_V^q%2WpUEOqL%9qU!kfE0#ZOsiWof~>2qA3djA?b zU9hriY44G<(|S6h?TP2^H*>OGA_Wlw(u!hXl3MyvoRgp$B(VQF?UjZj=ri(D5VM|5 zN-{gX1OCb{FSGetYqd{VY_WQP72n_NcHHCqn|j`bn_T3dBms-R8|DM1(VIl%EXe)! zJG{{Sg@>ih?{y^tnJ0K&5D@u`q04!Az_k9w65yrS<4K0bQ!7`H>;yy)pa`nULCo(s zhxQnR$HM!1bC1Y${JH6Qt0$^DPY~wQwGZ&5CB6YeXH)mlD0Il0oTEEqpbnJO>X9pV zqR+1ptkWG1%X2e;Q$xuE{IT;5pfEk4Kxs=->ld5h?)vSD2R8Qj*>pRHbH5cN^#4x$ zpC_Jx>FiTan#J}t*iA%>6Adb$!=GLm*%t}8J=8O)eD2_$hW!FYpfQ$NBsP&r610890 zTF%5$7f4%P;<^as~qnsUj z9Va&XB1$9qkcqvC{1&TsaZ4~~FFsDBg}+a%KnGT&CAW&X=A8T&5s(zbyWm*qpXA=9 z`}fY5t@IV1wUS2xf}>g)I;l=CKn7UA!N=;_wu{?-#?|ymi~ufRo;9GZw*F(xIpWSS zY3H(Da}0{Hl}F=GRzU9jB4G0nh~I=W@gUGSE9^UGyah(jwdP2<)!JpI?HvqFLl^Ef zI&%;>a1OvGR<~yl^FEzv4I-I z&Z`|GNcPCEt#%5NKyb)Pd~{tbY{U)rN%Qbm*9QVE`|qOe(3!p7V9KmW$#$I+&m<$I zgfNDk!sKgxtC`TBCA&>g%Z*mxpW~rq57)pQ8=RwPYauf4oF75 zYa;9oEGd0z(sV$o#^!ijyJ1%V<>XbUI(v8FCe7?MX_d1XAl}1U5EWsea@7N39SfVl z;0`MKmxXBlbtU@O{~wY=uBid^W>*^hyJeppx~xCBrtL36IlsGT3v6Wh2G!#HDJ(3@ z>EYZx%cm8Rx9WgPP`4=kJY_VyzQ2Z z_LF|8u>_Y&2m7RpohzW8FhMT@GGaL|RyJPcLXZyTw@i>wGC8lP0U6B$r!&_x)XQma zrkFEw?5Fx7J||az(6C8NGXJmnRtH{IDcbXPho)Z!yhDRks;l@B6ZH|kzP6&`08i#T z{mC<{Gi1y%G+sFCTqe>Mnpz(O&(v!W$8T+Fnq)xEQ2&>l@f~Av$gM!Jm#bw;$XU5F zInd~s^YYU?Xd4CV+2!c|f2E6xXEcZlVyogEYs|B9BXEr%3m@tViNK|m+e`d zCdHJ~lfEbW(uXN;`e8!z{)VvR8OVEjhG?|%_A}2ZLyuZyR4ku+!n{fk;0l)ZE<}LP zAs6WZNF%vK{R0~appPBr>d;)a^tNr;{&+C!l)Le}T_1%#hvZ9MNxhb`7HOM>%kemQ zYeMETL8P2q>I1b znR?gBGTvTQFW0l4XlE3C?8SoQQ5nd^FBJE~!am=g?6mKi2gU(ELlGqCP~{u<|LjmF zL5DiB*^j_2ohV>X!N%*d;jQn$ml#d1s}$xr%Yg&}0C$oM4NN zYO>){RYcmry2YRQ$&D?7E`T_RMtu!VXn5XdVeJ>)icu7gG&eD!(CTwGC-B^HR{^(0 z$+Ij`pg3|Rhe+(cXjHTXJ~=t3AQYiB%I#2Nz})?YnZp5Fl2HrnR&T1)FY@aD?}4=q zXZ(K$tXw}cjcY6`#i{8aToz<2L7fsSLHoEQge5N#$F5u){Bsq2Q?MO%kzheN60;pU20-006hzBX-ElT#<| zw6fT--OFJJ0Dyh3tFbR%S2bb_>=Dq9FY|Y~cYbpMlHmDjhI*p09Mp7IXeQRG+7~_9 zdvYdqSAeqxZ+@6wFP7+-i^}Y8;p_IwP_MRz0iE#BvXU8BIZPhJ8A!}cX}?JTQhnbJ zNPNNa<8Aw=6Nlaxiv}gfeSJ*ye{OKH+pcO;Nm;-e0I4Fu!wm|ele2pBzD-QwCN?qk z8aFv(8eOI$3RsWg?)RCYvi$F5dbe+PKE=WBxIW4|cd=20`Tf>N_f2@rMS)XxOG34o zElV@qc+^SP$JwD~QeAN?uLkmdHN*?7O+ zeG)dm#>Fr?w8&z)X2M%w-_2^S)VZtd`aSfI8 z(jNX(@^%G%f6QyXn(dOXui*<$Culs!V;-oiuZXNsb2Uo-G_(}H35#AMwQK!+!SG&7G0J^F ziQ3e(Fl*qAV#T26sp3Ew>dRj*A6QnOfZR7C!R3(qa*@>;>Z>Ez+4h>u*-L;H30pnbg}D2WF%u8HIN9F;;ygp}JRv)TL$ zQg?6(RX(b}WSG1nBQlYZ4P>_SOd`8n8BkgcsB8$yV!PMipxM6f&+GoNJY%t+{37C3iNYvg~I#T^WI80C}O?XvkhDUA%435bFkNV6P!-9SG<715sfBv3&AohN9QCJb_qhBy;0q5K1`nas{aOQPRkZky@? zdDg)D9by^Ij*d5YBdAQ|^Ybr1hYENmdlZx3$i}BG0LrvDcLEGXk&SmeijKn?u`gA| zL6{)7UMrLT7g6_l-Xgl}$a@*UYALGuML%V0Ob^5WWJne}Z$!u*lW+{_b9Wp9HRXB6 z2LoI#cH1qE7<8ABwHnYbB>Q!yW~nXBGY6^%)(cMRk87Xre(Az*VFs9x+~F6>y=*9M zLq<(S(h6v}gS6b}hF4unqM}T=m2NN)VVfe@IgfLfluhF?vq_#K#k!7Wh{qN=?W>1Zr_;hA zjm<7{P$iSFk?M4h-=Fx6B2e4Cnj}hd^?QdE)af#2pr(FzM)mtQRI3BUg!pZdHJKW8#v@_Fo5jC?b?-~3NXWc-b|;|=Ac88CTJ z6L^>mAlk6=`0O@R#9N$2pe`?NRlBRdZvS0saM;Lb{`wX4BeEY0m2Bz|Vgb7^6kl+G z(^iSTy)#^4@Tn2el~xQgh6$)PaMw{+xKuMaxbv$MHT-&x*~T86+xh&7;4rGfZl zB1PxQrf>^D!VNT_J*EKyj&_>*-#2B_roG^ino-&)sr5=$M1$@sfm1LHu5t=E2j?B%^pFJ+&Q zOGRA)`23&0&KWnXY_5Fl>Ccs)Kd_ntTuQC3dt*UKthE9>Xme73y_@G0Jn`puF!<+# zva^zB1*e@ZfWr{E={MZ@*V~U?81pUEsUQbFyu`K8zaIw{N&U(8BoZ{{tfg(_%RFFO zICBA*qts}y{@(+Dto1sVWFH5sF46tlm4CJCJehKEo^?0z*Z+0q|9^PVfD8kex6imu zwNqtp#GEbG<#`*({2NC+JdYQ39$RRO`YjpJfv0Cc>i`vqygcbuG`~Xp+ESKQneOA_ z?`E-LTd4nfy~0>HPvM@wEzplc_zczMR{(605zV^>YELib-H3erAD^O2_GRcR_^mGK z-Tb_1L*~9WeWBpLzIOvS=_1PdVQLVG2~cnwZsL!>M`70%p}^=i!%~aEN~PV+F|NeD zf58^~*&w zdoFT!?JXSAa?(wx)`-6dXh^M38>%l}!9E!MxalT7B6B-R9UR`K8ep5(t5hi6D6C@M z#{L&y<#A5TLOIYjSpkvO#KVdaK%8`OkOOPKnM2WxUJGkD(+xP1F&(HOAkNeB#03D! z#A#5f+@b?B2fWKPgJVtbdiV%@7ja=xIc$~4+0Efpa0P1ErQ*d`jmoAuIIGIJop)UwVwbx zaX<1j*LbSvu+B)?aMvo?a!k8Lx{z=P`5~aTp*dPQazC)#JLbYZ^pAJ;+ z_BhoSTldITeEZ{GTA0f0pm`+{+a%VM5ep;k_LWX0A1Yu|tT%{aO(dE8cgeXUW9GdExtu51;eh+M&; z#|B|NW|=w0cZp!QI?PBKP3;gxj~~Q49-ysGSNZ+(&}#1qX7dyRqn5avqPnX`{%iZ& zd%8OkFLaB|JOmy`_wGV)XTgU$wZK1&)wil7gOqWPv)oU!RCP5H`F!(j-3}q-*Ao94 z?K-`9XNT7hcQ4St2nj7b1a0#f3n2-ox4=Yz7ET=oMg(Os zjTcdp6IBONf6oGtuR;tHw6_>=+hZ)Ccsw`yGI&a z?9-^uO*pU^>oP0y{rmwHCn5G$H+lB7NZQ zZW&+>$~EiQ3dFPF9owByLG{oy=vxk&$*QH-j}w^LC5r`(u8 z8gHUcw5ZiVY;L#xraaA>#ZzD2pYB6hP8EY153DtIcF z2J~cVZeIj6E=*%4cZZiHyrtZ8#49RW0r`3!q<|CxH-uR>f;A=S=HA6Eq2goyGh~=P zj+OW(R<)(T(rUHSsd=sqCF9*|p%s7dtX}S5BAxryXLk*pU#Q)tRwzl)*>YeMc`3dw z%lhpbn5%#b*X%I=3t}maIzT?>Ie#Z1&#nhJ@fc!q-!7L(@zTLEJYgG03lv>P)D!Y3 zAY-ql~N#V%ps-x;hKOa9dv1UFjPnjEeJZ)i$oR7IQfN z3-BPs`GT=Ft)LvpBPJ(DC3bqDr^0xDe3hmu+1+{rT&w3wMu4X=LC8JxuDG9PyurjI z$WEnA-cL&uXIP}QrL*COOk&kpbuok7@x5!2$utN`ZF&7MJcSTOL$2OutYYrW;cRXG zD4~MxLSA}7_z3Cm;*y6)FNSL%Y*ioSUGP^dy^o9C6kJDysg6{zH@LUPG^z2|zRtV= zw1snxQ2C3J**4o$>^qX3BgZSpBW@^AW}>b8z;z*sy4`X#`kjZL4`WbM9VxDnOTV-% z?JX!Gf;&-?03gQz<(>^Rq;nm-HQS{Xml2$@NbRB$jaxZ@Bx?mhZUfcwpTPjt{F z%cuj9t(SO!^&hn~4ErqLG9a-z6EFy1y z0VDj%loY@pCDk|_!7RBd+P6-ldASDaZjNu5a^DxfHkcH^Q?F@lP|_1eu0U58+iPxx z(jo&80u^tR>&&XwkGcbMji-dUkGuXC-}?<89t=|o@a?&D+_m~CyX*#ih01se;|PmVCiPuTCzW%fiA!7tS8=aZTkr($i%G7GB z3W)q*@iMEblb{y%tE3c`_1$KUy#a&KldeI#e|UlWjT9*`@0kotN7)9qOc2xWotV-0JEgY>=^=H97N$!8GlfbOo!Q|dn z((J4Gr2?Gnm~1R4J(ur+vSN17rS<#4Z)T>VpZ^D#0WqHXIAm$Zj}y;->*BDvwHAjB z_z8i$H>bH5!>~#=4<`#G5^=Z7&@I~oxnY!esHpSGuY6lz9EN?|;{yqWD&Ooj>&WMp zuhi*ZT5(m)c2b$LXezJ}f9zm^(QoTi;7gy!u?URR7*OziX(hbZF1%T_@Nuu2Gv_ZY z-)6aN86#(%tV{W?i^Xn%ac>{0RIOc>Dh7zCWOxpLHQcBMlbu#be47*S4i9&1EQSZT zuls|^n)?P0oKr+!6CXH#jyFJfln1JWZ}rE4!w})g0m-C_?>Ha!$?mj6-+-%qAK${e z+UN&Rb~6r4F{KzQbvs29SA38D1%ng5+GDc#Ia{rHry-CST1?ND&2TT$@f1}e5%bGO zh?u%!QD8Qn#UlLpY1D21973@cKqObO=kb_?Z+rHva#cfxce(?XH-KoUq>^$6)oYei zlLU&i;TphJq3y$9+|Y;n1^I&^ykjR7TM{`@Mqo#cbQ0(cVNH&33#P5C=4 zkc&!nH*L*YWMG}5Hb(z-?%oc*?ds?U*SL&>m6qu~3IluK6`g$x=$YH*(*93-*BKR6 zwyZIrf*BMPXFwTfkQR_2jbsx@G@ueB2tt#TBpC@R7=|QCGKh&m1eDZ3cMBImBr6CF z0*w+>GEI*1YWHDg?%a9z|6A)#|C(9Wsk3+OufD3Y)`#f&lsmfr8Ky21l=i+^p56FV<|4-5W_{enBFb+;_%&AmW=+ zK(<%&qrDZoB7w=zKQrI2BE9I#I>lwfUy6VBH)fM79fYiGkiItM@HL{)OWcwlwHhC` z8uv^)p+y^AI&)j5zU8rVG3n74K#caxKZN-yfOV2S>YqXEguXSUxc;`8NF6!I{^0`} z@li@T&sb{Pzfe@JE#|vEc0>Dt5hPY|(yn#$m&0s^d@G|cN;?RCs}&F7u>)6ih;5aL ziKR#j>OnU511`gtBK|7GC#P4$f&uW=6VuZWxNZ3SX&St6}wH%HFp zJ06*0(I~=VwynW`Gi!EWwlQ>(s*4bRJzItwWWa7B4tefJ=}I5Z2Ro<2bmzObIAyF%%S#kkrTVMY z?qtu)Yn1Y=zvdh{$0gJ0(o`$QOm|yc(bry$C}9u$mqvBTa6x-kI8U3~&|7*b!k4F@bgGSGFFOpa-6@wj9rm8HU5~V zm5i)iH`Vj=%hb5%Zcxf-eS%gN(uDiHz_lm0D2$bAeL_5NX)MSjWcRZ!xEmQ!$>*oQ z8Jp_241HlxwTZ2-rN>uolhQj6U{^uO6C#=SYCUQBPUt!osZNG)yk#*{gck34zzFqK z8Sc&RgdDb{>+ps6S0dUOa*XjBajQnpn9A7VUg}n~gYa$Yh1n-K*Um`m7}$9uJ{q=W zY4uN<&tj{eMBud)d5~nR9YpLs>$AQ2(A5RV6$d|VPPh;hdYPA5mz*(BugN5CxeooG zpk>`3ztY%Ub1d1=ifpRmcv#T~pYrW$7A^NYlP;k|V+u-6cMAA3i&k zLZ9#~TrrGipLU6Vn9G^uCtcy(FCM8B!Nz5UeL*GEC*H)E#z(uO^RBW!Z8Nx;_x=3! znJ&MQ&O~p|;B-y;!rmp~lV&-1Y|MsbVk0=abVgpxUkpB5@LB z@Ou6+nBbYe7EtQCCQ-c6b*z+~tRB%- z4Q3xvU3skX{1F~@k$7PDhJt)+VhZf*NX`LVhQG4=z_wTwLfynuN9_q%@PN-Dl%gdkmmy#}Qnk(?uqWYk~K&zb)hm@72h* z(K5C20Hsz+dMxRE#(Y$gICT0uHRGBZznj54MEV2HEG(DJ55PBdfvb=4Lc<3OI>oaJ zC8N14eXMy}tgP#;Q+8}hJ+XkcML$_Q^?^o-Rlgr*a0W1-K65oud=}?W88R9UlO)|yb~zhl8x0TpMGmAbih zW-cE8Rg`MZfXkjb@c9LP;Y=6=8AViz&gk32O+pI4L-~JwGW((fHQ(C^D&dk|`0}Pe zz4!;T02D%b)>nNxBsVg<4eS3FZQy8wN2OHFd%p@^LB4l|U~*P1_#2 zp7g?vt^sv-IFgt2rfv9JWeN=r{nu?9`(V#LZg@H5kk{(Mb)uEL-dDz9lc-(WZ0&y? zaS2?;IdpiWu*Yk4(U9cjx4{-89YwVrhsyp|#|N^AKU|gKJ8vT-ER3C}JQUoK_;@!} zM{(+7FO*1{p%C+WgQer?VraMtb*te6Z;7Z-}vJwMCAw@G`3y&v1|N!Vt4xV zYB(Cje*e6Jh22Y*%`Ish)^=7_LN8vt2uM#)9~=AfW@Fmf^Z*8fLGNm)s|!?pyuGERrR>L#*DRahIe+;h zOzf-dvlMc^YHvSX_98qyT!3DDuc|D&xw-lM6&dfe8z_LPe8Aoy958e|b9i|8Wntki zRW-H9U4tjIs3uzn2M53OH>ELXXbZqU<|tEZsb+Mbaoc`FlB)*oyp^+a4tL_=Hk48M z$EdFeI6()W2Qe|no}N|je$KDWm2BBH(c3HF%e-b#=!!X`$!|JoO&gze-yaaGEh{@J ztE3dl#|COx>_eD-@6XLo9&o&RHPcZ~!o>3H*RN$CKAc&+izFO-FgEBY&dkg_C?^*m zaMs-?hm)GaS%v=jbHR$;4z;=7j*N^{-!&zooo~3gy}h0B7)_-#WE+!a9Pu(TGDl&Q zH-FP}9hma6&NpP(Ar1a^+c5$7F2lylOOEZKy_c%0s#l5>fj}dRIN8|jSMZt?evz3O z*w@!bUrvaN>rdJX%32l{Ji-!^4_L#yf=rpyF^a>cvnRKt#1Eh5X6aqu&~T@&t`3&r zO@F`5;)j@s%=XUC;fhQ7hN5$c3GoM{nf6ZD%cQx_sup^ZZ&RCGaY4m7x`jEMuj=dT zyTi!aM_ElnRDTH$4aIeRk&8^?Z5ej!2}36KPhFY+g9ERtb!fk?Nz2fI)s&Z)Cvmy< z9adJ}3ZpYKH|L+z(MuYNda0Af>9+$-+bA9zD!%5?Z$nR>%Uru~PldF(hBIb(iEk?_kC8h= zNoeofe+0)q`4JI&O0?KG{}fuB)qCCACSaZNiP*>A_rwT_-U_ zozB|h9ugcJ5E2qXp9*!ao1dT0*O_=u8+0EpLOAyD!~n6$(#&ihTa1|e#Kgpx$w_JY zxQ^%iq|K;w)@+-Yd|PxF8nmMU20*c^-rn+T55(jX5)v40?ibwHY1P#l4r{CTm^>XUDnDR8{lx`0ILxvJ4GVrG=qbdM>)f(b0a!sGTeK8%ZtyGIhv z9ICD`%Puf7F$w*5p>%+SfC`Uvvu!imxo~1`93?FXCx2)&8W8;ybB-$Jtxe?VnVBBZ z4R1;+fz%wBhONR-<5B-I&E0Z4=aOYwyk%NK#pnSCk!THBMa2;2YaW(k5KyoJ=VS|8 z7qZvpWl~a7Z_?&?pga#mP%Ii+m@TEOtgNWIPrAPgJ0#Lw4^Me1db)c?Ce21KZ9!u9 zG5d_wwzOQ}_-S)IP_xIzd23R86?u;|0t*+Cio((pe=8gg7tt#0KqL~o`!*d^R!*V3 zp~NL72FD;TK7AHLkXKGqVfTCM_spfbxhlSnIKE}Qc1H8BB&6$M05E%Ivm`6+K)fnjgbnNo15!R`l>xm zW{TLahyXc*NXYl^UTD-h6RKKFXT~smP)6oK`3cV^+kBY(m&HW|&oocnjOOk>q#`Pq zDfF-xe1e0kukQPIYf2(MHa=d1ewCirKJ0NANeS{Zc}}?K)~#CtBGm~M6%`(b^Zx#Gy&v5 z6NFWy$p8TPS4|nTLG^PV9f0B}QFu9JS(g~w?)-NwR09F|A_h$fW$C+3=?c7#nyf9A{81hcBzV;q9`wwXdC>+jx+HT!D2v!zZ+kIc2`na=! zkK&Zg-Hm2-S_iWt2QY*ByJ&)@rY6HV>kA)rJBrQdx<0vaG{By;M;tBiLjep(f-Ux> z$oqJQ3l}Z`*4~&>&TE=y`A($L=p#va=nw3u9L5|}<4P=^M^8_$2c-CX?G)}6&DW_Z z;jzV)!mN4ERW3=Ow>klc+~Y89?4oG~PC~C_F1?}TXB5>i)C6FtDKGA{hq;7sQtVsA zeV#^?8!dh1HYwp2N0+!B9$y)qo3C$jfRQHzW^VCsJWBHw>(#;9zI`<_Jx@W7CF<@9 z1|brmIexUw_t;Mxi%cnrK?+GF^LtGYb*kLMf~H26Nw$!L9z8KBsiLOn=1^}QpOcoNyy1~vlyMhN7mK=fwK^djF_1C{*){fMUo(6J2x~yJ1Dzm}Z z!mfWEem~%{Vn1xg{!G_2T6$)f`Brmx;}3OtG*<5ADPPJ@FgpJT3}D;1xVR!>@eb3| z)5wGIQ~79pl>O}ZvC&mwX4wF|hhBW`+BJsr?J@7J7ifIf^I!8|V6j+X9mMjzJkrB% z^7NaUvRB;8?wDvE1GxO_l%MiX`KNkBk!6H;V}V1FlamuE-Lq#8!&&T$!$=)cy12;A zSC0AMz7;u0M3EfiM<(@xi<8_VOt~sQS`UVp`xqG|n`PT5C@2JzF8LF*(T>w zD2V|^w}=i7;`Ey{>Gm>j*58q(4)!b?1Yu#I9J8W=5ZO&4v~V3FOj&vPAkr7(Z=>~U zrX?xIjXWoAxTn2p5B^Kg6Cheyp#h_$lztOV1m&-(mmjkB?dekM#w>mqv*f+BQz^LZ zv=i5yojDwIZQIn1_-N8pr=X;jt>L-uRs-%Doe7jS+*yPvWVaOm!ESufi z1vwUnld*IdpK>T^f3(o4ySuB+^VrZkPAi!Nu=ZO%L(Or(Pf8 zazLEJ(tx>)V`_#;vpxh?2E&Qci5Db?O8SmmQJQMGHFiVk49$C@#WODC{GtjkIYYrcWsnE70+-(Pu*Wht!)r_ zl)JQ5WqB$fBv5k27Q}vh`*CZG(cBOIvnQrZA}M%`RX5h0aW1<}n;Q+I;)= z&CK3j>|U&xJOrjMXoAx^Hu;8TL?X_!pr(Fk=n6#;y{;E~;$YO!j;yMxDgh%N;z&2! z1%r-)*ROdY%^FvTNrKW-Z(s-0-1aG$@lunLlW)Iz^-ACp4-rtp%=E>cKpdy{UuHlm zZ?J;~MM);I_oclU0`(${&wF&fv$L=eI3O-QGcEE6$`8arql!aXT3VCLyQ}_Yn70<@ z46V&F%zUs`TQ9Dts0b>io-mL7Ih@r{?jFrI)PDW#Wh6D_iZYr)Av^X0T115=VW+2M zWRhDxmHIQp&YrMh*UHMu)DPAH8c!pxXJ^!Y{1{b;GQvOVysMq|1PJ}O8%?f67Z>RR zqN0JFot+m$o+K;z@IYNxHaY1s{&SX8P*4y<4Na%?J?5$%v5;K~xD=;X>9Bc=&knfA zG1N>A-85*Bp6KiA7lz|^EkMD#!i%`s=*g0vDA|WHgg%c8bQ(LPg-fC!K zvc=BMt_nFa5Xv61mxM#k=rt&jN|>img_77L30Y7n+Db<|f1Tcx2u}?|4>LmRvs56c@2wwa+ff&Gr9lM~fU*u)B4vK0rb8BczxcV_woOp4smq?9tkM}WG%)B-I>{si@n11$ z#B>ANqrKs$KpFi(K#kdzWxm=$haryFP zGhbh&p^=ek9S&wK{bZm@xN&Bz@r1|q>qGG;kReRiuver1{%1=OlA`}ld$04RZnIl_5~mb! 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 zcmeFZXH?VewmpgsL(kLO1k%wRs5?pzK7(KoPN1U;q|>;4%h1bWZg_L?%J|OS@**#mmk;;i#f$UG zFHSx?`Q_AM{_31wahb^;g03EQ>ti`WeZIQSZ7#gOxxab9yC82~rq{I@)foT8KDDxO zDsghtyJ^Y~!*60X?bqpSS5h}+W?!-y@E3T;zhCL>yJqeNJ<%obPy&gLFQM$8;fZv~a^=;SEcGmbY`o1&f|%Co~6^I$l4} zX!Y?KDQ$1te(m>ognI3;r@6;hHj~=}mH~bq8^cf3BNQn2*0AclLpm+=Y}|C|rOFJl zhL)oqcpYpbYBjSIvrE`LM-M-`_U_4zu_h($D<_^E7?1F#;~}vh*xbUQCsTJA;g%mv zN(BRzsB@JLUCB4FTeGEU`9d!DJg}-+K`e?g-ct$obKP(5TZ+ii(G|UY8a`m*BWC85 zpOgE`_5IHfEW4$zb=HNaki%Oo4O~kjyt%ye9|M=w6zHz3y$|Wiu zdX)Z+H2Hv6hUMXjS(UU{A4-4&^nnIAduI0>7(}3g0l5~bM-h2Z^yMC?%k^3 zlegA(Hb&KX1Gbl~A~z~J#5-UD-ob3fFGf()+zrQ{_~ntvTN{|Ylp9a{I?mDcuv|FA z4U*#RG{o08JYMynRVJ|ue)LVLzGnewO z`oz+Pg?j9>Bgb7lOlVKzq@O`Y*JAnYW~eVXIM~W=MY*Gv0Xx+@*WdgJ4WaqC7(?TR zG)ziodgj%wtLZ*E9fBbK>6Xv$>U7j-VB-|wX$wOFsEC>?V}&NHAD#>&O>&p&rV^c9 zs`NKT0|KU`#p_8IIXjIkMe1b}4Tb0em)T`|o?gY*F+E+L9By768TC+=9r%3yY>z^_ zp!UHn)uU3dcF0!MI9g*QYyS9ea^K;lUFu?*$jyE;=VDUBVsj-nM3ypWV}Pk#X%|%= z^`{nxP1(tsc<6|nru*>QCOymi|IL417VE5g=6oxc`w2{ZG`qa>6Ti)d*4;kDN%o$90EYmTkZs77@n`%+&aqZM^$ ze~~Hn&AIFJtT=WHub=6^w!n3s7YHU4 zkO=a*7t{PGrXH)E((3lfkJUVW{|r?J*<4J=(r%s_IJd1m2(HH6tyzOnmAmoM2#cv7 z2+R(}Fd5uD?5=iU^WH9%wA{)Y(WSJvO(JDQgj0wJ45{ohGiUO6aqWoNEGHKHfG3&D zg|Ihkx%bMoVZP>8J-6Gp3qj!@hV0Y0huu2Ff+U@S)cuc6zUyDa?CtiBD*he|B870e zzR;Cl{_?SzLU1l6WrXr*x^ORqNsru_UyOn(YV7O;vs=6pPmmK0zr~gL7sH$L^@5X$Lh^4`Fy3H$LxMAsx_iS@d`OH}(-n?A{b%3RXLH?Z1CyQyRZR<&s8y9@K~r3`DtnMmI$lhP;;R& zoP)|qc)|u7xMoXYkIAw$gyPG;iV%wS9>C%<;IVMZJt7(J@va1%KXn);WTcX^Rh1H_ zT%E9?HcXkX|H06rQz{T>a?d*0@PHe^5j`Xn!|l;?3(Mm(ca6qz{uYU@N}4;WX}`iRdW(=lzT59Bgtdj(rJooYUKkLZX_kszKpURYG|YA3-s?}C3D zf84{B7$!{<u&S2-KLj* zlp(=&AL(Ha{Me{bh)^kEXDHpRgZT`}w~ti*7~ZqkiW2VSg9SbQ_BqNsr9oE?=@c%v z@IC{B0Y!yb_QWZPp5*~&O$&3M{1KPR?*Tg{@!p1 z)dO8zubB!2r@GS+{!*4vklRU)6mnsy-LJw`?g!lp8`|*F7|W2Ei`})b+~5@%bPbUo zUb9#beQ1O#ivPN649CKpyA4`5@S7sIPR7#{1!y~y3j_hRmuDvEZI=hr>v#(ng%}P{tR&??>;}vz{ zW(e6(Iq`L8l7e$7l!y{Gj6-!7&J&S!EN==ebm$P}U(e(xA^VI>IwkoUvIVDO@4K~W zXXu?dy;nV8QK=Mz%g&r7$4B;lu=HL2dL3hMre?%@_SWYvr%Gi<NNwWO zq{lL|MU`{V!{yvo$nE)co-@Xle(U)yZ*cZ?ld&CNgpYIh9>1nBV0C|GiO*uX1g{HS zDXHv|O&AqAPQG2R8n<10DO~2$?pkz@u7UQ9x$T3#5ZcWriDehKFc?B>Q@zRg2|IDY zwy~xH-m}HEb5Q$UxQfR+J5G3&o=8c1N0J^yVf)}m`qM~ z+3fRd$nK=TV%$FX1gO^6Ta<&kdgb?q)Y#*hoH#;SK~ASfIC5AZzpw)&IF0@zp>c1; zBc{t+^h#Z44bjy(Yr=c3yj6ngL(WILRNW`2yU8`R^~Z{nKgq+UO7B9HYGAw*GZ#~c zm(vRR4>_^$jc;!aU~2RkQta+he#d0p^83_IO-B!; zqXt5igrS{>73XF8N;5WG20((7P~E9X>crYvH{P@MO^I~8=Nog?g=o6Lv^2V$2RO1 z+f!J3Mdz^`aVgpP^X_hzvgq{zOU%;C3u2cf<~|-WADU@|tD@0kwM5s3kAWy`Gp+G{ zbTcsWnh3p{b;p@n{D`yb#xxg|^_B~R%woP-PHo9%yJ%_hra6~n{5t4XQ;G`tA?pyL zOVsAZ!ybJBBW;}2S+u;o<3QbP6&~N*F6v2?DXJau4)U8wL31p$?YUAlo`|IwdN5TX zn7ZK2n^OthcfQ=3F|bc4knlVxg9yCSTC{BdxtZm`UGv5*1#;WO(Q|V$&iZICRG>zu9h&D?7tZiNEC`G6nItXIZMx zPWH8WQg(O=o-h(1+X`7!D(vtuPH-J(|Ehy?%kyjyDMZcG&OfeMuTe8WX7nLOXp4LB-soMCP7^+2n4CA0A-*IwgD?0tC3;Dc20SGj^J`IwzPnOxoMW3o2P zY<@TYS8rr^%_+P=m^wGoaO&)Oao9zqNPS6!#u{JDuv*7JUSu`(uFZGFzY5EiTR821 z2{_6%=)^&}MTX~gPkYRf-|)@6U*9>P!00$WE5~l@VjFkDXR+zY+C&sIm*@W7OXkq@ zNvVS9k7{#bFvOIDJ z5>LRHJsjxlI>c(fyJS7JV+!Q!F#T$@xARv{+!oowUNP) z9)cxuwZSFt42Fo$e&UPRW^2E$5uaM%{h?A;<%7xQvwYjHX{Wq&+e(XO^`W3oujT zzSaQShGFFa9&5SA0&Pc9?#S)*12&WNs<6?PLFRH!F#LsR)s3DE=G?H-#dk5-Q-+@B z)u3t24K)|$7DXNM8!DWI$!|%Fy%V0ApDSupl!+%{=!6}`hcUM4Qb%p&mQ>es)Kd{= zxxpNhH`sFAi*y@qCsr*gcN|#$k=D9iQOM&MSWv`ulBt9sVS>Tu*3Zlh2`~aIYO#@K zB1^1k*APs3n3a8+iAU5yqfLT_lSOtD>{A`HdT~hD+0}2B8I3DhUOAP$VrhKYJUxSI z5*B^7>ChXK(Y>Cb+@A4a5@UL;&oeF8l>W|L-#>CkqUBB=|F7J6_|>my@Vh~(Q1<*WAyJpY_tU995}49aZZ#%hYUi)aMW5%!9z3ntf~HZ+RkyYKp7{eJ zoe!^`2%&$nDw%&*+3_WRL#Z`WT)YSi(V>sEP<2J5!5Z55_4Jjxl+;ME@prt+VW71t zZ9n2HmO^n`Q6ZLpiTT;o7S}h)>UuU*w2*1===kArw(Xso!hFZ35vz=PUlE|2aQ{9v%~}Uc_aaxaY-Yam@JtAt&F==N}GoJ`~xT zH(&C8d?7-eoAs4HcCY8kvFU3yB%{5T_UA-&+G`qZm}c-^xy}x0o?Np7JwA}dEsq2M zZ&NnvWuznAc;gQ@CDWZzxP`WLp9^yhO6|g*!iu~=289wHw{ja`O!{wD&PfPv8EcLZ z+cE%(ZjIhJ92UEjugQd@HnA#frl2)~Pqm*}@YWLk(kVTfe50SnqSQFcVp3w$%CtDy z+B#TN5B16fMJPp^< z+E8#w%{k%cOS^>d$i$hE+WE?gkFw=jZZmTFs`Xu~xGL@AQm@>}6|jpsgeMu3fnE#U z4-96S z>c<`x~1b4)1QlEFNibtj}&_mi(h$eB-GGmdI#@eR6s2;R{!N zbD4=?ZqLCCT-5n%V&e}2#$O7imSK-gBEv1cejeczt9>N;>#=sh+j&I`|IJCmWb3)w z+lI^2j`|tT?*h0c>`ktD!Ldy);t$AjI45B~6fEh6+@;(b^%`fQonEEqiP=>ppFIN$ z6&;1VWe0P^QtuUNjvmx;E!4>TyPkFM-M5dZG8jT^WYkKj&@{MeKhrGvDtzyAdbLO@ zR^lctB^NfHJA7!#Rnb%6!i6{#I3*4(ZWeqt;ae;|>-SnDLOnH30I)+18T4CEjUo+d ziSCWDYNgWI97QdOa7Fj)%;fCKCx05vkARUGd7G9uhVo7P(bIr`YkoD@@m#2z&fV3~ zQk|*;Y~5hl9|(g)p-Xzz;-_hi=aN#*1-_IV-Oba-^BKN0v(?Vm5D7xUl(0$zs6wCG zxupUdW$cwL#+}SZJT|XK*3+JxBV@ZcyA_Sha1hYktu%N6ck?4pN%yS4Fa9bc69G=0@5IHN2g8(~wwP(Q05 zV2Nm2*AFQD)wD6fDL=!(;5Tp;3R=$do!vL77cYZ!yxC#a!Ab`t8hWBSG$$1%g?KhE z^z!8(xpibeaExiX7G9kr+G~JI_1K9BF4zyXbMe{ESHn^F1b)i;WTy!HiVPSKJfpmd zd(Z4K=v;)Ttj?J^T-N;34*!wa^NTX!q>ho!btYzTZ_IeQnRCS|zFiC+om>94ipvI9 zfpPjYPW+{m<7gkid6a2n6OaH>US(00q4^PJDIOHpsOKwpoFk~+aw!NPP8v3vR@w~- z9Rk#Q#*oWTdTF&=sXLlVZk@*RnM#cOsB?!$zsoaYe?_|v?|6wPBfIp`zORCN4`tTI z&p8RIB0kREl5RLb*1FR4FpJ5n?^?!Ob-Lx6LAs@6a_eB`lbvZ;2t=5e$W{2H9^8x8 za(|{K`=tA6vVhU%tyuKAuL^-1aZOAh(5B!Gjm?nub{F>~I^GPX(>KIs3EL6L@ow+KL%c?7LVSPh|`3B$m21E)pkGum(KSEO<6^#S*ue}q_aSo;Rx)wH+ zpOMu1&kGQq=o$E0Ky_u1dC4vbZkKg}2ESY7FGoEB4Wp~M{OTN2sC*U|35ZL)^tJ^! zr5lgZ(-9~6H}L&8LnTw_Vs#)xeCwR5&|jfd7YZCMb*`jR`Z+C8Rq`GZsS8aPc~BOK z(T*7cKa-US{N;b-%7NX+k~s2Tel0CL13)}bIIG>qx|nrWFr|semm!ZMjPI`M+B1C+ z9MAvWo%PhhN83}m2y|~60I6ol366u1m6t)|mS3?kf`iU2oc7?t`c3VQvx4L7Vuy;` zMjpzGRhxe)3};lukOcp3+XDe3whjPswUv9L|JfsI+Sc=<;*`Tg7L644d&FtH(?J;x zwpYiF`kClLpALSy#9VOp6^WAr;*Wn@ds+34>hxo6Kya-fUW5Z#^m$LDb(>!= zyr&t^--Pi_=X+j;p1(k6*3mZ`xW>pmrcqBn9v^CZs-#k#!2S5kU-=kb&q3>ajLFX% zJ_ zH!oY3Y19PDQ9n00@wxjk$G9&56p^D3Sx{H&EiyyRUMsq1Q4K{o@_D0b`OHlAYs@}< z8Q&PzZv@Kq)%e4+$2VlZ@9Ze3#THrk8Y_dWmul>vT?yS?5>KdBt^q@!u#Z4 zvq0!9{-2LETre=I>UI?eq2qF;_SBTI7hubC0*4ANyZp$#ut-$Bz?RZ_ZKgq_4Fjru za6YCsA2i=j{=CWvuD*;(`vR^~bz8xI)Q_m11F8R|QVauzm$cQ8`ipt;T2Ds(?M>Yd zEy8?ZNPP-H-g5;qk@{ljmcXz*3RDaYfHnQbRX_T#I`3|8=3|_ZXT%EceYw=F6(u3o z%a?3$r-83O+s_2ewM0l8SbvqjP==VC2sSc-A@4#Jwn$mkvD1YGy0SjC8f3CWvBCmI zFS`=vj}@ORVjP_q?NfZEu=@RaK4vI1V5&1IZi{+^{r=l6AM^T><2E!MfM*lCa%Wn0 z(%^D7&x^@o&&b*nRj}P5am%C$SgYax>Gb}S^+(Mb2wn;1Fd8ZJcIBB=yeb?|r`vOT z37n{ux{uO79)13ye53B6k@+nq#r+B)(7+;9-+;?jW-OnKHP5B!Q6}K$kmR}LDZker zvMN}8iU~&{e>$VhDcKKyQ2n1SNc7tnHV7Dy_EknI^kh`Q0G+)~6ehJTZjZoYo^&-B^6mqwg+2baLObH#ZL1V7)Ng=8D|>i?-O zUuH7SmoHhNba6NrUAyOc1%YbH{d0cv#c8DhoL?oNqvm@RP$LZyUjiyexAFSfKxb_4 z9bJ#T7YT!`0crWpP7{*_(psN=Q#4xLUwcLK?I?J+!cQh&NLY;*Id7pS(Cnh9%*(n z<`=XwZ1Pvrh0@<(9yV$Mk+asFr+sRoN)inZ-tf@-q=h+w)!kI?BZ)2-j8_M}T zf{pBI^DwZejr3dLkG*$s3)B$wZZ1RBIHvghuU9!p1MXC$bt+`lL?~kW?5g&^!k$F1 zO{@J8bkdP_nK&|%KTw8jS>?lwtCyN zGSp%=3V^&-$D(~qAkck~pMlLI%bW(OMZ!l~W|a2}b4_~xlj!~PZOu8W&V$Mh(|_4~ z%{szl)VSP*!&7hQC74r4X*j|{=efdc{yowZF+-{+lnuu0!S(3Ff&BLzYu{$?PL&V5 zFMi7GXmfDTvmPot!^dfR{!ff;ndi&DA|4O59q_}WSIWjNI(oDDnW zjH8XizBmV13=|$KcA<@7Sz=p^6s)^%{VZu%s7R91-|u%YheTS8^KhGEK`dPgkS5cp z?Ttp?Oi7&<)Y3-=hCNrJ-WH!SQGWK5b>e=>xHgs0g=|OPyQ5&m&ue`5j`*P_Fyevk zG{lbgRf}KOMQTSjodNj!*xKum%1Iseeb}df7Vo(0s9z&>!+6nyX&!IHbl zd1?||7U+&oOs$aoN~5GOURmeUjo>P+2Y}vOn7sLYKhohey=v*a>dNna3!iyojJxrE zka?8xw8~*5ORU(A)Dl0p?c+A)6~qL&YQA%Org{yh1^p^F6>meo=PDQxGXm#Og`K@9 z84$ekE#gv8i)n@)O(&owpm~b*RSTR3h?xoLoD)d38As)I4Or+Q&m_LB-iCsp?==~ zLLAm|>f?j|-Vr~uC?ylrV`|xpO6XVdm^|HV7z_yvSXNaR;`OZjz9pns&ns}A_=!v1d|hgqOb*K6yW?Ar&_ zMMl7!)IKZvpCR|{lp1)5yESkTdWZADX~*2B2hC%_w3Ic!?P-jOMIA0`;9t0TrTuB< zK6Mn&=6Zper?L2i`h9(XMD#P7QLJc1A84%U)v#ZLXdErAqP*WzOXvb}Jlu)1$vSF# z5uBnfR|(Y)MWQ=CNO?KHS-B2wfy^-3CoX`;+x#geZ|woUgTf0LHX&f%)>~(i@Mbm7 zhFmuA42UfUcQW1n@JEHzlJ=f^{{Yf=(me0a4!rd-PW(^if=yx^Yiu9eoKCC7ilD#% zSOSwnAC)6*IG6Ovj7J$N721QpZ41?$Ofmnf)P?|NGzQf8Yc?Ta`gbse^!9GlOy@q3 z0$U7A8K9TUJoI_w?bU8597D={eTMm)4+wq?K-ijQ1AoqYtVSLEcw(p^;EFlJpui>) zT3a{~_Z=&A*BZd6N!N*51CBoHu?rsk?A_wWD+<_u$xkyfNiH#feH#}1Q z0{n$uPJ-B_xs4TF#m$Ee8seq$hzRL_V~~Gefcsa(qEfea-tr3|ecM7sPkZ>o^OL$# z;gKgT9OsdHVInE>N#Sj>+J#;*n_!Zt-*Jr)+Fbhn*Rci-o4?~9!`pt}MmD^^YDu*t?wc!If^g>{a79FxH}=bq}HGw8IgIjzyT{9gbr==x=8(%cCU z!s&>1@hKYH0l5Hd$0}hTi+kzQ*v?FwX9EjzDnxI(M{%;Gr~hW_@hgpQUz*#d--BLs zE^BcmPTdSmp)>BOF1WZjKZ@C1FNF}IK_$w=eQ*A0t76J+kDA!b1p>-rC3KJHOG(F3 zTJ*bV;ysVw8emE$e%F73E7RtZR2xxG&aJdh;(Kml<})0Sr8ymE>3^egRL0?=OFWGg zSHidom?cA&3XV6emnEe0_aEw~edk$&3d~=j6}4l*`#iX8<Bk=}SZNF8uo>g5y1pbUQcNOkbqWPYt;QR`~d0pCnmA2~w)t)=* zEkKf*4EF>kIo{atq(;+_qzJM0hg-*Y#i{QJ2EV^F(BF_ux31N50PvA&0r0TFrZ4Nl7n5u(%`j0h6Q38tjGL*VsIqG)jyuE+Z}>q&r(ZJgwGbd&y! zR%lro0a>zdnsMGJT>5q?VleNVXB$a|Bo;32)fa35kh_Whn&$Mqs1@NVo^S3zfw1>i zxit>8-AL;L({F~I%sm?IbaufO?yicc*Z>h&pp|1)^Z%A2V7O`XsaLthG&@vj&l0Ps z_wnrsFk75WUn-AkJ=QQ+p=GTiMgb>Xt+1rt$ir9DtHhoY&N`;F$k+<>I@hI;m{bXq#2KB(3Pzs5TxE~DnUQyad$nNh z!9K^$Msi2t4#d)AgxFBQ8JZdvJ}SzIe7kJjp!N1V(xXpum)RsYiI9SQ@$aknsqo<1t`*$_SG+{P*cuUqGs@Ly;?u zDA-v1yNo#nWXx|q8PhbJHD2(E+MoR*>Z&9i;wHO9>(rb%;)m#gY^_JTna^F@ zpH%ag6+E9UY3SPZP;=mXVCa||9=D@&#LpcaF23q(POEbY==%A{zvJ745igB%zZ6F)EpT_CaBV*kud^!8A(8Rhjfw5qdmXP`&1_>K8LIPNOoxD!pX zf1+3v2cmfJLTT1Lep2-=&5}iOql=|Da$<}=(Ub=B^DSgUkMfdmVGXG6q{35^(`&ia zslL5Y4~+8O4to;e*D+BiygABr>M5#-OKeASp5ii(E&gd4VeX)Pc;bC;p=mbR2kBYt=~xIE7|=%t`H!G7`|y6gWrYXmn%;SgJ!N1HA6@{1hlfCQl)A^M&J;44%&??B(tR7-==-{qqeXP@*-o}gyLdFn=oo8^iu zq~~3C8Yf8;-bx?1TreB$sXCw*#6^JcVI&<@ywF4ZarYw$##)c7Gv?(-RRKv(?#kC_ z$kwHnXwbZJ_lN_c8q?X3_dBtPOyt=)U_ruyLW&5;L?UrRU09X=*g3pNGk59Y_nr9O{x(hT7*kmb~V??CRaG5Dq>#@8rmeSZ&i;1~kK&lAO zf99`uZA*x{RF(C^ zHRNHbJ6@xH8%)jaIh0o=VX|^rV=;Eu?Yp#dw1~F411SH~TW-1|^Ky$jU+bGKI3x#l z@*%%%<6sc47r(jzsTm{M$=V~}*{knsG+M-plQ;%Ecmx4XT@wokUecU~w4)yb&l%nx zhUVVM^seVJf3se^%NbVzzmG@C4wS+;;~Gtj27n5wo7;EzD%k7DV@je+4VQdd2@tz( z&dcUYNB&s#(|PuHI=HSKNJg&rnV@mEp+67)`BGl!{_=;qHXV8g2qxIvB-cdEsNd!e zf1CV2T|01sj&AG)WS6+<&qdVISOdK>t!%fo1UI^dNqu>YoGc0WG_V`(>D0r=~& z!2kMS@9)P-zwp0HG5_Ce4E;3$EaR_%rF+w1q!EP$<9F$!P=$5FHDD@N-}ezS|49<~ z_rqVTAMz%^4!O{MvFNgw6Qg1zDgbWzsx@TfbgknS;`?&awpjRuL)P zn}G&Y=;g)$OK>i392kVM!0{!$!~lC#0%SCsjIT3XZy4PPhiEg^%s&~l4jmGD^stm+ z^Xvz{%*)`Yjl|QX3IK6Eiv+F)M`IloxbcWearFR2X6D42iCnibJ_81u@Bn%?$vRyU zGk3KlI4f3LBz(4GT33#UK;UdSTuC6XQl2VC@qQcebV`2Fdi!|=I9Xmc2faAFfDu-o z^*yKSd+SMQ58Cd6;h}0LnrmeaYW+fBfN?l8D;5G12s8>Gs(`n0KdHh#1MI;BD^ge# zxixILyAp>5#n?XU;D>MPj<_o5v_2c_hxNf4Ue*teBRgk&6u!0IygssV)nC~ZY;rYT zJ0Q=L?A9)vua^5M<;jR+mM!UJPfnbLY~?)g5}e-mAJgh2446=ZMwQljRI-36z*?kh zdvkTZ+xkU4c%rO7Ph<;jUi*(YV1+3QJM$3OXc9){!JGgtNq6?RU!vqZ2<_Lyj}&U= zTMs`2^WC904we?`kP4ivfE+Wp8>Sly)8VB*otRlFjh(=*8vY4=;hOh@`qJw8BrY{V|;u zz#|4IMgAy$18?L>7k^oYysd#lYv2`Aw2ZXr25gA_pwjit)Jh6ppI<-E8|oNIA)#eK zbZ`^?|IGKv#Cz3DYc$yjVpakccoeD|yMgMitGVsLLm97^T$pQmr@^=IbBnrY2$k>zJmB#m<5iv{g2Qx1`2+HGl0mlgc z0(X{iL7fG`b_q~#!x+aHvDxp0&ALnx6~ev%k5RhMc|XH0ECSuE25aSIDfl}bWMNn! za2;;pmnDtrqSi9evxw&1RDvVLIA)VNd`UOVb9SBU|1eMl|nr(eogP`DYvBZ)4y(G~|r zEfCIP!x6*}Z~|$+=rtI5TTv&GGIPJ+!NK=DM2gM9_jLlcxlKG1<5zWXJU7jvs4xF< z^pzzYANDVU9$-sB3*Of2qRM_`;I6KkkvUL=NV`(`T_S(g!X`{A6X?}lYMtw#AlQ#w z90Bj?B1y;ku)cTmKO^e?Uw)auDuE4FThKL@S`IHgcffrs8V56~Z*$O&xXk1Yak+AKTgqR2Kn!ietSC`*zpJ@o)l2@ zu)vqa4YVEqpaVhIyJRlagQcacBgfAS>bT8#MNUf~MjEv*tsy)4lp zg!Ukf@kfZ@o@JV)9t$SXnE>(Hy$y(t&;`Rm5>Wn%Jm66w$liMSy_yyB)%JjPOuMwE z==}I|R^1mRpaqivfP^;95I{m`_jEX5ZwCvevnM+fr9>02*|dzA!NBA>=zw=pYs=H- zz6O8+(OrHqM#e9jx5%QLQnp}Vj0JwWM8d*{Lo8L;5c02)8ryh!$pRdTC@~8vdTCgH zfkr-Oq(Jd@bP3+H{#!Q;UEO4v*t~#=ml*0OgNQ|tOYHYN)GZ)0zW)i%Y5?o3i0*hvU#$#$1X*B zuKlzv>xZq_CLXmdu-A1e#RI2-1*cT$y>zrC;4gA{m_#ShrUHk`xe7R@fb~NSl#KzH zZ@h)1H{~v{ObB!o6-2SFv1u^v!B4V9+0Em+0>`pPva_T-lyS1OT;y;j%^;8z)-R3p~96CW{`mvPcsW z4FY(lXl5iy<#~UXdtiE#<=(9z?QmYb_dK3&OkYbZX0x*~{b^Z+TG<9t1n8xNOreS2jNA@DiTx#R|EPBV(p3hB{1 z#8snoWL`aG?6Dh=VC=#Tq9$ya!M1~;uh@~|ijo5HMYwrL3Xt(2ni-9Vuc0TdhQ?Rb zUucWv9XIpW9GJNbn*u8igpn&o%6ch?2%{h$O-?5Nq0zfNn7A1U7%^T_%w`tOM0rV0 z2FysV62a*KFVr=J+=#2`cxhtkCsi57bN_fb=+e10mSC$69<9CA0*?n1P(FfH5R*i! z)n}lHn>jBv&aa8!RflXBu_CM=5(9}ej!A8r$xU+UZI9k<8PDKV3>ifqzuKHKZkc?uH?<~Op zCv41A+-u=DU0}Vp!U5mO7!x%X`K6mvorM);UruSA5KvKZptFzCfwXNKoA&tAR!%;l zFB4rJ8aw`o_9mv?HA=SM@iNND3P=H?!ZQk*k=NluS*ACKa)ny z_Sx1IgL+;28Cj(#Dg6}x{8O*UzErCh^dHygLxvTZ?NgAkJ1>R7CP$P8USw`8VZ>MO zhU13mnYAzqP$fHnN;K>~Q;n~&#M7jcXUxiG;l{5{<-P# z0s&Ix&H?Dlq%G&Kp%a*yu%7~i#xxgM?`T`tm{$)RLz?mA7zU5&o-5-*HWC>9w*QgR3Uqp2%I;q>&bMe45Fy#ky&|pEKKh z1ivL4J`rGoIwZ5$IV3}huf75krAqI+eXi176<=xBim^s{1n`gN2cc_A3YXs3!q4?j zjoEMtRJ-1(m~4F?lZHcrMG^l6+2Z*feg4yZpwh>5c@iHA)k`bjsu!{yjXakwFMi}3 zMr-a>98l>q{~UX_#9bT~%ZeI}9dLVQ^aI#z65y)~s!7f5qn>hoI%el=$HSz>zeCL! zv)flb!*b*LY-#tmg3+ov-xHi=Fs&)_G-zj`JP94H%8-zfy}{-6Yjse?(Rs<;*Nd3!0va@hG^zFSxIg(V7pF=>(rSmpH45BV1W`Om4jT5< ztC|wg>qar9k$W&>e-rG~&O?0pY(-JWwppk;=f}$XOF!7@=#cB)2W8GtfCBUJp{?7D zs1(;4#nPhnHml}mQbW9_+>xfQ%K#+i{wi3_T=XR6OL1C4f3aj8IMx8`drIkPX(IU; zcqWMiDIx)OoXQ=JqfhW)azR69($}h&rL1hnTO@@lfmz9}2K(U!M|zul#(T|yL(DSg zS@(ddrMvB zkt83B88dsF{i~E!Ql@7xKt0F<49jJZ{m#w$PrlNP{r&GbY4#(ww*+>M@L7{yv?tQ8r!v zQnB2oR&=&-D(3TJArZ{1lbaGM*JfZ-D%#{;s*PQvqNQXD z3*de*APQX>>Z-~S+=SN)N9)juvJla*bx2p)%IzR4PbILcUlj(CAZHV*WPsbw;ISuI zeC{2MVXjAnE;rUHFz~9Z<-0D4D3O=$*mrNwrStRVN0P*DG}ju`&*hzbY6tC$IUq zc(dlaBq&F$orSv=9#pa+*^+a)vp#?Y5o z^D>xXp8Z;)QfRbQx#LN9MPDTd*t`lVH$zPBbbW!6{FbD}=6&Tw>uwu^M1pLIrsX=o z&0Q%%ouZf|2au_pEOmdT$v(BRWwv?|cKMAXbT?r@sN|vaI%qFP62$XTyx&v1t9{U4iErs zK%V_{zse9AjS$(+x>M9Ohr&fWs)g%XPkErEXhv#O&hNJyz6ma77|=3 znJn|ouJxRU>}_@jxKurDTr1v!ndy8R>{g6!Ix_dp;+LN1kWa7f`Mi_|9ZW~W%+34# zOF!2LOAf)*Mo-kXvV~d?_ygvw@%2hQy9!kd=b131x|#Y!$!q;Bs)V`H1K2!FKRj&HeM4P^f5LM(|o^Fp$tt80M$I7?f%4<9I6BO@N zE)0s=r1Vzt_&2xDEwwiK+SKFSkPxgzI2X4IHhpr&p?gJ$NXO}Q!w7FpV zuUu43n#Zk&s;9MxrfHEB=8!H0X>+wiWQvNzgKKq7Vwfaa3Hx&~uxcm&Nib#^$KHOV zlNyX9iqJR)gmBX$RBKf0SVq?xP?(~(!ZP`5vNbMUuX=oihxG&b+mK%)uvkLOgsD0w zk!Ok7A&x5>p~&w|B~ed!*6M4?K$GLv$M}H~Gb9uiwz}C`Fl97sL-AS@(0f5s^=ht= zNe&6(4W)vqUZ2!Nqov34D;$$26f#^#we`IyL-zBzb&ZSg?vJenTgK9FoHu{I>q4Qj zJN~Xq0akHRSXD+}G{C-Fq&m4RSZ*Cj0hh2Y|)w6_zMhLUtwTh#3ed|HoN)wMU!hyEDSOa1vKe~Vy+8V!7?6mW<554?ty1d6{aCVTUkQmArzx}Je zLfKLb8xtovzXsFScY*<5yZcr}1r=?b#gFy{7tZ4G*M=bQ}yAv`Be zkr@YbTPC-O-wG+jR^T84?l{9ffD9gj1jFa=Qi_HA23&tk_|0BsehvPBi`Cl_kwqV( z`%-y9b05>VzW=@dIp!5@0!i8aS$UV8srLyYf-56lc=IHbi@AAFrY+%)rMXFTidF&y zM~kyqO7f40W^A!^no+6X9t`0e0I0s_YQJNoY@Ov~oIKg*>*HS)w>FR~4F#%ND^3^X z>R4cf7ccC@4(7FgFPLn2GUT*anCT`8b)X@l&?Vi^koH=U^-zn|>a-}zdIzfdB3plES>aNLQb{@$+!VWvAnx9~C!>9Wr^n&$sh z>=3;e-p`OHjz+T3IZ5as=mqoB;(i!w znZ+^A)P7MjvNIMNZR#-YhTMy)V)>a80*^*eq*uuQwPx61xGO@~5}lr<$}EkxN%DPru#P6}BkX)t5!WJ{7F zTQVvkCdMv|C8a{hzGcRm-7sTcpZoXIIj8^f>Ur^eo)>?wPG|19m+QXnYyVyokTSOJ zN|b=@7cIK2cTP7nr{u1j9XAb)<;!0ab2|5r%#f>G(H5BjQPW!~1)7d;6<>{fpDHn8 zvSZSoD@Bkn-zP~<7j+)?2&vJkGx6D+Jiya!PKi`D!)QoRXcQ>|a6&3FykD_B(?{<# zVWTX*e;$%YX^x1hNO6foC)mXvz3ZapO@{0dqlGNDSqYU)>Qx8I?^0P?NINulmo>lR z!F(1ucBUhpN^#ls3>eT5LaMimQq_>GqO#y69&vuEEZ_AF1>lZ>a=DJ;@k+4bwTtWW zDG-Cw5uP+eR}-!)^~KqN#C0F4c_oO=YE7UPKm3WI{Y>4=E}pFmnm4yi5s}8nQb@ln z`2WhU`FKfgk8fvW>vUWFc6NzYcC_35t0>OTj5yT|>P`*jK+PA3-cW%XWWSiO#Khv* z@^!!Kk8qF(xf3Q840pe9j1b%lxOwE;`BP&WYTAsDTOF9rQfO$zJ$1+TcPa-8dIE{N zq^a{H8+g`%CqGkT4_%`wZe`OlTLh2lkh>U-&^xY|0T@lH2pr$84X#0F^bCGGO;Px;Y7J;W#3o?9txvd?F) zwIoW_Rw9oIxSa6YqHJwSE^vY5N_d1+>f|r=XLn)LFg3aDnc(y2we~`7efiG;`F^Lx zvr6hj@LC&|D1D*s)WUWSF}4;|SVZQxcV-nnaalOm96?9EY6YfVVRB|0U(pZ86T=IR zid2l)Jny1>5#(#K6B<9({i1R+`ah}M{PKzvj^{pJ-uCY0QMt)iKVHU0r8h{(ep;mc3$=)2%5^7Of>SUNkN60 zp0q=-g$F@FL~yYWVDeU^=7U%yGyVPNyDeMY3qj~4y-`je`O`m^1+b_Al&)Jr#U~vd zEnf-4-jXz054i5fb{KVFr2x`O6EaK`%yv~itlf%B5KWQegX$K;g zH$_PAO!I+(khZov2MN3#VAK)rT-f$?{*o2DA97}($I4PYlP}i?|1B%JtR(#?srwdB z>7SLS$v?qdh zD8tX^%|l>Ta2`W^Zmn2*7r|h&t<6MyDz&kFHcdhT)wv>;qK^87&`kYSPj!ciIKD6||4y5B)bFn|_mS6}V9D_rLx zYsE2cM@fE|r@M~@49wu9_28l?{I0Lh0!4(R|?&*d_4FnQj_F9{^(Z0>{ z-#K{N??{xStjmB?>q43?3p`K8S2>p_@Z z;mA2{-d51-%W_%UCKB=tvG?VUqCmtpS1%+}eus-t;(}$4vNM3v{B4f~URlu#y&~^3 zy6thu!Pt}}8K(Bn{oPLZtk~5EQ3A0AK*-K>G~GGw2m?X9R>#v>HbI*u2n*8At_UoJ zwOI?2msdG#DfmQ66m{7KGPK3>N?3sKs=j-H??_H+bYk90|1adnpzAN>$FxQH2ktN7 zm06BLk?jax!8c@9E~5m~Lf<6`bERGz?H1)AFU}&p3Zo1a;;IbqisE4`iw{rYM%xEq zz&fYwKiemCubk@q2SN6}cg()Q5=lC`3EQ2^4n|xCRFD&TGdS*en`vhdl*lruG*}e0 z`r8bnfF@anKcM29Rd5j30`;lr8Ac;g?1SH_8qK3>;0g-M^- zJqxAU0Z_c8;P${pt}Ho#0b8snjwbIjd?3V``3Dbd@BUZ%Cdg!^jQ5+8ijPOLp*8qN z2Tc(IeZI5?7~A67w+3ANZf%dV+SY#hYSGEHi0V4Zu6{-^j$j2cHuUwHLPGo6jPd%o|E|u`M$FrxcR%#B=>`Z$ zb>?;#SH^T;PyulXGi+5>D`$g{|0!ozKx#?aeY7#jIVDDamkUTi>TG<5nq2J{4 z=*6ktFDj8%4GOrt5dy92!q{tuekkRhFR9c_Mgn}254qR#RPB@0)r))i@Dt{JHjyU< ztcUvun2{?yu$enOcNY#Y!Hyh%bQ)TQM=>9@@6;IfCj-pJ8qp^gdtj^wLj{EOxZTcL zpN1M!eNUp-b|ahyr9)f|;(*@S#B-O&?a79Q-%FnP)#qdYMIu|M;uC@MnK@rpdq{lk z#UuP31k2G+TUiVvBLCHqcqLB0NDVg3`WN=~`+9i*1~-7ktCOO%mP<60U#vqQ`rRgMk7G&!8GR|&*rvHHp@W&HI=ooyt}$7jBDe)45#U5PdUVKg3=0hb)f zd$rM=nsaNXi6as8(?}h3%5W{uV7-X4@5K02nS<2-AO;0G9d>8D2LZZN01&A+I9Y7; z){Ml|nqK-LW&JHEsyzHxU{COi2yUEH%F!&8N3pfUD7Ez3g616v-$+tVWW6JS8ws+b zeF5DG<5!_RgxzlXU(*OZ$|&MoNJQ*4Or69Q5v0Rr~}H+sbY%&~YF~4x)ND4eji&{%hD`$qEVk8QWnCjLYf_ zN-8_HkkEr{&txwmm>K(bHV^w#A#a+qIzOV{NaDe01s&bnaEAV5BUh~&od4>$);ef5 z`2$3pggm3k*81^hons?nqm~42l58&HAjdDli%4?h*yOqnbaIpxzsDPxj({h z4fzV(3DojY%eSx0sC?yTVj#soW61ih-{;HbY*n}=Ptwf?q-;(&%WA<<=Gy)t@;VgE zd&Y-GCp8Wx{OxDgNL$kC!axj3dQUr#(Qx_sxz5VX_P;NL+){Aegrrpm;@`;2Y$6(U z2A;jIQLUJ?xGUSajv!*_kc^|zyyMd}sN2W4l`jLpBhGJ@W#^H zP_cf`-->acqgD+S)V=?>b8S4z8b(^2@>dGp1Yz&4x2IOMnFIuiMa>v%8C`!|v)Yvf zqUC-|YA9F1;^w8db+Hny(RW5)cpyMrfz#|ETtF~5KK|kLh2z?{9q(w7DS4HI+n^w@ zM_Zprh(_|xR}_QV0jGWm7&DX+^D+Lv!Z>nuwWx13%)Dd_^=C6R4~T)|9$VzS#Ia@>j{u+SA{V>+Q^tbJl$MJCml>hrVq^t*ND zcJQP$uS9M?DJZk-Z1GuU=m|p?subNh%^&&V#2m!#L>nJBxCturJ?7V1!Xb?w5=1If6ZvBK#5;e6T- zfT#j5D3y=nWxnfcmv%VGY(ppNDgr0b(31oO38zj5w;P*_KUeZuJf)nhMu>+ce$kpwA#GGZ9`Q$HFP#7xh{w(xcH(?Xk94AQx>3xM%HY!=LOwj zY4OPHM;1`eX7}+~lc5`kMi~UkbX0vNfY^uDkDJ0=zWdwbN`Ka9a zj(B8gh}QFtr*hthL1(P4>!+`#$*+TcPdw{{#}2=MBRFvo7q%L?gaeR@Gc+#7%oMd} zsf6l-SGdo3r^qUE6pl=PM7zHSRGV%}_fA80+QpS$!D}76Rn<8&bZ-}PPP3VNo8A?> z#Z);V{C;}pS#nxZHH3&uIh@&wdaCy<;nhePvRedrZKaOZp-9fy7?f)#Ukf_;aDy(VK=E301-_-fq|fSFB+{suEcH+-AF(o{SM(4h3*CA;N1lch5y$g3 zAE3McP8QY}3U&IMC4}EUTP~4d_;qA55&w^v&6n7MEVUf3My{}djwkOX|K@uLv%v(s61%-k&knDW ze&iIZ48Al{nWuMVM>p1_yb!i+RkcG2Csxdv8-V@}E6xmZPW&c+x1MM5;wjVb@XzAX|XS*)FlE__+cW= zkIgb2m~f@o-qvz`$eAr89xT183lF{kgid;wP3?b6$;x~- zQ>U_+Va?U{odj}+Arf{+xN25>MvU}EHBc8gM!1yF_{SdWOcHC;?}1l+CPor+?hC$2 z)!$rX-&@{&yG29jGDtTTCpz3Z-~}4h1E7tg!D4w%_T4i(xF;t_h!%6_#9e`Mr5-JxHP26Bl5 zdN*pIjK;)OCBM05>7Eyeh-Z+Ie(V1UJki%)6(`x*M^i0JMa-j#JvQi;3MR|c?W>~} z{F8Jyg>sej^(2lFzL8Pj&U@#4%I;$5|6bu_gq}&)OS{p#QWz%D`v-31{%FN#yKlSb zPGhiVcPL8C8=9||RDIW*99y}Oc{u%3XjYUqw#s|C@9+h#0?S){fWo0 z`WwF?P6{88Z??4tt!_*p>;$JbR)&n1a9YSa<>XZ+-qnw{y z#vH3~a07KT7rMZypz2y?T5C_bMuT400qfztd*zC)J4riFIPEOZ?vUt?2IMUC- zXf)-|?|QRhLiUX>5;PMfvR@fr&`YdMBUChW(>FmG^?lPv;-vCLBJ)z!AmzmOTGNw^BzD%jHHcx;J_O z^Klaw{E97;g&5sI{x6*xR1wp+$U1QZ^qVFcCpFCs#4G_hX=05BGX?g#^Y)8;6MF@?d!#B`oxT)K3p zd2|EjTR{ZxS;pQ4*;!CL@7ngKWaYZlb7==e!Pn#AZ;DKzHWSdVPRPn*8~^=KX|(=s z5cJ)y%LPW!>pt+W*|cb$dE7Q!=72V3HH88-eAn`On*+SK%TR^y-4A;>EQzs9pVMQe6W@uPyd^l4N+O$R-OgtxU-AdMCc<3u5gK)+M@+GzG#rJn_l zE;)k(9|Roc^H=}`p4PE_KKpM64;xqXUIZoQH|ev7AY?4Ngck!{JZa&}-8q2HgF54* z(jJR3f}H3BfS@?BCLOQ-@4FZTHFM#h^I~MiZOEk)F1O!HSYY}Hfybf7`>uv`s?~Q1 zDrs!m6QH72PJU%LdT+9p3FysDPhRc=rIxRuFlu0N@K%7&66^65PmbFb2lsP+58izc z$@wAm*wsT}`#yY8Kj@yauh=aQL~btW?wZ-n@csa*x_vU{#}QUG$*`~s(fv2ZKJ^xG0kIB5eTOG~3xzs+Qp^#}I${(TFQUw_u051_1_Jo0l( zVn5Achbm#W4PbQS@a$|(JPs!zC@A=_yu5rl68f>2Z0)~(Lg#A`-7i4V6NVkX@HEHR zc0!K?{HY2;lR$s>wEn1q|AUS$;lN+N#v{cKA)lbXn-~8#At1y5Xb5w||JVj5!~e^d za?G5AgQKRlR>R%f+eC&lVsL6oY*Q3sNp|R2-&4rwb}4#2Gc)6sTTx*pCLwV+KR>@_ zc=)DXhT+3d7QTwR>gwtb=jP^YvDi`*6O&sTyRYnq$&)>FVt{f+R$f6rDu z-j|h?W$W)>afFNO+G{rzq20p=f|Hf~dgL!d!o({Wk||YL?1-W4tSoi|0|SjWJU@e? ztMPdJ<#H>@?Ck78Yc?>@jS1eH`NFfec#34R~!9uffw zmVV=NN=o9fadGBV1fS z7ksQr-u|-IxrMU#@8fqj=QXyqJzLrZ<~^+o3)fw9A^x<$i$Wri zH3I|JowrWkpZ)adQfD(K*nBB0)xUErV9U|Rk~JDp!#$6q`TD$K`2`L*8v`gGyE!#V?8{iH}$}{+u|^hlzdj_9a+zyqy{oad%68@ z02a@he6@yIKznaN8fsn>x`mfQ8;>dh1+%=SNk#*gW(NmtsU=vR&I^Fr-$h{#bDl)5 zGYL6(JWOiBDTxAA7}eBWKSiN@nFJJid18AE!&B+UG3DRDJ-B1BoP;@ZEm4hi$nwOLF>VG<{c9zw#q(^>P$#YP3bs{)_jJq~H@S^a@FH}Ac!+$YMCMn*=w?Z%b- zR%I}VK7@BNMB9QB+oOO4&)F9>|jCjcLezx>4}4J%X#u<1+1@1AIhjxBoSYK@pJ-}9EZ6TxqtP^M zrewmy!{<1$G71Wbie!XAmhsS8Fy>i2^c+;{ySq(UIm!~iP;Yi6CmGIK+O$0affzJ` z#yr~|)6-+ddRU=>O1(o2;bIiZ92))M7#kZq2+#9tOjnl)7^8jetX4o04ky@D()#Gp zqeBh$(pKO+stoY^KD4&BreQcGgVV(uFg-38nrYv+O`jumf9US* zy@vBjH#ISN@Xr9%+F*R(NA_xWT^BiUQFENDV-pjZZw*CiJt#8Z)omYL9Xh&jiB)z0 zsjn}h^SgtyvokcHx3_l=5*(Vp2Fyy3&j}PIHa9nSWL&48oS&D$EGF4|ddgZsj9v@h z-$^-TWn9oFPulX_koTTlQqXhQLU>>>M+wlAyae&rJyr!}WyDU~bOxllG`EkBPc4li zvv=>_?Zqy^yUC4+h!8mD`5at?H`A^=Xta@`NX)RpExCcd4-lE-ATsOP?%TIdL)AqN zsG>PW`gg|olVr8Bgv7*fBt)a*5RFvBz)UB1LuU3JohO7-Gnd$&+oA>FFA0u!Jyd zTfcmh?NbQJS>k>EqkMci6_K9#B_&4*V8Ba(?HSChtPs`L%S_G89wJW*v^$+$QSQ-R zcKdA?*<9>io}Pp3`)gNMu~ff;#FCN{Z-}o?!eaYb8+cT#%)Jdjtb=8`$>go?UUM8| z-}L2?0DoQIsRf@bhOMP^@)`xVg?TRp?(N4w1@g zn*28X=ad4xD8aO_B~ao|*+_c&^y%*l8ghFpG|bJpgVh{m6SFA&4x8g6b4x2hs@$6r zU|%EfdwcdB2t8IXa(vv87{XsdB#Ld$b5R6xm+WW`V0Y{h&>8t)N(bSrPx&UDS5b-V zJT1WAwN-7Nq_d@*tm8l6FUkp6NLLxYFop%zdwXh-Lc9AT{biZTB@-jd{dIEof@xsU z`!eVv_oH2?^peujhhUy21S0xtubVQpr`%Wux-;Kx7MnOpN1IUWQP4V$DqCspq%bT( zv^)vPh-bRzcsTcxJf)?iSP3={cwMH1o)-75&nGSov4cU+VAo0aVkcA8bx4YY@UNIn zYp`N^8-z&M1HauWD`V%bFMk%d0<+AUNsapXn>sXz5HQ~NJ007Wm%X9?4~g;n{44m- zYZ}9@a+PaEqGfe) z{8@h=!aJ{B;WRVy%Cl*otKu!6T0wY@Dje}CmL zV$x3_&aBjulPoL_^OgTxXsTRTG$8_hy7z0?Ol`CfM2N}BNgzh2q)!wI%z8er^fw8I z#jO;~y0uBk$wGi5w6wH7IgjN>R<0a__O;nB@SBJ%AWd>zAt4M1okM5mYXh>U1l)^T zeb*bjww1#ZSb^k%>j4Kez?Zmr>-y8CbK%u8#J<2{haXmBgM)*|q3Lhle1rCr*(h9n zr{_!Fw-fNqtEN6tgk<8jc)tn>)R%USj;Fve?J?aMt^RA}gh*(gz7r~G+p6uCN&@el z)w?VK7&bt)t%8jthfzobOj)ErBmhabBw&U_};q#jC(x z68y6`F#}TU^2^k9EURZ(g7r$vM{nqH!%X%D7}l&_WeLE-A6#EowEA-GMN$&G%G%0a zjUUr81EpgVi*7__Fd7mibXJgF0W&6mXbU6{9$)o#pmq%#LNlnWEZ&4inr#mieu0P> zaw~=`2J|K1*Mt++o64X``2vRg-S1!z6M+1=cNo6DxSk(BvVJAwtmZ5v zfiG0m!>21iW3gtyl7PO^4GcSEY)40jG1b?9=o(AZ_qEq61AseZnVE-Tphfs$LxLyx z0as}KB=Bp@Jb}$#>%l?8In8Br$?P2iKtcqAr z*cp2C=+RS7g=Ts{bnq={21VBb6AhvawG2324t>Bl3=jY_TO`6V#CmFGM(}#RwY0Lb z)w`@LCM9}n3yT882=ib8g~oui4)yv2I+F^_HNcTf;P3eSG@lH-Wioba78n}qqCZTQ z_YYj6O-;E_J=T;UcNW+{>yS!PZGt&|RpiBU9(6@O<&>0^8sLeG_V9x1sBGL9ytFU* z#ft*Op-|_fxY$^;GqNP5uYhh50pj4>@6W)z{ipZ(vOB9%=vjWoP<)IK2xVquWEekT zX4~AFt>{~(uy|B6j9++R0o|o4B*tuPn3`&Q&(ow*RzXuA4tiUid4e1BI^5F9Fxy|?Bd#4YR~Blm*O z)V3K(6vP{hFJ&2uXxNlzNuN2R=i=&$`63Ah6oq2S!5ZT3po#sVY%!<(4~t^ zjtp=GBfLjo(z+D_n%a7J@_bP;Jx< zR1*|!V0BtMJK!{WC6bpN3J1_ZRQMITN%HjcH0I{zJq*s26o|||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 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 zcmeIacUY6z+AfaUy>%Q#R8$ZIL=>zb3W5-VBT5kg73obuq=S?IfdD!xMWjgy(lT@@ zp+hKvsB}V+7C=e{LI@CA5?ZKdy)d))?0wGn{r>u0=Q`K*%^w5mn>TAc^?vT>Su5zF zrV8iJd_Qw=aB!-r-hIr$vF|nq#~#t2_JO~V+h^>^!SS#|?d~s6JWXeZ*YnT!CSF)x z(|S>v{JMb2<0 zUizF}noY9ZVoGeg{0%IJgQFl`%5vuyjxYVv|MT1b|1!8nuJKtH)iXi#j`tT@L|)Fv zyA=6tZ;|9U?ENzi{f_aO*2ctbusi&cye5+a42gT(?+iW9temPMZ#vqs9a9ATo!7r| z`ChwRJMX(vWkh^k{Y+xG>U+oLFwxJ<c!r6D6AOgi1{Qrp(y;_9fycMJw*p(UT~z> z#G{>jS@Ffx&S%ErLflIWbGn!FNk6!jLKu4@oF8-9msPvX-yvv}6ZnmiTos1Bl$dpv zXp@`l0Ke6M0k8a;wdwJ!%%r#>*A9h96+z^4CfK;!k0a}=lrUVGK#nlYGXInXa;EC= zeA?x_a&u;Y;>I&~RHkO4E%t_1-9;z)n%S~JL;CH!i+kO>tl+Fq1{0i&-bTCp>YLSS zYu|Wku3@d2hXjeK1ySo+&$u01{ont5MS!mB{_`IB{P_v$R3;`#Jh+ls7sL%@c|F4` zmc>~i&e@z(x_slL(wMxc1?u*5)}f0$Rat`lA=Vj7Q zxr7Fc2l1w#o29+uF}1!b6mR&iWtW8cZBU9S>r+~Oaz3|ej58Oz)Fs-=*wcE1ABKn1 zGY<7%?6ga|?sN!QYCTk^E>Z3FBPWRzLLee+``_{xC;J#?5*lFt@Id>QX+P^|A<S|hY zQ&4Jmo+NUcv0L4gv+(YurJ+k{Z#PqNis0bBBZ-fMSt*)6bI^ZvJc5 zYLzj(L)WDI?BSzm&#GsWg;$PY3QSzvq`NnxiT>HnzUw_7T#cX4;aTld&S+xHiS_d3 zA9k7RSJ2VsiLzQIJRij6oe!6ZIMli)HS#&Xw=h!@>|__VA913jxdNA(!TFHd{Zc82ME{EvVJVWs^!w|3MKdp$fupiMer7f-o zSuadV@1HWx+&EMrWN_X$2Uw?`LZ4N%)Z~qGA!ST2!_*HVCHZkRMv17k@?W5vUW85UV2glE;X|G7C6-z^rVBa~Ix zC}@Y}PDw~Zm@obo8=q;M`Q(O{V?bgy_e54izRW#HEhxvZV2PUYQv7l5p}GaV(E%%r z!&R-3^^p}#-^Em+Hh9?2l3&}25(HSq)*9W2E=C-R#jf$I9bfEkTp?_44lJuZ$t%nq z67{-EM5u#+=VVtUJQf_st0aL5ym0p(a&D-i-Jj?t8TkIfmJm-QuMi7I*qpUj>>OCC zm+*C7xaU61lD``w8}RwLxqYk5h^NKLliVrMgI7K}W{;ujw?%wAs}hC!^8GgHQ@7eK zudO~`;Kr=hjq4HCdXcmXEsZ`a!+mRsNcXYR_Buc2#*xM{n$BA(n(I}B^{RnoC&K3P zxR@fl+3ij>h<}quG>JmKtD_|5xt0l5hoYi_Ug36$#)BCijE9iCdv0ml!=u~%eG#XQFwDok%&}ElN1Q7sgPl#y z=%{Qgw%x3rLD)Pp#g<}_x(YICL#y=(&ynmyjO|$7>;6Aoz)cm~qg?4dgGyL#8gq~H z08F~$l5@LIREp*Ww3y_Etzo`h0zGz73d_UwcPbN3BpI-BBgK74*n{_T>O2Nq3O@^a z{{DLZi&3++F0>&bGI)PmiQ|JcLvbwk`t&AP0tSE52_MooloYeN{1M zC@hzoki6nyWYDohtw41D)*)x}gzi=8SYh`3a{KTlw!?rc{({zc$KQhMHvVC=nOyt4 z_p_aD7Pnm@8mX(6`TR0d1C5wQ|DZZYyIsM03$#1v3}3tJE3pMUqRl5+gsE>R)?!rw z!)Ye967P?EdeTDM_nttcD$PDg47c|TlF%p-rTl+FTiT&*MWFNKc zSyRYBCE@7Uo{6PCGbabV_xpdtzZCZ#Sh5ZQVoG07>t3KMZhSQnY)XzD+drYxdmW?Tz$Ti*}&z@9zFcslUni8M4}gZfQU zKA@*Ir;hsma$fB4k-E0qeMTpco2Lcl*+qzM)PPHOCW(=2=qKTAVi=`oH!Fslt2iKe z;JKd3v9pTNwDgW52B-A&tS~9WHK~yzY%u_fHj-)Ye0iGKt+5GnR>CZ^#)2ivV#Er= z^u?x=TnsQe)45%hQ(acWm1l6aDD+jH;OW<%u@B5XHQt)?id5h`+y$SgM(C#sPK}LF zF=&bGM!hz5qW)6F6`Z5V3DVU!#2Ad_oQiFoQ`6?KZl9|U(s5X7vRIQ3>#cx&G*{IF z^PrF8EISw}u)-4pXQZd&bm(=4wDUMkx%1L24Ge;gj-xvFy0!L}9}d9g@%z80s1x*V zu901cSBotfV~r_jn%#IaKGzk1ny0)rn5;*KCQHmVE$G!aUr^Lv+Yxx-zOjqVYLM@59#O-LsXf253rk4#qQ zK={fS0bqmfqElw(clY`kA7M!_H527}f2d$!g2Hgi5LZDOyz9(Jwi@SS;px}N#3MdS z3v$juG8VLVw6Pc0vE1x*;~K{}2_wg~9$1pj^t@%hdN9)#yE#r$kYO8*M`WILy7%V0 z!phK%YRL}r-S={?rV15JyM_dp9)n4QNknG4&>L>?z3yfrIgc@_kk!ZiI=sIGI&{l1 zs;EqHdXIrxh}%@Lqe*x!H`$VSPfy`U-*!nZotT8*Yd(TB!U;}MMl5~T-XWM>59u&8 zm4watR%!WifO#W7&(uxvv52qFipSuiKcaY-857$ciP9E|+*E8&<*qfg5Sl{J=UHey zQ}5Z*fg)bZl%bnh5n>`RY;m-}8F>@2bAvkjJRU;{N_CN`je(+n_c83t@CTu4_!Ybn&*}shcCl;(g8Ds(PEpFN(jg5qk8U z=ELN1ZWYVHtSB3pTA!Ws7;;vzOZ;ry6(5_7%8~1lCHRz`ZGSX{T6iOru%0z?gk9@o z+%&<-b-eMD-Ya3bBgCaUzDI*$CgS8E*8%~Xs$p88asm?>GPX(+aK$Hv6NV+{C(`Fd zrN#Yi*k;>HX1JJu@=vOCH_p99s=nOI03fD=^N?7c>npQjn!tID!$(ZKv@EY{o<@Ha-UL1xh-E5mME#*;7f1u+45H&;d3^$z;j z)>Y^xWgn&O7ec)(vo|#n!Zc-4oAKV?H-yCm_q9+>NLj@n`KG!ubt`)Vop>LMS5CiP z9a6j+jN3zWP@0j!a&xs&nS4vCLI9q0OZ2p;o7lq8y`OXLV6XG~M`4mzL`ui{Jp6D1 zOU7nNIiL3V#Au`s=C$eic2wN8@zX2RpzywK)^yePzCDjq^RjfrNU{>8U0J#{ zQ`)J%S%_Teu0nuJK)hU9 zE_@ZuRq=AE`EnhSYeNms87_z)D<>{C9c;rh%p*Pb!mxV2q?05Cf|C8cgwz21knbtB zhRz{}hvHhy4))jzk*c=!U2*;n4miJjmwQzQ$Pd(7j)pW#YMC0jaB(KAPwV{QW}H4XV2uUJ_jv7C?4kA5j`J${Cr{7HKbKJ_(Uk z`J`1VP`6jB!XevfY%N0Y+C=rUrP6#KhsrC{AxN$Z|C?slre7}}S%<1#$IAM?6E^Ee zv!I^ODr@B)1_{2U%&xPgNkrQoon+lphm=}6zOP3ZGU!!=!BDR}iH_a}Z{Wm?PPs?@8n#^M7y$)pQCJlui4%f)$wx!ZFNKt#@f1j(GHE8LhPPW#fAh`-8|e7~#p%uqt`KFgALx+8@(X!VKw z6G&Bc-vh`f>!iF5ZZ3vRwe?UldbaMC{)CL4#$Z7f&G}IRNQmz`_%qJ-Ay~&M9Us$z z%Io9zNs?aht(2aoxOZ}Hoh7=xLV=OsOFH! zxPWAUzukqj^fnU@?a%`BxlB?;kXBH4(dWHm`zmrA4Rp*<=pe1hY}|TJplb+B=SDlD z?1|w?gwoF)jeMa579*Kr3Sc+oMdm`eZxo?A*OLCH>X5oYPLr2;l5+%qGT{ngqqJE5 zxAjH2+qBI63DOp=P~m_A_mbITY@C%s=fH zjG@i(%22CMQpQi_0{Z7HI8E4B58Z0?L7vSWgaYU%t6n+hVbO(>fYy(({HgYeer1*_ukYw-aq;5%E8;u z7f{uxjS@=~O`d$qNzp{+g|x4TA2;?xZ4sonyA;zOaM6K_Xf(5>__TbUax#RZXYM8h z^tT6)6J_@gMwC61--(4GF06)AZHQs~+r0Q5V`C1=Y!I`2;-W;TPs|iYGwaz9$Bs^h zvYmt6G?a#;Y6r$GG8=Do_~rkXO2Hq+97ogZ-y#?nJ>4?e_$7P{d>B{*r-2qbhbn_xb#7?igEEZvo^72-z3a+AO7iQmyv z2v5t0ne*muoTje)jnyEZrxUj5JkRVP@}!&T%Sc>(OsU9yVWLxf=d0M}!_YNv9i1 zYoOrP8DAL@o~XRg*WBA0IoP?UNDXmk7F8Vt{Hgn%#M6;$CzQ;oPPBVsYM%;}?wZpG z-3SX^ij2AO)NxZ&)fnmVZ@tt=%*MF=Ismx181z{36|4|vBD;w1T}A_YwwT*l&|F@~ z*8>!|DnI;ZVPVo^i>)_0TE7vsB-Bl0B$DZ((m}#Em=?(OSzIRL{Q+Wke}qje`l0FR z^()DG9q#^f&RNp{L8J`h9ADggxD(0$fw+Y2modc5Og`sO)bN?L8pPTFS6(c~#id z=-45o&$=7-Yl7cgcY4CL&-8}e2B-0LeO#tf)4LpX{68vM3+tTHmWVCI|BaVWkSm-y zUArMn3I4(YKXuHhqBZ`4UDIv=8+SrPIpw+a)+Q?(J66q>4HPXZtHE!1-}D&r+9t*u!=&ydo^lR@@ySF_$=rdhwi5%C7VB{@s;fWfP>e;i zdP7~O7eCzcHJ=$ot)^DZRoa!Aj;9|NWVP2L&M3TE;=ECy8X|WYXIr_L72%kyi&}5F zH<`WvW4}k-;6;D44+W}&$4@TZtI+6w@AX`8MLf7WU)R(yt-;lxtulKTEBqP6hID(O zI5Ry&A9nd|-};(S6?y!{e1r(A z?|A`eVJLQuQ`+lkPE_XOC+;?zo=VrvbW^`W0N(vw`S#JOn4gMAhqBZz8x$^bR;Qwj}+y3mA^3V;vco) z&6PT3h?ka}U$sj^@)|m>*{?9%ddbZI#pyvP&XAU&g-1ja5~ZHE4j|XYjEYB0`@&`W znzTzP31Lh8kc=cSgvnf})*Vjl4HTdfr;i=kCI zn%?Qtu!X;NLcW$jnCt|wj|3anT27e+TyBnF-YN73Yt+-|EF!RO^%J!+`9Bj30&1>g z0h-pMTe{qCB%p~fg*)33O$?X}c53sgQpfHp=rq@XEDI5Mq*kp^8^5+J^TCy1zwXs0 z#*`naQ&?}nmwg= z?6TIAZDxDgF2pStAuy6x`Ai4c zXHRP+<9t1yWonqYlj-@`Ufocw6xeLjb)Z%LMrB=)=HT7^_kRwPS?=neWh^_AdCo^n zt}oBpz4O?C*QwA_t#!|A#S zcH>#tKv&q2dS)z9L}0r)Qp|{+E<+!KUrpDLvX7#3K1yxRju!W^O*0Bv74@N>b?e<* z;rT{l(-fwd)?R?D6%du4ju0NIYSkjd?IJa4dN!ZsHP9jQ-!N@kMGWuI@c$pKl$^u3 zwj1Jla{mdlr?hi?vz-4ZbRk4=wR_Lw8(JCYv^#yiU6V(j4eVA#<8+Naz>x`GAIbM! z${A4m!1zQ9(Tlljp=0_J#OShOXfisCmsJ)%dCG(BPn!BL*0@D~1J7j`xwVnp=S(A|s;s6k~kA1Xg*jg1^JJt%ossR9+ap$}+lv(~nSM_)6P--L51#PnQ}l5Tgx z%!aa#46+yaA&y+-hvNz|_h=?c$a&+DM9iQ{t;SY{CUOUOi#T)@m49itS26?_|G*wR zEF4;8oUc9-bi}V?5Z?Z1%fJSX*6sqD3{`*NmXN=askmt~3i+UfHVBV2#$qq|SrZ}) zG!=(BDrpl<5hBI2lo5+ZHGyz1`$XG}HA*uUG}j-pmQkf&9o%#5X1eBQ&_FSP_^HXd zCZX#T5Dko5mm=V-Am@0C$4Nc%r)ri<^Glacd=k+bn%wiDuy@RXGO1rdjWNpj2W-i= zp4YEaByK(xAPtgJ-L*q(_*wBRnt~kitOb?x?GCNq_(;%hMj|mkFCg>rV${TmFGfz) z(gHlULPahSR0DVqi(U<*#OYnIJrT!8!*#efA_HfASBL*XO^wO2WMor*fsd$aQg1aB ze^^u_*5c#QHSs+g88Amt^CIjbf9Hi*4`s0kp_WazX8GISI{da+Q)pl3(U6U!2-_rO zXVVF3_)>4JH0ANl!1k)LaoaTZb*RV^)H3@wZi;cs`3HRZRa2PFmHt(kiTvhy4fEJ` zrmR2jF|y&3JBH6WFFF%YvVI(g3+G)D&-txi&SgE+11=i@Ts9rJtiLcdC10?qzKreE z?mc<6_g~b-V>GC$N~g08Ew3E{(A_Uz_b<@BqZxvQH$v9_H&W_h>fSWv|BAbK8B!_i zdl|8>?)zh^Q?4!WPebH&%(eu6gGnrA@zs7-9(3EfcTYe4-?^#3MPU};!H#%0holW{>MqIb3}+skgdJ^!iFdM%=Q7nt z_H^kH>NOs-PndP-LBTZ5Y-_pU(+w*_dK5_ml-wGaS-B+PrIlTpsRD!O&|s4^(8$R1 zho#TeBr8`BXDTPyO=SIW_N9c#ycl%z>5cFRZKxqqiJu=?^{S!)t$cN z^0)7Vz)qQeE^&!}9CzbdZWr*kWX;df`7#FD`|N+6M1;ur6aTJmZm_7V++kYbAnw(b z^x3I(gAQ%r{MK>UXD3r6#YbQXdKFP)3DG?H_jo?T8Be2E z&Wbssd}S=$2ol5J72g^DEfs!crStqeN07|HlnI^;-x_ zrlf|8P7*O0s&dOT!{U1~0h-s(g!m*SGxn)9?+V12%=ngL4!xoVCbO7uNCP62tS6zm zDi{>D1)9Fk4?C5r-Fst$K{ec1Y*0^D{VN#`w4w?oze$y3b!n{eU<4(CKHUj}0o1BX1A= z3_3gTcwX9Unf7igFPA?v7Ih{4s{?MhOc!Z-PEO2xJ7Pk*`_?>%8c)Y{r)W%TUXHSH z7wszpX;)z%i0HVilv(70Jc=Ec1nPX#PyID+!wW1bdWRi50R zjSqu=`LYTPq~%&X5I6(yUOa4T6%4S1I6D#%(C2tFGY)aQLVQTxdrtI4aL^dDd4NI> z(@-#l{xJrC5srdTNx-c^^BMvco?wC_Gx9?;eGmB8Yo;2fI5_B@^WJ26c7G%MCSu|D zuOz0%LLIl(0|LhZiJH~1@gkzQ9d<8x`b+u$Q`2zXwVCjxtY*yi1}!T<(Cc$4s>;5_ zxs{bFv}x^bzdI?`II&-G_3IV5p0V>iJGN;ACSW)`ub?*yNQL8RZrt@()z7r$1aDGh zCjjSTFb4{wW_~BUBpaF^s~Gj?HzWph#S*h^sb32py#SwiRcPD7vFxug<=G!ai3J?Q z3-*Kz;gQEiO*7RH%muc0_$>`!GE-G zH6+lx0v~fv;LOF)2%hD6GWmyNAfK~-8ETS)Z57Pts&|o`uG3N+V-rwz znfKl>y~*n%&Cqm z=5{*TR1OJtA`0ePoUGQ_>tN)mnTN1iU%{#DRKtEj@86k^p|9ML`cT);biy+luFOQJ z2-<8a>x+fvxWUFB)4u#`@}ybIml@fN*;>pT@THvg0pndsc#6QhwFBmmLa6E+8ph9; z31${OnahJt9c4Q+dd+$@%;@Gqi^g`N?OMNi%a_;89~K(dV#OrSXsR0X#!bGh>k z5qHIz9y2mzmD7WN86u*SrkYb=`s*GaC+)oe$twniEF`Q3RfZYROc)c)6KeIb!AvKd zGfXad$Tz~0)v6oyNvGT8Gh%ws5Q!uC0&TtOg=*l+nIfWSK4EJu_u1132|qURApgkN zY`X+%^dQ#Ze&=t+))&Hh`nf}nuMB&T$7Kj?4ZHPoeD-6PLs07oJ~Y#ReSBu1xR)YZ zLU|U^Q^3vX!>*YKYN+z;E*(FFy}QV!=EH z9dK>mSck)FWVgVK;56!>SF~&t>8g;Az!~IT?>ey&S&2S_@jk$VxK;Hm$ZJW3W^58x z$AYm`wHXmo5Gy)B!WLzkiN7bZRYaB7OTFS~zF#%Ovo~AhP6FDxL>x!F=aVS+kNf`= z*f%QL%-2+96$WOY#6$_}!}A$_PI~*BDlK0Omz*{qUMtfb!IlaE@jOL9!!~2Y0M8rO zrT5kGM|M6v5;7JBUz;rXDkc5F-?O-QNF}g=T%sw3YIF}%SneNRoa*jw$iY84$M^cM zAgup~%1D1CUnk}2B;*U-%2;U5FLGzhLck85+knN5$T@KQj7&)RdgUF>?9ey?eRr?h z>2+veP1oXai0t7h&&iJ-hu?Z0WJ9ByHB=$9`=~irOnl8iTukGwxV{6O9;Z9cL=h}E zz?`K<_nDEHkoNc1U)G>mTqEDGE!N!R#vdSnp81K>SmK;0P zC^$Gi*bz*Tb5^yD3d=hjKKWdonDUEs&GZG_JQEr}ES|Oa{K*9w6$VqRBeUde%m+&} z$Em1+lm;3f)!`E}G3U|AzF7`~n_EgffqDkMx>%7rs1xC&U|HYa_X@=h`GJk&h0M;5 zb23?S-Xv^yq!?#~K+gs?SLdT7zZ1tmBgEilN6(cT^bAW3-;x6sZ)B$k zwD4sbiYcgZ5us1ge?x83%`o!w_wW%(dHuJmJ0L8R9 zaD>RzvKod}DK3dMl)#3Zl8yZBwR|I@(xJ;ANjs_LV3|KBsKBob`xIYN;w+ zhSE#!4iSkzkTh~3sqbYxk>5Wh^^Dockn=VJ_=etdBla3j#K!q(rE(y$;0f|ijO7=G zPMt#si8saT;|l;Wxhp3%PWi(5yyTC-i<1WC?}}(u;OAviC}-t(zu_B-jyUmUmMian z{Bu}CMo$63nm4!4)Z1ZsovO!$r07Wfjvf^4e2OMr4siIHUMJjhNr)wP`z%*FTfm&m z1zWgnhf%7l(4_oOsr9UYrMpV?XK2PD&9YFlc4qP7!HbvVk!yUI+9Ik$BGV-2ilgCv zRV?J>Oczh$Ra{Ao7&Mz?MUOT++;g8*1JkE_Fq8Ag>_WiIgP&xniNG0p9V8V4Tn%R_ zYp!w~!e_cWRFYF&5N?o2t+2kUN}pi;G(IYMT&2R~qG+Bby>ak2b`icX)4qpT|6RbQ znwOMfEEwZpJiS&O=R8CAoQ#xtju3Ed;`byf|Aq(?Y36re;p|z-sIgfJDjxslxoK+m zb>|N_@9s(y*Vk?a#{>ANB2fZooD^%BdoNk9YEKM}hW9J#1l*!tg_5vSsQ89QraKrQLaLcSq=ffn@Rl-De#6+?L z7il$76<2aa?hw(z^-*Ydk zTS|8+4nG=Gf;3zi>Guo?ImzWYoo7d0YS7#G*Dmzf8)u(tM92%q*z~hEXo`wPGXD2l z&{w@rcNPeS_)0cA@a4eoT6q1?f*ZF6af`herC!r#KU9>&sj!WRb&_F?c>m6!BInPK z;CGTb94n_XSQ8RKk{iS&^a-HvDl->&<8p`m%qXs( z4Mr+kJlcxN)xdBarSt*Y;EBo=SC~rZ=}%bxNP8L)@Sl^!HvpIjX^P9mwm7)PllF9- z$Tzg904?YL+;Qi_kAfR|J_i-}3cBIu*Lz)%7ybB4Pw&MmTWCElcFuZn8a?ZI;c9n5 zq>zWy1dZq~s3N5gTKwcV?BIE)))q0ccz{le7$tF~VfMOnD;XsokaS-+L@9)Ml!=Ow z*{VOH&k_|k(}f@JFYbWLAJl5Z`0o#vQnlEi3CJ-#e)x`DGxG`QNPdB&Um{Br$3(%5 z*N49ARI5h<5gk6oALc=enKnxRTs*K{iU$)JbTZxbdIlg>Y;N^rFFAaU@UWZP4-}{m zQD$#r51vt2?XY{oH@4IE6w1`XI9`>g|9g?mrgd5qy4QL}&Gx2v?+42F(13eDdqMdJ zyDF(Xhm=AoATg}kCoTZUqs8BC(Vrzn^5&Df7!_i`E?=B#`w{yb&bfV@M%ZX8cyOAf zhM-a3A;uo2qTa$V(J4x4r}w=$Ve>hsY31S!7&689Q=N(l;21@B0lxF5M)qbgW;3^x z{Jn4Wv~3J7k7-hT#qlxdiFjVs_C48qRC43d&t}R78K4`qtGW4~5@f=Z9YNt$+T{`m zfXRQ@Dbk`o+o`;fpGKS!5wcQn%H@>i^ZpnYqApF5O`{|euXD;H-hi(wx zgBGw@w=i}>!=B%Qnz_`{kUQvD_mtjwSR@)kgUx92|zjW z)+|{wOl(teLj5AnKzG{yeT7bn5|v4mz|3yvRn5g=(Oin|Q|V|;LXVo+ySqsjR`@|E zQfgz8bZYEk>NP;S?o_^IOGk>_*^c$jS4mvYdd~ZM5?9Pb+LX)$a~bkSw~;jSBuSw1 z`$RaMgiBT)!B+eeU~n_{1?!Metu(d3%6$h?N!@R|pzwNKNV<0);w-)kfQ?a9!D{5BW{ zo*}Y57led6tg=Kd_+M)wzZDlNGS!8P)q%Nh89ML#e21}|_!3ho)rRjzQz!v>cl)wo zfb@ocI8FW+@kiKMFy&8EJ-cNykkbC;`Hm8c)I-*8_B2&Vuly_RZ250NljbC*G5%uG z$f0U*vcPJT5o7(M5dw82_jD9~wn#GLpN?21C+M%A@l4ELK#e{E&iw3b7WH_h$howq zH}=HNaUG_oh%D$|@iM5D&DWhbM!EcCjbuXQ-}MDT9(j^lykYlYGO9^T)J#|Ec1CE( z$$kZzO1Ks&LCAZnRQaNrgq%hTb*FSRn)d*Z z7Rim>6$KNet9d=CBa#WKf)bYcTX^S7!S$dD*jY>iSxhU*9=p*Y4u~U6}6|nl$RJ$UUj{jHS79O6a@wRY3Gg;*v%A zPCnl2;5l2`XGre>fov>fvqbX{OIzG*V&x82)*S&m6d^NHM}}%|EH~#8djZZq*RR&+ ze0Qj;$od?n?+7oa0h@pE*+}7A>ocu=>(JI;4u>~N@_Esu4=bmdZY`;_=0r&3p8)AN zHD~WRIT&*lP%**SO|IyUfMY4bn_!mQ5zFKJK;WEO-x1?K0{3NdX^XjFe(al6sFhLB zly6fF%4wxBa;7f6EG0Bhv-F<8tHN#7LF?~|sMQ4|(Ka0k{C`OvnLts0H)(&VFX(!_ zUv;7F{-$tP@d<{Z^wp}KY$rSFu;Kav$pk$EC&+1bD(E^R7BaQ24|G5b-nincg*Y!G zMZThI7Sl=av9dU5Bmy{-#?vtc%%C#y2DwhA0R-Ed;Hmj|MRd zn*#v9e4;TgG(ec?pSZxnY@>F@$oZ|uR?IQ%BO;74hX;WsbD03g6)IlchR)(8#@HS% z;Pc++svGM)?|18m6bp%tb;i5mj3UkwS| zQ_+6^IF`uIIH7aDqaWUN{;C!|YW%o>$2_-C0CZ7HJ@ulEaD&x$Mxs7QUIa;~%L`cAQLeF!QiZoX|YV;e16wI|qM zBh{ThC}-gxIV7o4v@AqAiByW+bij5|2P6hP|SR8Dc!~u@6gN z5flP(R0mad-lLPX;CK!BM@H1dg9E{GxBct<0)a#6sJv}jM^++&_RYJj8`_MZ_uFl1 z21=Bt?EUS7nfUwz{Zb&xB#@C1-9=g~j z#MKAf41_K9Xw#~HiLdjusCk3rtOI!`>E-gwfbQPzOCjp%h_U`Y#&s%Z31)?;so&-jYeMSOCF$cTHD*$+8iBaPZl`-2L@I0f z6zH9am9`9iX9|!m2CLx*6!O2y`%6Q#_`z4l%RcWtw^;9Y3Ltw>C*6gk)}}IPF<-40 zLT?E{B?`$s`42;htUE2lzNV*!sy|YjE}-D$cJgGTHF}V%7j0$RXqWh}sviTD>BR^h z&PWJrwSxK}{w!Z+cfkqCin&W61(H$fQkT*;-_|J4V~=rOpW-z)X3CbiB^Y+=NGwu9F9z*P>v!5{$aa2E+fa8+iCQFVJ{N)*(-%1mFh_q|SvDSVk+prvQgQ;( zw9+Yk011+fnY5{qfl8g;!9t%6c_-gb!xM3Kd7l!CAp~<%%{_tO7D~BX>QZId(|Uv0 z-%?^+T7!-D04HVYZu$t!g4NzO(%$#w2#e4Cris+ebc@jBq!#LJ1&dsf2GN@DYP3~= z&Ft-Nsnrvo*(UD;`_JdvGfnuNdmd*S>pImv*# z6$J5$@DAu)1cU9meAxDcN&0{*vgFChNqzShp>CGP}J5 z9<0{MIzZe8#`8c-Nn+*e^na{_m(RTh@LnCEl6XLob|0uEF1=c7c&K7uq!e&i1HR4f z(2|#BdR>`c4ScpaW*6>aMAH8EwV2zlh55`_Xz%9|w7*LJyB3U5w-_?D01|+vc-2f1 zN$v}YS4lu}-yaBz;DFYd-rFU*~1pT?8P4b@Ix~Rc5C)&P`-K# z1-xq#oO=U5(kEY)uTAG<)*2?td*t;#D(n?Rjz>%t7^00`)ad=-i3yt)@c&oO!Hovp z64z4prp!e3ALwMe^qF{Q(D*Kfo#5a&1GVHhIE3X+L8r;4-}WD08FCFn-T@zbx3iS~ z!4&P$cKLaGgsgoEwByjzx4PZ~=ye;k4mmiy^&U71CjM-xQk%h&{t4Wi0a{LA)AIua zzwL2w5W^91<;rFM*7x};jy3Fw=F&b>`As`iamYAF((%5(ApDR>xJDz*Jlbsp{m#d(J%8Tx_*D$5ff$GbC(aeQfE-i6@ zXG!oq9IvWVLE97j7!?4=pG#7In}JQb4kP+B0*WrJ;B?HJa#z2l!9wAkg|5GUc}?1a z9!=i)#IS^aj-h)IYn9JJjF25ju9>e{H*D-ZKXG!Py`2w8#C7KykAkXuD&IuHU|rK! z^mo|rid!w4Gj9p2!Gu_2aKc<&z|SpiW)PQODgi#@VYeep4}Q5(WGl-V3{hzAw4xd{ zjh5}gSH04QKxQha+G&Iqcn^c~@Ywd($gzXL9@TUc?5vC$iqi$m6MQv$GX&iR;R7^N zrMIKDs%~&_XHGZs3#>Ew<$xu+w2b`3IhO%WiHCJnxY9DX3Ftu}h$`*fr#pZ-ib5z2 z@pDuPi}F2L3A}yygr2eF?C%#S+V4jREe=3>!&$qsuxdh`vg$|@u%xNDj5kH-CQLwv zZ#W2UG^qk-^Py!Bfh7!1|28m?StM$e`4kMNA=z3)OVk21a~ILTKj$g z)=>&>d;rb6;uD0f%@xp)1Nf}pWYa=gRNJ*@sC3zbT z0=unJ+Svxh12R;;b@eJXJ#4&z-^sqd%B}f4dgo0I`8!f$Q~~2OymBKCCk&nHC2_7ZMjc7)yTQP!>` zE_z>v3j~81@txTBp)Xk}z%XRpQfYffIkW%p;jV40xQqh=YRK8$yqwpfb z_N;$CVp;1uw=i0Zby$AC`YjbER8hTw0P31i{$oMVG$-eJ1yEQS__nUQlR}@Pe7N%qk8>UP^wot2r5 z0}$_rT`!|7LB=Mh;L>^Ep<}V$-64uySP?}8Ij6XeF&zBMiW3#Q%X+6G1_^$C(7vF% zGf)#k+detq;Zd{AsvVtp?)dpNQ_xYf25ZpEBcM;?7mIW=RpxGNFADwJ3!?=DE5L;* zX{B4H%sD$pYlPQ0e93Hk9_s*f&)78*d`e{M%xcptWcO{R&bRU4F^Gsl;;u z9I_Yj0KN~F_w^t94?lpfJ8fA&e@C5NDTSQ%4=Z!NEU$1M%8qvN!*gr<+e_qNE*N&^ z_BA%qXMM+C|1hEQL>RINQb;iCRe~?W2&)-3q(a{6+Yz7hAExgJl0CG*(EuSwhvGqn z6^U&c^yf}J^6o}Jg#qapB16mM6z)qJcvTELA~t=vO66epaS7`W?c{-N5AE7Eq2^gZ zsF32wj~BSL@A2D3y`vH9t%NN<(RD849w^rF;{Nb|fTtZ0UQxjIps-Z2_V_`N1bpuqU z+PQp+N(KHBML{xia+zrT1U(GJS_gUe72g>awmr1#;Py0GW7*{8FLp*i4j$G!$!c+MfWG1@Pfgd4lOXsj>;``m^VpoC?o>Cj&x!_t z_aaUpl?%1)0et~$yM9}aO*A=X2Hsz@8?Vu^llYm1SlW(R$=?J}Xn6d__UgQmfMB|j zkXP!yXPpnpe9F7M26%UW_)f{ye8Rb@8=O_3+Lje0CS%BVPXdufK4o z1gySK8S?FhLRatjP=#wZ#cxh=QwRvRIdi*e+s>sqnP|9^TK`Cd-QWE)m!7Er$=5%pSz0y1psxBj;6j}o2sWVt@+7(C zg_;h$6o_4H#di9JEUO~Fv*?wQvyvw z<8IIxVwgD80@XrOU{Lkl#GWm6sZPSd0f5mUe7qpfwN_W~xG_u!gQuI!+s+opth!JDbTyt@H4n^RHBTE71CsRE)h(_L zeFma*5oZrA{r-ka6Y94$gCV6p!LyeqrprNnEXJj<_>k@aZlVZk9wGXGFyg%nO1wKj z8WY2fc-iILcy^-mlgmth;nZ^~7=58GUXEDhqd*r7ZE3bDy40W0dw^E4QbDOf)x%V{ z4z(r*0qhhzd;q*|=I~B7nlWLVXe?s=YX2*A#gz+Say6G{2m9WG;-NrhSM9j^g-49@ z_Xe5^vdojh_wGMjG6s^;jKj|7j{sAyj21mZ76%t!{peEb2S{u;M!gybg?SQ${p>XE zn;ISRIFWe6zY3tR${iVefk`Shf!2irG+30QZ7yHOBh<-w_R$r1OW=;(On$8S8M>J) zC(``#X+>WYbIyZMg*Xj#x(mFXevZAinVpjtH{{$X5E&rkTi%N-d>`v^u0{$lnt}OH zMH9WVg)i9Bt=LazO pOVN&tfiL~PTpIpAyMishy8M~aFWOHc!4^2w?rGl5yYuwd{{^_Vfz$v1 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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