Skip to content

Commit f179b53

Browse files
authored
Merge pull request #565 from namehillsoftware/bugfix/file-details-large-file-lists
[Bugfix] Viewing File Details on Large File Lists
2 parents e5d0264 + bcb510c commit f179b53

File tree

68 files changed

+1038
-845
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

68 files changed

+1038
-845
lines changed

build.gradle

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -10,8 +10,8 @@ buildscript {
1010
}
1111

1212
plugins {
13-
id 'com.android.application' version '8.11.1' apply false
14-
id 'com.android.library' version '8.11.1' apply false
13+
id 'com.android.application' version '8.12.0' apply false
14+
id 'com.android.library' version '8.12.0' apply false
1515
id 'org.jetbrains.kotlin.android' version "$kotlin_version" apply false
1616
id 'org.jetbrains.kotlin.plugin.compose' version "$kotlin_version" apply false
1717
}

projectBlueWater/src/main/java/com/lasthopesoftware/bluewater/ActivityApplicationNavigation.kt

Lines changed: 0 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,6 @@ package com.lasthopesoftware.bluewater
33
import android.os.Handler
44
import androidx.activity.ComponentActivity
55
import com.lasthopesoftware.bluewater.android.intents.BuildIntents
6-
import com.lasthopesoftware.bluewater.client.browsing.files.ServiceFile
76
import com.lasthopesoftware.bluewater.client.browsing.files.properties.FileProperty
87
import com.lasthopesoftware.bluewater.client.browsing.library.repository.LibraryId
98
import com.lasthopesoftware.promises.extensions.preparePromise
@@ -30,10 +29,6 @@ class ActivityApplicationNavigation(
3029
componentActivity.startActivity(intentBuilder.buildApplicationSettingsIntent())
3130
}
3231

33-
override fun viewFileDetails(libraryId: LibraryId, playlist: List<ServiceFile>, position: Int) = loopInOperation {
34-
componentActivity.startActivity(intentBuilder.buildFileDetailsIntent(libraryId, playlist, position))
35-
}
36-
3732
override fun viewNowPlaying(libraryId: LibraryId) = loopInOperation {
3833
componentActivity.startActivity(intentBuilder.buildNowPlayingIntent(libraryId))
3934
}

projectBlueWater/src/main/java/com/lasthopesoftware/bluewater/NavigateApplication.kt

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ import com.lasthopesoftware.bluewater.client.browsing.files.ServiceFile
44
import com.lasthopesoftware.bluewater.client.browsing.files.properties.FileProperty
55
import com.lasthopesoftware.bluewater.client.browsing.items.IItem
66
import com.lasthopesoftware.bluewater.client.browsing.library.repository.LibraryId
7+
import com.lasthopesoftware.bluewater.client.playback.file.PositionedFile
78
import com.lasthopesoftware.promises.extensions.toPromise
89

