Skip to content

Commit

Permalink
Add prefs landing page, centralise music top bar
Browse files Browse the repository at this point in the history
Use CompositionLocalProvider to provide PlayerState
Move top bar visualiser and lyrics UI to a function, use for main page and now playing
Fix incorrect long press action hints for non-queue songs #42
Replace PrefsPage category selector with landing page, separate Discord status options from other #10
Improve NowPlaying main page layout padding
  • Loading branch information
toasterofbread committed May 21, 2023
1 parent c4f589e commit b985921
Show file tree
Hide file tree
Showing 84 changed files with 1,139 additions and 1,048 deletions.
8 changes: 4 additions & 4 deletions androidApp/src/main/java/com/spectre7/spmp/MainActivity.kt
Original file line number Diff line number Diff line change
@@ -1,17 +1,17 @@
package com.spectre7.spmp

import SpMp
import android.content.ComponentCallbacks2
import android.content.Intent
import android.net.Uri
import android.os.Bundle
import android.os.StrictMode
import android.os.StrictMode.VmPolicy
import android.view.WindowManager
import androidx.activity.ComponentActivity
import androidx.activity.compose.setContent
import com.spectre7.spmp.model.MediaItem
import com.spectre7.spmp.platform.PlatformContext
import android.content.Intent
import android.net.Uri
import androidx.core.view.WindowCompat
import com.spectre7.spmp.platform.PlatformContext

