mirror of
https://github.com/Shabinder/SpotiFlyer.git
synced 2024-11-24 18:04:33 +01:00
Soundbound Reference
This commit is contained in:
parent
6069c210ab
commit
c72ba73cb8
BIN
art/soundbound-feature.jpg
Normal file
BIN
art/soundbound-feature.jpg
Normal file
Binary file not shown.
After Width: | Height: | Size: 101 KiB |
@ -78,6 +78,9 @@ actual fun HeartIcon() = painterResource(R.drawable.ic_heart)
|
|||||||
@Composable
|
@Composable
|
||||||
actual fun SpotifyLogo() = getCachedPainter(R.drawable.ic_spotify_logo)
|
actual fun SpotifyLogo() = getCachedPainter(R.drawable.ic_spotify_logo)
|
||||||
|
|
||||||
|
@Composable
|
||||||
|
actual fun SoundboundLogo() = getCachedPainter(R.drawable.soundbound_app_logo)
|
||||||
|
|
||||||
@Composable
|
@Composable
|
||||||
actual fun SaavnLogo() = getCachedPainter(R.drawable.ic_jio_saavn_logo)
|
actual fun SaavnLogo() = getCachedPainter(R.drawable.ic_jio_saavn_logo)
|
||||||
|
|
||||||
|
@ -55,6 +55,9 @@ expect fun SpotiFlyerLogo(): Painter
|
|||||||
@Composable
|
@Composable
|
||||||
expect fun SpotifyLogo(): Painter
|
expect fun SpotifyLogo(): Painter
|
||||||
|
|
||||||
|
@Composable
|
||||||
|
expect fun SoundboundLogo(): Painter
|
||||||
|
|
||||||
@Composable
|
@Composable
|
||||||
expect fun SaavnLogo(): Painter
|
expect fun SaavnLogo(): Painter
|
||||||
|
|
||||||
|
@ -22,6 +22,7 @@ import androidx.compose.ui.graphics.Color
|
|||||||
val colorPrimary = Color(0xFFFC5C7D)
|
val colorPrimary = Color(0xFFFC5C7D)
|
||||||
val colorPrimaryDark = Color(0xFFCE1CFF)
|
val colorPrimaryDark = Color(0xFFCE1CFF)
|
||||||
val colorAccent = Color(0xFF9AB3FF)
|
val colorAccent = Color(0xFF9AB3FF)
|
||||||
|
val colorSoundbound = Color(0xFF4b9fff)
|
||||||
val colorAccentVariant = Color(0xFF3457D5)
|
val colorAccentVariant = Color(0xFF3457D5)
|
||||||
val colorRedError = Color(0xFFFF9494)
|
val colorRedError = Color(0xFFFF9494)
|
||||||
val colorSuccessGreen = Color(0xFF59C351)
|
val colorSuccessGreen = Color(0xFF59C351)
|
||||||
|
@ -42,6 +42,7 @@ import androidx.compose.foundation.rememberScrollState
|
|||||||
import androidx.compose.foundation.shape.RoundedCornerShape
|
import androidx.compose.foundation.shape.RoundedCornerShape
|
||||||
import androidx.compose.foundation.text.KeyboardOptions
|
import androidx.compose.foundation.text.KeyboardOptions
|
||||||
import androidx.compose.foundation.verticalScroll
|
import androidx.compose.foundation.verticalScroll
|
||||||
|
import androidx.compose.material.ButtonDefaults
|
||||||
import androidx.compose.material.Card
|
import androidx.compose.material.Card
|
||||||
import androidx.compose.material.Icon
|
import androidx.compose.material.Icon
|
||||||
import androidx.compose.material.MaterialTheme
|
import androidx.compose.material.MaterialTheme
|
||||||
@ -53,12 +54,14 @@ import androidx.compose.material.TabPosition
|
|||||||
import androidx.compose.material.TabRow
|
import androidx.compose.material.TabRow
|
||||||
import androidx.compose.material.TabRowDefaults.tabIndicatorOffset
|
import androidx.compose.material.TabRowDefaults.tabIndicatorOffset
|
||||||
import androidx.compose.material.Text
|
import androidx.compose.material.Text
|
||||||
|
import androidx.compose.material.TextButton
|
||||||
import androidx.compose.material.TextField
|
import androidx.compose.material.TextField
|
||||||
import androidx.compose.material.TextFieldDefaults.textFieldColors
|
import androidx.compose.material.TextFieldDefaults.textFieldColors
|
||||||
import androidx.compose.material.icons.Icons
|
import androidx.compose.material.icons.Icons
|
||||||
import androidx.compose.material.icons.outlined.History
|
import androidx.compose.material.icons.outlined.History
|
||||||
import androidx.compose.material.icons.outlined.Info
|
import androidx.compose.material.icons.outlined.Info
|
||||||
import androidx.compose.material.icons.rounded.CardGiftcard
|
import androidx.compose.material.icons.rounded.CardGiftcard
|
||||||
|
import androidx.compose.material.icons.rounded.ChevronRight
|
||||||
import androidx.compose.material.icons.rounded.Edit
|
import androidx.compose.material.icons.rounded.Edit
|
||||||
import androidx.compose.material.icons.rounded.Flag
|
import androidx.compose.material.icons.rounded.Flag
|
||||||
import androidx.compose.material.icons.rounded.Insights
|
import androidx.compose.material.icons.rounded.Insights
|
||||||
@ -71,6 +74,7 @@ import androidx.compose.ui.draw.clip
|
|||||||
import androidx.compose.ui.graphics.Brush
|
import androidx.compose.ui.graphics.Brush
|
||||||
import androidx.compose.ui.graphics.Color
|
import androidx.compose.ui.graphics.Color
|
||||||
import androidx.compose.ui.text.TextStyle
|
import androidx.compose.ui.text.TextStyle
|
||||||
|
import androidx.compose.ui.text.font.FontStyle
|
||||||
import androidx.compose.ui.text.font.FontWeight
|
import androidx.compose.ui.text.font.FontWeight
|
||||||
import androidx.compose.ui.text.input.KeyboardType
|
import androidx.compose.ui.text.input.KeyboardType
|
||||||
import androidx.compose.ui.text.style.TextAlign
|
import androidx.compose.ui.text.style.TextAlign
|
||||||
@ -81,9 +85,8 @@ import com.arkivanov.decompose.extensions.compose.jetbrains.subscribeAsState
|
|||||||
import com.shabinder.common.core_components.picture.Picture
|
import com.shabinder.common.core_components.picture.Picture
|
||||||
import com.shabinder.common.main.SpotiFlyerMain
|
import com.shabinder.common.main.SpotiFlyerMain
|
||||||
import com.shabinder.common.main.SpotiFlyerMain.HomeCategory
|
import com.shabinder.common.main.SpotiFlyerMain.HomeCategory
|
||||||
import com.shabinder.common.models.DownloadRecord
|
|
||||||
import com.shabinder.common.models.Actions
|
import com.shabinder.common.models.Actions
|
||||||
import com.shabinder.common.models.spotify.Source
|
import com.shabinder.common.models.DownloadRecord
|
||||||
import com.shabinder.common.translations.Strings
|
import com.shabinder.common.translations.Strings
|
||||||
import com.shabinder.common.uikit.GaanaLogo
|
import com.shabinder.common.uikit.GaanaLogo
|
||||||
import com.shabinder.common.uikit.GithubLogo
|
import com.shabinder.common.uikit.GithubLogo
|
||||||
@ -91,12 +94,14 @@ import com.shabinder.common.uikit.ImageLoad
|
|||||||
import com.shabinder.common.uikit.SaavnLogo
|
import com.shabinder.common.uikit.SaavnLogo
|
||||||
import com.shabinder.common.uikit.ShareImage
|
import com.shabinder.common.uikit.ShareImage
|
||||||
import com.shabinder.common.uikit.SoundCloudLogo
|
import com.shabinder.common.uikit.SoundCloudLogo
|
||||||
|
import com.shabinder.common.uikit.SoundboundLogo
|
||||||
import com.shabinder.common.uikit.SpotifyLogo
|
import com.shabinder.common.uikit.SpotifyLogo
|
||||||
import com.shabinder.common.uikit.VerticalScrollbar
|
import com.shabinder.common.uikit.VerticalScrollbar
|
||||||
import com.shabinder.common.uikit.YoutubeLogo
|
import com.shabinder.common.uikit.YoutubeLogo
|
||||||
import com.shabinder.common.uikit.YoutubeMusicLogo
|
import com.shabinder.common.uikit.YoutubeMusicLogo
|
||||||
import com.shabinder.common.uikit.configurations.SpotiFlyerShapes
|
import com.shabinder.common.uikit.configurations.SpotiFlyerShapes
|
||||||
import com.shabinder.common.uikit.configurations.SpotiFlyerTypography
|
import com.shabinder.common.uikit.configurations.SpotiFlyerTypography
|
||||||
|
import com.shabinder.common.uikit.configurations.black
|
||||||
import com.shabinder.common.uikit.configurations.colorAccent
|
import com.shabinder.common.uikit.configurations.colorAccent
|
||||||
import com.shabinder.common.uikit.configurations.colorOffWhite
|
import com.shabinder.common.uikit.configurations.colorOffWhite
|
||||||
import com.shabinder.common.uikit.configurations.colorPrimary
|
import com.shabinder.common.uikit.configurations.colorPrimary
|
||||||
@ -134,6 +139,7 @@ fun SpotiFlyerMainContent(component: SpotiFlyerMain) {
|
|||||||
openDonationDialog()
|
openDonationDialog()
|
||||||
}
|
}
|
||||||
)
|
)
|
||||||
|
|
||||||
HomeCategory.History -> HistoryColumn(
|
HomeCategory.History -> HistoryColumn(
|
||||||
model.records.sortedByDescending { it.id },
|
model.records.sortedByDescending { it.id },
|
||||||
component::loadImage,
|
component::loadImage,
|
||||||
@ -247,7 +253,11 @@ fun SearchPanel(
|
|||||||
)
|
)
|
||||||
)
|
)
|
||||||
) {
|
) {
|
||||||
Text(text = Strings.search(), style = SpotiFlyerTypography.h6, modifier = Modifier.padding(4.dp))
|
Text(
|
||||||
|
text = Strings.search(),
|
||||||
|
style = SpotiFlyerTypography.h6,
|
||||||
|
modifier = Modifier.padding(4.dp)
|
||||||
|
)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -264,6 +274,82 @@ fun AboutColumn(
|
|||||||
val stateVertical = rememberScrollState(0)
|
val stateVertical = rememberScrollState(0)
|
||||||
|
|
||||||
Column(modifier.fillMaxSize().padding(8.dp).verticalScroll(stateVertical)) {
|
Column(modifier.fillMaxSize().padding(8.dp).verticalScroll(stateVertical)) {
|
||||||
|
Card(
|
||||||
|
modifier = modifier.fillMaxWidth(),
|
||||||
|
border = BorderStroke(1.dp, Color.Gray)
|
||||||
|
) {
|
||||||
|
Column(modifier.padding(12.dp).clickable(
|
||||||
|
onClick = {
|
||||||
|
Actions.instance.openPlatform(
|
||||||
|
"in.shabinder.soundbound",
|
||||||
|
"https://soundbound.app"
|
||||||
|
)
|
||||||
|
}
|
||||||
|
)) {
|
||||||
|
Row {
|
||||||
|
Image(
|
||||||
|
painter = SoundboundLogo(),
|
||||||
|
"${Strings.open()} Soundbound",
|
||||||
|
)
|
||||||
|
|
||||||
|
Spacer(modifier = Modifier.padding(start = 16.dp))
|
||||||
|
|
||||||
|
Column(
|
||||||
|
horizontalAlignment = Alignment.CenterHorizontally,
|
||||||
|
verticalArrangement = Arrangement.Center,
|
||||||
|
modifier = Modifier.weight(1f)
|
||||||
|
) {
|
||||||
|
Text(
|
||||||
|
text = "Get Soundbound",
|
||||||
|
style = SpotiFlyerTypography.h4,
|
||||||
|
color = colorAccent
|
||||||
|
)
|
||||||
|
|
||||||
|
Spacer(modifier = Modifier.padding(top = 8.dp))
|
||||||
|
|
||||||
|
Text(
|
||||||
|
text = "No BOUNDs to,\nyour Music & SOUNDs.",
|
||||||
|
style = SpotiFlyerTypography.h6,
|
||||||
|
textAlign = TextAlign.Center,
|
||||||
|
fontStyle = FontStyle.Italic,
|
||||||
|
color = colorOffWhite,
|
||||||
|
modifier = Modifier.align(Alignment.CenterHorizontally)
|
||||||
|
.padding(top = 4.dp)
|
||||||
|
)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
TextButton(
|
||||||
|
onClick = {
|
||||||
|
Actions.instance.openPlatform(
|
||||||
|
"in.shabinder.soundbound",
|
||||||
|
"https://soundbound.app"
|
||||||
|
)
|
||||||
|
},
|
||||||
|
modifier = Modifier.fillMaxWidth()
|
||||||
|
.padding(vertical = 8.dp, horizontal = 16.dp),
|
||||||
|
colors = ButtonDefaults.textButtonColors(
|
||||||
|
contentColor = black,
|
||||||
|
backgroundColor = colorAccent
|
||||||
|
)
|
||||||
|
) {
|
||||||
|
Text(
|
||||||
|
text = Strings.open(),
|
||||||
|
style = SpotiFlyerTypography.body1,
|
||||||
|
modifier = Modifier.padding(vertical = 4.dp),
|
||||||
|
fontWeight = FontWeight.SemiBold
|
||||||
|
)
|
||||||
|
|
||||||
|
Icon(
|
||||||
|
Icons.Rounded.ChevronRight,
|
||||||
|
Strings.open(),
|
||||||
|
tint = black,
|
||||||
|
modifier = Modifier
|
||||||
|
)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
Spacer(modifier = Modifier.padding(top = 8.dp))
|
||||||
Card(
|
Card(
|
||||||
modifier = modifier.fillMaxWidth(),
|
modifier = modifier.fillMaxWidth(),
|
||||||
border = BorderStroke(1.dp, Color.Gray)
|
border = BorderStroke(1.dp, Color.Gray)
|
||||||
@ -275,13 +361,21 @@ fun AboutColumn(
|
|||||||
color = colorAccent
|
color = colorAccent
|
||||||
)
|
)
|
||||||
Spacer(modifier = Modifier.padding(top = 12.dp))
|
Spacer(modifier = Modifier.padding(top = 12.dp))
|
||||||
Row(horizontalArrangement = Arrangement.Center, modifier = modifier.fillMaxWidth()) {
|
Row(
|
||||||
|
horizontalArrangement = Arrangement.Center,
|
||||||
|
modifier = modifier.fillMaxWidth()
|
||||||
|
) {
|
||||||
Icon(
|
Icon(
|
||||||
SpotifyLogo(),
|
SpotifyLogo(),
|
||||||
"${Strings.open()} Spotify",
|
"${Strings.open()} Spotify",
|
||||||
tint = Color.Unspecified,
|
tint = Color.Unspecified,
|
||||||
modifier = Modifier.clip(SpotiFlyerShapes.small).clickable(
|
modifier = Modifier.clip(SpotiFlyerShapes.small).clickable(
|
||||||
onClick = { Actions.instance.openPlatform("com.spotify.music", "https://open.spotify.com") }
|
onClick = {
|
||||||
|
Actions.instance.openPlatform(
|
||||||
|
"com.spotify.music",
|
||||||
|
"https://open.spotify.com"
|
||||||
|
)
|
||||||
|
}
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
Spacer(modifier = modifier.padding(start = 16.dp))
|
Spacer(modifier = modifier.padding(start = 16.dp))
|
||||||
@ -290,7 +384,12 @@ fun AboutColumn(
|
|||||||
"${Strings.open()} Gaana",
|
"${Strings.open()} Gaana",
|
||||||
tint = Color.Unspecified,
|
tint = Color.Unspecified,
|
||||||
modifier = Modifier.clip(SpotiFlyerShapes.small).clickable(
|
modifier = Modifier.clip(SpotiFlyerShapes.small).clickable(
|
||||||
onClick = { Actions.instance.openPlatform("com.gaana", "https://www.gaana.com") }
|
onClick = {
|
||||||
|
Actions.instance.openPlatform(
|
||||||
|
"com.gaana",
|
||||||
|
"https://www.gaana.com"
|
||||||
|
)
|
||||||
|
}
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
Spacer(modifier = modifier.padding(start = 16.dp))
|
Spacer(modifier = modifier.padding(start = 16.dp))
|
||||||
@ -299,7 +398,12 @@ fun AboutColumn(
|
|||||||
"${Strings.open()} Jio Saavn",
|
"${Strings.open()} Jio Saavn",
|
||||||
tint = Color.Unspecified,
|
tint = Color.Unspecified,
|
||||||
modifier = Modifier.clickable(
|
modifier = Modifier.clickable(
|
||||||
onClick = { Actions.instance.openPlatform("com.jio.media.jiobeats", "https://www.jiosaavn.com/") }
|
onClick = {
|
||||||
|
Actions.instance.openPlatform(
|
||||||
|
"com.jio.media.jiobeats",
|
||||||
|
"https://www.jiosaavn.com/"
|
||||||
|
)
|
||||||
|
}
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
Spacer(modifier = modifier.padding(start = 16.dp))
|
Spacer(modifier = modifier.padding(start = 16.dp))
|
||||||
@ -308,7 +412,12 @@ fun AboutColumn(
|
|||||||
"${Strings.open()} Youtube",
|
"${Strings.open()} Youtube",
|
||||||
tint = Color.Unspecified,
|
tint = Color.Unspecified,
|
||||||
modifier = Modifier.clip(SpotiFlyerShapes.small).clickable(
|
modifier = Modifier.clip(SpotiFlyerShapes.small).clickable(
|
||||||
onClick = { Actions.instance.openPlatform("com.google.android.youtube", "https://m.youtube.com") }
|
onClick = {
|
||||||
|
Actions.instance.openPlatform(
|
||||||
|
"com.google.android.youtube",
|
||||||
|
"https://m.youtube.com"
|
||||||
|
)
|
||||||
|
}
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
Spacer(modifier = modifier.padding(start = 12.dp))
|
Spacer(modifier = modifier.padding(start = 12.dp))
|
||||||
@ -317,18 +426,31 @@ fun AboutColumn(
|
|||||||
"${Strings.open()} Youtube Music",
|
"${Strings.open()} Youtube Music",
|
||||||
tint = Color.Unspecified,
|
tint = Color.Unspecified,
|
||||||
modifier = Modifier.clip(SpotiFlyerShapes.small).clickable(
|
modifier = Modifier.clip(SpotiFlyerShapes.small).clickable(
|
||||||
onClick = { Actions.instance.openPlatform("com.google.android.apps.youtube.music", "https://music.youtube.com/") }
|
onClick = {
|
||||||
|
Actions.instance.openPlatform(
|
||||||
|
"com.google.android.apps.youtube.music",
|
||||||
|
"https://music.youtube.com/"
|
||||||
|
)
|
||||||
|
}
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
Spacer(modifier = Modifier.padding(top = 8.dp))
|
Spacer(modifier = Modifier.padding(top = 8.dp))
|
||||||
Row(horizontalArrangement = Arrangement.Center, modifier = modifier.fillMaxWidth()) {
|
Row(
|
||||||
|
horizontalArrangement = Arrangement.Center,
|
||||||
|
modifier = modifier.fillMaxWidth()
|
||||||
|
) {
|
||||||
Icon(
|
Icon(
|
||||||
SoundCloudLogo(),
|
SoundCloudLogo(),
|
||||||
"${Strings.open()} Sound Cloud",
|
"${Strings.open()} Sound Cloud",
|
||||||
tint = Color.Unspecified,
|
tint = Color.Unspecified,
|
||||||
modifier = Modifier.clip(SpotiFlyerShapes.medium).clickable(
|
modifier = Modifier.clip(SpotiFlyerShapes.medium).clickable(
|
||||||
onClick = { Actions.instance.openPlatform("com.soundcloud.android", "https://soundcloud.com/") }
|
onClick = {
|
||||||
|
Actions.instance.openPlatform(
|
||||||
|
"com.soundcloud.android",
|
||||||
|
"https://soundcloud.com/"
|
||||||
|
)
|
||||||
|
}
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
@ -349,11 +471,21 @@ fun AboutColumn(
|
|||||||
Row(
|
Row(
|
||||||
verticalAlignment = Alignment.CenterVertically,
|
verticalAlignment = Alignment.CenterVertically,
|
||||||
modifier = Modifier.fillMaxWidth().clickable(
|
modifier = Modifier.fillMaxWidth().clickable(
|
||||||
onClick = { Actions.instance.openPlatform("", "https://github.com/Shabinder/SpotiFlyer") }
|
onClick = {
|
||||||
|
Actions.instance.openPlatform(
|
||||||
|
"",
|
||||||
|
"https://github.com/Shabinder/SpotiFlyer"
|
||||||
|
)
|
||||||
|
}
|
||||||
)
|
)
|
||||||
.padding(vertical = 6.dp)
|
.padding(vertical = 6.dp)
|
||||||
) {
|
) {
|
||||||
Icon(GithubLogo(), Strings.openProjectRepo(), Modifier.size(32.dp), tint = Color(0xFFCCCCCC))
|
Icon(
|
||||||
|
GithubLogo(),
|
||||||
|
Strings.openProjectRepo(),
|
||||||
|
Modifier.size(32.dp),
|
||||||
|
tint = Color(0xFFCCCCCC)
|
||||||
|
)
|
||||||
Spacer(modifier = Modifier.padding(start = 16.dp))
|
Spacer(modifier = Modifier.padding(start = 16.dp))
|
||||||
Column {
|
Column {
|
||||||
Text(
|
Text(
|
||||||
@ -368,10 +500,19 @@ fun AboutColumn(
|
|||||||
}
|
}
|
||||||
Row(
|
Row(
|
||||||
modifier = modifier.fillMaxWidth().padding(vertical = 6.dp)
|
modifier = modifier.fillMaxWidth().padding(vertical = 6.dp)
|
||||||
.clickable(onClick = { Actions.instance.openPlatform("", "https://github.com/Shabinder/SpotiFlyer/blob/main/CONTRIBUTING.md") }),
|
.clickable(onClick = {
|
||||||
|
Actions.instance.openPlatform(
|
||||||
|
"",
|
||||||
|
"https://github.com/Shabinder/SpotiFlyer/blob/main/CONTRIBUTING.md"
|
||||||
|
)
|
||||||
|
}),
|
||||||
verticalAlignment = Alignment.CenterVertically
|
verticalAlignment = Alignment.CenterVertically
|
||||||
) {
|
) {
|
||||||
Icon(Icons.Rounded.Flag, Strings.help() + Strings.translate(), Modifier.size(32.dp))
|
Icon(
|
||||||
|
Icons.Rounded.Flag,
|
||||||
|
Strings.help() + Strings.translate(),
|
||||||
|
Modifier.size(32.dp)
|
||||||
|
)
|
||||||
Spacer(modifier = Modifier.padding(start = 16.dp))
|
Spacer(modifier = Modifier.padding(start = 16.dp))
|
||||||
Column {
|
Column {
|
||||||
Text(
|
Text(
|
||||||
@ -390,7 +531,11 @@ fun AboutColumn(
|
|||||||
.clickable(onClick = openDonationDialog),
|
.clickable(onClick = openDonationDialog),
|
||||||
verticalAlignment = Alignment.CenterVertically
|
verticalAlignment = Alignment.CenterVertically
|
||||||
) {
|
) {
|
||||||
Icon(Icons.Rounded.CardGiftcard, Strings.supportDeveloper(), Modifier.size(32.dp))
|
Icon(
|
||||||
|
Icons.Rounded.CardGiftcard,
|
||||||
|
Strings.supportDeveloper(),
|
||||||
|
Modifier.size(32.dp)
|
||||||
|
)
|
||||||
Spacer(modifier = Modifier.padding(start = 16.dp))
|
Spacer(modifier = Modifier.padding(start = 16.dp))
|
||||||
Column {
|
Column {
|
||||||
Text(
|
Text(
|
||||||
@ -413,7 +558,11 @@ fun AboutColumn(
|
|||||||
),
|
),
|
||||||
verticalAlignment = Alignment.CenterVertically
|
verticalAlignment = Alignment.CenterVertically
|
||||||
) {
|
) {
|
||||||
Icon(Icons.Rounded.Share, Strings.share() + Strings.title() + "App", Modifier.size(32.dp))
|
Icon(
|
||||||
|
Icons.Rounded.Share,
|
||||||
|
Strings.share() + Strings.title() + "App",
|
||||||
|
Modifier.size(32.dp)
|
||||||
|
)
|
||||||
Spacer(modifier = Modifier.padding(start = 16.dp))
|
Spacer(modifier = Modifier.padding(start = 16.dp))
|
||||||
Column {
|
Column {
|
||||||
Text(
|
Text(
|
||||||
@ -435,7 +584,11 @@ fun AboutColumn(
|
|||||||
),
|
),
|
||||||
verticalAlignment = Alignment.CenterVertically
|
verticalAlignment = Alignment.CenterVertically
|
||||||
) {
|
) {
|
||||||
Icon(Icons.Rounded.Insights, Strings.analytics() + Strings.status(), Modifier.size(32.dp))
|
Icon(
|
||||||
|
Icons.Rounded.Insights,
|
||||||
|
Strings.analytics() + Strings.status(),
|
||||||
|
Modifier.size(32.dp)
|
||||||
|
)
|
||||||
Spacer(modifier = Modifier.padding(start = 16.dp))
|
Spacer(modifier = Modifier.padding(start = 16.dp))
|
||||||
Column(
|
Column(
|
||||||
Modifier.weight(1f)
|
Modifier.weight(1f)
|
||||||
@ -474,12 +627,22 @@ fun HistoryColumn(
|
|||||||
) {
|
) {
|
||||||
Crossfade(list) {
|
Crossfade(list) {
|
||||||
if (it.isEmpty()) {
|
if (it.isEmpty()) {
|
||||||
Column(Modifier.padding(8.dp).fillMaxSize(), verticalArrangement = Arrangement.Center, horizontalAlignment = Alignment.CenterHorizontally) {
|
Column(
|
||||||
|
Modifier.padding(8.dp).fillMaxSize(),
|
||||||
|
verticalArrangement = Arrangement.Center,
|
||||||
|
horizontalAlignment = Alignment.CenterHorizontally
|
||||||
|
) {
|
||||||
Icon(
|
Icon(
|
||||||
Icons.Outlined.Info, Strings.noHistoryAvailable(), modifier = Modifier.size(80.dp),
|
Icons.Outlined.Info,
|
||||||
|
Strings.noHistoryAvailable(),
|
||||||
|
modifier = Modifier.size(80.dp),
|
||||||
colorOffWhite
|
colorOffWhite
|
||||||
)
|
)
|
||||||
Text(Strings.noHistoryAvailable(), style = SpotiFlyerTypography.h4.copy(fontWeight = FontWeight.Light), textAlign = TextAlign.Center)
|
Text(
|
||||||
|
Strings.noHistoryAvailable(),
|
||||||
|
style = SpotiFlyerTypography.h4.copy(fontWeight = FontWeight.Light),
|
||||||
|
textAlign = TextAlign.Center
|
||||||
|
)
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
Box {
|
Box {
|
||||||
@ -521,22 +684,38 @@ fun DownloadRecordItem(
|
|||||||
loadImage: suspend (String) -> Picture,
|
loadImage: suspend (String) -> Picture,
|
||||||
onItemClicked: (String) -> Unit
|
onItemClicked: (String) -> Unit
|
||||||
) {
|
) {
|
||||||
Row(verticalAlignment = Alignment.CenterVertically, modifier = Modifier.fillMaxWidth().padding(end = 8.dp)) {
|
Row(
|
||||||
|
verticalAlignment = Alignment.CenterVertically,
|
||||||
|
modifier = Modifier.fillMaxWidth().padding(end = 8.dp)
|
||||||
|
) {
|
||||||
ImageLoad(
|
ImageLoad(
|
||||||
item.coverUrl,
|
item.coverUrl,
|
||||||
{ loadImage(item.coverUrl) },
|
{ loadImage(item.coverUrl) },
|
||||||
Strings.albumArt(),
|
Strings.albumArt(),
|
||||||
modifier = Modifier.height(70.dp).width(70.dp).clip(SpotiFlyerShapes.medium)
|
modifier = Modifier.height(70.dp).width(70.dp).clip(SpotiFlyerShapes.medium)
|
||||||
)
|
)
|
||||||
Column(modifier = Modifier.padding(horizontal = 8.dp).height(60.dp).weight(1f), verticalArrangement = Arrangement.SpaceEvenly) {
|
Column(
|
||||||
Text(item.name, maxLines = 1, overflow = TextOverflow.Ellipsis, style = SpotiFlyerTypography.h6, color = colorAccent)
|
modifier = Modifier.padding(horizontal = 8.dp).height(60.dp).weight(1f),
|
||||||
|
verticalArrangement = Arrangement.SpaceEvenly
|
||||||
|
) {
|
||||||
|
Text(
|
||||||
|
item.name,
|
||||||
|
maxLines = 1,
|
||||||
|
overflow = TextOverflow.Ellipsis,
|
||||||
|
style = SpotiFlyerTypography.h6,
|
||||||
|
color = colorAccent
|
||||||
|
)
|
||||||
Row(
|
Row(
|
||||||
horizontalArrangement = Arrangement.SpaceBetween,
|
horizontalArrangement = Arrangement.SpaceBetween,
|
||||||
verticalAlignment = Alignment.Bottom,
|
verticalAlignment = Alignment.Bottom,
|
||||||
modifier = Modifier.padding(horizontal = 8.dp).fillMaxSize()
|
modifier = Modifier.padding(horizontal = 8.dp).fillMaxSize()
|
||||||
) {
|
) {
|
||||||
Text(item.type, fontSize = 13.sp, color = colorOffWhite)
|
Text(item.type, fontSize = 13.sp, color = colorOffWhite)
|
||||||
Text("${Strings.tracks()}: ${item.totalFiles}", fontSize = 13.sp, color = colorOffWhite)
|
Text(
|
||||||
|
"${Strings.tracks()}: ${item.totalFiles}",
|
||||||
|
fontSize = 13.sp,
|
||||||
|
color = colorOffWhite
|
||||||
|
)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
Image(
|
Image(
|
||||||
|
@ -82,6 +82,10 @@ actual fun HeartIcon() =
|
|||||||
actual fun SpotifyLogo() =
|
actual fun SpotifyLogo() =
|
||||||
getCachedPainter("drawable/ic_spotify_logo.xml")
|
getCachedPainter("drawable/ic_spotify_logo.xml")
|
||||||
|
|
||||||
|
@Composable
|
||||||
|
actual fun SoundboundLogo() =
|
||||||
|
getCachedPainter("drawable/soundbound_app_logo.xml")
|
||||||
|
|
||||||
@Composable
|
@Composable
|
||||||
actual fun SaavnLogo() =
|
actual fun SaavnLogo() =
|
||||||
getCachedPainter("drawable/ic_jio_saavn_logo.xml")
|
getCachedPainter("drawable/ic_jio_saavn_logo.xml")
|
||||||
|
@ -0,0 +1,14 @@
|
|||||||
|
<vector xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
|
android:width="108dp"
|
||||||
|
android:height="108dp"
|
||||||
|
android:viewportWidth="198"
|
||||||
|
android:viewportHeight="429">
|
||||||
|
<group android:scaleX="0.2820513"
|
||||||
|
android:scaleY="0.6111111"
|
||||||
|
android:translateX="71.07692"
|
||||||
|
android:translateY="83.416664">
|
||||||
|
<path
|
||||||
|
android:pathData="m126,200 l-10,2 -4,-29c-18,12 -37,24 -55,38a75,75 0,0 0,-30 62,60 60,0 0,0 28,52 106,106 0,0 0,47 16l24,1 2,9c-23,1 -44,0 -65,-9a124,124 0,0 1,-35 -21,88 88,0 0,1 -26,-51c-6,-32 4,-58 27,-80 11,-10 24,-18 36,-26 23,-15 45,-29 67,-45a100,100 0,0 0,37 -50,71 71,0 0,0 -8,-64l-4,-4 1,-1 8,5a62,62 0,0 1,18 37c3,19 3,38 -2,56 -7,24 -23,42 -43,57a221,221 0,0 1,-12 8zM66,406c4,6 9,8 14,10a42,42 0,0 0,57 -36c1,-12 -1,-24 -2,-36l-8,-60 -6,-43c-6,2 -11,3 -16,6a79,79 0,0 0,-15 12,28 28,0 0,0 -3,37l13,17a29,29 0,0 1,-16 -6c-23,-18 -31,-56 -2,-80a72,72 0,0 1,79 -7c15,8 28,19 33,35 8,25 4,48 -14,67a97,97 0,0 1,-25 19l-1,-10a56,56 0,0 0,24 -33,45 45,0 0,0 -44,-59l13,90 5,42a55,55 0,0 1,-23 48,50 50,0 0,1 -76,-22c-5,-15 2,-28 17,-30 11,-2 21,6 23,16 1,9 -6,19 -17,21l-4,1zM104,125v-17c0,-15 -2,-30 1,-44a85,85 0,0 1,28 -49l12,-7h4a46,46 0,0 1,14 21l-1,1a68,68 0,0 0,-43 53l-3,30c-1,4 -1,6 -5,8z"
|
||||||
|
android:fillColor="#559eff"/>
|
||||||
|
</group>
|
||||||
|
</vector>
|
1
fastlane/metadata/android/en-US/changelogs/32.txt
Normal file
1
fastlane/metadata/android/en-US/changelogs/32.txt
Normal file
@ -0,0 +1 @@
|
|||||||
|
- Soundbound Feature Graphic.
|
Loading…
Reference in New Issue
Block a user