Skip to content

Commit

Permalink
Merge pull request #69 from techmaved/develop
Browse files Browse the repository at this point in the history
release 0.1.5-beta
  • Loading branch information
techmaved authored Oct 20, 2024
2 parents 6f886d3 + 3192989 commit 3f19a4e
Show file tree
Hide file tree
Showing 11 changed files with 301 additions and 97 deletions.
6 changes: 6 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,12 @@ are going to either on:
## Prerequisites
* Spotify account
* Android 7.0
* Spotify Premium

### Development Status
Currently this app is in its development phase. To use it yourself you need to make some changes before running it. Please follow these steps to get it working.
1. Create your own Spotify App with [this](https://developer.spotify.com/documentation/android/tutorials/getting-started#register-your-app) tutorial section
2. Change the Spotify Client ID build config field [here](./app/build.gradle.kts)

## License
This app is licensed under [GPLv3](https://github.com/techmaved/MediaBrowser-for-Spotify/blob/main/LICENSE.md), see LICENSE.md for more information.
100 changes: 52 additions & 48 deletions app/build.gradle.kts
Original file line number Diff line number Diff line change
@@ -1,8 +1,10 @@
plugins {
id("com.android.application")
id("org.jetbrains.kotlin.android")
id("com.google.devtools.ksp")
id("io.github.reactivecircus.app-versioning")
alias(libs.plugins.android.application)
alias(libs.plugins.kotlin)
alias(libs.plugins.ksp)
alias(libs.plugins.app.versioning)
alias(libs.plugins.aboutlibraries.plugin)
alias(libs.plugins.serialization.plugin)
}

android {
Expand Down Expand Up @@ -102,50 +104,52 @@ android {
}

dependencies {
val roomVersion = "2.6.1"
val acraVersion = "5.11.3"

implementation("androidx.core:core-ktx:1.13.1")
implementation("androidx.lifecycle:lifecycle-runtime-ktx:2.7.0")
implementation("androidx.activity:activity-compose:1.8.2")
implementation(platform("androidx.compose:compose-bom:2024.05.00"))
implementation("androidx.compose.ui:ui:1.6.7")
implementation("androidx.compose.ui:ui-graphics:1.6.7")
implementation("androidx.compose.ui:ui-tooling-preview:1.6.7")
implementation("androidx.compose.material3:material3:1.2.1")
implementation(libs.core.ktx)
implementation(libs.lifecycle.runtime.ktx)
implementation(libs.activity.compose)
implementation(platform(libs.compose.bom))
implementation(libs.compose.ui)
implementation(libs.compose.graphics)
implementation(libs.compose.tooling)
implementation(libs.compose.m3)
implementation(files("../libs/spotify-app-remote-release-0.8.0.aar"))
//implementation(files("../libs/spotify-auth-release-2.1.0.aar"))´
implementation("com.google.code.gson:gson:2.10.1")
implementation("androidx.media3:media3-exoplayer:1.3.1")
implementation("androidx.media3:media3-ui:1.3.1")
implementation("androidx.media3:media3-common:1.3.1")
implementation("androidx.media3:media3-session:1.3.1")
testImplementation("junit:junit:4.13.2")
androidTestImplementation("androidx.test.ext:junit:1.1.5")
androidTestImplementation("androidx.test.espresso:espresso-core:3.5.1")
androidTestImplementation(platform("androidx.compose:compose-bom:2024.05.00"))
androidTestImplementation("androidx.compose.ui:ui-test-junit4:1.6.7")
debugImplementation("androidx.compose.ui:ui-tooling:1.6.7")
debugImplementation("androidx.compose.ui:ui-test-manifest:1.6.7")
implementation("com.adamratzman:spotify-api-kotlin-core:4.1.3")
implementation("androidx.appcompat:appcompat:1.6.1")
implementation("androidx.room:room-runtime:$roomVersion")
annotationProcessor("androidx.room:room-compiler:$roomVersion")
ksp("androidx.room:room-compiler:$roomVersion")
implementation("androidx.room:room-ktx:$roomVersion")
implementation("androidx.room:room-rxjava2:$roomVersion")
implementation("androidx.room:room-rxjava3:$roomVersion")
implementation("androidx.room:room-guava:$roomVersion")
testImplementation("androidx.room:room-testing:$roomVersion")
implementation("androidx.room:room-paging:$roomVersion")
implementation("ch.acra:acra-core:$acraVersion")
implementation("ch.acra:acra-dialog:$acraVersion")
compileOnly("com.google.auto.service:auto-service-annotations:1.1.1")
ksp("dev.zacsweers.autoservice:auto-service-ksp:1.1.0")
ksp("com.google.auto.service:auto-service:1.1.1")
implementation("androidx.documentfile:documentfile:1.0.1")
implementation("com.mikepenz:iconics-core:5.4.0")
implementation("com.mikepenz:iconics-compose:5.4.0")
implementation("com.mikepenz:fontawesome-typeface:5.9.0.2-kotlin@aar")
implementation("androidx.datastore:datastore-preferences:1.1.1")
implementation(libs.gson)
implementation(libs.media3.exoplayer)
implementation(libs.media3.ui)
implementation(libs.media3.common)
implementation(libs.media3.session)
testImplementation(libs.junit)
androidTestImplementation(libs.ext.junit)
androidTestImplementation(libs.espresso.core)
androidTestImplementation(platform(libs.compose.bom))
androidTestImplementation(libs.ui.test.junit4)
debugImplementation(libs.ui.tooling)
debugImplementation(libs.ui.test.manifest)
implementation(libs.spotify.api.kotlin.core)
implementation(libs.appcompat)
implementation(libs.room.runtime)
annotationProcessor(libs.room.compiler)
ksp(libs.room.compiler)
implementation(libs.room.ktx)
implementation(libs.room.rxjava2)
implementation(libs.room.rxjava3)
implementation(libs.room.guava)
testImplementation(libs.test.room)
implementation(libs.room.paging)
implementation(libs.acra.core)
implementation(libs.acra.dialog)
compileOnly(libs.auto.service.annotations)
ksp(libs.auto.service.ksp)
ksp(libs.auto.service)
implementation(libs.documentfile)
implementation(libs.iconics.core)
implementation(libs.iconics.compose)
implementation(libs.fontawesome.typeface)
implementation(libs.datastore.preferences)
implementation(libs.aboutlibraries.core)
implementation(libs.aboutlibraries.compose.m3)
implementation(libs.navigation.fragment.compose)
implementation(libs.navigation.compose)
implementation(libs.kotlinx.serialization.json)
}
Original file line number Diff line number Diff line change
Expand Up @@ -15,11 +15,16 @@ import androidx.compose.runtime.mutableStateOf
import androidx.compose.runtime.remember
import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier
import androidx.compose.ui.tooling.preview.Preview
import androidx.compose.ui.unit.dp
import androidx.navigation.NavController
import androidx.navigation.compose.NavHost
import androidx.navigation.compose.composable
import androidx.navigation.compose.rememberNavController
import de.techmaved.mediabrowserforspotify.models.Model
import de.techmaved.mediabrowserforspotify.ui.components.*
import de.techmaved.mediabrowserforspotify.ui.theme.MediaBrowserForSpotifyTheme
import de.techmaved.mediabrowserforspotify.ui.Info
import de.techmaved.mediabrowserforspotify.ui.Main

class MainActivity : ComponentActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
Expand All @@ -31,11 +36,25 @@ class MainActivity : ComponentActivity() {
modifier = Modifier.fillMaxSize(),
color = MaterialTheme.colorScheme.background
) {
Ui(
activity,
Model.credentialStore.spotifyToken != null,
isPackageInstalled(SpotifyDesign().spotifyPackage, applicationContext.packageManager)
)
val navController = rememberNavController()

NavHost(
navController = navController,
startDestination = Main
) {
composable<Main> {
Ui(
activity,
Model.credentialStore.spotifyToken != null,
isPackageInstalled(SpotifyDesign().spotifyPackage, applicationContext.packageManager),
navController
)
}

composable<Info> {
Info()
}
}
}
}
}
Expand All @@ -52,10 +71,10 @@ class MainActivity : ComponentActivity() {
}

@Composable()
fun Ui(activity: MainActivity?, isAuthenticated: Boolean, isSpotifyInstalled: Boolean) {
fun Ui(activity: MainActivity?, isAuthenticated: Boolean, isSpotifyInstalled: Boolean, navController: NavController) {
val mediaItemCount = remember { mutableStateOf(0) }

AppBarWithContainer(activity, isAuthenticated) {
AppBarWithContainer(activity, isAuthenticated, navController) {
Column(
modifier = Modifier.padding(start = 16.dp, end = 16.dp),
horizontalAlignment = Alignment.CenterHorizontally,
Expand All @@ -65,13 +84,6 @@ fun Ui(activity: MainActivity?, isAuthenticated: Boolean, isSpotifyInstalled: Bo
TextWithButtons(mediaItemCount, isAuthenticated)
MirrorSection(isAuthenticated)
SpotifyDesign().LinkToSpotify(isSpotifyInstalled, activity)
SourceCodeLink()
}
}
}

@Composable
@Preview(showBackground = true)
fun Preview() {
Ui(null, true, true)
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
package de.techmaved.mediabrowserforspotify.ui

import kotlinx.serialization.Serializable

@Serializable
object Main

@Serializable
object Info
Original file line number Diff line number Diff line change
@@ -1,50 +1,101 @@
package de.techmaved.mediabrowserforspotify.ui.components


import android.content.Intent
import android.graphics.Bitmap
import android.net.Uri
import androidx.compose.foundation.Image
import androidx.compose.foundation.background
import androidx.compose.foundation.layout.Arrangement
import androidx.compose.foundation.layout.Column
import androidx.compose.foundation.layout.Row
import androidx.compose.foundation.layout.fillMaxWidth
import androidx.compose.foundation.layout.padding
import androidx.compose.foundation.layout.size
import androidx.compose.material.icons.Icons
import androidx.compose.material.icons.outlined.Info
import androidx.compose.material3.FilledTonalButton
import androidx.compose.material3.Icon
import androidx.compose.material3.MaterialTheme
import androidx.compose.material3.Text
import androidx.compose.material3.TextButton
import androidx.compose.runtime.Composable
import androidx.compose.runtime.remember
import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier
import androidx.compose.ui.graphics.ColorFilter
import androidx.compose.ui.graphics.asImageBitmap
import androidx.compose.ui.platform.LocalContext
import androidx.compose.ui.res.stringResource
import androidx.compose.ui.unit.dp
import com.mikepenz.iconics.compose.Image
import androidx.core.graphics.drawable.toBitmap
import androidx.navigation.NavController
import com.mikepenz.aboutlibraries.ui.compose.m3.LibrariesContainer
import com.mikepenz.iconics.typeface.library.fontawesome.FontAwesome
import de.techmaved.mediabrowserforspotify.BuildConfig
import de.techmaved.mediabrowserforspotify.R
import de.techmaved.mediabrowserforspotify.ui.Info

@Composable
fun SourceCodeLink() {
fun Info() {
val context = LocalContext.current
val repoUrl = stringResource(R.string.github_repository)
val intent = remember { Intent(Intent.ACTION_VIEW, Uri.parse(repoUrl)) }
val drawable = context.packageManager.getApplicationIcon(context.packageName)

Row(
horizontalArrangement = Arrangement.spacedBy(16.dp),
verticalAlignment = Alignment.CenterVertically
) {
Text("Version: ${BuildConfig.VERSION_NAME}")
TextButton(
onClick = {
context.startActivity(intent)
}
) {
Row(
horizontalArrangement = Arrangement.spacedBy(10.dp),
verticalAlignment = Alignment.CenterVertically
) {
Image(
asset = FontAwesome.Icon.faw_github,
colorFilter = ColorFilter.tint(color = MaterialTheme.colorScheme.primary)
)
Text("source code")
LibrariesContainer(
modifier = Modifier.fillMaxWidth(),
header = {
item {
Column(
modifier = Modifier
.fillMaxWidth()
.background(MaterialTheme.colorScheme.surface)
.padding(vertical = 25.dp),
horizontalAlignment = Alignment.CenterHorizontally,
) {
Column(
horizontalAlignment = Alignment.CenterHorizontally
) {
Text(text = stringResource(R.string.app_name))

Row {
Image(
drawable.toBitmap(config = Bitmap.Config.ARGB_8888).asImageBitmap(),
contentDescription = stringResource(R.string.app_name),
modifier = Modifier
.size(100.dp)
.padding(8.dp)
)
}

Row(
horizontalArrangement = Arrangement.spacedBy(16.dp),
verticalAlignment = Alignment.CenterVertically
) {
Text("Version: ${BuildConfig.VERSION_NAME}")
TextButton(
onClick = {
context.startActivity(intent)
}
) {
Row(
horizontalArrangement = Arrangement.spacedBy(10.dp),
verticalAlignment = Alignment.CenterVertically
) {
Image(
asset = FontAwesome.Icon.faw_github,
colorFilter = ColorFilter.tint(color = MaterialTheme.colorScheme.primary)
)
Text("source code")
}
}
}
}
}
}
}
}
)

}
Original file line number Diff line number Diff line change
Expand Up @@ -226,7 +226,6 @@ fun LikedSongsHelpDialog() {
verticalAlignment = Alignment.CenterVertically
) {
Icon(imageVector = Icons.Outlined.Info, contentDescription = null)
Text("Info")
}
}

Expand Down
Loading

0 comments on commit 3f19a4e

Please sign in to comment.