From 90969247f93444daa69d0bea73e012e3836c9a36 Mon Sep 17 00:00:00 2001 From: Owen LeJeune Date: Thu, 22 Jun 2023 22:44:33 -0400 Subject: [PATCH] update dependencies + fix credits on people detail + add animations to page transition --- app/build.gradle | 35 ++++++++++--------- app/src/main/AndroidManifest.xml | 3 +- .../com/owenlejeune/tvtime/MainActivity.kt | 2 -- .../tvtime/ui/components/Widgets.kt | 10 +++--- .../tvtime/ui/navigation/AppNavigation.kt | 24 +++++++++---- .../tvtime/ui/screens/AboutScreen.kt | 16 ++++----- .../tvtime/ui/screens/AccountScreen.kt | 9 ++--- .../tvtime/ui/screens/HomeScreen.kt | 18 ++++------ .../tvtime/ui/screens/ListDetailScreen.kt | 30 +++------------- .../tvtime/ui/screens/MediaDetailScreen.kt | 11 +++--- .../tvtime/ui/screens/PeopleDetailScreen.kt | 24 +++++-------- .../tvtime/ui/screens/SearchScreen.kt | 16 ++++----- .../tvtime/ui/screens/SettingsScreen.kt | 8 ++--- .../tvtime/ui/viewmodel/MainViewModel.kt | 2 +- build.gradle | 4 +-- gradle/wrapper/gradle-wrapper.properties | 2 +- 16 files changed, 90 insertions(+), 124 deletions(-) diff --git a/app/build.gradle b/app/build.gradle index 48af2d7..525d370 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -4,7 +4,7 @@ plugins { id 'kotlin-android' } -def composeVersion = "1.2.0-beta03" +def composeCompilerVersion = "1.4.7" android { compileSdkVersion 33 @@ -25,6 +25,9 @@ android { buildConfigField("String", "TMDB_Api_v4Key", TMDB_Api_v4Key) } + buildFeatures { + buildConfig = true + } buildTypes { release { minifyEnabled false @@ -38,44 +41,44 @@ android { } kotlinOptions { jvmTarget = '11' - useIR = true } buildFeatures { compose true } composeOptions { - kotlinCompilerExtensionVersion composeVersion + kotlinCompilerExtensionVersion composeCompilerVersion } packagingOptions { resources { excludes += '/META-INF/{AL2.0,LGPL2.1}' } } + namespace 'com.owenlejeune.tvtime' } dependencies { // ktx - def ktx_core = "1.8.0" + def ktx_core = "1.10.1" def ktx_paging = "3.1.1" implementation "androidx.core:core-ktx:$ktx_core" implementation "androidx.paging:paging-common-ktx:$ktx_paging" // android x - def androidx = "1.0.0" + def androidx = "1.1.0" implementation "androidx.window:window:$androidx" // material - def material = "1.6.1" + def material = "1.9.0" implementation "com.google.android.material:material:$material" // compose - def compose = composeVersion - def compose_material3 = "1.0.0-alpha13" - def compose_accompanist = "0.24.10-beta" - def compose_navigation = "2.5.3" - def compose_paging = "1.0.0-alpha16" + def compose = "1.2.0-beta03" + def compose_material3 = "1.2.0-alpha02" + def compose_accompanist = "0.28.0" + def compose_navigation = "2.7.0-beta01" + def compose_paging = "3.2.0-beta01" def compose_constraint_layout = "1.0.1" - def compose_activity = "1.4.0" + def compose_activity = "1.7.2" implementation "androidx.compose.ui:ui:$compose" implementation "androidx.compose.material3:material3:$compose_material3" implementation "androidx.compose.material:material:$compose" @@ -86,12 +89,10 @@ dependencies { implementation "com.google.accompanist:accompanist-pager:$compose_accompanist" implementation "com.google.accompanist:accompanist-pager-indicators:$compose_accompanist" implementation "com.google.accompanist:accompanist-flowlayout:$compose_accompanist" -// implementation "com.google.accompanist:accompanist-insets:$compose_accompanist" implementation "androidx.navigation:navigation-compose:$compose_navigation" implementation "androidx.paging:paging-compose:$compose_paging" implementation "androidx.constraintlayout:constraintlayout-compose:$compose_constraint_layout" - implementation "androidx.paging:paging-compose:$compose_paging" - implementation "com.google.accompanist:accompanist-webview:0.28.0" + implementation "com.google.accompanist:accompanist-webview:$compose_accompanist" // material you def monet_compat = "0.4.1" @@ -104,7 +105,7 @@ dependencies { // retrofit def retrofit = "2.9.0" def stetho = "1.6.0" - def gson = "2.9.0" + def gson = "2.10.1" def profiler = "1.0.8" implementation "com.squareup.retrofit2:retrofit:$retrofit" implementation "com.squareup.retrofit2:converter-gson:$retrofit" @@ -145,7 +146,7 @@ dependencies { // testing def junit = "4.13.2" def androidx_junit = "1.1.3" - def espresso_core = "3.4.0" + def espresso_core = "3.5.1" testImplementation "junit:junit:$junit" androidTestImplementation "androidx.test.ext:junit:$androidx_junit" androidTestImplementation "androidx.test.espresso:espresso-core:$espresso_core" diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index ceef3fe..c2a7e59 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -1,6 +1,5 @@ - + diff --git a/app/src/main/java/com/owenlejeune/tvtime/MainActivity.kt b/app/src/main/java/com/owenlejeune/tvtime/MainActivity.kt index 830320b..650ae9c 100644 --- a/app/src/main/java/com/owenlejeune/tvtime/MainActivity.kt +++ b/app/src/main/java/com/owenlejeune/tvtime/MainActivity.kt @@ -8,14 +8,12 @@ import androidx.compose.runtime.DisposableEffect import androidx.compose.ui.platform.LocalContext import androidx.compose.ui.platform.LocalFocusManager import androidx.lifecycle.lifecycleScope -import androidx.lifecycle.viewmodel.compose.viewModel import androidx.navigation.compose.rememberNavController import com.kieronquinn.monetcompat.app.MonetCompatActivity import com.owenlejeune.tvtime.extensions.rememberWindowSizeClass import com.owenlejeune.tvtime.ui.navigation.AppNavigationHost import com.owenlejeune.tvtime.ui.navigation.HomeScreenNavItem import com.owenlejeune.tvtime.ui.theme.TVTimeTheme -import com.owenlejeune.tvtime.ui.viewmodel.ConfigurationViewModel import com.owenlejeune.tvtime.utils.KeyboardManager import com.owenlejeune.tvtime.utils.SessionManager import kotlinx.coroutines.CoroutineScope diff --git a/app/src/main/java/com/owenlejeune/tvtime/ui/components/Widgets.kt b/app/src/main/java/com/owenlejeune/tvtime/ui/components/Widgets.kt index 7fd9bea..71bd39a 100644 --- a/app/src/main/java/com/owenlejeune/tvtime/ui/components/Widgets.kt +++ b/app/src/main/java/com/owenlejeune/tvtime/ui/components/Widgets.kt @@ -38,14 +38,12 @@ import androidx.compose.ui.focus.onFocusEvent import androidx.compose.ui.geometry.CornerRadius import androidx.compose.ui.geometry.Offset import androidx.compose.ui.graphics.* -import androidx.compose.ui.graphics.painter.Painter import androidx.compose.ui.graphics.vector.ImageVector import androidx.compose.ui.input.pointer.pointerInput import androidx.compose.ui.layout.ContentScale import androidx.compose.ui.layout.onGloballyPositioned import androidx.compose.ui.platform.LocalContext import androidx.compose.ui.platform.LocalDensity -import androidx.compose.ui.res.painterResource import androidx.compose.ui.res.stringResource import androidx.compose.ui.text.TextLayoutResult import androidx.compose.ui.text.TextStyle @@ -73,9 +71,9 @@ import com.owenlejeune.tvtime.extensions.unlessEmpty import com.owenlejeune.tvtime.preferences.AppPreferences import com.owenlejeune.tvtime.ui.navigation.AppNavItem import com.owenlejeune.tvtime.ui.viewmodel.HomeScreenViewModel -import com.owenlejeune.tvtime.utils.types.MediaViewType import com.owenlejeune.tvtime.utils.SessionManager import com.owenlejeune.tvtime.utils.TmdbUtils +import com.owenlejeune.tvtime.utils.types.MediaViewType import kotlinx.coroutines.delay import kotlinx.coroutines.launch import org.intellij.markdown.flavours.commonmark.CommonMarkFlavourDescriptor @@ -756,6 +754,7 @@ fun AccountIcon( } } +@OptIn(ExperimentalMaterial3Api::class) @Composable fun ThemedOutlineTextField( value: String, @@ -803,12 +802,13 @@ fun ThemedOutlineTextField( maxLines = maxLines, interactionSource = interactionSource, shape = shape, - colors = TextFieldDefaults.outlinedTextFieldColors( + colors = OutlinedTextFieldDefaults.colors( unfocusedBorderColor = MaterialTheme.colorScheme.onBackground, focusedBorderColor = MaterialTheme.colorScheme.primary, focusedLabelColor = MaterialTheme.colorScheme.primary, cursorColor = MaterialTheme.colorScheme.primary, - textColor = MaterialTheme.colorScheme.onBackground, + focusedTextColor = MaterialTheme.colorScheme.onBackground, + unfocusedTextColor = MaterialTheme.colorScheme.onBackground, errorBorderColor = MaterialTheme.colorScheme.error, errorCursorColor = MaterialTheme.colorScheme.error, errorLabelColor = MaterialTheme.colorScheme.error diff --git a/app/src/main/java/com/owenlejeune/tvtime/ui/navigation/AppNavigation.kt b/app/src/main/java/com/owenlejeune/tvtime/ui/navigation/AppNavigation.kt index 52eeb04..74bba37 100644 --- a/app/src/main/java/com/owenlejeune/tvtime/ui/navigation/AppNavigation.kt +++ b/app/src/main/java/com/owenlejeune/tvtime/ui/navigation/AppNavigation.kt @@ -1,5 +1,10 @@ package com.owenlejeune.tvtime.ui.navigation +import android.util.Log +import androidx.compose.animation.AnimatedContentTransitionScope +import androidx.compose.animation.core.tween +import androidx.compose.animation.fadeIn +import androidx.compose.animation.fadeOut import androidx.compose.runtime.Composable import androidx.compose.ui.res.stringResource import androidx.navigation.NavHostController @@ -11,17 +16,17 @@ import androidx.navigation.navDeepLink import com.owenlejeune.tvtime.R import com.owenlejeune.tvtime.extensions.WindowSizeClass import com.owenlejeune.tvtime.preferences.AppPreferences -import com.owenlejeune.tvtime.ui.screens.SearchScreen import com.owenlejeune.tvtime.ui.screens.AboutScreen import com.owenlejeune.tvtime.ui.screens.AccountScreen +import com.owenlejeune.tvtime.ui.screens.HomeScreen import com.owenlejeune.tvtime.ui.screens.ListDetailScreen import com.owenlejeune.tvtime.ui.screens.MediaDetailScreen -import com.owenlejeune.tvtime.utils.types.MediaViewType import com.owenlejeune.tvtime.ui.screens.PersonDetailScreen +import com.owenlejeune.tvtime.ui.screens.SearchScreen import com.owenlejeune.tvtime.ui.screens.SettingsScreen import com.owenlejeune.tvtime.ui.screens.WebLinkScreen -import com.owenlejeune.tvtime.ui.screens.HomeScreen import com.owenlejeune.tvtime.utils.NavConstants +import com.owenlejeune.tvtime.utils.types.MediaViewType import org.koin.java.KoinJavaComponent @Composable @@ -32,8 +37,15 @@ fun AppNavigationHost( windowSize: WindowSizeClass, preferences: AppPreferences = KoinJavaComponent.get(AppPreferences::class.java) ) { - NavHost(navController = appNavController, startDestination = startDestination) { - composable(AppNavItem.MainView.route) { + NavHost( + navController = appNavController, + startDestination = startDestination, + enterTransition = { slideIntoContainer(AnimatedContentTransitionScope.SlideDirection.Start, tween(500)) }, + popEnterTransition = { fadeIn(tween(500)) }, + exitTransition = { fadeOut(tween(500)) }, + popExitTransition = { slideOutOfContainer(AnimatedContentTransitionScope.SlideDirection.End, tween(500)) } + ) { + composable(route = AppNavItem.MainView.route) { HomeScreen( appNavController = appNavController, mainNavStartRoute = mainNavStartRoute, @@ -41,7 +53,7 @@ fun AppNavigationHost( ) } composable( - AppNavItem.DetailView.route.plus("/{${NavConstants.TYPE_KEY}}/{${NavConstants.ID_KEY}}"), + route = AppNavItem.DetailView.route.plus("/{${NavConstants.TYPE_KEY}}/{${NavConstants.ID_KEY}}"), arguments = listOf( navArgument(NavConstants.ID_KEY) { type = NavType.IntType }, navArgument(NavConstants.TYPE_KEY) { type = NavType.EnumType(MediaViewType::class.java) } diff --git a/app/src/main/java/com/owenlejeune/tvtime/ui/screens/AboutScreen.kt b/app/src/main/java/com/owenlejeune/tvtime/ui/screens/AboutScreen.kt index 084e7ca..2955f83 100644 --- a/app/src/main/java/com/owenlejeune/tvtime/ui/screens/AboutScreen.kt +++ b/app/src/main/java/com/owenlejeune/tvtime/ui/screens/AboutScreen.kt @@ -3,7 +3,6 @@ package com.owenlejeune.tvtime.ui.screens import android.content.Intent import android.net.Uri import android.provider.Settings -import androidx.compose.animation.rememberSplineBasedDecay import androidx.compose.foundation.clickable import androidx.compose.foundation.layout.Arrangement import androidx.compose.foundation.layout.Box @@ -32,7 +31,7 @@ import androidx.compose.material3.MaterialTheme import androidx.compose.material3.Scaffold import androidx.compose.material3.Text import androidx.compose.material3.TopAppBarDefaults -import androidx.compose.material3.rememberTopAppBarScrollState +import androidx.compose.material3.rememberTopAppBarState import androidx.compose.runtime.Composable import androidx.compose.runtime.getValue import androidx.compose.runtime.mutableStateOf @@ -67,11 +66,9 @@ fun AboutScreen( val context = LocalContext.current - val decayAnimationSpec = rememberSplineBasedDecay() - val topAppBarScrollState = rememberTopAppBarScrollState() - val scrollBehavior = remember(decayAnimationSpec) { - TopAppBarDefaults.exitUntilCollapsedScrollBehavior(decayAnimationSpec, topAppBarScrollState) - } + val topAppBarScrollState = rememberTopAppBarState() + val scrollBehavior = TopAppBarDefaults.exitUntilCollapsedScrollBehavior(topAppBarScrollState) + Scaffold( modifier = Modifier.nestedScroll(connection = scrollBehavior.nestedScrollConnection), topBar = { @@ -216,7 +213,10 @@ private fun ColumnScope.AttributionSection() { .clip(RoundedCornerShape(10.dp)) .clickable( onClick = { - val intent = Intent(Intent.ACTION_VIEW, Uri.parse(context.getString(R.string.tmdb_home_page))) + val intent = Intent( + Intent.ACTION_VIEW, + Uri.parse(context.getString(R.string.tmdb_home_page)) + ) context.startActivity(intent) } ) diff --git a/app/src/main/java/com/owenlejeune/tvtime/ui/screens/AccountScreen.kt b/app/src/main/java/com/owenlejeune/tvtime/ui/screens/AccountScreen.kt index e09392a..eab4931 100644 --- a/app/src/main/java/com/owenlejeune/tvtime/ui/screens/AccountScreen.kt +++ b/app/src/main/java/com/owenlejeune/tvtime/ui/screens/AccountScreen.kt @@ -1,6 +1,5 @@ package com.owenlejeune.tvtime.ui.screens -import androidx.compose.animation.rememberSplineBasedDecay import androidx.compose.foundation.layout.* import androidx.compose.foundation.lazy.LazyColumn import androidx.compose.material.icons.Icons @@ -63,11 +62,9 @@ fun AccountScreen( val currentSessionState = remember { SessionManager.currentSession } val currentSession = currentSessionState.value - val decayAnimationSpec = rememberSplineBasedDecay() - val topAppBarScrollState = rememberTopAppBarScrollState() - val scrollBehavior = remember(decayAnimationSpec) { - TopAppBarDefaults.exitUntilCollapsedScrollBehavior(decayAnimationSpec, topAppBarScrollState) - } + val topAppBarScrollState = rememberTopAppBarState() + val scrollBehavior = TopAppBarDefaults.exitUntilCollapsedScrollBehavior(topAppBarScrollState) + Scaffold( modifier = Modifier.nestedScroll(scrollBehavior.nestedScrollConnection), topBar = { diff --git a/app/src/main/java/com/owenlejeune/tvtime/ui/screens/HomeScreen.kt b/app/src/main/java/com/owenlejeune/tvtime/ui/screens/HomeScreen.kt index 891f10d..0448a90 100644 --- a/app/src/main/java/com/owenlejeune/tvtime/ui/screens/HomeScreen.kt +++ b/app/src/main/java/com/owenlejeune/tvtime/ui/screens/HomeScreen.kt @@ -2,17 +2,14 @@ package com.owenlejeune.tvtime.ui.screens import android.app.Activity import androidx.activity.compose.BackHandler -import androidx.compose.animation.rememberSplineBasedDecay import androidx.compose.foundation.layout.Box import androidx.compose.foundation.layout.Column import androidx.compose.foundation.layout.Row -import androidx.compose.foundation.layout.RowScope import androidx.compose.foundation.layout.Spacer import androidx.compose.foundation.layout.fillMaxSize import androidx.compose.foundation.layout.height import androidx.compose.foundation.layout.padding import androidx.compose.foundation.shape.RoundedCornerShape -import androidx.compose.material.NavigationRailDefaults import androidx.compose.material.Scaffold import androidx.compose.material3.ExperimentalMaterial3Api import androidx.compose.material3.Icon @@ -27,9 +24,8 @@ import androidx.compose.material3.NavigationRailItemDefaults import androidx.compose.material3.Text import androidx.compose.material3.TopAppBarDefaults import androidx.compose.material3.TopAppBarScrollBehavior -import androidx.compose.material3.rememberTopAppBarScrollState +import androidx.compose.material3.rememberTopAppBarState import androidx.compose.runtime.Composable -import androidx.compose.runtime.MutableState import androidx.compose.runtime.getValue import androidx.compose.runtime.mutableStateOf import androidx.compose.runtime.remember @@ -50,8 +46,8 @@ import com.owenlejeune.tvtime.preferences.AppPreferences import com.owenlejeune.tvtime.ui.components.AccountIcon import com.owenlejeune.tvtime.ui.components.ProfileMenuContainer import com.owenlejeune.tvtime.ui.components.ProfileMenuDefaults -import com.owenlejeune.tvtime.ui.navigation.HomeScreenNavItem import com.owenlejeune.tvtime.ui.navigation.HomeScreenNavHost +import com.owenlejeune.tvtime.ui.navigation.HomeScreenNavItem import com.owenlejeune.tvtime.ui.viewmodel.HomeScreenViewModel import org.koin.java.KoinJavaComponent @@ -64,11 +60,8 @@ fun HomeScreen( ) { val navController = rememberNavController() - val decayAnimationSpec = rememberSplineBasedDecay() - val topAppBarScrollState = rememberTopAppBarScrollState() - val scrollBehavior = remember(decayAnimationSpec) { - TopAppBarDefaults.exitUntilCollapsedScrollBehavior(decayAnimationSpec, topAppBarScrollState) - } + val topAppBarScrollState = rememberTopAppBarState() + val scrollBehavior = TopAppBarDefaults.exitUntilCollapsedScrollBehavior(topAppBarScrollState) val homeScreenViewModel = viewModel() @@ -123,6 +116,7 @@ fun HomeScreen( } } +@OptIn(ExperimentalMaterial3Api::class) @Composable private fun TopBar( scrollBehavior: TopAppBarScrollBehavior, @@ -179,6 +173,7 @@ private fun BottomNavBar( } } +@OptIn(ExperimentalMaterial3Api::class) @Composable private fun MainContent( windowSize: WindowSizeClass, @@ -218,6 +213,7 @@ private fun SingleColumnMainContent( ) } +@OptIn(ExperimentalMaterial3Api::class) @Composable private fun DualColumnMainContent( appNavController: NavHostController, diff --git a/app/src/main/java/com/owenlejeune/tvtime/ui/screens/ListDetailScreen.kt b/app/src/main/java/com/owenlejeune/tvtime/ui/screens/ListDetailScreen.kt index d3093d5..31eabda 100644 --- a/app/src/main/java/com/owenlejeune/tvtime/ui/screens/ListDetailScreen.kt +++ b/app/src/main/java/com/owenlejeune/tvtime/ui/screens/ListDetailScreen.kt @@ -1,10 +1,7 @@ package com.owenlejeune.tvtime.ui.screens -import android.accounts.Account + import android.content.Context import android.content.Intent -import android.util.Log -import android.widget.Toast -import androidx.compose.animation.rememberSplineBasedDecay import androidx.compose.foundation.* import androidx.compose.foundation.layout.* import androidx.compose.foundation.selection.selectable @@ -13,11 +10,7 @@ import androidx.compose.foundation.shape.RoundedCornerShape import androidx.compose.material.ExperimentalMaterialApi import androidx.compose.material.icons.Icons import androidx.compose.material.icons.filled.ArrowBack -import androidx.compose.material.icons.filled.Book -import androidx.compose.material.icons.filled.Bookmark import androidx.compose.material.icons.filled.Delete -import androidx.compose.material.icons.filled.Favorite -import androidx.compose.material.icons.filled.Star import androidx.compose.material3.* import androidx.compose.runtime.* import androidx.compose.ui.Alignment @@ -41,32 +34,22 @@ import androidx.navigation.NavController import coil.compose.AsyncImage import com.google.accompanist.systemuicontroller.rememberSystemUiController import com.owenlejeune.tvtime.R -import com.owenlejeune.tvtime.api.tmdb.api.v3.AccountService -import com.owenlejeune.tvtime.api.tmdb.api.v3.model.MarkAsFavoriteBody -import com.owenlejeune.tvtime.api.tmdb.api.v3.model.WatchlistBody import com.owenlejeune.tvtime.api.tmdb.api.v4.ListV4Service import com.owenlejeune.tvtime.api.tmdb.api.v4.model.* import com.owenlejeune.tvtime.extensions.WindowSizeClass import com.owenlejeune.tvtime.extensions.unlessEmpty -import com.owenlejeune.tvtime.preferences.AppPreferences import com.owenlejeune.tvtime.ui.components.Actions import com.owenlejeune.tvtime.ui.components.ActionsView -import com.owenlejeune.tvtime.ui.components.FavoriteButton import com.owenlejeune.tvtime.ui.components.RatingView import com.owenlejeune.tvtime.ui.components.Spinner import com.owenlejeune.tvtime.ui.components.SwitchPreference import com.owenlejeune.tvtime.ui.navigation.AppNavItem import com.owenlejeune.tvtime.ui.theme.* import com.owenlejeune.tvtime.ui.viewmodel.AccountViewModel -import com.owenlejeune.tvtime.utils.SessionManager import com.owenlejeune.tvtime.utils.TmdbUtils -import com.owenlejeune.tvtime.utils.types.MediaViewType import de.charlex.compose.RevealDirection import de.charlex.compose.RevealSwipe -import kotlinx.coroutines.CoroutineScope -import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.launch -import kotlinx.coroutines.withContext import org.koin.java.KoinJavaComponent import kotlin.math.roundToInt @@ -90,19 +73,16 @@ fun ListDetailScreen( val listMap = remember { accountViewModel.listMap } val parentList = listMap[itemId] - val decayAnimationSpec = rememberSplineBasedDecay() - val topAppBarScrollState = rememberTopAppBarScrollState() - val scrollBehavior = remember(decayAnimationSpec) { - TopAppBarDefaults.pinnedScrollBehavior(topAppBarScrollState) - } + val topAppBarScrollState = rememberTopAppBarState() + val scrollBehavior = TopAppBarDefaults.pinnedScrollBehavior(topAppBarScrollState) Scaffold( modifier = Modifier.nestedScroll(scrollBehavior.nestedScrollConnection), topBar = { - SmallTopAppBar( + TopAppBar( scrollBehavior = scrollBehavior, colors = TopAppBarDefaults - .smallTopAppBarColors( + .topAppBarColors( scrolledContainerColor = MaterialTheme.colorScheme.background, titleContentColor = MaterialTheme.colorScheme.primary ), diff --git a/app/src/main/java/com/owenlejeune/tvtime/ui/screens/MediaDetailScreen.kt b/app/src/main/java/com/owenlejeune/tvtime/ui/screens/MediaDetailScreen.kt index 1683f0f..21fbf3d 100644 --- a/app/src/main/java/com/owenlejeune/tvtime/ui/screens/MediaDetailScreen.kt +++ b/app/src/main/java/com/owenlejeune/tvtime/ui/screens/MediaDetailScreen.kt @@ -81,11 +81,8 @@ fun MediaDetailScreen( val imagesMap = remember { mainViewModel.produceImagesFor(type) } val images = imagesMap[itemId] - val decayAnimationSpec = rememberSplineBasedDecay() - val topAppBarScrollState = rememberTopAppBarScrollState() - val scrollBehavior = remember(decayAnimationSpec) { - TopAppBarDefaults.pinnedScrollBehavior(topAppBarScrollState) - } + val topAppBarScrollState = rememberTopAppBarState() + val scrollBehavior = TopAppBarDefaults.pinnedScrollBehavior(topAppBarScrollState) val pagerState = rememberPagerState(initialPage = 0) @@ -96,10 +93,10 @@ fun MediaDetailScreen( Scaffold( modifier = Modifier.nestedScroll(scrollBehavior.nestedScrollConnection), topBar = { - SmallTopAppBar( + TopAppBar( scrollBehavior = scrollBehavior, colors = TopAppBarDefaults - .smallTopAppBarColors( + .topAppBarColors( scrolledContainerColor = MaterialTheme.colorScheme.background, titleContentColor = MaterialTheme.colorScheme.primary ), diff --git a/app/src/main/java/com/owenlejeune/tvtime/ui/screens/PeopleDetailScreen.kt b/app/src/main/java/com/owenlejeune/tvtime/ui/screens/PeopleDetailScreen.kt index 3e530ae..50bf802 100644 --- a/app/src/main/java/com/owenlejeune/tvtime/ui/screens/PeopleDetailScreen.kt +++ b/app/src/main/java/com/owenlejeune/tvtime/ui/screens/PeopleDetailScreen.kt @@ -1,6 +1,5 @@ package com.owenlejeune.tvtime.ui.screens -import androidx.compose.animation.rememberSplineBasedDecay import androidx.compose.foundation.background import androidx.compose.foundation.layout.Arrangement import androidx.compose.foundation.layout.Box @@ -19,14 +18,13 @@ import androidx.compose.material3.Icon import androidx.compose.material3.IconButton import androidx.compose.material3.MaterialTheme import androidx.compose.material3.Scaffold -import androidx.compose.material3.SmallTopAppBar import androidx.compose.material3.Text +import androidx.compose.material3.TopAppBar import androidx.compose.material3.TopAppBarDefaults -import androidx.compose.material3.rememberTopAppBarScrollState +import androidx.compose.material3.rememberTopAppBarState import androidx.compose.runtime.Composable import androidx.compose.runtime.LaunchedEffect import androidx.compose.runtime.remember -import androidx.compose.runtime.rememberCoroutineScope import androidx.compose.ui.Modifier import androidx.compose.ui.input.nestedscroll.nestedScroll import androidx.compose.ui.res.stringResource @@ -58,6 +56,7 @@ fun PersonDetailScreen( LaunchedEffect(Unit) { mainViewModel.getById(personId, MediaViewType.PERSON) mainViewModel.getExternalIds(personId, MediaViewType.PERSON) + mainViewModel.getCastAndCrew(personId, MediaViewType.PERSON) } val systemUiController = rememberSystemUiController() @@ -67,19 +66,16 @@ fun PersonDetailScreen( val peopleMap = remember { mainViewModel.peopleMap } val person = peopleMap[personId] - val decayAnimationSpec = rememberSplineBasedDecay() - val topAppBarScrollState = rememberTopAppBarScrollState() - val scrollBehaviour = remember(decayAnimationSpec) { - TopAppBarDefaults.pinnedScrollBehavior(topAppBarScrollState) - } + val topAppBarScrollState = rememberTopAppBarState() + val scrollBehavior = TopAppBarDefaults.pinnedScrollBehavior(topAppBarScrollState) Scaffold( - modifier = Modifier.nestedScroll(scrollBehaviour.nestedScrollConnection), + modifier = Modifier.nestedScroll(scrollBehavior.nestedScrollConnection), topBar = { - SmallTopAppBar( - scrollBehavior = scrollBehaviour, + TopAppBar( + scrollBehavior = scrollBehavior, colors = TopAppBarDefaults - .smallTopAppBarColors( + .topAppBarColors( scrolledContainerColor = MaterialTheme.colorScheme.background, titleContentColor = MaterialTheme.colorScheme.primary ), @@ -96,8 +92,6 @@ fun PersonDetailScreen( ) } ) { innerPadding -> - val scope = rememberCoroutineScope() - Box(modifier = Modifier.padding(innerPadding)) { Column( modifier = Modifier diff --git a/app/src/main/java/com/owenlejeune/tvtime/ui/screens/SearchScreen.kt b/app/src/main/java/com/owenlejeune/tvtime/ui/screens/SearchScreen.kt index d70138f..2cab3fe 100644 --- a/app/src/main/java/com/owenlejeune/tvtime/ui/screens/SearchScreen.kt +++ b/app/src/main/java/com/owenlejeune/tvtime/ui/screens/SearchScreen.kt @@ -23,22 +23,17 @@ import androidx.paging.compose.collectAsLazyPagingItems import com.google.accompanist.systemuicontroller.rememberSystemUiController import com.owenlejeune.tvtime.R import com.owenlejeune.tvtime.api.tmdb.api.v3.MoviesService -import com.owenlejeune.tvtime.api.tmdb.api.v3.SearchService import com.owenlejeune.tvtime.api.tmdb.api.v3.TvService import com.owenlejeune.tvtime.api.tmdb.api.v3.model.* -import com.owenlejeune.tvtime.extensions.listItems +import com.owenlejeune.tvtime.extensions.lazyPagingItems import com.owenlejeune.tvtime.ui.components.MediaResultCard import com.owenlejeune.tvtime.ui.viewmodel.MainViewModel import com.owenlejeune.tvtime.ui.viewmodel.SearchViewModel import com.owenlejeune.tvtime.utils.TmdbUtils import com.owenlejeune.tvtime.utils.types.MediaViewType -import kotlinx.coroutines.CoroutineScope -import kotlinx.coroutines.Dispatchers -import kotlinx.coroutines.launch -import kotlinx.coroutines.withContext import org.koin.java.KoinJavaComponent.get -import com.owenlejeune.tvtime.extensions.lazyPagingItems +@OptIn(ExperimentalMaterial3Api::class) @Composable fun SearchScreen( appNavController: NavHostController, @@ -67,14 +62,15 @@ fun SearchScreen( } } - SmallTopAppBar( + TopAppBar( title = { TextField( value = searchValue.value, onValueChange = { searchValue.value = it }, placeholder = { Text(text = stringResource(id = R.string.search_placeholder, title)) }, - colors = TextFieldDefaults.textFieldColors( - containerColor = MaterialTheme.colorScheme.surface, + colors = TextFieldDefaults.colors( + focusedContainerColor = MaterialTheme.colorScheme.surface, + unfocusedContainerColor = MaterialTheme.colorScheme.surface, focusedIndicatorColor = MaterialTheme.colorScheme.surface, unfocusedIndicatorColor = MaterialTheme.colorScheme.surface ), diff --git a/app/src/main/java/com/owenlejeune/tvtime/ui/screens/SettingsScreen.kt b/app/src/main/java/com/owenlejeune/tvtime/ui/screens/SettingsScreen.kt index ec271c1..87114cf 100644 --- a/app/src/main/java/com/owenlejeune/tvtime/ui/screens/SettingsScreen.kt +++ b/app/src/main/java/com/owenlejeune/tvtime/ui/screens/SettingsScreen.kt @@ -3,7 +3,6 @@ package com.owenlejeune.tvtime.ui.screens import android.os.Build import android.widget.Toast import androidx.appcompat.app.AppCompatActivity -import androidx.compose.animation.rememberSplineBasedDecay import androidx.compose.foundation.border import androidx.compose.foundation.clickable import androidx.compose.foundation.layout.* @@ -61,11 +60,8 @@ fun SettingsScreen( systemUiController.setStatusBarColor(color = MaterialTheme.colorScheme.background) systemUiController.setNavigationBarColor(color = MaterialTheme.colorScheme.background) - val decayAnimationSpec = rememberSplineBasedDecay() - val topAppBarScrollState = rememberTopAppBarScrollState() - val scrollBehavior = remember(decayAnimationSpec) { - TopAppBarDefaults.exitUntilCollapsedScrollBehavior(decayAnimationSpec, topAppBarScrollState) - } + val topAppBarScrollState = rememberTopAppBarState() + val scrollBehavior = TopAppBarDefaults.exitUntilCollapsedScrollBehavior(topAppBarScrollState) val appBarTitle = remember { mutableStateOf("") } val defaultRestoreAction = ::resetAllPreferences diff --git a/app/src/main/java/com/owenlejeune/tvtime/ui/viewmodel/MainViewModel.kt b/app/src/main/java/com/owenlejeune/tvtime/ui/viewmodel/MainViewModel.kt index ad9806f..f9275c6 100644 --- a/app/src/main/java/com/owenlejeune/tvtime/ui/viewmodel/MainViewModel.kt +++ b/app/src/main/java/com/owenlejeune/tvtime/ui/viewmodel/MainViewModel.kt @@ -199,7 +199,7 @@ class MainViewModel: ViewModel(), KoinComponent { when (type) { MediaViewType.MOVIE -> movieService.getCastAndCrew(id) MediaViewType.TV -> tvService.getCastAndCrew(id) - MediaViewType.PERSON -> tvService.getCastAndCrew(id) + MediaViewType.PERSON -> peopleService.getCredits(id) else -> {} } } diff --git a/build.gradle b/build.gradle index c855e34..58f6094 100644 --- a/build.gradle +++ b/build.gradle @@ -1,6 +1,6 @@ buildscript { - def gradle = "7.1.2" - def kotlin = "1.6.21" + def gradle = "8.0.2" + def kotlin = "1.8.21" repositories { google() mavenCentral() diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index 4041717..997b1bd 100644 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -1,6 +1,6 @@ #Tue Feb 08 23:49:04 EST 2022 distributionBase=GRADLE_USER_HOME -distributionUrl=https\://services.gradle.org/distributions/gradle-7.2-bin.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-8.0-bin.zip distributionPath=wrapper/dists zipStorePath=wrapper/dists zipStoreBase=GRADLE_USER_HOME