Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
23 commits
Select commit Hold shift + click to select a range
000ab89
chore(deps): bump the gradle-dependencies group across 1 directory wi…
dependabot[bot] May 22, 2026
d73bf06
Merge pull request #22 from Veridian-Zenith/dependabot/gradle/gradle-…
daedaevibin May 23, 2026
a90875c
Merge branch 'theovilardo:master' into master
daedaevibin May 24, 2026
4e7cd15
chore(deps): bump com.google.devtools.ksp
dependabot[bot] May 27, 2026
014cd95
Merge branch 'theovilardo:master' into master
daedaevibin May 28, 2026
3352b1a
Merge pull request #23 from Veridian-Zenith/dependabot/gradle/gradle-…
daedaevibin May 28, 2026
7809908
Merge branch 'theovilardo:master' into master
daedaevibin May 28, 2026
2443eec
chore: modernize dependencies, improve build configuration, and code …
daedaevibin May 28, 2026
a82f000
Fix malformed baseline-prof.txt entry
daedaevibin May 28, 2026
c818b10
Fix CodeQL analysis failure by using autobuild
daedaevibin May 28, 2026
5fb5e23
Fix CodeQL analysis: Use manual build and skip signing tasks
daedaevibin May 28, 2026
b8a9986
Fix CodeQL: Disable cache and run clean build
daedaevibin May 28, 2026
7508915
chore(deps): bump the gradle-dependencies group across 1 directory wi…
dependabot[bot] May 30, 2026
9dee9f0
Merge branch 'theovilardo:master' into master
daedaevibin May 30, 2026
aedb3a4
Merge branch 'theovilardo:master' into master
daedaevibin Jun 2, 2026
1069995
Merge pull request #25 from Veridian-Zenith/dependabot/gradle/gradle-…
daedaevibin Jun 2, 2026
cb2de93
Add CodeQL workflow for Java/Kotlin project analysis
daedaevibin Jun 2, 2026
3fa1219
Delete .github/workflows/codeql.yml
daedaevibin Jun 2, 2026
d29a9ae
Add CodeQL security analysis workflow
daedaevibin Jun 2, 2026
bd4033a
chore: split-up CodeQL Workflows for cleanliness and lower failure ra…
daedaevibin Jun 2, 2026
717175e
Update CodeQL database upload path for Java-Kotlin
daedaevibin Jun 2, 2026
24bba4f
refactor: consolidate CodeQL workflows and add linting/testing
daedaevibin Jun 2, 2026
7c0dd56
CodeQL Permissions Corrections
daedaevibin Jun 2, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
13 changes: 8 additions & 5 deletions .github/workflows/codeql.yml
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
name: "CodeQL Advanced"
name: "CodeQL"

on:
push:
Expand All @@ -11,7 +11,7 @@ on:

jobs:
analyze:
name: Analyze
name: CodeQL Analysis
if: github.actor != 'dependabot[bot]'
runs-on: ubuntu-latest
permissions:
Expand All @@ -21,16 +21,19 @@ jobs:

steps:
- name: Checkout repository
uses: actions/checkout@v6 # v4 is current stable; v5 is emerging
uses: actions/checkout@v6

- name: Set up JDK 21
uses: actions/setup-java@v5
with:
distribution: 'temurin'
java-version: '21'
cache: 'gradle'

- name: Setup Gradle
uses: gradle/actions/setup-gradle@v6
with:
cache-read-only: false

- name: Initialize CodeQL
uses: github/codeql-action/init@v4
Expand All @@ -39,10 +42,10 @@ jobs:
build-mode: manual

- name: Build with Gradle
run: ./gradlew assembleDebug # Use the wrapper for consistency
run: ./gradlew clean assembleDebug -x :app:validateSigningBenchmark -x :app:validateSigningRelease

- name: Perform CodeQL Analysis
uses: github/codeql-action/analyze@v4
with:
# Match the languages defined in the init step
category: "/language:java-kotlin"
upload: true
13 changes: 13 additions & 0 deletions .github/workflows/lint.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
name: "Lint"
on: [push, pull_request]
jobs:
lint:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v6
- uses: actions/setup-java@v5
with:
distribution: 'temurin'
java-version: '21'
cache: 'gradle'
- run: ./gradlew lint detekt
13 changes: 13 additions & 0 deletions .github/workflows/tests.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
name: "Tests"
on: [push, pull_request]
jobs:
test:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v6
- uses: actions/setup-java@v5
with:
distribution: 'temurin'
java-version: '21'
cache: 'gradle'
- run: ./gradlew test --parallel
43 changes: 9 additions & 34 deletions app/build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -130,7 +130,8 @@ android {
}

lint {
checkReleaseBuilds = false
checkReleaseBuilds = true
abortOnError = false // Keep it from failing the build entirely on CI if you have minor warnings
}

