Support dynamic color theme on WearOS (#8559)

### Description

Support dynamic color theme on WearOS

### Checklist
<!-- 
To help us keep the issue tracker clean and work as efficient as
possible,
  please make sure that you have done all of the following.
You can tick the boxes below by placing an x inside the brackets like
this: [x]
-->
- [x] I have read the contribution guidelines:
https://github.com/AntennaPod/AntennaPod/blob/develop/CONTRIBUTING.md#submit-a-pull-request
- [x] I have performed a self-review of my code, going through my
changes line by line and carefully considering why this line change is
necessary
- [x] I have run the automated code checks using `./gradlew checkstyle
lint`
- [x] My code follows the style guidelines of the AntennaPod project:
https://antennapod.org/contribute/develop/app/code-style
- [x] I have mentioned the corresponding issue and the relevant keyword
(e.g., "Closes: #xy") in the description (see
https://docs.github.com/en/issues/tracking-your-work-with-issues/linking-a-pull-request-to-an-issue)
- [x] If it is a core feature, I have added automated tests
This commit is contained in:
Hans-Peter Lehmann
2026-07-02 07:55:14 +02:00
committed by GitHub
parent 199a060240
commit 43e4f64faf
4 changed files with 55 additions and 41 deletions

View File

@ -36,6 +36,7 @@ import androidx.wear.compose.material3.LinearProgressIndicator
import androidx.wear.compose.material3.MaterialTheme
import androidx.wear.compose.material3.ScrollIndicator
import androidx.wear.compose.material3.Text
import androidx.wear.compose.material3.dynamicColorScheme
import de.danoeh.antennapod.model.feed.FeedItem
import de.danoeh.antennapod.ui.common.Converter
import de.danoeh.antennapod.ui.common.DateFormatter
@ -53,13 +54,15 @@ class EpisodeDetailActivity : ComponentActivity() {
.get(EpisodeDetailViewModel::class.java)
setContent {
val uiState by viewModel.uiState.collectAsState()
EpisodeDetailScreen(
uiState = uiState,
onPlay = { viewModel.play() },
onPause = { viewModel.pause() },
onOpenOnPhone = { viewModel.openOnPhone() }
)
MaterialTheme(colorScheme = dynamicColorScheme(this) ?: MaterialTheme.colorScheme) {
val uiState by viewModel.uiState.collectAsState()
EpisodeDetailScreen(
uiState = uiState,
onPlay = { viewModel.play() },
onPause = { viewModel.pause() },
onOpenOnPhone = { viewModel.openOnPhone() }
)
}
}
}

View File

@ -10,6 +10,8 @@ import androidx.compose.runtime.getValue
import androidx.lifecycle.ViewModelProvider
import androidx.wear.compose.foundation.lazy.items
import androidx.wear.compose.foundation.lazy.rememberScalingLazyListState
import androidx.wear.compose.material3.MaterialTheme
import androidx.wear.compose.material3.dynamicColorScheme
import de.danoeh.antennapod.model.feed.FeedItem
import de.danoeh.antennapod.wearos.composable.ListItem
import de.danoeh.antennapod.wearos.composable.ListScaffold
@ -24,16 +26,18 @@ class EpisodeListActivity : ComponentActivity() {
val viewModel = ViewModelProvider(this, EpisodeListViewModel.factory(path))[EpisodeListViewModel::class.java]
setContent {
val uiState by viewModel.uiState.collectAsState()
EpisodeListScreen(
uiState = uiState,
onOpenEpisodeDetail = { episode ->
val intent = Intent(this, EpisodeDetailActivity::class.java).apply {
putExtra(EpisodeDetailActivity.EXTRA_EPISODE, episode)
MaterialTheme(colorScheme = dynamicColorScheme(this) ?: MaterialTheme.colorScheme) {
val uiState by viewModel.uiState.collectAsState()
EpisodeListScreen(
uiState = uiState,
onOpenEpisodeDetail = { episode ->
val intent = Intent(this, EpisodeDetailActivity::class.java).apply {
putExtra(EpisodeDetailActivity.EXTRA_EPISODE, episode)
}
startActivity(intent)
}
startActivity(intent)
}
)
)
}
}
}

View File

@ -10,6 +10,8 @@ import androidx.compose.runtime.getValue
import androidx.lifecycle.ViewModelProvider
import androidx.wear.compose.foundation.lazy.items
import androidx.wear.compose.foundation.lazy.rememberScalingLazyListState
import androidx.wear.compose.material3.MaterialTheme
import androidx.wear.compose.material3.dynamicColorScheme
import de.danoeh.antennapod.model.feed.Feed
import de.danoeh.antennapod.net.sync.wearinterface.WearDataPaths
import de.danoeh.antennapod.wearos.composable.ListItem
@ -21,13 +23,15 @@ class FeedListActivity : ComponentActivity() {
val viewModel = ViewModelProvider(this)[FeedListViewModel::class.java]
setContent {
val uiState by viewModel.uiState.collectAsState()
FeedListScreen(uiState = uiState, onOpenFeedEpisodes = { feedId ->
val intent = Intent(this, EpisodeListActivity::class.java).apply {
putExtra(EpisodeListActivity.EXTRA_PATH, WearDataPaths.feedEpisodesPath(feedId))
}
startActivity(intent)
})
MaterialTheme(colorScheme = dynamicColorScheme(this) ?: MaterialTheme.colorScheme) {
val uiState by viewModel.uiState.collectAsState()
FeedListScreen(uiState = uiState, onOpenFeedEpisodes = { feedId ->
val intent = Intent(this, EpisodeListActivity::class.java).apply {
putExtra(EpisodeListActivity.EXTRA_PATH, WearDataPaths.feedEpisodesPath(feedId))
}
startActivity(intent)
})
}
}
}
}

View File

@ -25,6 +25,7 @@ import androidx.wear.compose.material3.ListHeader
import androidx.wear.compose.material3.MaterialTheme
import androidx.wear.compose.material3.ScrollIndicator
import androidx.wear.compose.material3.Text
import androidx.wear.compose.material3.dynamicColorScheme
import de.danoeh.antennapod.model.feed.FeedItem
import de.danoeh.antennapod.net.sync.wearinterface.WearDataPaths
import de.danoeh.antennapod.ui.common.R as CommonR
@ -36,25 +37,27 @@ class MainListActivity : ComponentActivity() {
val viewModel = ViewModelProvider(this)[MainViewModel::class.java]
setContent {
val uiState by viewModel.uiState.collectAsState()
MainListScreen(
uiState = uiState,
onOpenEpisodeDetail = { episode ->
val intent = Intent(this, EpisodeDetailActivity::class.java).apply {
putExtra(EpisodeDetailActivity.EXTRA_EPISODE, episode)
MaterialTheme(colorScheme = dynamicColorScheme(this) ?: MaterialTheme.colorScheme) {
val uiState by viewModel.uiState.collectAsState()
MainListScreen(
uiState = uiState,
onOpenEpisodeDetail = { episode ->
val intent = Intent(this, EpisodeDetailActivity::class.java).apply {
putExtra(EpisodeDetailActivity.EXTRA_EPISODE, episode)
}
startActivity(intent)
},
onOpenFeedList = {
startActivity(Intent(this, FeedListActivity::class.java))
},
onOpenEpisodeList = { path ->
val intent = Intent(this, EpisodeListActivity::class.java).apply {
putExtra(EpisodeListActivity.EXTRA_PATH, path)
}
startActivity(intent)
}
startActivity(intent)
},
onOpenFeedList = {
startActivity(Intent(this, FeedListActivity::class.java))
},
onOpenEpisodeList = { path ->
val intent = Intent(this, EpisodeListActivity::class.java).apply {
putExtra(EpisodeListActivity.EXTRA_PATH, path)
}
startActivity(intent)
}
)
)
}
}
}
}