Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
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
Original file line number Diff line number Diff line change
Expand Up @@ -29,5 +29,5 @@ class LibraryFileProvider(private val libraryConnections: ProvideLibraryConnecti
override fun promiseAudioFiles(libraryId: LibraryId, query: String): Promise<List<ServiceFile>> =
libraryConnections
.promiseLibraryConnection(libraryId)
.eventuallyFromDataAccess { it?.promiseFiles("[Media Type]=[Audio] $query").keepPromise(emptyList()) }
.eventuallyFromDataAccess { it?.promiseFiles(query).keepPromise(emptyList()) }
}

This file was deleted.

This file was deleted.

Original file line number Diff line number Diff line change
Expand Up @@ -44,7 +44,7 @@ object CacheFlushing {
diskFileCacheConfiguration: DiskFileCacheConfiguration,
targetSize: Long
): Promise<*> =
promiseTableMessage<Unit, CachedFile>(
promiseTableMessage<Unit>(
CacheFlusherTask(
context,
diskCacheDirectory,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -126,7 +126,7 @@ class DiskFileCache(
}

private fun deleteCachedFile(cachedFileId: Long): Promise<Long> =
promiseTableMessage<Long, CachedFile> {
promiseTableMessage<Long> {
RepositoryAccessHelper(context).use { repositoryAccessHelper ->
try {
repositoryAccessHelper.beginTransaction().use { closeableTransaction ->
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,7 @@ class CachedFilesProvider(
}

override fun promiseCachedFile(libraryId: LibraryId, uniqueKey: String): Promise<CachedFile?> =
promiseTableMessage<CachedFile?, CachedFile> { getCachedFile(libraryId, uniqueKey) }
promiseTableMessage<CachedFile?> { getCachedFile(libraryId, uniqueKey) }

private fun getCachedFile(libraryId: LibraryId, uniqueKey: String): CachedFile? =
RepositoryAccessHelper(context).use { repositoryAccessHelper ->
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@ class DiskFileAccessTimeUpdater(private val context: Context) : UpdateDiskFileAc
private val logger by lazyLogger<DiskFileAccessTimeUpdater>()
}

override fun promiseFileAccessedUpdate(cachedFile: CachedFile): Promise<CachedFile> = promiseTableMessage<CachedFile, CachedFile> {
override fun promiseFileAccessedUpdate(cachedFile: CachedFile): Promise<CachedFile> = promiseTableMessage<CachedFile> {
doFileAccessedUpdate(cachedFile.id)
cachedFile
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -62,7 +62,7 @@ class DiskFileCachePersistence(
if (it.fileName == canonicalFilePath) diskFileAccessTimeUpdater.promiseFileAccessedUpdate(it)
else promiseFilePathUpdate(it).eventually(diskFileAccessTimeUpdater::promiseFileAccessedUpdate)
}
?: promiseTableMessage<Unit, CachedFile> {
?: promiseTableMessage<Unit> {
logger.info("File with unique key $uniqueKey doesn't exist. Creating...")
try {
RepositoryAccessHelper(context).use { repositoryAccessHelper ->
Expand Down Expand Up @@ -93,7 +93,7 @@ class DiskFileCachePersistence(
}
}

private fun promiseFilePathUpdate(cachedFile: CachedFile): Promise<CachedFile> = promiseTableMessage<CachedFile, CachedFile> {
private fun promiseFilePathUpdate(cachedFile: CachedFile): Promise<CachedFile> = promiseTableMessage<CachedFile> {
val cachedFileId = cachedFile.id
val cachedFilePath = cachedFile.fileName
RepositoryAccessHelper(context).use { repositoryAccessHelper ->
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,6 @@ package com.lasthopesoftware.bluewater.client.browsing.files.details

import android.graphics.Bitmap
import androidx.activity.compose.LocalActivity
import androidx.compose.foundation.ExperimentalFoundationApi
import androidx.compose.foundation.Image
import androidx.compose.foundation.background
import androidx.compose.foundation.border
Expand Down Expand Up @@ -84,25 +83,27 @@ import com.lasthopesoftware.bluewater.shared.android.ui.components.ColumnMenuIco
import com.lasthopesoftware.bluewater.shared.android.ui.components.GradientSide
import com.lasthopesoftware.bluewater.shared.android.ui.components.MarqueeText
import com.lasthopesoftware.bluewater.shared.android.ui.components.RatingBar
import com.lasthopesoftware.bluewater.shared.android.ui.components.UnlabelledRefreshButton
import com.lasthopesoftware.bluewater.shared.android.ui.components.memorableScrollConnectedScaler
import com.lasthopesoftware.bluewater.shared.android.ui.components.rememberSystemUiController
import com.lasthopesoftware.bluewater.shared.android.ui.indicateFocus
import com.lasthopesoftware.bluewater.shared.android.ui.linearInterpolation
import com.lasthopesoftware.bluewater.shared.android.ui.navigable
import com.lasthopesoftware.bluewater.shared.android.ui.theme.ControlSurface
import com.lasthopesoftware.bluewater.shared.android.ui.theme.Dimensions
import com.lasthopesoftware.bluewater.shared.android.ui.theme.Dimensions.appBarHeight
import com.lasthopesoftware.bluewater.shared.android.ui.theme.Dimensions.menuHeight
import com.lasthopesoftware.bluewater.shared.android.ui.theme.Dimensions.rowPadding
import com.lasthopesoftware.bluewater.shared.android.ui.theme.Dimensions.topMenuIconSize
import com.lasthopesoftware.bluewater.shared.android.ui.theme.Dimensions.topRowOuterPadding
import com.lasthopesoftware.bluewater.shared.android.ui.theme.Dimensions.viewPaddingUnit
import com.lasthopesoftware.bluewater.shared.observables.subscribeAsState
import com.lasthopesoftware.promises.extensions.keepPromise
import com.lasthopesoftware.promises.extensions.suspend
import com.lasthopesoftware.promises.extensions.toState
import com.lasthopesoftware.resources.bitmaps.ProduceBitmaps
import kotlinx.coroutines.launch

private val viewPadding = Dimensions.viewPaddingUnit
private val viewPadding = viewPaddingUnit

@Composable
private fun StaticFileMenu(viewModel: FileDetailsViewModel, mediaStylePalette: MediaStylePalette) {
Expand Down Expand Up @@ -322,7 +323,7 @@ private fun FileDetailsEditor(
contentColor = palette.primaryTextColor,
) {
Column(
modifier = Modifier.padding(Dimensions.viewPaddingUnit * 2),
modifier = Modifier.padding(viewPaddingUnit * 2),
) {
Row(
modifier = Modifier
Expand Down Expand Up @@ -470,7 +471,7 @@ private fun FileDetailsEditor(
}

@Composable
@OptIn(ExperimentalFoundationApi::class, ExperimentalComposeUiApi::class)
@OptIn(ExperimentalComposeUiApi::class)
fun FileDetailsView(
viewModel: FileDetailsViewModel,
navigateApplication: NavigateApplication,
Expand Down Expand Up @@ -504,7 +505,7 @@ fun FileDetailsView(
val expandedTitlePadding = coverArtContainerHeight + coverArtBottomPadding
val titleFontSize = MaterialTheme.typography.h5.fontSize
val subTitleFontSize = MaterialTheme.typography.h6.fontSize
val guessedRowSpacing = Dimensions.viewPaddingUnit
val guessedRowSpacing = viewPaddingUnit
val titleHeight =
LocalDensity.current.run { titleFontSize.toDp() + subTitleFontSize.toDp() } + guessedRowSpacing * 3
val boxHeight = expandedTitlePadding + titleHeight
Expand All @@ -513,14 +514,14 @@ fun FileDetailsView(
val heightScaler =
memorableScrollConnectedScaler(max = boxHeightPx, min = LocalDensity.current.run { collapsedHeight.toPx() })

val lazyListState = rememberLazyListState()

if (!isLoading) {
Box(
modifier = Modifier
.fillMaxSize()
.nestedScroll(heightScaler)
) {
val lazyListState = rememberLazyListState()

val headerCollapseProgress by heightScaler.getProgressState()

LazyColumn(modifier = Modifier.fillMaxSize(), state = lazyListState) {
Expand Down Expand Up @@ -670,18 +671,26 @@ fun FileDetailsView(
}
}

val headerExpandProgress by remember { derivedStateOf { 1 - headerCollapseProgress } }
val topTitlePadding by remember { derivedStateOf { expandedTitlePadding * headerExpandProgress } }
val topTitlePadding by remember {
derivedStateOf {
linearInterpolation(expandedTitlePadding, viewPaddingUnit, headerCollapseProgress)
}
}
Box(
modifier = Modifier
.padding(top = topTitlePadding)
.fillMaxWidth()
) {
val startPadding by remember { derivedStateOf { viewPadding + 48.dp * headerCollapseProgress } }
val endPadding by remember {
derivedStateOf {
linearInterpolation(viewPadding, topMenuIconSize + viewPaddingUnit * 4, headerCollapseProgress)
}
}
FilePropertyHeader(
viewModel,
coverArtColorState,
modifier = Modifier.padding(start = startPadding, end = viewPadding),
modifier = Modifier.padding(start = startPadding, end = endPadding),
titleFontSize = titleFontSize,
isMarqueeEnabled = !lazyListState.isScrollInProgress
)
Expand All @@ -701,6 +710,18 @@ fun FileDetailsView(
.padding(topRowOuterPadding)
.align(Alignment.TopStart)
)

UnlabelledRefreshButton(
onClick = {
viewModel.promiseLoadedActiveFile()
},
modifier = Modifier
.padding(
vertical = topRowOuterPadding,
horizontal = viewPaddingUnit * 2
)
.align(Alignment.TopEnd)
)
}

@Composable
Expand Down Expand Up @@ -760,28 +781,46 @@ fun FileDetailsView(
StaticFileMenu(viewModel, coverArtColorState)
}

val fileProperties by viewModel.fileProperties.subscribeAsState()
val lazyListState = rememberLazyListState()
LazyColumn(modifier = Modifier.fillMaxWidth(), state = lazyListState) {
stickyHeader {
Column(modifier = Modifier.fillMaxWidth()) {
val fileProperties by viewModel.fileProperties.subscribeAsState()
val lazyListState = rememberLazyListState()

Row(
verticalAlignment = Alignment.CenterVertically,
modifier = Modifier.height(appBarHeight),
) {
FilePropertyHeader(
viewModel,
coverArtColorState,
modifier = Modifier
.background(coverArtColorState.backgroundColor)
.padding(
start = viewPadding,
top = viewPadding,
bottom = viewPadding,
end = Dimensions.viewPaddingUnit * 10 + viewPadding
)
.fillMaxWidth(),
.padding(horizontal = viewPaddingUnit)
.fillMaxWidth()
.weight(1f),
isMarqueeEnabled = !lazyListState.isScrollInProgress
)

UnlabelledRefreshButton(
onClick = {
viewModel.promiseLoadedActiveFile()
},
modifier = Modifier.padding(horizontal = viewPaddingUnit * 2)
)

Image(
painter = painterResource(id = R.drawable.ic_remove_item_white_36dp),
contentDescription = "Close",
colorFilter = ColorFilter.tint(coverArtColorState.secondaryTextColor),
modifier = Modifier
.padding(horizontal = viewPaddingUnit * 2)
.navigable(onClick = navigateApplication::navigateUp),
)
}

items(fileProperties) {
FilePropertyRow(viewModel, it, coverArtColorState)
LazyColumn(modifier = Modifier.weight(1f), state = lazyListState) {
items(fileProperties) {
FilePropertyRow(viewModel, it, coverArtColorState)
}
}
}
}
Expand All @@ -791,16 +830,6 @@ fun FileDetailsView(
modifier = Modifier.align(Alignment.Center)
)
}

Image(
painter = painterResource(id = R.drawable.ic_remove_item_white_36dp),
contentDescription = "Close",
colorFilter = ColorFilter.tint(coverArtColorState.secondaryTextColor),
modifier = Modifier
.align(Alignment.TopEnd)
.padding(top = 12.dp, start = 8.dp, end = 8.dp, bottom = 8.dp)
.navigable(onClick = navigateApplication::navigateUp),
)
}

Column(modifier = Modifier.fillMaxSize()) {
Expand Down
Loading