Skip to content

Commit

Permalink
Add mood and genres section in home screen
Browse files Browse the repository at this point in the history
  • Loading branch information
z-huang committed Jul 18, 2023
1 parent 452a93e commit ee1895b
Show file tree
Hide file tree
Showing 28 changed files with 353 additions and 265 deletions.
Original file line number Diff line number Diff line change
@@ -0,0 +1,82 @@
package com.zionhuang.music.ui.component

import androidx.annotation.DrawableRes
import androidx.compose.animation.AnimatedVisibility
import androidx.compose.animation.slideInVertically
import androidx.compose.animation.slideOutVertically
import androidx.compose.foundation.ScrollState
import androidx.compose.foundation.layout.BoxScope
import androidx.compose.foundation.layout.WindowInsetsSides
import androidx.compose.foundation.layout.only
import androidx.compose.foundation.layout.padding
import androidx.compose.foundation.layout.windowInsetsPadding
import androidx.compose.foundation.lazy.LazyListState
import androidx.compose.material3.FloatingActionButton
import androidx.compose.material3.Icon
import androidx.compose.runtime.Composable
import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier
import androidx.compose.ui.res.painterResource
import androidx.compose.ui.unit.dp
import com.zionhuang.music.LocalPlayerAwareWindowInsets
import com.zionhuang.music.ui.utils.isScrollingUp

@Composable
fun BoxScope.HideOnScrollFAB(
visible: Boolean = true,
lazyListState: LazyListState,
@DrawableRes icon: Int,
onClick: () -> Unit,
) {
AnimatedVisibility(
visible = visible && lazyListState.isScrollingUp(),
enter = slideInVertically { it },
exit = slideOutVertically { it },
modifier = Modifier
.align(Alignment.BottomEnd)
.windowInsetsPadding(
LocalPlayerAwareWindowInsets.current
.only(WindowInsetsSides.Bottom + WindowInsetsSides.Horizontal)
)
) {
FloatingActionButton(
modifier = Modifier.padding(16.dp),
onClick = onClick
) {
Icon(
painter = painterResource(icon),
contentDescription = null
)
}
}
}

@Composable
fun BoxScope.HideOnScrollFAB(
visible: Boolean = true,
scrollState: ScrollState,
@DrawableRes icon: Int,
onClick: () -> Unit,
) {
AnimatedVisibility(
visible = visible && scrollState.isScrollingUp(),
enter = slideInVertically { it },
exit = slideOutVertically { it },
modifier = Modifier
.align(Alignment.BottomEnd)
.windowInsetsPadding(
LocalPlayerAwareWindowInsets.current
.only(WindowInsetsSides.Bottom + WindowInsetsSides.Horizontal)
)
) {
FloatingActionButton(
modifier = Modifier.padding(16.dp),
onClick = onClick
) {
Icon(
painter = painterResource(icon),
contentDescription = null
)
}
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,47 @@
package com.zionhuang.music.ui.component

import androidx.annotation.DrawableRes
import androidx.compose.foundation.clickable
import androidx.compose.foundation.layout.Arrangement
import androidx.compose.foundation.layout.Column
import androidx.compose.foundation.layout.padding
import androidx.compose.foundation.shape.RoundedCornerShape
import androidx.compose.material3.Icon
import androidx.compose.material3.MaterialTheme
import androidx.compose.material3.Text
import androidx.compose.runtime.Composable
import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier
import androidx.compose.ui.draw.clip
import androidx.compose.ui.res.painterResource
import androidx.compose.ui.text.style.TextOverflow
import androidx.compose.ui.unit.dp

@Composable
fun NavigationTile(
title: String,
@DrawableRes icon: Int,
onClick: () -> Unit,
modifier: Modifier = Modifier,
) {
Column(
horizontalAlignment = Alignment.CenterHorizontally,
verticalArrangement = Arrangement.spacedBy(4.dp),
modifier = modifier
.clip(RoundedCornerShape(4.dp))
.clickable(onClick = onClick)
.padding(4.dp),
) {
Icon(
painter = painterResource(icon),
contentDescription = null
)

Text(
text = title,
style = MaterialTheme.typography.labelMedium,
maxLines = 1,
overflow = TextOverflow.Ellipsis
)
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,54 @@
package com.zionhuang.music.ui.component

import androidx.compose.foundation.clickable
import androidx.compose.foundation.layout.Column
import androidx.compose.foundation.layout.Row
import androidx.compose.foundation.layout.WindowInsets
import androidx.compose.foundation.layout.WindowInsetsSides
import androidx.compose.foundation.layout.fillMaxWidth
import androidx.compose.foundation.layout.only
import androidx.compose.foundation.layout.padding
import androidx.compose.foundation.layout.systemBars
import androidx.compose.foundation.layout.windowInsetsPadding
import androidx.compose.material3.Icon
import androidx.compose.material3.MaterialTheme
import androidx.compose.material3.Text
import androidx.compose.runtime.Composable
import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier
import androidx.compose.ui.res.painterResource
import androidx.compose.ui.unit.dp
import com.zionhuang.music.R

@Composable
fun NavigationTitle(
title: String,
onClick: (() -> Unit)? = null,
) {
Row(
verticalAlignment = Alignment.CenterVertically,
modifier = Modifier
.fillMaxWidth()
.windowInsetsPadding(WindowInsets.systemBars.only(WindowInsetsSides.Horizontal))
.clickable(enabled = onClick != null) {
onClick?.invoke()
}
.padding(12.dp)
) {
Column(
modifier = Modifier.weight(1f)
) {
Text(
text = title,
style = MaterialTheme.typography.headlineSmall
)
}

if (onClick != null) {
Icon(
painter = painterResource(R.drawable.navigate_next),
contentDescription = null
)
}
}
}
Loading

0 comments on commit ee1895b

Please sign in to comment.