Skip to content

Commit

Permalink
Merge pull request #14 from RLD-JL/version-1.0.7-c
Browse files Browse the repository at this point in the history
Version 1.0.7 c
  • Loading branch information
RLD-JL committed Dec 16, 2023
2 parents 920b4f2 + 16c41c1 commit 444e2de
Show file tree
Hide file tree
Showing 17 changed files with 99 additions and 59 deletions.
26 changes: 13 additions & 13 deletions androidApp/build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -8,12 +8,12 @@ plugins {

dependencies {
implementation(project(":shared"))
implementation("com.google.android.material:material:1.6.1")
implementation("androidx.appcompat:appcompat:1.4.2")
implementation("com.google.android.material:material:1.11.0")
implementation("androidx.appcompat:appcompat:1.6.1")
implementation("androidx.constraintlayout:constraintlayout:2.1.4")
implementation("androidx.lifecycle:lifecycle-runtime-ktx:2.5.0")
implementation("androidx.lifecycle:lifecycle-viewmodel-compose:2.6.0-alpha01")
implementation("androidx.activity:activity-compose:1.5.0")
implementation("androidx.lifecycle:lifecycle-runtime-ktx:2.6.2")
implementation("androidx.lifecycle:lifecycle-viewmodel-compose:2.6.2")
implementation("androidx.activity:activity-compose:1.8.2")
implementation("androidx.palette:palette-ktx:1.0.0")

implementation(libs.bundles.compose)
Expand All @@ -22,31 +22,31 @@ dependencies {
implementation (libs.bundles.exoplayer)

implementation ("dev.chrisbanes.snapper:snapper:0.2.2")
implementation ("androidx.work:work-runtime-ktx:2.7.1")
implementation ("androidx.work:work-runtime-ktx:2.9.0")


implementation("androidx.lifecycle:lifecycle-process:2.6.0-alpha01")
implementation("androidx.lifecycle:lifecycle-process:2.6.2")
implementation("io.coil-kt:coil-compose:2.1.0")
implementation("com.google.dagger:hilt-android:2.42")
kapt("com.google.dagger:hilt-android-compiler:2.42")

implementation("com.google.accompanist:accompanist-swiperefresh:0.24.1-alpha")
implementation("androidx.core:core-splashscreen:1.0.0-rc01")
debugImplementation("com.squareup.leakcanary:leakcanary-android:2.7")
implementation("androidx.core:core-splashscreen:1.0.1")
debugImplementation("com.squareup.leakcanary:leakcanary-android:2.12")
}

kapt {
correctErrorTypes = true
}

android {
compileSdk = 33
compileSdk = 34
defaultConfig {
applicationId = "com.rld.justlisten.android"
minSdk = 21
targetSdk = 33
versionCode = 20
versionName = "1.0.6-b"
targetSdk = 34
versionCode = 23
versionName = "1.0.7-c"
vectorDrawables {
useSupportLibrary = true
}
Expand Down
5 changes: 4 additions & 1 deletion androidApp/src/main/AndroidManifest.xml
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@

<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.FOREGROUND_SERVICE"/>
<uses-permission android:name="android.permission.FOREGROUND_SERVICE_MEDIA_PLAYBACK" />


<application
Expand All @@ -14,7 +15,9 @@
android:roundIcon="@mipmap/ic_launcher_round"
android:label="@string/app_name"
android:theme="@style/Theme.App.Starting">
<service android:name=".exoplayer.MusicService"
<service
android:name=".exoplayer.MusicService"
android:foregroundServiceType="mediaPlayback"
tools:ignore="Instantiatable"
android:exported="false">
<intent-filter>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -51,8 +51,6 @@ class MusicService : MediaBrowserServiceCompat() {

private var curPlayingSong: MediaMetadataCompat? = null

private var isPlayerInitialized = false

private lateinit var musicPlayerEventListener: MusicPlayerEventListener

companion object {
Expand Down Expand Up @@ -164,10 +162,6 @@ class MusicService : MediaBrowserServiceCompat() {
)
}
result.sendResult(item)
if (!isPlayerInitialized && musicSource.songs.isNotEmpty()) {
preparePlayer(musicSource.songs, musicSource.songs[0], true)
isPlayerInitialized = true
}
} else {
mediaSession.sendSessionEvent(NETWORK_ERROR, null)
result.sendResult(null)
Expand Down
Original file line number Diff line number Diff line change
@@ -1,9 +1,15 @@
package com.rld.justlisten.android.ui.addplaylistscreen

import androidx.compose.foundation.layout.Column
import androidx.compose.foundation.layout.fillMaxWidth
import androidx.compose.foundation.layout.size
import androidx.compose.foundation.lazy.LazyColumn
import androidx.compose.foundation.lazy.itemsIndexed
import androidx.compose.material.Divider
import androidx.compose.material.Icon
import androidx.compose.material.IconButton
import androidx.compose.material.icons.Icons
import androidx.compose.material.icons.filled.ArrowBack
import androidx.compose.runtime.Composable
import androidx.compose.runtime.mutableStateOf
import androidx.compose.runtime.remember
Expand All @@ -20,15 +26,24 @@ fun AddPlaylistScreen(
addPlaylistState: AddPlaylistState,
onAddPlaylistClicked: (String, String?) -> Unit,
clickedToAddSongToPlaylist: (String, String?, List<String>) -> Unit,
events: Events
events: Events,
onBackButtonPressed: (Boolean) -> Unit
) {
val openDialog = remember { mutableStateOf(false) }
LazyColumn(Modifier.fillMaxWidth()) {
item { AddPlaylistRow(openDialog) }
item { Divider(thickness = 2.dp) }
item { AddPlaylistDialog(openDialog, onAddPlaylistClicked) }
itemsIndexed(addPlaylistState.playlistsCreated) { _, playlist ->
PlaylistViewItem(playlist, clickedToAddSongToPlaylist, events)
Column(Modifier.fillMaxWidth()) {
IconButton(modifier = Modifier.size(48.dp), onClick = {onBackButtonPressed(true) }) {
Icon(
imageVector = Icons.Default.ArrowBack,
contentDescription = null,
)
}
LazyColumn(Modifier.fillMaxWidth()) {
item { AddPlaylistRow(openDialog) }
item { Divider(thickness = 2.dp) }
item { AddPlaylistDialog(openDialog, onAddPlaylistClicked) }
itemsIndexed(addPlaylistState.playlistsCreated) { _, playlist ->
PlaylistViewItem(playlist, clickedToAddSongToPlaylist, events)
}
}
}
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@ package com.rld.justlisten.android.ui.extensions
import androidx.compose.material.BottomSheetScaffoldState
import androidx.compose.material.BottomSheetValue
import androidx.compose.material.ExperimentalMaterialApi
import kotlin.math.absoluteValue

/**
* Align fraction states into single value
Expand All @@ -14,7 +15,7 @@ import androidx.compose.material.ExperimentalMaterialApi
@ExperimentalMaterialApi
val BottomSheetScaffoldState.fraction: Float
get() {
val fraction = bottomSheetState.progress.fraction
val fraction = bottomSheetState.progress.absoluteValue
val currentValue = bottomSheetState.currentValue
val targetValue = bottomSheetState.targetValue

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -232,6 +232,9 @@ fun Navigation.ScreenPicker(
)
)
events.playMusicFromPlaylist(playlistId = playlistId)
},
onBackButtonPressed = { onBackButtonPressed ->
if (onBackButtonPressed) exitScreen()
}
)
Donation -> DonationScreen()
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -97,7 +97,7 @@ fun SettingsScreen(
Row(modifier = Modifier.fillMaxWidth().weight(1f, false),
horizontalArrangement = Arrangement.Center)
{
Text(text ="App version:1.0.6-fix")
Text(text ="App version:1.0.7-b")
}
}
}
Expand Down
2 changes: 1 addition & 1 deletion build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@ buildscript {

dependencies {
classpath("org.jetbrains.kotlin:kotlin-gradle-plugin:${libs.versions.kotlinVersion.get()}")
classpath("com.android.tools.build:gradle:8.0.1")
classpath("com.android.tools.build:gradle:8.2.0")
classpath("com.squareup.sqldelight:gradle-plugin:1.5.3")
classpath ("com.google.dagger:hilt-android-gradle-plugin:2.42")
}
Expand Down
2 changes: 1 addition & 1 deletion gradle/wrapper/gradle-wrapper.properties
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
#Fri Jul 22 21:14:22 EEST 2022
distributionBase=GRADLE_USER_HOME
distributionUrl=https\://services.gradle.org/distributions/gradle-8.0-bin.zip
distributionUrl=https\://services.gradle.org/distributions/gradle-8.2-bin.zip
distributionPath=wrapper/dists
zipStorePath=wrapper/dists
zipStoreBase=GRADLE_USER_HOME
4 changes: 2 additions & 2 deletions settings.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,7 @@ dependencyResolutionManagement {
)
)

version("composeVersion", "1.3.0-alpha01")
version("composeVersion", "1.5.4")
library("compose-ui-util", "androidx.compose.ui", "ui-util").versionRef("composeVersion")
library("compose-ui", "androidx.compose.ui", "ui").versionRef("composeVersion")
library("compose-ui-preview", "androidx.compose.ui", "ui-tooling-preview").versionRef("composeVersion")
Expand All @@ -44,7 +44,7 @@ dependencyResolutionManagement {
)
)

version("exoPlayerVersion", "2.18.6")
version("exoPlayerVersion", "2.19.1")
library("exoplayer-mediasession", "com.google.android.exoplayer", "extension-mediasession").versionRef("exoPlayerVersion")
library("exoplayer-core", "com.google.android.exoplayer", "exoplayer-core").versionRef("exoPlayerVersion")
library("exoplayer-ui", "com.google.android.exoplayer", "exoplayer-ui").versionRef("exoPlayerVersion")
Expand Down
6 changes: 3 additions & 3 deletions shared/build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,7 @@ kotlin {
sourceSets {
val commonMain by getting {
dependencies {
implementation("org.jetbrains.kotlinx:kotlinx-coroutines-core:1.6.2")
implementation("org.jetbrains.kotlinx:kotlinx-coroutines-core:1.7.1")
implementation("org.jetbrains.kotlinx:kotlinx-datetime:0.3.2")
implementation(libs.bundles.ktor)
}
Expand Down Expand Up @@ -82,11 +82,11 @@ configurations {
}

android {
compileSdk = 33
compileSdk = 34
sourceSets["main"].manifest.srcFile("src/androidMain/AndroidManifest.xml")
defaultConfig {
minSdk = 21
targetSdk = 33
targetSdk = 34
}
namespace = "com.rld.justlisten"
}
Original file line number Diff line number Diff line change
Expand Up @@ -108,7 +108,6 @@ class StateManager(repo: Repository) {
initScreenScope(screenIdentifier)
if (!isInTheStatesMap(screenIdentifier) || screenInitSettings.reinitOnEachNavigation) {
screenStatesMap[screenIdentifier.URI] = screenInitSettings.initState(screenIdentifier)
screenStatesMap.keys.forEach { println("YOLO 3 $it") }
if (triggerRecomposition) {
triggerRecomposition() // FIRST UI RECOMPOSITION
runInScreenScope(screenIdentifier) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -29,7 +29,8 @@ fun LocalDb.getFavoritePlaylist(): List<PlayListModel> {
playlistTitle = title,
title = title,
user = user,
songImgList = songImgList
songImgList = songImgList,
isStreamable = true
)
}).executeAsList()
}
Expand All @@ -38,7 +39,7 @@ fun LocalDb.getCustomPlaylistSongs(songsList: List<String>): List<PlayListModel>
return libraryQueries.getCustomPlaylistSongs(
songsList, mapper = { id, title, user, songImgList, _, _, _, _, _
->
PlayListModel(id, title, title, songImgList, user)
PlayListModel(id, title, title, songImgList, user, isStreamable = true)
}).executeAsList()
}

Expand Down Expand Up @@ -79,7 +80,8 @@ fun LocalDb.getRecentPlayed(numberOfLines: Long): List<PlayListModel> {
title = title,
user = user,
songImgList = songImgList,
isFavorite = isFavorite ?: false
isFavorite = isFavorite ?: false,
isStreamable = true
)
},
numberOfSongs = numberOfLines
Expand All @@ -95,7 +97,8 @@ fun LocalDb.getMostPlayedSongs(numberOfSongs: Long): List<PlayListModel> {
title = title,
user = user,
songImgList = songImgList,
songCounter = songCounter.toString()
songCounter = songCounter.toString(),
isStreamable = true
)
}).executeAsList()
}
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,7 @@ data class PlayListModel(
@SerialName("artwork") val songImgList: SongIconList = SongIconList(),
@SerialName("user") val user: UserModel = UserModel(),
@SerialName("is_playlist") val isPlaylist: Boolean = false,
@SerialName("is_streamable") val isStreamable: Boolean = false,
@Transient val isFavorite: Boolean = false,
@Transient val songCounter: String = ""
)
Original file line number Diff line number Diff line change
Expand Up @@ -8,24 +8,38 @@ import com.rld.justlisten.viewmodel.screens.playlist.PlayListEnum.*
import kotlinx.serialization.SerialName
import kotlinx.serialization.Serializable

suspend fun ApiClient.fetchPlaylist(index: Int, playListEnum: PlayListEnum, playlistId: String="", queryPlaylist: String = "Rock"): PlayListResponse? {
return when (playListEnum) {
TOP_PLAYLIST -> getResponse("/full/playlists/top?type=playlist&limit=${index}&app_name=$appName")
REMIX -> getResponse("/playlists/search?query=${queryPlaylist}&limit=${index}&app_name=$appName")
CURRENT_PLAYLIST -> getResponse("/playlists/${playlistId}/tracks?app_name=$appName")
HOT -> getResponse("/playlists/search?query=${queryPlaylist}&limit=${index}&app_name=$appName")
FAVORITE -> TODO()
CREATED_BY_USER -> TODO()
MOST_PLAYED -> TODO()
}
suspend fun ApiClient.fetchPlaylist(
index: Int,
playListEnum: PlayListEnum,
playlistId: String = "",
queryPlaylist: String = "Rock"
): PlayListResponse? {
return when (playListEnum) {
TOP_PLAYLIST -> getResponse("/full/playlists/top?type=playlist&limit=${index}&app_name=$appName")
REMIX -> getResponse("/playlists/search?query=${queryPlaylist}&limit=${index}&app_name=$appName")
CURRENT_PLAYLIST -> getResponse("/playlists/${playlistId}/tracks?app_name=$appName")
HOT -> getResponse("/playlists/search?query=${queryPlaylist}&limit=${index}&app_name=$appName")
FAVORITE -> TODO()
CREATED_BY_USER -> TODO()
MOST_PLAYED -> TODO()
}
}

suspend fun ApiClient.getTracks(limit: Int, category: String, timeRange: String) : PlayListResponse? {
return getResponse("/full/tracks/trending/EJ57D?genre=${category}&limit=${limit}&time=${timeRange}&app_name=$appName")
suspend fun ApiClient.getTracks(
limit: Int,
category: String,
timeRange: String
): PlayListResponse? {
val response: PlayListResponse? =
getResponse("/full/tracks/trending/EJ57D?genre=${category}&limit=${limit}&time=${timeRange}&app_name=$appName")
return response?.let {
val tracks = it.data.filter { it.isStreamable }
PlayListResponse(tracks)
}
}

@Serializable
data class PlayListResponse(
@SerialName("data") val data : List<PlayListModel>,
@SerialName("err") val error : String? = null,
@SerialName("data") val data: List<PlayListModel>,
@SerialName("err") val error: String? = null,
)
Original file line number Diff line number Diff line change
Expand Up @@ -7,8 +7,15 @@ import com.rld.justlisten.viewmodel.screens.search.SearchEnum
import com.rld.justlisten.viewmodel.screens.search.SearchEnum.*

suspend fun ApiClient.searchFor(searchFor: String, searchEnum: SearchEnum): PlayListResponse? {
return when(searchEnum) {
TRACKS -> getResponse("/tracks/search?query=${searchFor}&app_name=${Constants.appName}")
return when (searchEnum) {
TRACKS -> {
val response: PlayListResponse? =
getResponse("/tracks/search?query=${searchFor}&app_name=${Constants.appName}")
response?.let {
val tracks = it.data.filter { it.isStreamable }
PlayListResponse(tracks)
}
}
PLAYLIST -> getResponse("/playlists/search?query=${searchFor}&app_name=${Constants.appName}")
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -21,11 +21,11 @@ fun Navigation.initPlaylistDetail(params: PlaylistDetailParams) = ScreenInitSett
callOnInit = {
val currentPlaylist =
dataRepository.getPlaylist(
index = 20,
index = 40,
params.playlistEnum,
params.playlistId,
params.songsList
)
).filter { it._data.isStreamable }

val playlistIcon =
if (params.playlistEnum == PlayListEnum.CREATED_BY_USER && currentPlaylist.isNotEmpty())
Expand Down

0 comments on commit 444e2de

Please sign in to comment.