Skip to content

Commit

Permalink
switch between anime and manga
Browse files Browse the repository at this point in the history
  • Loading branch information
DatL4g committed May 4, 2024
1 parent e92e6ae commit fdbf9f0
Show file tree
Hide file tree
Showing 8 changed files with 99 additions and 33 deletions.
1 change: 0 additions & 1 deletion anilist/src/commonMain/graphql/AiringQuery.graphql
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,6 @@ query AiringQuery(
Page(page: $page, perPage: $perPage) {
airingSchedules(sort: $sort, airingAt_greater: $airingAtGreater) {
airingAt,
timeUntilAiring,
episode,
media {
id,
Expand Down
Original file line number Diff line number Diff line change
@@ -1,9 +1,13 @@
package dev.datlag.aniflow.other

import androidx.compose.ui.graphics.Color
import com.mayakapps.kache.InMemoryKache
import com.mayakapps.kache.KacheStrategy
import dev.datlag.aniflow.anilist.*
import dev.datlag.aniflow.anilist.state.SeasonState
import dev.datlag.aniflow.settings.model.AppSettings
import dev.datlag.tooling.async.scopeCatching
import dev.datlag.tooling.async.suspendCatching
import dev.datlag.tooling.compose.ioDispatcher
import kotlinx.coroutines.delay
import kotlinx.coroutines.flow.*
Expand All @@ -20,8 +24,13 @@ data object StateSaver {
var homeOverview: Int = 0
var homeOverviewOffset: Int = 0

var mediaOverview: Int = 0
var mediaOverviewOffset: Int = 0
private val mediumOverview = mutableMapOf<Int, Pair<Int, Int>>()

fun mediumOverview(id: Int): Pair<Int, Int> = mediumOverview.getOrElse(id) { 0 to 0 }

fun mediumOverview(id: Int, index: Int, offset: Int) {
mediumOverview[id] = index to offset
}

var settingsOverview: Int = 0
var settingsOverviewOffset: Int = 0
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@ import dev.datlag.aniflow.anilist.PopularSeasonRepository
import dev.datlag.aniflow.anilist.TrendingRepository
import dev.datlag.aniflow.anilist.model.Medium
import dev.datlag.aniflow.anilist.state.SeasonState
import dev.datlag.aniflow.anilist.type.MediaType
import dev.datlag.aniflow.settings.model.AppSettings
import dev.datlag.aniflow.trace.TraceStateMachine
import dev.datlag.aniflow.ui.navigation.Component
Expand All @@ -18,6 +19,7 @@ import kotlinx.coroutines.flow.StateFlow
import dev.datlag.aniflow.settings.model.TitleLanguage as SettingsTitle

interface HomeComponent : ContentHolderComponent {
val viewing: Value<MediaType>
val titleLanguage: Flow<SettingsTitle?>

val airingState: Flow<AiringTodayRepository.State>
Expand All @@ -29,4 +31,6 @@ interface HomeComponent : ContentHolderComponent {

fun details(medium: Medium)
fun trace(channel: ByteArray)
fun viewAnime()
fun viewManga()
}
Original file line number Diff line number Diff line change
Expand Up @@ -9,8 +9,11 @@ import androidx.compose.foundation.lazy.LazyColumn
import androidx.compose.foundation.lazy.rememberLazyListState
import androidx.compose.foundation.shape.CircleShape
import androidx.compose.material.icons.Icons
import androidx.compose.material.icons.automirrored.filled.MenuBook
import androidx.compose.material.icons.filled.Camera
import androidx.compose.material.icons.filled.CameraEnhance
import androidx.compose.material.icons.filled.MenuBook
import androidx.compose.material.icons.filled.PlayCircleFilled
import androidx.compose.material3.*
import androidx.compose.material3.windowsizeclass.ExperimentalMaterial3WindowSizeClassApi
import androidx.compose.material3.windowsizeclass.WindowWidthSizeClass
Expand All @@ -19,6 +22,7 @@ import androidx.compose.runtime.*
import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier
import androidx.compose.ui.draw.clip
import androidx.compose.ui.graphics.Color
import androidx.compose.ui.text.font.FontWeight
import androidx.compose.ui.unit.dp
import com.arkivanov.decompose.extensions.compose.subscribeAsState
Expand All @@ -33,6 +37,7 @@ import dev.chrisbanes.haze.haze
import dev.datlag.aniflow.LocalHaze
import dev.datlag.aniflow.LocalPaddingValues
import dev.datlag.aniflow.SharedRes
import dev.datlag.aniflow.anilist.type.MediaType
import dev.datlag.aniflow.common.asMedium
import dev.datlag.aniflow.common.isScrollingUp
import dev.datlag.aniflow.common.plus
Expand Down Expand Up @@ -141,6 +146,54 @@ private fun MainView(component: HomeComponent, modifier: Modifier = Modifier) {
contentPadding = LocalPaddingValues.current?.plus(padding) ?: padding,
verticalArrangement = Arrangement.spacedBy(8.dp)
) {
item {
val type by component.viewing.subscribeAsState()
val isManga = remember(type) {
type == MediaType.MANGA
}

Box(
modifier = Modifier.fillParentMaxWidth().height(200.dp),
contentAlignment = Alignment.BottomEnd
) {
Row(
modifier = Modifier.padding(16.dp).background(Color.Black.copy(alpha = 0.3F), CircleShape),
verticalAlignment = Alignment.CenterVertically,
horizontalArrangement = Arrangement.SpaceAround
) {
IconButton(
onClick = {
component.viewAnime()
}
) {
Icon(
imageVector = Icons.Default.PlayCircleFilled,
contentDescription = null,
tint = if (isManga) {
LocalContentColor.current
} else {
MaterialTheme.colorScheme.primary
}
)
}
IconButton(
onClick = {
component.viewManga()
}
) {
Icon(
imageVector = Icons.AutoMirrored.Filled.MenuBook,
contentDescription = null,
tint = if (isManga) {
MaterialTheme.colorScheme.primary
} else {
LocalContentColor.current
}
)
}
}
}
}
item {
Text(
modifier = Modifier.padding(horizontal = 16.dp),
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,11 +4,14 @@ import androidx.compose.runtime.Composable
import androidx.compose.runtime.getValue
import com.arkivanov.decompose.ComponentContext
import com.arkivanov.decompose.router.slot.*
import com.arkivanov.decompose.value.MutableValue
import com.arkivanov.decompose.value.Value
import com.arkivanov.decompose.value.update
import dev.datlag.aniflow.LocalDI
import dev.datlag.aniflow.anilist.*
import dev.datlag.aniflow.anilist.model.Medium
import dev.datlag.aniflow.anilist.state.SeasonState
import dev.datlag.aniflow.anilist.type.MediaType
import dev.datlag.aniflow.common.onRender
import dev.datlag.aniflow.other.StateSaver
import dev.datlag.aniflow.settings.Settings
Expand Down Expand Up @@ -61,6 +64,8 @@ class HomeScreenComponent(
context = ioDispatcher()
)

override val viewing = MutableValue(MediaType.UNKNOWN__)

@Composable
override fun render() {
onRender {
Expand All @@ -81,4 +86,18 @@ class HomeScreenComponent(
traceStateMachine.dispatch(TraceStateMachine.Action.Load(channel))
}
}

override fun viewAnime() {
viewing.update { MediaType.ANIME }
trendingRepository.viewAnime()
popularSeasonRepository.viewAnime()
popularNextSeasonRepository.viewAnime()
}

override fun viewManga() {
viewing.update { MediaType.MANGA }
trendingRepository.viewManga()
popularSeasonRepository.viewManga()
popularNextSeasonRepository.viewManga()
}
}
Original file line number Diff line number Diff line change
@@ -1,56 +1,33 @@
package dev.datlag.aniflow.ui.navigation.screen.initial.settings

import androidx.compose.foundation.Image
import androidx.compose.foundation.background
import androidx.compose.foundation.layout.*
import androidx.compose.foundation.lazy.LazyColumn
import androidx.compose.foundation.lazy.rememberLazyListState
import androidx.compose.foundation.shape.CircleShape
import androidx.compose.material.icons.Icons
import androidx.compose.material.icons.automirrored.filled.More
import androidx.compose.material.icons.filled.*
import androidx.compose.material.icons.rounded.Title
import androidx.compose.material3.*
import androidx.compose.material3.windowsizeclass.ExperimentalMaterial3WindowSizeClassApi
import androidx.compose.material3.windowsizeclass.WindowWidthSizeClass
import androidx.compose.material3.windowsizeclass.calculateWindowSizeClass
import androidx.compose.runtime.*
import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier
import androidx.compose.ui.draw.clip
import androidx.compose.ui.graphics.Color
import androidx.compose.ui.graphics.ColorFilter
import androidx.compose.ui.graphics.painter.ColorPainter
import androidx.compose.ui.layout.ContentScale
import androidx.compose.ui.platform.LocalUriHandler
import androidx.compose.ui.text.font.FontWeight
import androidx.compose.ui.unit.dp
import coil3.compose.AsyncImage
import coil3.compose.rememberAsyncImagePainter
import com.maxkeppeker.sheets.core.models.base.IconSource
import com.maxkeppeker.sheets.core.models.base.rememberUseCaseState
import com.maxkeppeler.sheets.option.OptionDialog
import com.maxkeppeler.sheets.option.models.DisplayMode
import com.maxkeppeler.sheets.option.models.Option
import com.maxkeppeler.sheets.option.models.OptionConfig
import com.maxkeppeler.sheets.option.models.OptionSelection
import com.mikepenz.markdown.m3.Markdown
import dev.chrisbanes.haze.haze
import dev.datlag.aniflow.LocalHaze
import dev.datlag.aniflow.LocalPaddingValues
import dev.datlag.aniflow.SharedRes
import dev.datlag.aniflow.common.htmlToAnnotatedString
import dev.datlag.aniflow.common.plus
import dev.datlag.aniflow.common.toComposeColor
import dev.datlag.aniflow.common.toComposeString
import dev.datlag.aniflow.other.Constants
import dev.datlag.aniflow.other.StateSaver
import dev.datlag.aniflow.ui.navigation.screen.initial.settings.component.*
import dev.datlag.tooling.compose.onClick
import dev.datlag.tooling.decompose.lifecycle.collectAsStateWithLifecycle
import dev.icerock.moko.resources.compose.painterResource

@OptIn(ExperimentalLayoutApi::class, ExperimentalMaterial3WindowSizeClassApi::class, ExperimentalMaterial3Api::class)
@Composable
fun SettingsScreen(component: SettingsComponent) {
val padding = PaddingValues(16.dp)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -40,6 +40,7 @@ import dev.datlag.aniflow.other.UserHelper
import dev.datlag.aniflow.ui.custom.EditFAB
import dev.datlag.aniflow.ui.navigation.screen.medium.component.*
import dev.datlag.tooling.decompose.lifecycle.collectAsStateWithLifecycle
import kotlinx.coroutines.launch
import org.kodein.di.instance

@OptIn(ExperimentalMaterial3Api::class, ExperimentalHazeMaterialsApi::class, ExperimentalFoundationApi::class)
Expand All @@ -57,9 +58,10 @@ fun MediumScreen(component: MediumComponent) {
val scrollState = TopAppBarDefaults.exitUntilCollapsedScrollBehavior(
state = appBarState
)
val (index, offset) = StateSaver.List.mediumOverview(component.initialMedium.id)
val listState = rememberLazyListState(
initialFirstVisibleItemIndex = StateSaver.List.mediaOverview,
initialFirstVisibleItemScrollOffset = StateSaver.List.mediaOverviewOffset
initialFirstVisibleItemIndex = index,
initialFirstVisibleItemScrollOffset = offset
)

Scaffold(
Expand Down Expand Up @@ -211,8 +213,11 @@ fun MediumScreen(component: MediumComponent) {

DisposableEffect(listState) {
onDispose {
StateSaver.List.mediaOverview = listState.firstVisibleItemIndex
StateSaver.List.mediaOverviewOffset = listState.firstVisibleItemScrollOffset
StateSaver.List.mediumOverview(
id = component.initialMedium.id,
index = listState.firstVisibleItemIndex,
offset = listState.firstVisibleItemScrollOffset
)
}
}
}
Expand Down
6 changes: 3 additions & 3 deletions gradle/libs.versions.toml
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@ app = "1.1.1"
aboutlibraries = "11.1.3"
activity = "1.9.0"
android = "8.2.2"
android-core = "1.13.0"
android-core = "1.13.1"
android-credentials = "1.3.0-alpha02"
apollo = "4.0.0-beta.6"
appcompat = "1.6.1"
Expand All @@ -13,7 +13,7 @@ compose = "1.6.2"
complete-kotlin = "1.1.0"
coroutines = "1.8.0"
crashlytics-plugin = "2.9.9"
datastore = "1.1.0"
datastore = "1.1.1"
datetime = "0.6.0-RC.2"
decompose = "3.0.0"
desugar = "2.0.4"
Expand All @@ -37,7 +37,7 @@ ksp = "1.9.23-1.0.20"
ktor = "2.3.10"
ktorfit = "1.13.0"
markdown-renderer = "0.16.0"
moko-resources = "0.24.0-beta-2"
moko-resources = "0.24.0-beta-3"
multidex = "2.0.1"
napier = "2.7.1"
oidc = "0.9.2"
Expand Down

0 comments on commit fdbf9f0

Please sign in to comment.