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'
|
id 'kotlin-android'
|
||||||
}
|
}
|
||||||
|
|
||||||
def composeVersion = "1.2.0-beta03"
|
def composeCompilerVersion = "1.4.7"
|
||||||
|
|
||||||
android {
|
android {
|
||||||
compileSdkVersion 33
|
compileSdkVersion 33
|
||||||
@@ -25,6 +25,9 @@ android {
|
|||||||
buildConfigField("String", "TMDB_Api_v4Key", TMDB_Api_v4Key)
|
buildConfigField("String", "TMDB_Api_v4Key", TMDB_Api_v4Key)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
buildFeatures {
|
||||||
|
buildConfig = true
|
||||||
|
}
|
||||||
buildTypes {
|
buildTypes {
|
||||||
release {
|
release {
|
||||||
minifyEnabled false
|
minifyEnabled false
|
||||||
@@ -38,44 +41,44 @@ android {
|
|||||||
}
|
}
|
||||||
kotlinOptions {
|
kotlinOptions {
|
||||||
jvmTarget = '11'
|
jvmTarget = '11'
|
||||||
useIR = true
|
|
||||||
}
|
}
|
||||||
buildFeatures {
|
buildFeatures {
|
||||||
compose true
|
compose true
|
||||||
}
|
}
|
||||||
composeOptions {
|
composeOptions {
|
||||||
kotlinCompilerExtensionVersion composeVersion
|
kotlinCompilerExtensionVersion composeCompilerVersion
|
||||||
}
|
}
|
||||||
packagingOptions {
|
packagingOptions {
|
||||||
resources {
|
resources {
|
||||||
excludes += '/META-INF/{AL2.0,LGPL2.1}'
|
excludes += '/META-INF/{AL2.0,LGPL2.1}'
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
namespace 'com.owenlejeune.tvtime'
|
||||||
}
|
}
|
||||||
|
|
||||||
dependencies {
|
dependencies {
|
||||||
// ktx
|
// ktx
|
||||||
def ktx_core = "1.8.0"
|
def ktx_core = "1.10.1"
|
||||||
def ktx_paging = "3.1.1"
|
def ktx_paging = "3.1.1"
|
||||||
implementation "androidx.core:core-ktx:$ktx_core"
|
implementation "androidx.core:core-ktx:$ktx_core"
|
||||||
implementation "androidx.paging:paging-common-ktx:$ktx_paging"
|
implementation "androidx.paging:paging-common-ktx:$ktx_paging"
|
||||||
|
|
||||||
// android x
|
// android x
|
||||||
def androidx = "1.0.0"
|
def androidx = "1.1.0"
|
||||||
implementation "androidx.window:window:$androidx"
|
implementation "androidx.window:window:$androidx"
|
||||||
|
|
||||||
// material
|
// material
|
||||||
def material = "1.6.1"
|
def material = "1.9.0"
|
||||||
implementation "com.google.android.material:material:$material"
|
implementation "com.google.android.material:material:$material"
|
||||||
|
|
||||||
// compose
|
// compose
|
||||||
def compose = composeVersion
|
def compose = "1.2.0-beta03"
|
||||||
def compose_material3 = "1.0.0-alpha13"
|
def compose_material3 = "1.2.0-alpha02"
|
||||||
def compose_accompanist = "0.24.10-beta"
|
def compose_accompanist = "0.28.0"
|
||||||
def compose_navigation = "2.5.3"
|
def compose_navigation = "2.7.0-beta01"
|
||||||
def compose_paging = "1.0.0-alpha16"
|
def compose_paging = "3.2.0-beta01"
|
||||||
def compose_constraint_layout = "1.0.1"
|
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.ui:ui:$compose"
|
||||||
implementation "androidx.compose.material3:material3:$compose_material3"
|
implementation "androidx.compose.material3:material3:$compose_material3"
|
||||||
implementation "androidx.compose.material:material:$compose"
|
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:$compose_accompanist"
|
||||||
implementation "com.google.accompanist:accompanist-pager-indicators:$compose_accompanist"
|
implementation "com.google.accompanist:accompanist-pager-indicators:$compose_accompanist"
|
||||||
implementation "com.google.accompanist:accompanist-flowlayout:$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.navigation:navigation-compose:$compose_navigation"
|
||||||
implementation "androidx.paging:paging-compose:$compose_paging"
|
implementation "androidx.paging:paging-compose:$compose_paging"
|
||||||
implementation "androidx.constraintlayout:constraintlayout-compose:$compose_constraint_layout"
|
implementation "androidx.constraintlayout:constraintlayout-compose:$compose_constraint_layout"
|
||||||
implementation "androidx.paging:paging-compose:$compose_paging"
|
implementation "com.google.accompanist:accompanist-webview:$compose_accompanist"
|
||||||
implementation "com.google.accompanist:accompanist-webview:0.28.0"
|
|
||||||
|
|
||||||
// material you
|
// material you
|
||||||
def monet_compat = "0.4.1"
|
def monet_compat = "0.4.1"
|
||||||
@@ -104,7 +105,7 @@ dependencies {
|
|||||||
// retrofit
|
// retrofit
|
||||||
def retrofit = "2.9.0"
|
def retrofit = "2.9.0"
|
||||||
def stetho = "1.6.0"
|
def stetho = "1.6.0"
|
||||||
def gson = "2.9.0"
|
def gson = "2.10.1"
|
||||||
def profiler = "1.0.8"
|
def profiler = "1.0.8"
|
||||||
implementation "com.squareup.retrofit2:retrofit:$retrofit"
|
implementation "com.squareup.retrofit2:retrofit:$retrofit"
|
||||||
implementation "com.squareup.retrofit2:converter-gson:$retrofit"
|
implementation "com.squareup.retrofit2:converter-gson:$retrofit"
|
||||||
@@ -145,7 +146,7 @@ dependencies {
|
|||||||
// testing
|
// testing
|
||||||
def junit = "4.13.2"
|
def junit = "4.13.2"
|
||||||
def androidx_junit = "1.1.3"
|
def androidx_junit = "1.1.3"
|
||||||
def espresso_core = "3.4.0"
|
def espresso_core = "3.5.1"
|
||||||
testImplementation "junit:junit:$junit"
|
testImplementation "junit:junit:$junit"
|
||||||
androidTestImplementation "androidx.test.ext:junit:$androidx_junit"
|
androidTestImplementation "androidx.test.ext:junit:$androidx_junit"
|
||||||
androidTestImplementation "androidx.test.espresso:espresso-core:$espresso_core"
|
androidTestImplementation "androidx.test.espresso:espresso-core:$espresso_core"
|
||||||
|
|||||||
@@ -1,6 +1,5 @@
|
|||||||
<?xml version="1.0" encoding="utf-8"?>
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
|
<manifest xmlns:android="http://schemas.android.com/apk/res/android">
|
||||||
package="com.owenlejeune.tvtime">
|
|
||||||
|
|
||||||
<uses-permission android:name="android.permission.INTERNET" />
|
<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.LocalContext
|
||||||
import androidx.compose.ui.platform.LocalFocusManager
|
import androidx.compose.ui.platform.LocalFocusManager
|
||||||
import androidx.lifecycle.lifecycleScope
|
import androidx.lifecycle.lifecycleScope
|
||||||
import androidx.lifecycle.viewmodel.compose.viewModel
|
|
||||||
import androidx.navigation.compose.rememberNavController
|
import androidx.navigation.compose.rememberNavController
|
||||||
import com.kieronquinn.monetcompat.app.MonetCompatActivity
|
import com.kieronquinn.monetcompat.app.MonetCompatActivity
|
||||||
import com.owenlejeune.tvtime.extensions.rememberWindowSizeClass
|
import com.owenlejeune.tvtime.extensions.rememberWindowSizeClass
|
||||||
import com.owenlejeune.tvtime.ui.navigation.AppNavigationHost
|
import com.owenlejeune.tvtime.ui.navigation.AppNavigationHost
|
||||||
import com.owenlejeune.tvtime.ui.navigation.HomeScreenNavItem
|
import com.owenlejeune.tvtime.ui.navigation.HomeScreenNavItem
|
||||||
import com.owenlejeune.tvtime.ui.theme.TVTimeTheme
|
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.KeyboardManager
|
||||||
import com.owenlejeune.tvtime.utils.SessionManager
|
import com.owenlejeune.tvtime.utils.SessionManager
|
||||||
import kotlinx.coroutines.CoroutineScope
|
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.CornerRadius
|
||||||
import androidx.compose.ui.geometry.Offset
|
import androidx.compose.ui.geometry.Offset
|
||||||
import androidx.compose.ui.graphics.*
|
import androidx.compose.ui.graphics.*
|
||||||
import androidx.compose.ui.graphics.painter.Painter
|
|
||||||
import androidx.compose.ui.graphics.vector.ImageVector
|
import androidx.compose.ui.graphics.vector.ImageVector
|
||||||
import androidx.compose.ui.input.pointer.pointerInput
|
import androidx.compose.ui.input.pointer.pointerInput
|
||||||
import androidx.compose.ui.layout.ContentScale
|
import androidx.compose.ui.layout.ContentScale
|
||||||
import androidx.compose.ui.layout.onGloballyPositioned
|
import androidx.compose.ui.layout.onGloballyPositioned
|
||||||
import androidx.compose.ui.platform.LocalContext
|
import androidx.compose.ui.platform.LocalContext
|
||||||
import androidx.compose.ui.platform.LocalDensity
|
import androidx.compose.ui.platform.LocalDensity
|
||||||
import androidx.compose.ui.res.painterResource
|
|
||||||
import androidx.compose.ui.res.stringResource
|
import androidx.compose.ui.res.stringResource
|
||||||
import androidx.compose.ui.text.TextLayoutResult
|
import androidx.compose.ui.text.TextLayoutResult
|
||||||
import androidx.compose.ui.text.TextStyle
|
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.preferences.AppPreferences
|
||||||
import com.owenlejeune.tvtime.ui.navigation.AppNavItem
|
import com.owenlejeune.tvtime.ui.navigation.AppNavItem
|
||||||
import com.owenlejeune.tvtime.ui.viewmodel.HomeScreenViewModel
|
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.SessionManager
|
||||||
import com.owenlejeune.tvtime.utils.TmdbUtils
|
import com.owenlejeune.tvtime.utils.TmdbUtils
|
||||||
|
import com.owenlejeune.tvtime.utils.types.MediaViewType
|
||||||
import kotlinx.coroutines.delay
|
import kotlinx.coroutines.delay
|
||||||
import kotlinx.coroutines.launch
|
import kotlinx.coroutines.launch
|
||||||
import org.intellij.markdown.flavours.commonmark.CommonMarkFlavourDescriptor
|
import org.intellij.markdown.flavours.commonmark.CommonMarkFlavourDescriptor
|
||||||
@@ -756,6 +754,7 @@ fun AccountIcon(
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@OptIn(ExperimentalMaterial3Api::class)
|
||||||
@Composable
|
@Composable
|
||||||
fun ThemedOutlineTextField(
|
fun ThemedOutlineTextField(
|
||||||
value: String,
|
value: String,
|
||||||
@@ -803,12 +802,13 @@ fun ThemedOutlineTextField(
|
|||||||
maxLines = maxLines,
|
maxLines = maxLines,
|
||||||
interactionSource = interactionSource,
|
interactionSource = interactionSource,
|
||||||
shape = shape,
|
shape = shape,
|
||||||
colors = TextFieldDefaults.outlinedTextFieldColors(
|
colors = OutlinedTextFieldDefaults.colors(
|
||||||
unfocusedBorderColor = MaterialTheme.colorScheme.onBackground,
|
unfocusedBorderColor = MaterialTheme.colorScheme.onBackground,
|
||||||
focusedBorderColor = MaterialTheme.colorScheme.primary,
|
focusedBorderColor = MaterialTheme.colorScheme.primary,
|
||||||
focusedLabelColor = MaterialTheme.colorScheme.primary,
|
focusedLabelColor = MaterialTheme.colorScheme.primary,
|
||||||
cursorColor = MaterialTheme.colorScheme.primary,
|
cursorColor = MaterialTheme.colorScheme.primary,
|
||||||
textColor = MaterialTheme.colorScheme.onBackground,
|
focusedTextColor = MaterialTheme.colorScheme.onBackground,
|
||||||
|
unfocusedTextColor = MaterialTheme.colorScheme.onBackground,
|
||||||
errorBorderColor = MaterialTheme.colorScheme.error,
|
errorBorderColor = MaterialTheme.colorScheme.error,
|
||||||
errorCursorColor = MaterialTheme.colorScheme.error,
|
errorCursorColor = MaterialTheme.colorScheme.error,
|
||||||
errorLabelColor = MaterialTheme.colorScheme.error
|
errorLabelColor = MaterialTheme.colorScheme.error
|
||||||
|
|||||||
@@ -1,5 +1,10 @@
|
|||||||
package com.owenlejeune.tvtime.ui.navigation
|
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.runtime.Composable
|
||||||
import androidx.compose.ui.res.stringResource
|
import androidx.compose.ui.res.stringResource
|
||||||
import androidx.navigation.NavHostController
|
import androidx.navigation.NavHostController
|
||||||
@@ -11,17 +16,17 @@ import androidx.navigation.navDeepLink
|
|||||||
import com.owenlejeune.tvtime.R
|
import com.owenlejeune.tvtime.R
|
||||||
import com.owenlejeune.tvtime.extensions.WindowSizeClass
|
import com.owenlejeune.tvtime.extensions.WindowSizeClass
|
||||||
import com.owenlejeune.tvtime.preferences.AppPreferences
|
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.AboutScreen
|
||||||
import com.owenlejeune.tvtime.ui.screens.AccountScreen
|
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.ListDetailScreen
|
||||||
import com.owenlejeune.tvtime.ui.screens.MediaDetailScreen
|
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.PersonDetailScreen
|
||||||
|
import com.owenlejeune.tvtime.ui.screens.SearchScreen
|
||||||
import com.owenlejeune.tvtime.ui.screens.SettingsScreen
|
import com.owenlejeune.tvtime.ui.screens.SettingsScreen
|
||||||
import com.owenlejeune.tvtime.ui.screens.WebLinkScreen
|
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.NavConstants
|
||||||
|
import com.owenlejeune.tvtime.utils.types.MediaViewType
|
||||||
import org.koin.java.KoinJavaComponent
|
import org.koin.java.KoinJavaComponent
|
||||||
|
|
||||||
@Composable
|
@Composable
|
||||||
@@ -32,8 +37,15 @@ fun AppNavigationHost(
|
|||||||
windowSize: WindowSizeClass,
|
windowSize: WindowSizeClass,
|
||||||
preferences: AppPreferences = KoinJavaComponent.get(AppPreferences::class.java)
|
preferences: AppPreferences = KoinJavaComponent.get(AppPreferences::class.java)
|
||||||
) {
|
) {
|
||||||
NavHost(navController = appNavController, startDestination = startDestination) {
|
NavHost(
|
||||||
composable(AppNavItem.MainView.route) {
|
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(
|
HomeScreen(
|
||||||
appNavController = appNavController,
|
appNavController = appNavController,
|
||||||
mainNavStartRoute = mainNavStartRoute,
|
mainNavStartRoute = mainNavStartRoute,
|
||||||
@@ -41,7 +53,7 @@ fun AppNavigationHost(
|
|||||||
)
|
)
|
||||||
}
|
}
|
||||||
composable(
|
composable(
|
||||||
AppNavItem.DetailView.route.plus("/{${NavConstants.TYPE_KEY}}/{${NavConstants.ID_KEY}}"),
|
route = AppNavItem.DetailView.route.plus("/{${NavConstants.TYPE_KEY}}/{${NavConstants.ID_KEY}}"),
|
||||||
arguments = listOf(
|
arguments = listOf(
|
||||||
navArgument(NavConstants.ID_KEY) { type = NavType.IntType },
|
navArgument(NavConstants.ID_KEY) { type = NavType.IntType },
|
||||||
navArgument(NavConstants.TYPE_KEY) { type = NavType.EnumType(MediaViewType::class.java) }
|
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.content.Intent
|
||||||
import android.net.Uri
|
import android.net.Uri
|
||||||
import android.provider.Settings
|
import android.provider.Settings
|
||||||
import androidx.compose.animation.rememberSplineBasedDecay
|
|
||||||
import androidx.compose.foundation.clickable
|
import androidx.compose.foundation.clickable
|
||||||
import androidx.compose.foundation.layout.Arrangement
|
import androidx.compose.foundation.layout.Arrangement
|
||||||
import androidx.compose.foundation.layout.Box
|
import androidx.compose.foundation.layout.Box
|
||||||
@@ -32,7 +31,7 @@ import androidx.compose.material3.MaterialTheme
|
|||||||
import androidx.compose.material3.Scaffold
|
import androidx.compose.material3.Scaffold
|
||||||
import androidx.compose.material3.Text
|
import androidx.compose.material3.Text
|
||||||
import androidx.compose.material3.TopAppBarDefaults
|
import androidx.compose.material3.TopAppBarDefaults
|
||||||
import androidx.compose.material3.rememberTopAppBarScrollState
|
import androidx.compose.material3.rememberTopAppBarState
|
||||||
import androidx.compose.runtime.Composable
|
import androidx.compose.runtime.Composable
|
||||||
import androidx.compose.runtime.getValue
|
import androidx.compose.runtime.getValue
|
||||||
import androidx.compose.runtime.mutableStateOf
|
import androidx.compose.runtime.mutableStateOf
|
||||||
@@ -67,11 +66,9 @@ fun AboutScreen(
|
|||||||
|
|
||||||
val context = LocalContext.current
|
val context = LocalContext.current
|
||||||
|
|
||||||
val decayAnimationSpec = rememberSplineBasedDecay<Float>()
|
val topAppBarScrollState = rememberTopAppBarState()
|
||||||
val topAppBarScrollState = rememberTopAppBarScrollState()
|
val scrollBehavior = TopAppBarDefaults.exitUntilCollapsedScrollBehavior(topAppBarScrollState)
|
||||||
val scrollBehavior = remember(decayAnimationSpec) {
|
|
||||||
TopAppBarDefaults.exitUntilCollapsedScrollBehavior(decayAnimationSpec, topAppBarScrollState)
|
|
||||||
}
|
|
||||||
Scaffold(
|
Scaffold(
|
||||||
modifier = Modifier.nestedScroll(connection = scrollBehavior.nestedScrollConnection),
|
modifier = Modifier.nestedScroll(connection = scrollBehavior.nestedScrollConnection),
|
||||||
topBar = {
|
topBar = {
|
||||||
@@ -216,7 +213,10 @@ private fun ColumnScope.AttributionSection() {
|
|||||||
.clip(RoundedCornerShape(10.dp))
|
.clip(RoundedCornerShape(10.dp))
|
||||||
.clickable(
|
.clickable(
|
||||||
onClick = {
|
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)
|
context.startActivity(intent)
|
||||||
}
|
}
|
||||||
)
|
)
|
||||||
|
|||||||
@@ -1,6 +1,5 @@
|
|||||||
package com.owenlejeune.tvtime.ui.screens
|
package com.owenlejeune.tvtime.ui.screens
|
||||||
|
|
||||||
import androidx.compose.animation.rememberSplineBasedDecay
|
|
||||||
import androidx.compose.foundation.layout.*
|
import androidx.compose.foundation.layout.*
|
||||||
import androidx.compose.foundation.lazy.LazyColumn
|
import androidx.compose.foundation.lazy.LazyColumn
|
||||||
import androidx.compose.material.icons.Icons
|
import androidx.compose.material.icons.Icons
|
||||||
@@ -63,11 +62,9 @@ fun AccountScreen(
|
|||||||
val currentSessionState = remember { SessionManager.currentSession }
|
val currentSessionState = remember { SessionManager.currentSession }
|
||||||
val currentSession = currentSessionState.value
|
val currentSession = currentSessionState.value
|
||||||
|
|
||||||
val decayAnimationSpec = rememberSplineBasedDecay<Float>()
|
val topAppBarScrollState = rememberTopAppBarState()
|
||||||
val topAppBarScrollState = rememberTopAppBarScrollState()
|
val scrollBehavior = TopAppBarDefaults.exitUntilCollapsedScrollBehavior(topAppBarScrollState)
|
||||||
val scrollBehavior = remember(decayAnimationSpec) {
|
|
||||||
TopAppBarDefaults.exitUntilCollapsedScrollBehavior(decayAnimationSpec, topAppBarScrollState)
|
|
||||||
}
|
|
||||||
Scaffold(
|
Scaffold(
|
||||||
modifier = Modifier.nestedScroll(scrollBehavior.nestedScrollConnection),
|
modifier = Modifier.nestedScroll(scrollBehavior.nestedScrollConnection),
|
||||||
topBar = {
|
topBar = {
|
||||||
|
|||||||
@@ -2,17 +2,14 @@ package com.owenlejeune.tvtime.ui.screens
|
|||||||
|
|
||||||
import android.app.Activity
|
import android.app.Activity
|
||||||
import androidx.activity.compose.BackHandler
|
import androidx.activity.compose.BackHandler
|
||||||
import androidx.compose.animation.rememberSplineBasedDecay
|
|
||||||
import androidx.compose.foundation.layout.Box
|
import androidx.compose.foundation.layout.Box
|
||||||
import androidx.compose.foundation.layout.Column
|
import androidx.compose.foundation.layout.Column
|
||||||
import androidx.compose.foundation.layout.Row
|
import androidx.compose.foundation.layout.Row
|
||||||
import androidx.compose.foundation.layout.RowScope
|
|
||||||
import androidx.compose.foundation.layout.Spacer
|
import androidx.compose.foundation.layout.Spacer
|
||||||
import androidx.compose.foundation.layout.fillMaxSize
|
import androidx.compose.foundation.layout.fillMaxSize
|
||||||
import androidx.compose.foundation.layout.height
|
import androidx.compose.foundation.layout.height
|
||||||
import androidx.compose.foundation.layout.padding
|
import androidx.compose.foundation.layout.padding
|
||||||
import androidx.compose.foundation.shape.RoundedCornerShape
|
import androidx.compose.foundation.shape.RoundedCornerShape
|
||||||
import androidx.compose.material.NavigationRailDefaults
|
|
||||||
import androidx.compose.material.Scaffold
|
import androidx.compose.material.Scaffold
|
||||||
import androidx.compose.material3.ExperimentalMaterial3Api
|
import androidx.compose.material3.ExperimentalMaterial3Api
|
||||||
import androidx.compose.material3.Icon
|
import androidx.compose.material3.Icon
|
||||||
@@ -27,9 +24,8 @@ import androidx.compose.material3.NavigationRailItemDefaults
|
|||||||
import androidx.compose.material3.Text
|
import androidx.compose.material3.Text
|
||||||
import androidx.compose.material3.TopAppBarDefaults
|
import androidx.compose.material3.TopAppBarDefaults
|
||||||
import androidx.compose.material3.TopAppBarScrollBehavior
|
import androidx.compose.material3.TopAppBarScrollBehavior
|
||||||
import androidx.compose.material3.rememberTopAppBarScrollState
|
import androidx.compose.material3.rememberTopAppBarState
|
||||||
import androidx.compose.runtime.Composable
|
import androidx.compose.runtime.Composable
|
||||||
import androidx.compose.runtime.MutableState
|
|
||||||
import androidx.compose.runtime.getValue
|
import androidx.compose.runtime.getValue
|
||||||
import androidx.compose.runtime.mutableStateOf
|
import androidx.compose.runtime.mutableStateOf
|
||||||
import androidx.compose.runtime.remember
|
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.AccountIcon
|
||||||
import com.owenlejeune.tvtime.ui.components.ProfileMenuContainer
|
import com.owenlejeune.tvtime.ui.components.ProfileMenuContainer
|
||||||
import com.owenlejeune.tvtime.ui.components.ProfileMenuDefaults
|
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.HomeScreenNavHost
|
||||||
|
import com.owenlejeune.tvtime.ui.navigation.HomeScreenNavItem
|
||||||
import com.owenlejeune.tvtime.ui.viewmodel.HomeScreenViewModel
|
import com.owenlejeune.tvtime.ui.viewmodel.HomeScreenViewModel
|
||||||
import org.koin.java.KoinJavaComponent
|
import org.koin.java.KoinJavaComponent
|
||||||
|
|
||||||
@@ -64,11 +60,8 @@ fun HomeScreen(
|
|||||||
) {
|
) {
|
||||||
val navController = rememberNavController()
|
val navController = rememberNavController()
|
||||||
|
|
||||||
val decayAnimationSpec = rememberSplineBasedDecay<Float>()
|
val topAppBarScrollState = rememberTopAppBarState()
|
||||||
val topAppBarScrollState = rememberTopAppBarScrollState()
|
val scrollBehavior = TopAppBarDefaults.exitUntilCollapsedScrollBehavior(topAppBarScrollState)
|
||||||
val scrollBehavior = remember(decayAnimationSpec) {
|
|
||||||
TopAppBarDefaults.exitUntilCollapsedScrollBehavior(decayAnimationSpec, topAppBarScrollState)
|
|
||||||
}
|
|
||||||
|
|
||||||
val homeScreenViewModel = viewModel<HomeScreenViewModel>()
|
val homeScreenViewModel = viewModel<HomeScreenViewModel>()
|
||||||
|
|
||||||
@@ -123,6 +116,7 @@ fun HomeScreen(
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@OptIn(ExperimentalMaterial3Api::class)
|
||||||
@Composable
|
@Composable
|
||||||
private fun TopBar(
|
private fun TopBar(
|
||||||
scrollBehavior: TopAppBarScrollBehavior,
|
scrollBehavior: TopAppBarScrollBehavior,
|
||||||
@@ -179,6 +173,7 @@ private fun BottomNavBar(
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@OptIn(ExperimentalMaterial3Api::class)
|
||||||
@Composable
|
@Composable
|
||||||
private fun MainContent(
|
private fun MainContent(
|
||||||
windowSize: WindowSizeClass,
|
windowSize: WindowSizeClass,
|
||||||
@@ -218,6 +213,7 @@ private fun SingleColumnMainContent(
|
|||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@OptIn(ExperimentalMaterial3Api::class)
|
||||||
@Composable
|
@Composable
|
||||||
private fun DualColumnMainContent(
|
private fun DualColumnMainContent(
|
||||||
appNavController: NavHostController,
|
appNavController: NavHostController,
|
||||||
|
|||||||
@@ -1,10 +1,7 @@
|
|||||||
package com.owenlejeune.tvtime.ui.screens
|
package com.owenlejeune.tvtime.ui.screens
|
||||||
import android.accounts.Account
|
|
||||||
import android.content.Context
|
import android.content.Context
|
||||||
import android.content.Intent
|
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.*
|
||||||
import androidx.compose.foundation.layout.*
|
import androidx.compose.foundation.layout.*
|
||||||
import androidx.compose.foundation.selection.selectable
|
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.ExperimentalMaterialApi
|
||||||
import androidx.compose.material.icons.Icons
|
import androidx.compose.material.icons.Icons
|
||||||
import androidx.compose.material.icons.filled.ArrowBack
|
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.Delete
|
||||||
import androidx.compose.material.icons.filled.Favorite
|
|
||||||
import androidx.compose.material.icons.filled.Star
|
|
||||||
import androidx.compose.material3.*
|
import androidx.compose.material3.*
|
||||||
import androidx.compose.runtime.*
|
import androidx.compose.runtime.*
|
||||||
import androidx.compose.ui.Alignment
|
import androidx.compose.ui.Alignment
|
||||||
@@ -41,32 +34,22 @@ import androidx.navigation.NavController
|
|||||||
import coil.compose.AsyncImage
|
import coil.compose.AsyncImage
|
||||||
import com.google.accompanist.systemuicontroller.rememberSystemUiController
|
import com.google.accompanist.systemuicontroller.rememberSystemUiController
|
||||||
import com.owenlejeune.tvtime.R
|
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.ListV4Service
|
||||||
import com.owenlejeune.tvtime.api.tmdb.api.v4.model.*
|
import com.owenlejeune.tvtime.api.tmdb.api.v4.model.*
|
||||||
import com.owenlejeune.tvtime.extensions.WindowSizeClass
|
import com.owenlejeune.tvtime.extensions.WindowSizeClass
|
||||||
import com.owenlejeune.tvtime.extensions.unlessEmpty
|
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.Actions
|
||||||
import com.owenlejeune.tvtime.ui.components.ActionsView
|
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.RatingView
|
||||||
import com.owenlejeune.tvtime.ui.components.Spinner
|
import com.owenlejeune.tvtime.ui.components.Spinner
|
||||||
import com.owenlejeune.tvtime.ui.components.SwitchPreference
|
import com.owenlejeune.tvtime.ui.components.SwitchPreference
|
||||||
import com.owenlejeune.tvtime.ui.navigation.AppNavItem
|
import com.owenlejeune.tvtime.ui.navigation.AppNavItem
|
||||||
import com.owenlejeune.tvtime.ui.theme.*
|
import com.owenlejeune.tvtime.ui.theme.*
|
||||||
import com.owenlejeune.tvtime.ui.viewmodel.AccountViewModel
|
import com.owenlejeune.tvtime.ui.viewmodel.AccountViewModel
|
||||||
import com.owenlejeune.tvtime.utils.SessionManager
|
|
||||||
import com.owenlejeune.tvtime.utils.TmdbUtils
|
import com.owenlejeune.tvtime.utils.TmdbUtils
|
||||||
import com.owenlejeune.tvtime.utils.types.MediaViewType
|
|
||||||
import de.charlex.compose.RevealDirection
|
import de.charlex.compose.RevealDirection
|
||||||
import de.charlex.compose.RevealSwipe
|
import de.charlex.compose.RevealSwipe
|
||||||
import kotlinx.coroutines.CoroutineScope
|
|
||||||
import kotlinx.coroutines.Dispatchers
|
|
||||||
import kotlinx.coroutines.launch
|
import kotlinx.coroutines.launch
|
||||||
import kotlinx.coroutines.withContext
|
|
||||||
import org.koin.java.KoinJavaComponent
|
import org.koin.java.KoinJavaComponent
|
||||||
import kotlin.math.roundToInt
|
import kotlin.math.roundToInt
|
||||||
|
|
||||||
@@ -90,19 +73,16 @@ fun ListDetailScreen(
|
|||||||
val listMap = remember { accountViewModel.listMap }
|
val listMap = remember { accountViewModel.listMap }
|
||||||
val parentList = listMap[itemId]
|
val parentList = listMap[itemId]
|
||||||
|
|
||||||
val decayAnimationSpec = rememberSplineBasedDecay<Float>()
|
val topAppBarScrollState = rememberTopAppBarState()
|
||||||
val topAppBarScrollState = rememberTopAppBarScrollState()
|
val scrollBehavior = TopAppBarDefaults.pinnedScrollBehavior(topAppBarScrollState)
|
||||||
val scrollBehavior = remember(decayAnimationSpec) {
|
|
||||||
TopAppBarDefaults.pinnedScrollBehavior(topAppBarScrollState)
|
|
||||||
}
|
|
||||||
|
|
||||||
Scaffold(
|
Scaffold(
|
||||||
modifier = Modifier.nestedScroll(scrollBehavior.nestedScrollConnection),
|
modifier = Modifier.nestedScroll(scrollBehavior.nestedScrollConnection),
|
||||||
topBar = {
|
topBar = {
|
||||||
SmallTopAppBar(
|
TopAppBar(
|
||||||
scrollBehavior = scrollBehavior,
|
scrollBehavior = scrollBehavior,
|
||||||
colors = TopAppBarDefaults
|
colors = TopAppBarDefaults
|
||||||
.smallTopAppBarColors(
|
.topAppBarColors(
|
||||||
scrolledContainerColor = MaterialTheme.colorScheme.background,
|
scrolledContainerColor = MaterialTheme.colorScheme.background,
|
||||||
titleContentColor = MaterialTheme.colorScheme.primary
|
titleContentColor = MaterialTheme.colorScheme.primary
|
||||||
),
|
),
|
||||||
|
|||||||
@@ -81,11 +81,8 @@ fun MediaDetailScreen(
|
|||||||
val imagesMap = remember { mainViewModel.produceImagesFor(type) }
|
val imagesMap = remember { mainViewModel.produceImagesFor(type) }
|
||||||
val images = imagesMap[itemId]
|
val images = imagesMap[itemId]
|
||||||
|
|
||||||
val decayAnimationSpec = rememberSplineBasedDecay<Float>()
|
val topAppBarScrollState = rememberTopAppBarState()
|
||||||
val topAppBarScrollState = rememberTopAppBarScrollState()
|
val scrollBehavior = TopAppBarDefaults.pinnedScrollBehavior(topAppBarScrollState)
|
||||||
val scrollBehavior = remember(decayAnimationSpec) {
|
|
||||||
TopAppBarDefaults.pinnedScrollBehavior(topAppBarScrollState)
|
|
||||||
}
|
|
||||||
|
|
||||||
val pagerState = rememberPagerState(initialPage = 0)
|
val pagerState = rememberPagerState(initialPage = 0)
|
||||||
|
|
||||||
@@ -96,10 +93,10 @@ fun MediaDetailScreen(
|
|||||||
Scaffold(
|
Scaffold(
|
||||||
modifier = Modifier.nestedScroll(scrollBehavior.nestedScrollConnection),
|
modifier = Modifier.nestedScroll(scrollBehavior.nestedScrollConnection),
|
||||||
topBar = {
|
topBar = {
|
||||||
SmallTopAppBar(
|
TopAppBar(
|
||||||
scrollBehavior = scrollBehavior,
|
scrollBehavior = scrollBehavior,
|
||||||
colors = TopAppBarDefaults
|
colors = TopAppBarDefaults
|
||||||
.smallTopAppBarColors(
|
.topAppBarColors(
|
||||||
scrolledContainerColor = MaterialTheme.colorScheme.background,
|
scrolledContainerColor = MaterialTheme.colorScheme.background,
|
||||||
titleContentColor = MaterialTheme.colorScheme.primary
|
titleContentColor = MaterialTheme.colorScheme.primary
|
||||||
),
|
),
|
||||||
|
|||||||
@@ -1,6 +1,5 @@
|
|||||||
package com.owenlejeune.tvtime.ui.screens
|
package com.owenlejeune.tvtime.ui.screens
|
||||||
|
|
||||||
import androidx.compose.animation.rememberSplineBasedDecay
|
|
||||||
import androidx.compose.foundation.background
|
import androidx.compose.foundation.background
|
||||||
import androidx.compose.foundation.layout.Arrangement
|
import androidx.compose.foundation.layout.Arrangement
|
||||||
import androidx.compose.foundation.layout.Box
|
import androidx.compose.foundation.layout.Box
|
||||||
@@ -19,14 +18,13 @@ import androidx.compose.material3.Icon
|
|||||||
import androidx.compose.material3.IconButton
|
import androidx.compose.material3.IconButton
|
||||||
import androidx.compose.material3.MaterialTheme
|
import androidx.compose.material3.MaterialTheme
|
||||||
import androidx.compose.material3.Scaffold
|
import androidx.compose.material3.Scaffold
|
||||||
import androidx.compose.material3.SmallTopAppBar
|
|
||||||
import androidx.compose.material3.Text
|
import androidx.compose.material3.Text
|
||||||
|
import androidx.compose.material3.TopAppBar
|
||||||
import androidx.compose.material3.TopAppBarDefaults
|
import androidx.compose.material3.TopAppBarDefaults
|
||||||
import androidx.compose.material3.rememberTopAppBarScrollState
|
import androidx.compose.material3.rememberTopAppBarState
|
||||||
import androidx.compose.runtime.Composable
|
import androidx.compose.runtime.Composable
|
||||||
import androidx.compose.runtime.LaunchedEffect
|
import androidx.compose.runtime.LaunchedEffect
|
||||||
import androidx.compose.runtime.remember
|
import androidx.compose.runtime.remember
|
||||||
import androidx.compose.runtime.rememberCoroutineScope
|
|
||||||
import androidx.compose.ui.Modifier
|
import androidx.compose.ui.Modifier
|
||||||
import androidx.compose.ui.input.nestedscroll.nestedScroll
|
import androidx.compose.ui.input.nestedscroll.nestedScroll
|
||||||
import androidx.compose.ui.res.stringResource
|
import androidx.compose.ui.res.stringResource
|
||||||
@@ -58,6 +56,7 @@ fun PersonDetailScreen(
|
|||||||
LaunchedEffect(Unit) {
|
LaunchedEffect(Unit) {
|
||||||
mainViewModel.getById(personId, MediaViewType.PERSON)
|
mainViewModel.getById(personId, MediaViewType.PERSON)
|
||||||
mainViewModel.getExternalIds(personId, MediaViewType.PERSON)
|
mainViewModel.getExternalIds(personId, MediaViewType.PERSON)
|
||||||
|
mainViewModel.getCastAndCrew(personId, MediaViewType.PERSON)
|
||||||
}
|
}
|
||||||
|
|
||||||
val systemUiController = rememberSystemUiController()
|
val systemUiController = rememberSystemUiController()
|
||||||
@@ -67,19 +66,16 @@ fun PersonDetailScreen(
|
|||||||
val peopleMap = remember { mainViewModel.peopleMap }
|
val peopleMap = remember { mainViewModel.peopleMap }
|
||||||
val person = peopleMap[personId]
|
val person = peopleMap[personId]
|
||||||
|
|
||||||
val decayAnimationSpec = rememberSplineBasedDecay<Float>()
|
val topAppBarScrollState = rememberTopAppBarState()
|
||||||
val topAppBarScrollState = rememberTopAppBarScrollState()
|
val scrollBehavior = TopAppBarDefaults.pinnedScrollBehavior(topAppBarScrollState)
|
||||||
val scrollBehaviour = remember(decayAnimationSpec) {
|
|
||||||
TopAppBarDefaults.pinnedScrollBehavior(topAppBarScrollState)
|
|
||||||
}
|
|
||||||
|
|
||||||
Scaffold(
|
Scaffold(
|
||||||
modifier = Modifier.nestedScroll(scrollBehaviour.nestedScrollConnection),
|
modifier = Modifier.nestedScroll(scrollBehavior.nestedScrollConnection),
|
||||||
topBar = {
|
topBar = {
|
||||||
SmallTopAppBar(
|
TopAppBar(
|
||||||
scrollBehavior = scrollBehaviour,
|
scrollBehavior = scrollBehavior,
|
||||||
colors = TopAppBarDefaults
|
colors = TopAppBarDefaults
|
||||||
.smallTopAppBarColors(
|
.topAppBarColors(
|
||||||
scrolledContainerColor = MaterialTheme.colorScheme.background,
|
scrolledContainerColor = MaterialTheme.colorScheme.background,
|
||||||
titleContentColor = MaterialTheme.colorScheme.primary
|
titleContentColor = MaterialTheme.colorScheme.primary
|
||||||
),
|
),
|
||||||
@@ -96,8 +92,6 @@ fun PersonDetailScreen(
|
|||||||
)
|
)
|
||||||
}
|
}
|
||||||
) { innerPadding ->
|
) { innerPadding ->
|
||||||
val scope = rememberCoroutineScope()
|
|
||||||
|
|
||||||
Box(modifier = Modifier.padding(innerPadding)) {
|
Box(modifier = Modifier.padding(innerPadding)) {
|
||||||
Column(
|
Column(
|
||||||
modifier = Modifier
|
modifier = Modifier
|
||||||
|
|||||||
@@ -23,22 +23,17 @@ import androidx.paging.compose.collectAsLazyPagingItems
|
|||||||
import com.google.accompanist.systemuicontroller.rememberSystemUiController
|
import com.google.accompanist.systemuicontroller.rememberSystemUiController
|
||||||
import com.owenlejeune.tvtime.R
|
import com.owenlejeune.tvtime.R
|
||||||
import com.owenlejeune.tvtime.api.tmdb.api.v3.MoviesService
|
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.TvService
|
||||||
import com.owenlejeune.tvtime.api.tmdb.api.v3.model.*
|
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.components.MediaResultCard
|
||||||
import com.owenlejeune.tvtime.ui.viewmodel.MainViewModel
|
import com.owenlejeune.tvtime.ui.viewmodel.MainViewModel
|
||||||
import com.owenlejeune.tvtime.ui.viewmodel.SearchViewModel
|
import com.owenlejeune.tvtime.ui.viewmodel.SearchViewModel
|
||||||
import com.owenlejeune.tvtime.utils.TmdbUtils
|
import com.owenlejeune.tvtime.utils.TmdbUtils
|
||||||
import com.owenlejeune.tvtime.utils.types.MediaViewType
|
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 org.koin.java.KoinJavaComponent.get
|
||||||
import com.owenlejeune.tvtime.extensions.lazyPagingItems
|
|
||||||
|
|
||||||
|
@OptIn(ExperimentalMaterial3Api::class)
|
||||||
@Composable
|
@Composable
|
||||||
fun SearchScreen(
|
fun SearchScreen(
|
||||||
appNavController: NavHostController,
|
appNavController: NavHostController,
|
||||||
@@ -67,14 +62,15 @@ fun SearchScreen(
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
SmallTopAppBar(
|
TopAppBar(
|
||||||
title = {
|
title = {
|
||||||
TextField(
|
TextField(
|
||||||
value = searchValue.value,
|
value = searchValue.value,
|
||||||
onValueChange = { searchValue.value = it },
|
onValueChange = { searchValue.value = it },
|
||||||
placeholder = { Text(text = stringResource(id = R.string.search_placeholder, title)) },
|
placeholder = { Text(text = stringResource(id = R.string.search_placeholder, title)) },
|
||||||
colors = TextFieldDefaults.textFieldColors(
|
colors = TextFieldDefaults.colors(
|
||||||
containerColor = MaterialTheme.colorScheme.surface,
|
focusedContainerColor = MaterialTheme.colorScheme.surface,
|
||||||
|
unfocusedContainerColor = MaterialTheme.colorScheme.surface,
|
||||||
focusedIndicatorColor = MaterialTheme.colorScheme.surface,
|
focusedIndicatorColor = MaterialTheme.colorScheme.surface,
|
||||||
unfocusedIndicatorColor = MaterialTheme.colorScheme.surface
|
unfocusedIndicatorColor = MaterialTheme.colorScheme.surface
|
||||||
),
|
),
|
||||||
|
|||||||
@@ -3,7 +3,6 @@ package com.owenlejeune.tvtime.ui.screens
|
|||||||
import android.os.Build
|
import android.os.Build
|
||||||
import android.widget.Toast
|
import android.widget.Toast
|
||||||
import androidx.appcompat.app.AppCompatActivity
|
import androidx.appcompat.app.AppCompatActivity
|
||||||
import androidx.compose.animation.rememberSplineBasedDecay
|
|
||||||
import androidx.compose.foundation.border
|
import androidx.compose.foundation.border
|
||||||
import androidx.compose.foundation.clickable
|
import androidx.compose.foundation.clickable
|
||||||
import androidx.compose.foundation.layout.*
|
import androidx.compose.foundation.layout.*
|
||||||
@@ -61,11 +60,8 @@ fun SettingsScreen(
|
|||||||
systemUiController.setStatusBarColor(color = MaterialTheme.colorScheme.background)
|
systemUiController.setStatusBarColor(color = MaterialTheme.colorScheme.background)
|
||||||
systemUiController.setNavigationBarColor(color = MaterialTheme.colorScheme.background)
|
systemUiController.setNavigationBarColor(color = MaterialTheme.colorScheme.background)
|
||||||
|
|
||||||
val decayAnimationSpec = rememberSplineBasedDecay<Float>()
|
val topAppBarScrollState = rememberTopAppBarState()
|
||||||
val topAppBarScrollState = rememberTopAppBarScrollState()
|
val scrollBehavior = TopAppBarDefaults.exitUntilCollapsedScrollBehavior(topAppBarScrollState)
|
||||||
val scrollBehavior = remember(decayAnimationSpec) {
|
|
||||||
TopAppBarDefaults.exitUntilCollapsedScrollBehavior(decayAnimationSpec, topAppBarScrollState)
|
|
||||||
}
|
|
||||||
|
|
||||||
val appBarTitle = remember { mutableStateOf("") }
|
val appBarTitle = remember { mutableStateOf("") }
|
||||||
val defaultRestoreAction = ::resetAllPreferences
|
val defaultRestoreAction = ::resetAllPreferences
|
||||||
|
|||||||
@@ -199,7 +199,7 @@ class MainViewModel: ViewModel(), KoinComponent {
|
|||||||
when (type) {
|
when (type) {
|
||||||
MediaViewType.MOVIE -> movieService.getCastAndCrew(id)
|
MediaViewType.MOVIE -> movieService.getCastAndCrew(id)
|
||||||
MediaViewType.TV -> tvService.getCastAndCrew(id)
|
MediaViewType.TV -> tvService.getCastAndCrew(id)
|
||||||
MediaViewType.PERSON -> tvService.getCastAndCrew(id)
|
MediaViewType.PERSON -> peopleService.getCredits(id)
|
||||||
else -> {}
|
else -> {}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
buildscript {
|
buildscript {
|
||||||
def gradle = "7.1.2"
|
def gradle = "8.0.2"
|
||||||
def kotlin = "1.6.21"
|
def kotlin = "1.8.21"
|
||||||
repositories {
|
repositories {
|
||||||
google()
|
google()
|
||||||
mavenCentral()
|
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
|
#Tue Feb 08 23:49:04 EST 2022
|
||||||
distributionBase=GRADLE_USER_HOME
|
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
|
distributionPath=wrapper/dists
|
||||||
zipStorePath=wrapper/dists
|
zipStorePath=wrapper/dists
|
||||||
zipStoreBase=GRADLE_USER_HOME
|
zipStoreBase=GRADLE_USER_HOME
|
||||||
|
|||||||
Reference in New Issue
Block a user