class MainActivity : ComponentActivity() {
companion object {
Expand Down
2 changes: 1 addition & 1 deletion shared/build.gradle.kts
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
import java.util.Properties
import java.io.FileInputStream
import java.util.*

plugins {
kotlin("multiplatform")
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,8 +4,10 @@ import android.Manifest
import android.accessibilityservice.AccessibilityService
import android.accessibilityservice.AccessibilityServiceInfo
import android.app.AlertDialog
import android.content.*
import com.spectre7.spmp.platform.ProjectPreferences
import android.content.BroadcastReceiver
import android.content.Context
import android.content.Intent
import android.content.IntentFilter
import android.database.ContentObserver
import android.os.Handler
import android.view.KeyEvent
Expand All @@ -19,8 +21,9 @@ import androidx.lifecycle.lifecycleScope
import androidx.localbroadcastmanager.content.LocalBroadcastManager
import com.spectre7.spmp.model.Settings
import com.spectre7.spmp.platform.PlatformContext
import com.spectre7.utils.Permissions
import com.spectre7.spmp.platform.ProjectPreferences
import com.spectre7.spmp.resources.getString
import com.spectre7.utils.Permissions
import kotlinx.coroutines.*
import java.lang.ref.WeakReference
import java.util.*
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -14,9 +14,10 @@ import com.spectre7.spmp.model.Settings
import com.spectre7.spmp.model.Song
import com.spectre7.spmp.platform.PlatformBinder
import com.spectre7.spmp.platform.PlatformContext
import com.spectre7.spmp.platform.PlayerDownloadManager.DownloadStatus
import com.spectre7.spmp.platform.PlatformServiceImpl
import com.spectre7.spmp.platform.PlayerDownloadManager
import com.spectre7.spmp.platform.PlayerDownloadManager.DownloadStatus
import com.spectre7.spmp.resources.getString
import kotlinx.coroutines.delay
import kotlinx.coroutines.runBlocking
import java.io.File
Expand All @@ -25,7 +26,6 @@ import java.net.ConnectException
import java.net.HttpURLConnection
import java.net.URL
import java.util.concurrent.Executors
import com.spectre7.spmp.resources.getString

private const val FILE_DOWNLOADING_SUFFIX = ".part"
private const val NOTIFICATION_ID = 1
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -52,15 +52,19 @@ class ExoVisualizer(
@Composable
fun Visualiser(colour: Color, modifier: Modifier, opacity: Float = 1f) {
DisposableEffect(Unit) {
processor.listener = this@ExoVisualizer
processor.listeners.add(this@ExoVisualizer)
onDispose {
processor.listener = null
processor.listeners.remove(this@ExoVisualizer)
}
}

Canvas(modifier) {
invalidate_state

if (size.height < 10f) {
return@Canvas
}

// Set up counters and widgets
var currentFftPosition = 0
var currentFrequencyBandLimitIndex = 0
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -72,7 +72,7 @@ class FFTAudioProcessor : AudioProcessor {
private var fftBuffer: ByteBuffer
private var outputBuffer: ByteBuffer

var listener: FFTListener? = null
var listeners: MutableList<FFTListener> = mutableListOf()
private var inputEnded: Boolean = false

private lateinit var srcBuffer: ByteBuffer
Expand Down Expand Up @@ -195,7 +195,7 @@ class FFTAudioProcessor : AudioProcessor {
}

private fun processFFT(buffer: ByteBuffer) {
if (listener == null) {
if (listeners.isEmpty()) {
return
}
srcBuffer.put(buffer.array())
Expand Down Expand Up @@ -223,8 +223,11 @@ class FFTAudioProcessor : AudioProcessor {
srcBuffer.compact()
srcBufferPosition -= bytesToProcess
srcBuffer.position(srcBufferPosition)

val fft = noise?.fft(src, dst)!!
listener?.onFFTReady(inputAudioFormat.sampleRate, inputAudioFormat.channelCount, fft)
for (listener in listeners) {
listener.onFFTReady(inputAudioFormat.sampleRate, inputAudioFormat.channelCount, fft)
}
}
}

Expand Down

This file was deleted.

Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,6 @@ package com.spectre7.spmp.platform

import android.graphics.Bitmap
import android.net.Uri
import android.util.Log
import androidx.compose.ui.graphics.ImageBitmap
import androidx.compose.ui.graphics.asAndroidBitmap
import com.my.kizzyrpc.KizzyRPC
Expand All @@ -12,33 +11,25 @@ import com.my.kizzyrpc.model.Metadata
import com.my.kizzyrpc.model.Timestamps
import com.spectre7.utils.indexOfFirstOrNull
import com.spectre7.utils.indexOfOrNull
import dev.kord.common.entity.DiscordChannel
import dev.kord.common.entity.DiscordMessage
import dev.kord.common.entity.Snowflake
import dev.kord.core.Kord
import dev.kord.core.behavior.channel.createTextChannel
import dev.kord.core.cache.data.toData
import dev.kord.core.entity.channel.CategorizableChannel
import dev.kord.core.entity.channel.Category
import dev.kord.core.exception.KordInitializationException
import dev.kord.rest.NamedFile
import dev.kord.rest.builder.channel.TextChannelCreateBuilder
import dev.kord.rest.json.request.ChannelModifyPatchRequest
import dev.kord.rest.route.Position
import dev.kord.rest.service.ChannelService
import dev.kord.rest.service.createTextChannel
import dev.kord.rest.service.patchCategory
import io.ktor.client.network.sockets.*
import io.ktor.client.request.forms.*
import io.ktor.utils.io.jvm.javaio.*
import kotlinx.coroutines.delay
import kotlinx.coroutines.flow.filter
import kotlinx.coroutines.flow.filterIsInstance
import kotlinx.coroutines.flow.firstOrNull
import kotlinx.coroutines.flow.toList
import java.io.ByteArrayOutputStream
import java.io.IOException
import java.net.ConnectException

actual class DiscordStatus actual constructor(
private val bot_token: String?,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,6 @@ import androidx.compose.ui.graphics.ImageBitmap
import androidx.compose.ui.graphics.asAndroidBitmap
import androidx.compose.ui.graphics.asImageBitmap
import androidx.palette.graphics.Palette
import com.spectre7.utils.compare
import java.io.ByteArrayOutputStream

actual fun ByteArray.toImageBitmap(): ImageBitmap =
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -37,6 +37,7 @@ import com.spectre7.spmp.PlayerServiceHost
import com.spectre7.spmp.exovisualiser.FFTAudioProcessor
import com.spectre7.spmp.model.MediaItemThumbnailProvider
import com.spectre7.spmp.model.Song
import com.spectre7.spmp.model.SongLikeStatus
import kotlinx.coroutines.delay
import kotlinx.coroutines.runBlocking
import java.io.File
Expand All @@ -58,10 +59,10 @@ class MediaPlayerServiceSession: MediaSessionService() {
private var current_song: Song? = null

private inner class PlayerListener: Player.Listener {
private fun onSongLikeStatusChanged(status: Song.LikeStatus?) {
if (status != Song.LikeStatus.LOADING) {
private fun onSongLikeStatusChanged(status: SongLikeStatus?) {
if (status?.loading == false) {
runInMainThread {
updatePlayerCustomActions(status)
updatePlayerCustomActions(status.status)
}
}
}
Expand All @@ -77,7 +78,7 @@ class MediaPlayerServiceSession: MediaSessionService() {
song?.like_status?.listeners?.add(::onSongLikeStatusChanged)
current_song = song

onSongLikeStatusChanged(song?.like_status?.status)
onSongLikeStatusChanged(song?.like_status)
}
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -17,11 +17,8 @@ import android.os.VibrationEffect
import android.os.VibratorManager
import android.view.Window
import android.view.WindowInsetsController.APPEARANCE_LIGHT_STATUS_BARS
import android.view.WindowManager
import android.widget.Toast
import androidx.compose.foundation.layout.WindowInsets
import androidx.compose.foundation.layout.size
import androidx.compose.foundation.layout.systemBars
import androidx.compose.material.icons.Icons
import androidx.compose.material.icons.filled.ContentCopy
import androidx.compose.material.icons.filled.Share
Expand All @@ -36,9 +33,6 @@ import androidx.compose.ui.text.font.Font
import androidx.compose.ui.unit.Dp
import androidx.compose.ui.unit.dp
import androidx.core.app.NotificationManagerCompat
import androidx.core.view.WindowCompat
import androidx.core.view.WindowInsetsCompat
import com.google.android.exoplayer2.util.Assertions
import com.spectre7.spmp.model.Settings
import com.spectre7.spmp.resources.getString
import com.spectre7.spmp.resources.getStringTODO
Expand Down
Original file line number Diff line number Diff line change
@@ -1,11 +1,11 @@
package com.spectre7.spmp.platform

import android.app.Service
import android.content.*
import android.content.ComponentName
import android.content.Intent
import android.content.ServiceConnection
import android.os.Binder
import android.os.IBinder
import android.os.Parcelable
import androidx.localbroadcastmanager.content.LocalBroadcastManager

actual abstract class PlatformBinder: Binder()

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,6 @@ package com.spectre7.utils
import android.Manifest
import android.app.AlertDialog
import android.content.Context
import com.spectre7.spmp.platform.PlatformContext
import android.content.Intent
import android.content.pm.PackageManager
import android.provider.Settings
Expand Down
8 changes: 6 additions & 2 deletions shared/src/commonMain/kotlin/SpMp.kt
Original file line number Diff line number Diff line change
Expand Up @@ -38,8 +38,9 @@ import com.spectre7.spmp.platform.composable.PlatformAlertDialog
import com.spectre7.spmp.resources.getString
import com.spectre7.spmp.resources.getStringTODO
import com.spectre7.spmp.resources.initResources
import com.spectre7.spmp.ui.layout.mainpage.PlayerState
import com.spectre7.spmp.ui.layout.mainpage.PlayerStateImpl
import com.spectre7.spmp.ui.layout.mainpage.PlayerView
import com.spectre7.spmp.ui.layout.mainpage.PlayerViewContextImpl
import com.spectre7.spmp.ui.theme.ApplicationTheme
import com.spectre7.spmp.ui.theme.Theme
import com.spectre7.utils.*
Expand All @@ -52,6 +53,9 @@ import kotlin.math.roundToInt

expect fun getPlatformName(): String

val GlobalPlayerState = PlayerStateImpl()
val LocalPlayerState: ProvidableCompositionLocal<PlayerState> = staticCompositionLocalOf { GlobalPlayerState }

object SpMp {

private val LANGUAGES = listOf("af", "am", "ar", "as", "az", "be", "bg", "bn", "bs", "ca", "cs", "da", "de", "el", "en-GB", "en-IN", "en", "es", "es-419", "es-US", "et", "eu", "fa", "fi", "fil", "fr-CA", "fr", "gl", "gu", "hi", "hr", "hu", "hy", "id", "is", "it", "iw", "ja", "ka", "kk", "km", "kn", "ko", "ky", "lo", "lt", "lv", "mk", "ml", "mn", "mr", "ms", "my", "no", "ne", "nl", "or", "pa", "pl", "pt", "pt-PT", "ro", "ru", "si", "sk", "sl", "sq", "sr-Latn", "sr", "sv", "sw", "ta", "te", "th", "tr", "uk", "ur", "uz", "vi", "zh-CN", "zh-HK", "zh-TW", "zu")
Expand Down Expand Up @@ -111,7 +115,7 @@ object SpMp {
ApplicationTheme(context, getFontFamily(context)) {
Theme.Update(context, MaterialTheme.colorScheme.primary)

val player = remember { PlayerViewContextImpl() }
val player = GlobalPlayerState
player.init()

LaunchedEffect(open_uri) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -34,7 +34,6 @@ import com.spectre7.spmp.platform.LargeDropdownMenu
import com.spectre7.spmp.platform.PlatformContext
import com.spectre7.spmp.platform.ProjectPreferences
import com.spectre7.spmp.platform.composable.PlatformAlertDialog
import com.spectre7.spmp.resources.getString
import com.spectre7.spmp.resources.getStringTODO
import com.spectre7.spmp.ui.theme.Theme
import com.spectre7.utils.*
Expand Down Expand Up @@ -537,7 +536,6 @@ class SettingsItemMultipleChoice(
state.reset()
}

@OptIn(ExperimentalMaterial3Api::class)
@Composable
override fun GetItem(
theme: Theme,
Expand Down Expand Up @@ -570,7 +568,7 @@ class SettingsItemMultipleChoice(
null
) { state.value = i }
) {
Text(get_choice(i), color = theme.on_accent)
Text(get_choice(i))
RadioButton(i == state.value, onClick = { state.value = i }, colors = RadioButtonDefaults.colors(theme.vibrant_accent))
}
}
Expand Down
Original file line number Diff line number Diff line change
@@ -1,19 +1,15 @@
package com.spectre7.composesettings.ui

import com.spectre7.spmp.platform.PlatformContext
import com.spectre7.spmp.platform.ProjectPreferences
import androidx.compose.animation.Crossfade
import androidx.compose.foundation.ScrollState
import androidx.compose.foundation.background
import androidx.compose.foundation.layout.*
import androidx.compose.foundation.verticalScroll
import androidx.compose.runtime.*
import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier
import androidx.compose.ui.graphics.Color
import androidx.compose.ui.layout.onSizeChanged
import androidx.compose.ui.unit.Dp
import androidx.compose.ui.unit.dp
import com.spectre7.spmp.platform.PlatformContext
import com.spectre7.spmp.platform.ProjectPreferences
import com.spectre7.spmp.ui.component.PillMenu
import com.spectre7.spmp.ui.theme.Theme
import com.spectre7.utils.thenIf
Expand Down
Loading

0 comments on commit b985921

Please sign in to comment.