Skip to content

Commit

Permalink
Complete radio undo (closes #55)
Browse files Browse the repository at this point in the history
Fix remote work
Implement and fix radio undo for remaining PlayerService functions
Add undo for radio filter change
Add WaveBorder to more pages
  • Loading branch information
toasterofbread committed Jul 4, 2023
1 parent 32e5655 commit fc78b6a
Show file tree
Hide file tree
Showing 117 changed files with 1,438 additions and 492 deletions.
4 changes: 2 additions & 2 deletions androidApp/build.gradle.kts
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
import java.util.Properties
import java.io.FileInputStream
import org.xmlpull.v1.XmlPullParser
import org.xmlpull.v1.XmlPullParserFactory
import java.io.FileInputStream
import java.util.Properties

plugins {
id("com.android.application")
Expand Down
6 changes: 5 additions & 1 deletion desktopApp/src/jvmMain/kotlin/main.kt
Original file line number Diff line number Diff line change
@@ -1,4 +1,8 @@
import androidx.compose.runtime.*
import androidx.compose.runtime.LaunchedEffect
import androidx.compose.runtime.getValue
import androidx.compose.runtime.mutableStateOf
import androidx.compose.runtime.remember
import androidx.compose.runtime.setValue
import androidx.compose.ui.window.Window
import androidx.compose.ui.window.application
import com.toasterofbread.spmp.platform.PlatformContext
Expand Down
4 changes: 2 additions & 2 deletions shared/build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -30,10 +30,10 @@ fun GenerateBuildConfig.buildConfig(debug: Boolean) {
}

val buildConfigDebug = tasks.register("buildConfigDebug", GenerateBuildConfig::class.java) {
buildConfig(false)
buildConfig(debug = true)
}
val buildConfigRelease = tasks.register("buildConfigRelease", GenerateBuildConfig::class.java) {
buildConfig(false)
buildConfig(debug = true)
}

tasks.all {
Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
package com.toasterofbread.spmp

import SpMp
import android.content.Intent
import android.os.Bundle
import androidx.activity.ComponentActivity
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,9 @@ import android.content.IntentFilter
import android.database.ContentObserver
import android.os.Handler
import android.view.KeyEvent
import android.view.KeyEvent.*
import android.view.KeyEvent.ACTION_DOWN
import android.view.KeyEvent.KEYCODE_VOLUME_DOWN
import android.view.KeyEvent.KEYCODE_VOLUME_UP
import android.view.ViewConfiguration.getLongPressTimeout
import android.view.accessibility.AccessibilityEvent
import androidx.lifecycle.Lifecycle
Expand All @@ -24,9 +26,14 @@ import com.toasterofbread.spmp.platform.PlatformContext
import com.toasterofbread.spmp.platform.ProjectPreferences
import com.toasterofbread.spmp.resources.getString
import com.toasterofbread.utils.Permissions
import kotlinx.coroutines.*
import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.Job
import kotlinx.coroutines.isActive
import kotlinx.coroutines.launch
import java.lang.ref.WeakReference
import java.util.*
import java.util.Timer
import java.util.TimerTask
import kotlin.collections.set
import android.provider.Settings as AndroidSettings

Expand Down
Original file line number Diff line number Diff line change
@@ -1,7 +1,11 @@
package com.toasterofbread.spmp.exovisualiser

import androidx.compose.foundation.Canvas
import androidx.compose.runtime.*
import androidx.compose.runtime.Composable
import androidx.compose.runtime.DisposableEffect
import androidx.compose.runtime.getValue
import androidx.compose.runtime.mutableStateOf
import androidx.compose.runtime.setValue
import androidx.compose.ui.Modifier
import androidx.compose.ui.geometry.CornerRadius
import androidx.compose.ui.geometry.Offset
Expand Down
Original file line number Diff line number Diff line change
@@ -1,7 +1,11 @@
package com.toasterofbread.spmp.platform

import android.content.ComponentName
import androidx.compose.runtime.*
import androidx.compose.runtime.Composable
import androidx.compose.runtime.getValue
import androidx.compose.runtime.mutableStateOf
import androidx.compose.runtime.remember
import androidx.compose.runtime.setValue
import androidx.compose.ui.Modifier
import androidx.compose.ui.graphics.Color
import androidx.core.net.toUri
Expand All @@ -14,6 +18,7 @@ import com.google.common.util.concurrent.ListenableFuture
import com.google.common.util.concurrent.MoreExecutors
import com.toasterofbread.spmp.exovisualiser.ExoVisualizer
import com.toasterofbread.spmp.model.mediaitem.Song
import com.toasterofbread.utils.synchronizedBlock
import kotlin.properties.Delegates
import androidx.media3.common.MediaItem as ExoMediaItem

Expand Down Expand Up @@ -161,7 +166,8 @@ actual open class MediaPlayerService {
addSong(song, song_count)
}
actual fun addSong(song: Song, index: Int) {
if (index !in 0 .. song_count) {
val add_index = if (index < 0) song_count else index
if (add_index !in 0 .. song_count) {
return
}

Expand All @@ -176,7 +182,7 @@ actual open class MediaPlayerService {
).build()
)
.build()
performAction(AddAction(item, index))
performAction(AddAction(item, add_index))

session_started = true // TODO
// addNotificationToPlayer()
Expand Down Expand Up @@ -204,38 +210,47 @@ actual open class MediaPlayerService {
actual fun undoableAction(action: MediaPlayerService.(furtherAction: (MediaPlayerService.() -> Unit) -> Unit) -> Unit) {
customUndoableAction { furtherAction ->
action {
furtherAction(it)
furtherAction {
it()
null
}
}
null
}
}

private fun handleFurtherAction(current: MutableList<UndoRedoAction>, further: MediaPlayerService.() -> UndoRedoAction?) {
synchronized(action_list) {
current_action_is_further = true
current_action = current

val custom_action = further(this)
if (custom_action != null) {
performAction(custom_action)
}

current_action = null
current_action_is_further = false
}
}

actual fun customUndoableAction(action: MediaPlayerService.(furtherAction: (MediaPlayerService.() -> UndoRedoAction?) -> Unit) -> UndoRedoAction?) {
if (current_action != null) {
val custom_action = action(this)
current_action?.also { c_action ->
val custom_action = action(this) { further ->
handleFurtherAction(c_action, further)
}
if (custom_action != null) {
performAction(custom_action)
}
return
}

synchronized(action_list) {
val c_action = mutableListOf()
val c_action: MutableList<UndoRedoAction> = mutableListOf()
current_action = c_action

val custom_action = action(this) { further ->
synchronized(action_list) {
current_action_is_further = true
current_action = c_action

val custom_action = further()
if (custom_action != null) {
performAction(custom_action)
}

current_action = null
current_action_is_further = false
}
handleFurtherAction(c_action, further)
}
if (custom_action != null) {
performAction(custom_action)
Expand All @@ -257,7 +272,7 @@ actual open class MediaPlayerService {
}

private fun performAction(action: UndoRedoAction) {
synchronized(action_list) {
synchronizedBlock(action_list) {
action.redo()

val current = current_action
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,11 @@ import androidx.compose.ui.graphics.asAndroidBitmap
import androidx.compose.ui.unit.IntOffset
import androidx.compose.ui.unit.IntSize
import androidx.core.app.NotificationCompat
import androidx.media3.common.*
import androidx.media3.common.AudioAttributes
import androidx.media3.common.C
import androidx.media3.common.MediaItem
import androidx.media3.common.PlaybackException
import androidx.media3.common.Player
import androidx.media3.common.util.UnstableApi
import androidx.media3.datasource.DataSource
import androidx.media3.datasource.DataSpec
Expand All @@ -29,7 +33,14 @@ import androidx.media3.exoplayer.source.DefaultMediaSourceFactory
import androidx.media3.exoplayer.upstream.LoadErrorHandlingPolicy
import androidx.media3.extractor.mkv.MatroskaExtractor
import androidx.media3.extractor.mp4.FragmentedMp4Extractor
import androidx.media3.session.*
import androidx.media3.session.BitmapLoader
import androidx.media3.session.CommandButton
import androidx.media3.session.MediaNotification
import androidx.media3.session.MediaSession
import androidx.media3.session.MediaSessionService
import androidx.media3.session.MediaStyleNotificationHelper
import androidx.media3.session.SessionCommand
import androidx.media3.session.SessionResult
import com.google.common.collect.ImmutableList
import com.google.common.util.concurrent.Futures
import com.google.common.util.concurrent.ListenableFuture
Expand All @@ -39,7 +50,12 @@ import com.toasterofbread.spmp.model.mediaitem.MediaItemThumbnailProvider
import com.toasterofbread.spmp.model.mediaitem.Song
import com.toasterofbread.spmp.model.mediaitem.SongLikeStatus
import com.toasterofbread.spmp.shared.R
import kotlinx.coroutines.*
import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.cancel
import kotlinx.coroutines.cancelChildren
import kotlinx.coroutines.launch
import kotlinx.coroutines.runBlocking
import java.io.IOException
import java.util.concurrent.Executors
import kotlin.math.roundToInt
Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
package com.toasterofbread.spmp.platform

import SpMp
import android.content.Context
import android.net.Uri
import androidx.media3.common.util.UnstableApi
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,13 +5,31 @@ import androidx.compose.animation.core.Animatable
import androidx.compose.foundation.Canvas
import androidx.compose.foundation.border
import androidx.compose.foundation.gestures.detectDragGestures
import androidx.compose.foundation.layout.*
import androidx.compose.foundation.layout.Arrangement
import androidx.compose.foundation.layout.Column
import androidx.compose.foundation.layout.Row
import androidx.compose.foundation.layout.Spacer
import androidx.compose.foundation.layout.aspectRatio
import androidx.compose.foundation.layout.fillMaxSize
import androidx.compose.foundation.layout.fillMaxWidth
import androidx.compose.foundation.layout.height
import androidx.compose.foundation.layout.padding
import androidx.compose.foundation.shape.RoundedCornerShape
import androidx.compose.material.icons.Icons
import androidx.compose.material.icons.filled.Done
import androidx.compose.material.icons.filled.Refresh
import androidx.compose.material3.*
import androidx.compose.runtime.*
import androidx.compose.material3.Icon
import androidx.compose.material3.IconButton
import androidx.compose.material3.LocalContentColor
import androidx.compose.material3.MaterialTheme
import androidx.compose.material3.Text
import androidx.compose.runtime.Composable
import androidx.compose.runtime.LaunchedEffect
import androidx.compose.runtime.getValue
import androidx.compose.runtime.mutableStateOf
import androidx.compose.runtime.remember
import androidx.compose.runtime.rememberCoroutineScope
import androidx.compose.runtime.setValue
import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier
import androidx.compose.ui.draw.clip
Expand Down
5 changes: 2 additions & 3 deletions shared/src/commonMain/kotlin/SpMp.kt
Original file line number Diff line number Diff line change
Expand Up @@ -29,19 +29,18 @@ import androidx.compose.ui.unit.dp
import com.beust.klaxon.Klaxon
import com.beust.klaxon.KlaxonException
import com.toasterofbread.spmp.api.Api
import com.toasterofbread.spmp.resources.uilocalisation.YoutubeUILocalisation
import com.toasterofbread.spmp.model.Cache
import com.toasterofbread.spmp.model.mediaitem.MediaItem
import com.toasterofbread.spmp.model.Settings
import com.toasterofbread.spmp.model.mediaitem.MediaItem
import com.toasterofbread.spmp.platform.PlatformContext
import com.toasterofbread.spmp.platform.ProjectPreferences
import com.toasterofbread.spmp.platform.composable.PlatformAlertDialog
import com.toasterofbread.spmp.platform.vibrateShort
import com.toasterofbread.spmp.resources.getString
import com.toasterofbread.spmp.resources.getStringTODO
import com.toasterofbread.spmp.resources.initResources
import com.toasterofbread.spmp.resources.uilocalisation.YoutubeUILocalisation
import com.toasterofbread.spmp.ui.layout.mainpage.PlayerState
import com.toasterofbread.spmp.ui.layout.mainpage.PlayerStateImpl
import com.toasterofbread.spmp.ui.layout.mainpage.RootView
import com.toasterofbread.spmp.ui.theme.ApplicationTheme
import com.toasterofbread.spmp.ui.theme.Theme
Expand Down
Original file line number Diff line number Diff line change
@@ -1,8 +1,18 @@
package com.toasterofbread.composesettings.ui

import androidx.compose.animation.Crossfade
import androidx.compose.foundation.layout.*
import androidx.compose.runtime.*
import androidx.compose.foundation.layout.Box
import androidx.compose.foundation.layout.Column
import androidx.compose.foundation.layout.PaddingValues
import androidx.compose.foundation.layout.fillMaxSize
import androidx.compose.foundation.layout.padding
import androidx.compose.foundation.layout.requiredHeight
import androidx.compose.runtime.Composable
import androidx.compose.runtime.LaunchedEffect
import androidx.compose.runtime.getValue
import androidx.compose.runtime.mutableStateOf
import androidx.compose.runtime.remember
import androidx.compose.runtime.setValue
import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier
import androidx.compose.ui.layout.onSizeChanged
Expand Down
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
package com.toasterofbread.composesettings.ui

import SpMp
import androidx.compose.animation.Crossfade
import androidx.compose.foundation.Canvas
import androidx.compose.foundation.layout.Arrangement
import androidx.compose.foundation.layout.Column
import androidx.compose.foundation.layout.PaddingValues
Expand All @@ -15,29 +15,19 @@ import androidx.compose.foundation.layout.requiredWidth
import androidx.compose.foundation.layout.width
import androidx.compose.foundation.lazy.LazyColumn
import androidx.compose.material3.Icon
import androidx.compose.material3.LocalContentColor
import androidx.compose.material3.MaterialTheme
import androidx.compose.runtime.Composable
import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier
import androidx.compose.ui.geometry.Offset
import androidx.compose.ui.graphics.ClipOp
import androidx.compose.ui.graphics.Color
import androidx.compose.ui.graphics.Path
import androidx.compose.ui.graphics.drawscope.clipPath
import androidx.compose.ui.graphics.graphicsLayer
import androidx.compose.ui.graphics.vector.ImageVector
import androidx.compose.ui.text.font.FontWeight
import androidx.compose.ui.text.style.TextAlign
import androidx.compose.ui.unit.Dp
import androidx.compose.ui.unit.dp
import com.toasterofbread.settings.model.SettingsGroup
import com.toasterofbread.settings.model.SettingsItem
import com.toasterofbread.spmp.platform.composable.BackHandler
import com.toasterofbread.spmp.ui.component.WaveBorder
import com.toasterofbread.spmp.ui.theme.Theme
import com.toasterofbread.utils.composable.WidthShrinkText
import kotlin.math.ceil

abstract class SettingsPage {
var id: Int? = null
Expand Down
Loading

0 comments on commit fc78b6a

Please sign in to comment.