mirror of
https://github.com/owenlejeune/TVTime.git
synced 2025-11-08 04:32:43 -05:00
update dependencies + fix credits on people detail + add animations to page transition
This commit is contained in:
@@ -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"
|
||||
|
||||
@@ -1,6 +1,5 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
package="com.owenlejeune.tvtime">
|
||||
<manifest xmlns:android="http://schemas.android.com/apk/res/android">
|
||||
|
||||
<uses-permission android:name="android.permission.INTERNET" />
|
||||
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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) }
|
||||
|
||||
@@ -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<Float>()
|
||||
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)
|
||||
}
|
||||
)
|
||||
|
||||
@@ -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<Float>()
|
||||
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 = {
|
||||
|
||||
@@ -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<Float>()
|
||||
val topAppBarScrollState = rememberTopAppBarScrollState()
|
||||
val scrollBehavior = remember(decayAnimationSpec) {
|
||||
TopAppBarDefaults.exitUntilCollapsedScrollBehavior(decayAnimationSpec, topAppBarScrollState)
|
||||
}
|
||||
val topAppBarScrollState = rememberTopAppBarState()
|
||||
val scrollBehavior = TopAppBarDefaults.exitUntilCollapsedScrollBehavior(topAppBarScrollState)
|
||||
|
||||
val homeScreenViewModel = viewModel<HomeScreenViewModel>()
|
||||
|
||||
@@ -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,
|
||||
|
||||
@@ -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<Float>()
|
||||
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
|
||||
),
|
||||
|
||||
@@ -81,11 +81,8 @@ fun MediaDetailScreen(
|
||||
val imagesMap = remember { mainViewModel.produceImagesFor(type) }
|
||||
val images = imagesMap[itemId]
|
||||
|
||||
val decayAnimationSpec = rememberSplineBasedDecay<Float>()
|
||||
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
|
||||
),
|
||||
|
||||
@@ -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<Float>()
|
||||
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
|
||||
|
||||
@@ -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
|
||||
),
|
||||
|
||||
@@ -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<Float>()
|
||||
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
|
||||
|
||||
@@ -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 -> {}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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()
|
||||
|
||||
2
gradle/wrapper/gradle-wrapper.properties
vendored
2
gradle/wrapper/gradle-wrapper.properties
vendored
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user