910
interface NavigateApplication {
@@ -18,7 +19,9 @@ interface NavigateApplication {
1819

1920
fun viewServerSettings(libraryId: LibraryId) = Unit.toPromise()
2021

21-
fun viewFileDetails(libraryId: LibraryId, playlist: List<ServiceFile>, position: Int) = Unit.toPromise()
22+
fun viewFileDetails(libraryId: LibraryId, files: List<ServiceFile>, position: Int) = Unit.toPromise()
23+
24+
fun viewNowPlayingFileDetails(libraryId: LibraryId, positionedFile: PositionedFile) = Unit.toPromise()
2225

2326
fun launchSearch(libraryId: LibraryId) = Unit.toPromise()
2427

projectBlueWater/src/main/java/com/lasthopesoftware/bluewater/android/intents/BuildIntents.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@ interface BuildIntents {
1818

1919
fun buildLibraryServerSettingsPendingIntent(libraryId: LibraryId): PendingIntent
2020

21-
fun buildFileDetailsIntent(libraryId: LibraryId, playlist: Collection<ServiceFile>, position: Int): Intent
21+
fun buildFileDetailsIntent(libraryId: LibraryId, file: ServiceFile): Intent
2222

2323
fun buildNowPlayingIntent(libraryId: LibraryId): Intent
2424

projectBlueWater/src/main/java/com/lasthopesoftware/bluewater/android/intents/IntentBuilder.kt

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -36,10 +36,9 @@ class IntentBuilder(private val context: Context) : BuildIntents {
3636
}
3737

3838
@OptIn(UnstableApi::class)
39-
override fun buildFileDetailsIntent(libraryId: LibraryId, playlist: Collection<ServiceFile>, position: Int) = context.getIntent<FileDetailsActivity>().apply {
39+
override fun buildFileDetailsIntent(libraryId: LibraryId, file: ServiceFile) = context.getIntent<FileDetailsActivity>().apply {
4040
putExtra(FileDetailsActivity.libraryIdKey, libraryId)
41-
putExtra(FileDetailsActivity.playlistPosition, position)
42-
putExtra(FileDetailsActivity.playlist, playlist.map { it.key }.toTypedArray())
41+
putExtra(FileDetailsActivity.serviceFile, file)
4342
}
4443

4544
override fun buildNowPlayingIntent(libraryId: LibraryId): Intent = getBrowserActivityIntent(NowPlayingScreen(libraryId))

projectBlueWater/src/main/java/com/lasthopesoftware/bluewater/client/HandheldApplication.kt

Lines changed: 29 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,7 @@ import com.lasthopesoftware.bluewater.client.browsing.EntryDependencies
3737
import com.lasthopesoftware.bluewater.client.browsing.ReusedViewModelRegistry
3838
import com.lasthopesoftware.bluewater.client.browsing.ScopedViewModelDependencies
3939
import com.lasthopesoftware.bluewater.client.browsing.ScopedViewModelRegistry
40+
import com.lasthopesoftware.bluewater.client.browsing.files.details.FileDetailsView
4041
import com.lasthopesoftware.bluewater.client.browsing.files.properties.LibraryFilePropertiesDependentsRegistry
4142
import com.lasthopesoftware.bluewater.client.browsing.library.repository.LibraryId
4243
import com.lasthopesoftware.bluewater.client.browsing.navigation.ActiveLibraryDownloadsScreen
@@ -45,10 +46,11 @@ import com.lasthopesoftware.bluewater.client.browsing.navigation.BrowserLibraryD
4546
import com.lasthopesoftware.bluewater.client.browsing.navigation.ConnectionSettingsScreen
4647
import com.lasthopesoftware.bluewater.client.browsing.navigation.Destination
4748
import com.lasthopesoftware.bluewater.client.browsing.navigation.DestinationGraphNavigation
48-
import com.lasthopesoftware.bluewater.client.browsing.navigation.FileDetailsScreen
49+
import com.lasthopesoftware.bluewater.client.browsing.navigation.FileDetailsFromNowPlayingScreen
4950
import com.lasthopesoftware.bluewater.client.browsing.navigation.HiddenSettingsScreen
5051
import com.lasthopesoftware.bluewater.client.browsing.navigation.LibraryDestination
5152
import com.lasthopesoftware.bluewater.client.browsing.navigation.LibraryMenu
53+
import com.lasthopesoftware.bluewater.client.browsing.navigation.ListedFileDetailsScreen
5254
import com.lasthopesoftware.bluewater.client.browsing.navigation.NavigateToLibraryDestination
5355
import com.lasthopesoftware.bluewater.client.browsing.navigation.NewConnectionSettingsScreen
5456
import com.lasthopesoftware.bluewater.client.browsing.navigation.NowPlayingScreen
@@ -193,14 +195,39 @@ fun LibraryDestination.Navigate(
193195
) {
194196
with(browserViewDependencies) {
195197
when (this@Navigate) {
198+
196199
is BrowserLibraryDestination -> {
197200
Navigate(
198201
browserViewDependencies = browserViewDependencies,
199202
libraryConnectionDependencies = libraryConnectionDependencies,
200203
)
201204
}
202205

203-
is FileDetailsScreen -> {}
206+
is ListedFileDetailsScreen -> {
207+
val viewModel = listedFileDetailsViewModel
208+
209+
FileDetailsView(
210+
viewModel = viewModel,
211+
navigateApplication = applicationNavigation,
212+
bitmapProducer = bitmapProducer,
213+
playableFileDetailsState = viewModel,
214+
)
215+
216+
viewModel.load(libraryId, files, position)
217+
}
218+
219+
is FileDetailsFromNowPlayingScreen -> {
220+
val viewModel = fileDetailsFromNowPlayingViewModel
221+
222+
FileDetailsView(
223+
viewModel = viewModel,
224+
navigateApplication = applicationNavigation,
225+
bitmapProducer = bitmapProducer,
226+
playableFileDetailsState = viewModel,
227+
)
228+
229+
viewModel.load(libraryId, positionedFile)
230+
}
204231

205232
is ConnectionSettingsScreen -> {
206233
val viewModel = librarySettingsViewModel

projectBlueWater/src/main/java/com/lasthopesoftware/bluewater/client/browsing/ScopedViewModelDependencies.kt

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,11 @@
11
package com.lasthopesoftware.bluewater.client.browsing
22

3+
import com.lasthopesoftware.bluewater.client.browsing.files.details.FileDetailsFromItemViewModel
4+
import com.lasthopesoftware.bluewater.client.browsing.files.details.FileDetailsFromNowPlayingViewModel
35
import com.lasthopesoftware.bluewater.client.browsing.files.details.FileDetailsViewModel
6+
import com.lasthopesoftware.bluewater.client.browsing.files.details.ListedFileDetailsViewModel
47
import com.lasthopesoftware.bluewater.client.browsing.files.list.FileListViewModel
5-
import com.lasthopesoftware.bluewater.client.browsing.files.list.SearchFilesViewModel
8+
import com.lasthopesoftware.bluewater.client.browsing.files.list.search.SearchFilesViewModel
69
import com.lasthopesoftware.bluewater.client.browsing.items.list.ItemListViewModel
710
import com.lasthopesoftware.bluewater.client.settings.LibrarySettingsViewModel
811
import com.lasthopesoftware.bluewater.client.stored.library.items.files.view.ActiveFileDownloadsViewModel
@@ -18,5 +21,8 @@ interface ScopedViewModelDependencies : ReusedViewModelDependencies {
1821
val searchFilesViewModel: SearchFilesViewModel
1922
val librarySettingsViewModel: LibrarySettingsViewModel
2023
val fileDetailsViewModel: FileDetailsViewModel
24+
val fileDetailsFromItemViewModel: FileDetailsFromItemViewModel
25+
val listedFileDetailsViewModel: ListedFileDetailsViewModel
26+
val fileDetailsFromNowPlayingViewModel: FileDetailsFromNowPlayingViewModel
2127
val undoBackStackBuilder: UndoStack
2228
}

projectBlueWater/src/main/java/com/lasthopesoftware/bluewater/client/browsing/ScopedViewModelRegistry.kt

Lines changed: 28 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,12 @@
11
package com.lasthopesoftware.bluewater.client.browsing
22

33
import androidx.lifecycle.ViewModelStoreOwner
4+
import com.lasthopesoftware.bluewater.client.browsing.files.details.FileDetailsFromItemViewModel
5+
import com.lasthopesoftware.bluewater.client.browsing.files.details.FileDetailsFromNowPlayingViewModel
46
import com.lasthopesoftware.bluewater.client.browsing.files.details.FileDetailsViewModel
7+
import com.lasthopesoftware.bluewater.client.browsing.files.details.ListedFileDetailsViewModel
58
import com.lasthopesoftware.bluewater.client.browsing.files.list.FileListViewModel
6-
import com.lasthopesoftware.bluewater.client.browsing.files.list.SearchFilesViewModel
9+
import com.lasthopesoftware.bluewater.client.browsing.files.list.search.SearchFilesViewModel
710
import com.lasthopesoftware.bluewater.client.browsing.files.properties.EditableFilePropertyDefinitionProvider
811
import com.lasthopesoftware.bluewater.client.browsing.files.properties.EditableLibraryFilePropertiesProvider
912
import com.lasthopesoftware.bluewater.client.browsing.items.list.ItemListViewModel
@@ -76,6 +79,30 @@ class ScopedViewModelRegistry(
7679
)
7780
}
7881

82+
override val fileDetailsFromItemViewModel by viewModelStoreOwner.buildViewModelLazily {
83+
FileDetailsFromItemViewModel(
84+
playbackLibraryItems,
85+
fileDetailsViewModel,
86+
fileDetailsViewModel,
87+
)
88+
}
89+
90+
override val listedFileDetailsViewModel by viewModelStoreOwner.buildViewModelLazily {
91+
ListedFileDetailsViewModel(
92+
playbackServiceController,
93+
fileDetailsViewModel,
94+
fileDetailsViewModel,
95+
)
96+
}
97+
98+
override val fileDetailsFromNowPlayingViewModel by viewModelStoreOwner.buildViewModelLazily {
99+
FileDetailsFromNowPlayingViewModel(
100+
playbackServiceController,
101+
fileDetailsViewModel,
102+
fileDetailsViewModel,
103+
)
104+
}
105+
79106
override val undoBackStackBuilder by viewModelStoreOwner.buildViewModelLazily { ViewModelUndoStack() }
80107

81108
override val applicationNavigation by lazy {

projectBlueWater/src/main/java/com/lasthopesoftware/bluewater/client/browsing/files/IServiceFileUriQueryParamsProvider.kt

Lines changed: 0 additions & 8 deletions
This file was deleted.

projectBlueWater/src/main/java/com/lasthopesoftware/bluewater/client/browsing/files/ServiceFileUriQueryParamsProvider.kt

Lines changed: 0 additions & 20 deletions
This file was deleted.

0 commit comments

Comments
 (0)