diff --git a/app/src/main/java/com/github/damontecres/wholphin/MainActivity.kt b/app/src/main/java/com/github/damontecres/wholphin/MainActivity.kt index b55b6dba..0d067f2a 100644 --- a/app/src/main/java/com/github/damontecres/wholphin/MainActivity.kt +++ b/app/src/main/java/com/github/damontecres/wholphin/MainActivity.kt @@ -41,11 +41,13 @@ import com.github.damontecres.wholphin.preferences.AppPreferences import com.github.damontecres.wholphin.preferences.UserPreferences import com.github.damontecres.wholphin.services.AppUpgradeHandler import com.github.damontecres.wholphin.services.BackdropService +import com.github.damontecres.wholphin.services.DatePlayedInvalidationService import com.github.damontecres.wholphin.services.DeviceProfileService import com.github.damontecres.wholphin.services.ImageUrlService import com.github.damontecres.wholphin.services.NavigationManager import com.github.damontecres.wholphin.services.PlaybackLifecycleObserver import com.github.damontecres.wholphin.services.RefreshRateService +import com.github.damontecres.wholphin.services.ServerEventListener import com.github.damontecres.wholphin.services.SetupDestination import com.github.damontecres.wholphin.services.SetupNavigationManager import com.github.damontecres.wholphin.services.UpdateChecker @@ -106,6 +108,14 @@ class MainActivity : AppCompatActivity() { @Inject lateinit var tvProviderSchedulerService: TvProviderSchedulerService + // Note: unused but injected to ensure it is created + @Inject + lateinit var serverEventListener: ServerEventListener + + // Note: unused but injected to ensure it is created + @Inject + lateinit var datePlayedInvalidationService: DatePlayedInvalidationService + private var signInAuto = true @OptIn(ExperimentalTvMaterial3Api::class) diff --git a/app/src/main/java/com/github/damontecres/wholphin/services/RefreshRateService.kt b/app/src/main/java/com/github/damontecres/wholphin/services/RefreshRateService.kt index 67b541fc..be6e461e 100644 --- a/app/src/main/java/com/github/damontecres/wholphin/services/RefreshRateService.kt +++ b/app/src/main/java/com/github/damontecres/wholphin/services/RefreshRateService.kt @@ -95,13 +95,13 @@ class RefreshRateService } catch (ex: InterruptedException) { Timber.w(ex, "Exception waiting for refresh rate switch") } - val targetRate = (targetMode.refreshRate * 100).roundToInt() + val targetRate = (targetMode.refreshRate * 1000).roundToInt() val isSeamless = - targetRate == (display.mode.refreshRate * 100).roundToInt() || + targetRate == (currentDisplayMode.refreshRate * 1000).roundToInt() || if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.S) { - display.mode.alternativeRefreshRates - .map { (it * 100).roundToInt() } - .any { targetRate % it == 0 } + currentDisplayMode.alternativeRefreshRates + .map { (it * 1000).roundToInt() } + .any { it % targetRate == 0 } } else { false } diff --git a/app/src/main/java/com/github/damontecres/wholphin/services/ThemeSongPlayer.kt b/app/src/main/java/com/github/damontecres/wholphin/services/ThemeSongPlayer.kt index a5f54815..e6bcb867 100644 --- a/app/src/main/java/com/github/damontecres/wholphin/services/ThemeSongPlayer.kt +++ b/app/src/main/java/com/github/damontecres/wholphin/services/ThemeSongPlayer.kt @@ -104,7 +104,9 @@ class ThemeSongPlayer } fun stop() { - Timber.v("Stopping theme song") - player.stop() + if (player.isPlaying) { + Timber.v("Stopping theme song") + player.stop() + } } } diff --git a/app/src/main/java/com/github/damontecres/wholphin/ui/detail/episode/EpisodeDetails.kt b/app/src/main/java/com/github/damontecres/wholphin/ui/detail/episode/EpisodeDetails.kt index 493093da..06216eb4 100644 --- a/app/src/main/java/com/github/damontecres/wholphin/ui/detail/episode/EpisodeDetails.kt +++ b/app/src/main/java/com/github/damontecres/wholphin/ui/detail/episode/EpisodeDetails.kt @@ -25,7 +25,6 @@ import androidx.compose.ui.res.stringResource import androidx.compose.ui.unit.dp import androidx.hilt.lifecycle.viewmodel.compose.hiltViewModel import androidx.lifecycle.compose.LifecycleResumeEffect -import androidx.lifecycle.compose.LifecycleStartEffect import com.github.damontecres.wholphin.R import com.github.damontecres.wholphin.data.ChosenStreams import com.github.damontecres.wholphin.data.model.BaseItem @@ -112,12 +111,12 @@ fun EpisodeDetails( LoadingState.Success -> { item?.let { ep -> - LifecycleStartEffect(destination.itemId) { + LifecycleResumeEffect(destination.itemId) { viewModel.maybePlayThemeSong( destination.itemId, preferences.appPreferences.interfacePreferences.playThemeSongs, ) - onStopOrDispose { + onPauseOrDispose { viewModel.release() } } diff --git a/app/src/main/java/com/github/damontecres/wholphin/ui/detail/movie/MovieDetails.kt b/app/src/main/java/com/github/damontecres/wholphin/ui/detail/movie/MovieDetails.kt index 78876e38..6c820128 100644 --- a/app/src/main/java/com/github/damontecres/wholphin/ui/detail/movie/MovieDetails.kt +++ b/app/src/main/java/com/github/damontecres/wholphin/ui/detail/movie/MovieDetails.kt @@ -31,7 +31,6 @@ import androidx.compose.ui.unit.dp import androidx.core.net.toUri import androidx.hilt.lifecycle.viewmodel.compose.hiltViewModel import androidx.lifecycle.compose.LifecycleResumeEffect -import androidx.lifecycle.compose.LifecycleStartEffect import androidx.tv.material3.MaterialTheme import androidx.tv.material3.Text import com.github.damontecres.wholphin.R @@ -143,12 +142,12 @@ fun MovieDetails( LoadingState.Success -> { item?.let { movie -> - LifecycleStartEffect(destination.itemId) { + LifecycleResumeEffect(destination.itemId) { viewModel.maybePlayThemeSong( destination.itemId, preferences.appPreferences.interfacePreferences.playThemeSongs, ) - onStopOrDispose { + onPauseOrDispose { viewModel.release() } } diff --git a/app/src/main/java/com/github/damontecres/wholphin/ui/detail/series/SeriesDetails.kt b/app/src/main/java/com/github/damontecres/wholphin/ui/detail/series/SeriesDetails.kt index 227f13bd..90c9157b 100644 --- a/app/src/main/java/com/github/damontecres/wholphin/ui/detail/series/SeriesDetails.kt +++ b/app/src/main/java/com/github/damontecres/wholphin/ui/detail/series/SeriesDetails.kt @@ -34,7 +34,7 @@ import androidx.compose.ui.text.style.TextOverflow import androidx.compose.ui.unit.Dp import androidx.compose.ui.unit.dp import androidx.hilt.lifecycle.viewmodel.compose.hiltViewModel -import androidx.lifecycle.compose.LifecycleStartEffect +import androidx.lifecycle.compose.LifecycleResumeEffect import androidx.tv.material3.MaterialTheme import androidx.tv.material3.Text import com.github.damontecres.wholphin.R @@ -124,12 +124,12 @@ fun SeriesDetails( LoadingState.Success -> { item?.let { item -> - LifecycleStartEffect(destination.itemId) { + LifecycleResumeEffect(destination.itemId) { viewModel.maybePlayThemeSong( destination.itemId, preferences.appPreferences.interfacePreferences.playThemeSongs, ) - onStopOrDispose { + onPauseOrDispose { viewModel.release() } } diff --git a/app/src/main/java/com/github/damontecres/wholphin/ui/detail/series/SeriesOverview.kt b/app/src/main/java/com/github/damontecres/wholphin/ui/detail/series/SeriesOverview.kt index b5d4ea4b..7575e3a4 100644 --- a/app/src/main/java/com/github/damontecres/wholphin/ui/detail/series/SeriesOverview.kt +++ b/app/src/main/java/com/github/damontecres/wholphin/ui/detail/series/SeriesOverview.kt @@ -16,7 +16,7 @@ import androidx.compose.ui.platform.LocalContext import androidx.compose.ui.res.stringResource import androidx.compose.ui.unit.dp import androidx.hilt.lifecycle.viewmodel.compose.hiltViewModel -import androidx.lifecycle.compose.LifecycleStartEffect +import androidx.lifecycle.compose.LifecycleResumeEffect import androidx.lifecycle.map import com.github.damontecres.wholphin.R import com.github.damontecres.wholphin.data.model.BaseItem @@ -167,12 +167,12 @@ fun SeriesOverview( }, "series_overview", ) - LifecycleStartEffect(destination.itemId) { + LifecycleResumeEffect(destination.itemId) { viewModel.maybePlayThemeSong( destination.itemId, preferences.appPreferences.interfacePreferences.playThemeSongs, ) - onStopOrDispose { + onPauseOrDispose { viewModel.release() } } diff --git a/app/src/main/java/com/github/damontecres/wholphin/ui/detail/series/SeriesViewModel.kt b/app/src/main/java/com/github/damontecres/wholphin/ui/detail/series/SeriesViewModel.kt index a1a4edf6..4f85cda3 100644 --- a/app/src/main/java/com/github/damontecres/wholphin/ui/detail/series/SeriesViewModel.kt +++ b/app/src/main/java/com/github/damontecres/wholphin/ui/detail/series/SeriesViewModel.kt @@ -221,9 +221,6 @@ class SeriesViewModel ) { viewModelScope.launchIO { themeSongPlayer.playThemeFor(seriesId, playThemeSongs) - addCloseable { - themeSongPlayer.stop() - } } }