splits {
Expand Down Expand Up @@ -196,52 +197,29 @@ dependencies {

// AndroidX & Compose
implementation(libs.androidx.core.ktx)
implementation(libs.androidx.lifecycle.runtime.ktx)
implementation(libs.androidx.lifecycle.runtime.compose)
implementation(libs.lifecycleprocess)
implementation(libs.bundles.lifecycle)
implementation(libs.androidx.activity.compose)
implementation(platform(libs.androidx.compose.bom))
implementation(libs.androidx.ui)
implementation(libs.androidx.ui.graphics)
implementation(libs.androidx.ui.tooling.preview)
implementation(libs.androidx.compose.material3)
implementation(libs.androidx.material.icons.core)
implementation(libs.androidx.material.icons.extended)
implementation(libs.androidx.constraintlayout.compose)
implementation(libs.androidx.foundation)
implementation(libs.androidx.animation)
implementation(libs.bundles.compose)
implementation(libs.androidx.palette.ktx)
implementation(libs.androidx.core.splashscreen)
implementation(libs.androidx.ui.text.google.fonts)
implementation(libs.material)
implementation(libs.androidx.appcompat)

// DI & Navigation
implementation(libs.hilt.android)
implementation(libs.bundles.hilt)
ksp(libs.hilt.android.compiler)
implementation(libs.androidx.hilt.navigation.compose)
implementation(libs.androidx.hilt.lifecycle.viewmodel.compose)
implementation(libs.androidx.hilt.work)
ksp(libs.androidx.hilt.compiler)
implementation(libs.androidx.navigation.compose)
implementation(libs.androidx.navigation.runtime.ktx)

// Storage & Paging
implementation(libs.androidx.room.runtime)
implementation(libs.bundles.room)
ksp(libs.androidx.room.compiler)
implementation(libs.androidx.room.ktx)
implementation(libs.androidx.room.paging)
implementation(libs.androidx.paging.runtime)
implementation(libs.androidx.paging.compose)
implementation(libs.androidx.paging.common)
implementation(libs.bundles.paging)

// Media & Files
implementation(libs.androidx.media3.exoplayer)
implementation(libs.androidx.media3.ui)
implementation(libs.androidx.media3.session)
implementation(libs.bundles.media3)
implementation(libs.androidx.media3.exoplayer.ffmpeg)
implementation(libs.androidx.media3.exoplayer.midi)
implementation(libs.androidx.media3.transformer)
implementation(libs.androidx.mediarouter)
implementation(libs.androidx.media)
implementation(libs.coil.compose)
Expand All @@ -252,10 +230,7 @@ dependencies {
implementation(libs.androidx.graphics.shapes)

// Networking & Serialization
implementation(libs.retrofit)
implementation(libs.converter.gson)
implementation(libs.okhttp)
implementation(libs.logging.interceptor)
implementation(libs.bundles.networking)
implementation(libs.gson)
implementation(libs.kotlinx.serialization.json)
implementation(libs.kotlinx.collections.immutable)
Expand Down
2 changes: 1 addition & 1 deletion app/src/main/baseline-prof.txt
Original file line number Diff line number Diff line change
Expand Up @@ -5997,7 +5997,7 @@ Landroidx/compose/material3/MinimumInteractiveModifierNode$$ExternalSyntheticLam
SPLandroidx/compose/material3/MinimumInteractiveModifierNode$$ExternalSyntheticLambda0;-><init>(ILandroidx/compose/ui/layout/Placeable;I)V
PLandroidx/compose/material3/MinimumInteractiveModifierNode$$ExternalSyntheticLambda0;->invoke(Ljava/lang/Object;)Ljava/lang/Object;
Landroidx/compose/material3/ModalBottomSheetKt;
HSPLandroidx/compose/material3/ModalBottomSheetKt;->rememberModalBottomSheetState(ZLkotlin/jvm/functions/Function1;Landroidx/compose/runtime/Composer;II)Landroidx/compose/material3/SheetState;
HSPLandroidx/compose/material3/ModalBottomSheetKt;->rememberBottomSheetState(ZLkotlin/jvm/functions/Function1;Landroidx/compose/runtime/Composer;II)Landroidx/compose/material3/SheetState;
Landroidx/compose/material3/ModalBottomSheetKt$$ExternalSyntheticLambda3;
SPLandroidx/compose/material3/ModalBottomSheetKt$$ExternalSyntheticLambda3;-><init>()V
Landroidx/compose/material3/MotionScheme;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -291,19 +291,19 @@ abstract class PixelPlayDatabase : RoomDatabase() {
}

val MIGRATION_18_19 = object : Migration(18, 19) {
override fun migrate(database: SupportSQLiteDatabase) {
database.execSQL(
override fun migrate(db: SupportSQLiteDatabase) {
db.execSQL(
"CREATE TABLE IF NOT EXISTS `lyrics` (`songId` INTEGER NOT NULL, `content` TEXT NOT NULL, `isSynced` INTEGER NOT NULL DEFAULT 0, `source` TEXT, PRIMARY KEY(`songId`))"
)
database.execSQL(
db.execSQL(
"INSERT INTO lyrics (songId, content) SELECT id, lyrics FROM songs WHERE lyrics IS NOT NULL AND lyrics != ''"
)
}
}

val MIGRATION_14_15 = object : Migration(14, 15) {
override fun migrate(database: SupportSQLiteDatabase) {
database.execSQL(
override fun migrate(db: SupportSQLiteDatabase) {
db.execSQL(
"ALTER TABLE album_art_themes ADD COLUMN paletteStyle TEXT NOT NULL DEFAULT 'tonal_spot'"
)

Expand Down Expand Up @@ -332,14 +332,14 @@ abstract class PixelPlayDatabase : RoomDatabase() {
val prefixes = listOf("light_", "dark_")
prefixes.forEach { prefix ->
newRoleColumns.forEach { role ->
database.execSQL(
db.execSQL(
"ALTER TABLE album_art_themes ADD COLUMN ${prefix}${role} TEXT NOT NULL DEFAULT '#00000000'"
)
}
}

// The table is a cache; wipe stale rows so we always regenerate with full token data.
database.execSQL("DELETE FROM album_art_themes")
db.execSQL("DELETE FROM album_art_themes")
}
}

Expand Down
Original file line number Diff line number Diff line change
@@ -1,7 +1,6 @@
package com.theveloper.pixelplay.data.remote.qqmusic

import android.content.Context
import android.os.Build
import android.os.Handler
import android.os.Looper
import android.util.Base64
Expand Down Expand Up @@ -76,14 +75,12 @@ class QQSignGenerator(private val context: Context) {
domStorageEnabled = true
allowFileAccess = false
allowContentAccess = false
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN) {
allowFileAccessFromFileURLs = false
allowUniversalAccessFromFileURLs = false
}
@Suppress("DEPRECATION")
allowFileAccessFromFileURLs = false
@Suppress("DEPRECATION")
allowUniversalAccessFromFileURLs = false
mixedContentMode = WebSettings.MIXED_CONTENT_NEVER_ALLOW
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
safeBrowsingEnabled = true
}
safeBrowsingEnabled = true
}
webViewClient = object : WebViewClient() {
override fun onPageFinished(view: WebView?, url: String?) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -382,7 +382,7 @@ class MediaStoreSongRepository @Inject constructor(
val minDuration = values[3] as Int
Triple(allowedDirs, blockedDirs, minDuration)
}.flatMapLatest { (allowedDirs, blockedDirs, minDuration) ->
val minDurationMs = minDuration as Int
val minDurationMs = minDuration
val musicIds = getFilteredSongIds(allowedDirs.toList(), blockedDirs.toList(), minDurationMs)
val genreMap = getSongIdToGenreMap(context.contentResolver)

Expand Down
Original file line number Diff line number Diff line change
@@ -1,42 +1,32 @@
package com.theveloper.pixelplay.data.repository

// import kotlinx.coroutines.withContext // May not be needed for Flow transformations

// import kotlinx.coroutines.sync.withLock // May not be needed if directoryScanMutex logic changes

import android.content.Context
import android.net.Uri
import android.os.Environment
import android.provider.MediaStore
import android.util.Log

import com.theveloper.pixelplay.data.model.Song
import com.theveloper.pixelplay.data.repository.ArtistImageRepository
import dagger.Lazy
import dagger.hilt.android.qualifiers.ApplicationContext
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.flow.Flow
import kotlinx.coroutines.flow.combine
import kotlinx.coroutines.flow.distinctUntilChanged
import kotlinx.coroutines.flow.map
import javax.inject.Inject
import javax.inject.Singleton
import androidx.core.net.toUri
import androidx.paging.Pager
import androidx.paging.PagingConfig
import androidx.paging.PagingData
import androidx.paging.filter
import androidx.paging.map
import com.theveloper.pixelplay.data.database.FavoritesDao
import com.theveloper.pixelplay.data.database.MusicDao
import com.theveloper.pixelplay.data.database.SearchHistoryDao
import com.theveloper.pixelplay.data.database.SearchHistoryEntity
import com.theveloper.pixelplay.data.database.TelegramChannelEntity
import com.theveloper.pixelplay.data.database.TelegramDao
import com.theveloper.pixelplay.data.database.TelegramTopicEntity
import com.theveloper.pixelplay.data.database.toAlbum
import com.theveloper.pixelplay.data.database.toArtist
import com.theveloper.pixelplay.data.database.toSearchHistoryItem
import com.theveloper.pixelplay.data.database.toSong
import com.theveloper.pixelplay.data.database.toTelegramEntity
import com.theveloper.pixelplay.data.database.toTelegramEntityWithThread
import com.theveloper.pixelplay.data.database.TelegramTopicEntity
import com.theveloper.pixelplay.data.model.Album
import com.theveloper.pixelplay.data.model.Artist
import com.theveloper.pixelplay.data.model.FolderSource
import com.theveloper.pixelplay.data.model.Genre
import com.theveloper.pixelplay.data.model.Lyrics
import com.theveloper.pixelplay.data.model.LyricsSourcePreference
Expand All @@ -45,8 +35,8 @@ import com.theveloper.pixelplay.data.model.Playlist
import com.theveloper.pixelplay.data.model.SearchFilterType
import com.theveloper.pixelplay.data.model.SearchHistoryItem
import com.theveloper.pixelplay.data.model.SearchResultItem
import com.theveloper.pixelplay.data.model.Song
import com.theveloper.pixelplay.data.model.SortOption
import com.theveloper.pixelplay.data.model.FolderSource
import com.theveloper.pixelplay.data.model.StorageFilter
import com.theveloper.pixelplay.data.preferences.PlaylistPreferencesRepository
import com.theveloper.pixelplay.data.preferences.UserPreferencesRepository
Expand All @@ -56,33 +46,36 @@ import com.theveloper.pixelplay.utils.LogUtils
import com.theveloper.pixelplay.utils.StorageType
import com.theveloper.pixelplay.utils.StorageUtils
import com.theveloper.pixelplay.utils.toHexString
import dagger.Lazy
import dagger.hilt.android.qualifiers.ApplicationContext
import kotlinx.collections.immutable.toImmutableList
import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.ExperimentalCoroutinesApi
import kotlinx.coroutines.Job
import kotlinx.coroutines.SupervisorJob
import kotlinx.coroutines.delay
import kotlinx.coroutines.flow.Flow
import kotlinx.coroutines.flow.SharingStarted
import kotlinx.coroutines.flow.StateFlow
import kotlinx.coroutines.flow.combine
import kotlinx.coroutines.flow.conflate
import kotlinx.coroutines.flow.distinctUntilChanged
import kotlinx.coroutines.flow.first
import kotlinx.coroutines.flow.flatMapLatest
import kotlinx.coroutines.flow.flow
import kotlinx.coroutines.flow.flowOf
import kotlinx.coroutines.flow.flowOn
import kotlinx.coroutines.flow.map
import kotlinx.coroutines.flow.onEach
import kotlinx.coroutines.flow.stateIn
import kotlinx.coroutines.launch
import kotlinx.coroutines.sync.Mutex
import kotlinx.coroutines.sync.withLock
import kotlinx.coroutines.withContext
import java.io.File
import androidx.paging.Pager
import androidx.paging.PagingConfig
import androidx.paging.PagingData
import androidx.paging.map
import androidx.paging.filter
import kotlinx.coroutines.flow.conflate
import kotlinx.coroutines.Job
import kotlinx.coroutines.launch
import kotlinx.coroutines.SupervisorJob
import kotlinx.coroutines.CoroutineScope
import javax.inject.Inject
import javax.inject.Singleton

@OptIn(ExperimentalCoroutinesApi::class)
@Singleton
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -49,6 +49,7 @@ fun AiMetadataSheet(
error: String?,
onRetry: () -> Unit
) {
@Suppress("DEPRECATION")
val sheetState = rememberModalBottomSheetState(skipPartiallyExpanded = true)
val colors = MaterialTheme.colorScheme

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -84,6 +84,7 @@ fun AiPlaylistSheet(
var minLength by remember { mutableStateOf("5") }
var maxLength by remember { mutableStateOf("15") }

@Suppress("DEPRECATION")
val sheetState = rememberModalBottomSheetState(
skipPartiallyExpanded = true,
)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -57,6 +57,7 @@ fun AlbumMultiSelectionOptionSheet(
onPlayNext: () -> Unit,
onAddToQueue: () -> Unit
) {
@Suppress("DEPRECATION")
val sheetState = rememberModalBottomSheetState(skipPartiallyExpanded = true)

ModalBottomSheet(
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -333,6 +333,7 @@ fun CastBottomSheet(
bluetoothName = activeBluetoothName
)

@Suppress("DEPRECATION")
val sheetState = rememberModalBottomSheetState(
skipPartiallyExpanded = true,
confirmValueChange = { true }
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -51,6 +51,7 @@ fun CustomPresetsSheet(
onDelete: (EqualizerPreset) -> Unit,
onDismiss: () -> Unit
) {
@Suppress("DEPRECATION")
val sheetState = rememberModalBottomSheetState(skipPartiallyExpanded = true)

ModalBottomSheet(
Expand Down
Loading
Loading