Skip to content

Commit e0c8e74

Browse files
authored
Merge pull request #554 from namehillsoftware/bugfix/back-navigation-after-rotation
[Bugfix] Back Navigation Broken After Rotation
2 parents 499be58 + d9d28bc commit e0c8e74

File tree

11 files changed

+122
-109
lines changed

11 files changed

+122
-109
lines changed

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

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ import com.lasthopesoftware.bluewater.client.browsing.files.list.SearchFilesView
66
import com.lasthopesoftware.bluewater.client.browsing.items.list.ItemListViewModel
77
import com.lasthopesoftware.bluewater.client.settings.LibrarySettingsViewModel
88
import com.lasthopesoftware.bluewater.client.stored.library.items.files.view.ActiveFileDownloadsViewModel
9-
import com.lasthopesoftware.bluewater.shared.android.BuildUndoBackStack
9+
import com.lasthopesoftware.bluewater.shared.android.UndoStack
1010

1111
/**
1212
* View Models that work best when declared with a local ViewModelOwner
@@ -18,5 +18,5 @@ interface ScopedViewModelDependencies : ReusedViewModelDependencies {
1818
val searchFilesViewModel: SearchFilesViewModel
1919
val librarySettingsViewModel: LibrarySettingsViewModel
2020
val fileDetailsViewModel: FileDetailsViewModel
21-
val undoBackStackBuilder: BuildUndoBackStack
21+
val undoBackStackBuilder: UndoStack
2222
}

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

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@ import com.lasthopesoftware.bluewater.client.settings.LibrarySettingsViewModel
1111
import com.lasthopesoftware.bluewater.client.settings.PermissionsDependencies
1212
import com.lasthopesoftware.bluewater.client.stored.library.items.files.view.ActiveFileDownloadsViewModel
1313
import com.lasthopesoftware.bluewater.shared.android.UndoStackApplicationNavigation
14+
import com.lasthopesoftware.bluewater.shared.android.ViewModelUndoStack
1415
import com.lasthopesoftware.bluewater.shared.android.viewmodels.buildViewModelLazily
1516

1617
class ScopedViewModelRegistry(
@@ -75,10 +76,9 @@ class ScopedViewModelRegistry(
7576
)
7677
}
7778

78-
override val undoBackStackBuilder by viewModelStoreOwner.buildViewModelLazily {
79-
UndoStackApplicationNavigation(reusedViewModelDependencies.applicationNavigation)
80-
}
79+
override val undoBackStackBuilder by viewModelStoreOwner.buildViewModelLazily { ViewModelUndoStack() }
8180

82-
override val applicationNavigation
83-
get() = undoBackStackBuilder
81+
override val applicationNavigation by lazy {
82+
UndoStackApplicationNavigation(undoBackStackBuilder, reusedViewModelDependencies.applicationNavigation)
83+
}
8484
}

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

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -56,7 +56,7 @@ import com.lasthopesoftware.bluewater.client.browsing.items.list.menus.changes.h
5656
import com.lasthopesoftware.bluewater.client.connection.ConnectionLostExceptionFilter
5757
import com.lasthopesoftware.bluewater.client.playback.nowplaying.view.viewmodels.NowPlayingFilePropertiesViewModel
5858
import com.lasthopesoftware.bluewater.client.playback.service.ControlPlaybackService
59-
import com.lasthopesoftware.bluewater.shared.android.BuildUndoBackStack
59+
import com.lasthopesoftware.bluewater.shared.android.UndoStack
6060
import com.lasthopesoftware.bluewater.shared.android.ui.components.BackButton
6161
import com.lasthopesoftware.bluewater.shared.android.ui.components.LabelledRefreshButton
6262
import com.lasthopesoftware.bluewater.shared.android.ui.components.rememberCalculatedKnobHeight
@@ -159,7 +159,7 @@ fun SearchFilesView(
159159
itemListMenuBackPressedHandler: ItemListMenuBackPressedHandler,
160160
applicationNavigation: NavigateApplication,
161161
playbackServiceController: ControlPlaybackService,
162-
backStackBuilder: BuildUndoBackStack
162+
backStackBuilder: UndoStack
163163
) {
164164
val files by searchFilesViewModel.files.subscribeAsState()
165165
var isConnectionLost by remember { mutableStateOf(false) }

projectBlueWater/src/main/java/com/lasthopesoftware/bluewater/client/browsing/items/list/BrowsableItemListView.kt

Lines changed: 14 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@ import com.lasthopesoftware.bluewater.client.connection.ConnectionLostExceptionF
2020
import com.lasthopesoftware.bluewater.client.connection.session.initialization.ConnectionStatusViewModel
2121
import com.lasthopesoftware.bluewater.client.playback.nowplaying.view.viewmodels.NowPlayingFilePropertiesViewModel
2222
import com.lasthopesoftware.bluewater.client.playback.service.ControlPlaybackService
23-
import com.lasthopesoftware.bluewater.shared.android.BuildUndoBackStack
23+
import com.lasthopesoftware.bluewater.shared.android.UndoStack
2424
import com.lasthopesoftware.bluewater.shared.android.viewmodels.PooledCloseablesViewModel
2525
import com.lasthopesoftware.bluewater.shared.android.viewmodels.ViewModelInitAction
2626
import com.lasthopesoftware.promises.extensions.suspend
@@ -50,19 +50,19 @@ fun LoadedItemListView(viewModelDependencies: ScopedViewModelDependencies, libra
5050

5151
@Composable
5252
private fun LoadedItemListView(
53-
libraryId: LibraryId,
54-
item: IItem?,
55-
itemListViewModel: ItemListViewModel,
56-
fileListViewModel: FileListViewModel,
57-
nowPlayingViewModel: NowPlayingFilePropertiesViewModel,
58-
itemListMenuBackPressedHandler: ItemListMenuBackPressedHandler,
59-
reusablePlaylistFileItemViewModelProvider: ReusablePlaylistFileItemViewModelProvider,
60-
childItemViewModelProvider: PooledCloseablesViewModel<ReusableChildItemViewModel>,
61-
applicationNavigation: NavigateApplication,
62-
playbackLibraryItems: PlaybackLibraryItems,
63-
playbackServiceController: ControlPlaybackService,
64-
connectionStatusViewModel: ConnectionStatusViewModel,
65-
undoBackStack: BuildUndoBackStack,
53+
libraryId: LibraryId,
54+
item: IItem?,
55+
itemListViewModel: ItemListViewModel,
56+
fileListViewModel: FileListViewModel,
57+
nowPlayingViewModel: NowPlayingFilePropertiesViewModel,
58+
itemListMenuBackPressedHandler: ItemListMenuBackPressedHandler,
59+
reusablePlaylistFileItemViewModelProvider: ReusablePlaylistFileItemViewModelProvider,
60+
childItemViewModelProvider: PooledCloseablesViewModel<ReusableChildItemViewModel>,
61+
applicationNavigation: NavigateApplication,
62+
playbackLibraryItems: PlaybackLibraryItems,
63+
playbackServiceController: ControlPlaybackService,
64+
connectionStatusViewModel: ConnectionStatusViewModel,
65+
undoBackStack: UndoStack,
6666
) {
6767
var isConnectionLost by remember { mutableStateOf(false) }
6868
var initializeConnection by remember { mutableStateOf(false) }

projectBlueWater/src/main/java/com/lasthopesoftware/bluewater/client/browsing/items/list/ItemListView.kt

Lines changed: 19 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -67,7 +67,7 @@ import com.lasthopesoftware.bluewater.client.browsing.items.playlists.PlaylistId
6767
import com.lasthopesoftware.bluewater.client.playback.nowplaying.view.viewmodels.NowPlayingFilePropertiesViewModel
6868
import com.lasthopesoftware.bluewater.client.playback.service.ControlPlaybackService
6969
import com.lasthopesoftware.bluewater.client.stored.library.sync.SyncIcon
70-
import com.lasthopesoftware.bluewater.shared.android.BuildUndoBackStack
70+
import com.lasthopesoftware.bluewater.shared.android.UndoStack
7171
import com.lasthopesoftware.bluewater.shared.android.ui.components.BackButton
7272
import com.lasthopesoftware.bluewater.shared.android.ui.components.GradientSide
7373
import com.lasthopesoftware.bluewater.shared.android.ui.components.ListItemIcon
@@ -137,16 +137,16 @@ fun FilesCountHeader(filesCount: Int) {
137137

138138
@Composable
139139
fun RenderTrackTitleItem(
140-
position: Int,
141-
serviceFile: ServiceFile,
142-
trackHeadlineViewModelProvider: PooledCloseablesViewModel<ViewPlaylistFileItem>,
143-
itemListViewModel: ItemListViewModel,
144-
nowPlayingViewModel: NowPlayingFilePropertiesViewModel,
145-
applicationNavigation: NavigateApplication,
146-
fileListViewModel: FileListViewModel,
147-
itemListMenuBackPressedHandler: ItemListMenuBackPressedHandler,
148-
playbackServiceController: ControlPlaybackService,
149-
undoBackStack: BuildUndoBackStack,
140+
position: Int,
141+
serviceFile: ServiceFile,
142+
trackHeadlineViewModelProvider: PooledCloseablesViewModel<ViewPlaylistFileItem>,
143+
itemListViewModel: ItemListViewModel,
144+
nowPlayingViewModel: NowPlayingFilePropertiesViewModel,
145+
applicationNavigation: NavigateApplication,
146+
fileListViewModel: FileListViewModel,
147+
itemListMenuBackPressedHandler: ItemListMenuBackPressedHandler,
148+
playbackServiceController: ControlPlaybackService,
149+
undoBackStack: UndoStack,
150150
) {
151151
val fileItemViewModel = remember(trackHeadlineViewModelProvider::getViewModel)
152152

@@ -205,13 +205,13 @@ fun RenderTrackTitleItem(
205205
@OptIn(ExperimentalComposeUiApi::class)
206206
@Composable
207207
fun ChildItem(
208-
item: IItem,
209-
itemListViewModel: ItemListViewModel,
210-
applicationNavigation: NavigateApplication,
211-
childItemViewModelProvider: PooledCloseablesViewModel<ReusableChildItemViewModel>,
212-
itemListMenuBackPressedHandler: ItemListMenuBackPressedHandler,
213-
playbackLibraryItems: PlaybackLibraryItems,
214-
backStack: BuildUndoBackStack,
208+
item: IItem,
209+
itemListViewModel: ItemListViewModel,
210+
applicationNavigation: NavigateApplication,
211+
childItemViewModelProvider: PooledCloseablesViewModel<ReusableChildItemViewModel>,
212+
itemListMenuBackPressedHandler: ItemListMenuBackPressedHandler,
213+
playbackLibraryItems: PlaybackLibraryItems,
214+
backStack: UndoStack,
215215
) {
216216
val rowHeight = Dimensions.standardRowHeight
217217
val rowFontSize = LocalDensity.current.run { dimensionResource(id = R.dimen.row_font_size).toSp() }
@@ -337,7 +337,7 @@ fun ItemListView(
337337
applicationNavigation: NavigateApplication,
338338
playbackLibraryItems: PlaybackLibraryItems,
339339
playbackServiceController: ControlPlaybackService,
340-
undoBackStack: BuildUndoBackStack,
340+
undoBackStack: UndoStack,
341341
) {
342342
val files by fileListViewModel.files.subscribeAsState()
343343
val rowHeight = Dimensions.standardRowHeight

projectBlueWater/src/main/java/com/lasthopesoftware/bluewater/client/playback/nowplaying/view/NowPlayingView.kt

Lines changed: 36 additions & 36 deletions
Original file line numberDiff line numberDiff line change
@@ -95,7 +95,7 @@ import com.lasthopesoftware.bluewater.client.playback.nowplaying.view.viewmodels
9595
import com.lasthopesoftware.bluewater.client.playback.nowplaying.view.viewmodels.NowPlayingScreenViewModel
9696
import com.lasthopesoftware.bluewater.client.playback.nowplaying.view.viewmodels.playlist.NowPlayingPlaylistViewModel
9797
import com.lasthopesoftware.bluewater.client.playback.service.ControlPlaybackService
98-
import com.lasthopesoftware.bluewater.shared.android.BuildUndoBackStack
98+
import com.lasthopesoftware.bluewater.shared.android.UndoStack
9999
import com.lasthopesoftware.bluewater.shared.android.messages.ViewModelMessageBus
100100
import com.lasthopesoftware.bluewater.shared.android.ui.SlideOutState
101101
import com.lasthopesoftware.bluewater.shared.android.ui.components.BackButton
@@ -214,10 +214,10 @@ fun NowPlayingHeadline(modifier: Modifier = Modifier, nowPlayingFilePropertiesVi
214214
@OptIn(ExperimentalComposeUiApi::class)
215215
@Composable
216216
fun PlaylistControls(
217-
modifier: Modifier = Modifier,
218-
playlistViewModel: NowPlayingPlaylistViewModel,
219-
viewModelMessageBus: ViewModelMessageBus<NowPlayingMessage>,
220-
undoBackStack: BuildUndoBackStack,
217+
modifier: Modifier = Modifier,
218+
playlistViewModel: NowPlayingPlaylistViewModel,
219+
viewModelMessageBus: ViewModelMessageBus<NowPlayingMessage>,
220+
undoBackStack: UndoStack,
221221
) {
222222
Row(
223223
modifier = modifier,
@@ -408,15 +408,15 @@ suspend fun LazyListState.scrollToFileIfNotScrolling(file: PositionedFile) {
408408

409409
@Composable
410410
fun NowPlayingPlaylist(
411-
childItemViewModelProvider: PooledCloseablesViewModel<ViewPlaylistFileItem>,
412-
nowPlayingFilePropertiesViewModel: NowPlayingFilePropertiesViewModel,
413-
applicationNavigation: NavigateApplication,
414-
playbackServiceController: ControlPlaybackService,
415-
itemListMenuBackPressedHandler: ItemListMenuBackPressedHandler,
416-
playlistViewModel: NowPlayingPlaylistViewModel,
417-
viewModelMessageBus: ViewModelMessageBus<NowPlayingMessage>,
418-
undoBackStack: BuildUndoBackStack,
419-
modifier: Modifier = Modifier,
411+
childItemViewModelProvider: PooledCloseablesViewModel<ViewPlaylistFileItem>,
412+
nowPlayingFilePropertiesViewModel: NowPlayingFilePropertiesViewModel,
413+
applicationNavigation: NavigateApplication,
414+
playbackServiceController: ControlPlaybackService,
415+
itemListMenuBackPressedHandler: ItemListMenuBackPressedHandler,
416+
playlistViewModel: NowPlayingPlaylistViewModel,
417+
viewModelMessageBus: ViewModelMessageBus<NowPlayingMessage>,
418+
undoBackStack: UndoStack,
419+
modifier: Modifier = Modifier,
420420
) {
421421
val nowPlayingFiles by playlistViewModel.nowPlayingList.subscribeAsState()
422422
val playlist by remember { derivedStateOf { nowPlayingFiles.map { p -> p.serviceFile } } }
@@ -542,15 +542,15 @@ private val expandedControlsHeight = controlRowHeight + collapsedControlsHeight
542542
@Composable
543543
@OptIn(ExperimentalFoundationApi::class, ExperimentalCoroutinesApi::class)
544544
fun BoxWithConstraintsScope.NowPlayingNarrowView(
545-
nowPlayingFilePropertiesViewModel: NowPlayingFilePropertiesViewModel,
546-
nowPlayingScreenViewModel: NowPlayingScreenViewModel,
547-
playbackServiceController: ControlPlaybackService,
548-
playlistViewModel: NowPlayingPlaylistViewModel,
549-
childItemViewModelProvider: PooledCloseablesViewModel<ViewPlaylistFileItem>,
550-
applicationNavigation: NavigateApplication,
551-
itemListMenuBackPressedHandler: ItemListMenuBackPressedHandler,
552-
viewModelMessageBus: ViewModelMessageBus<NowPlayingMessage>,
553-
undoBackStack: BuildUndoBackStack,
545+
nowPlayingFilePropertiesViewModel: NowPlayingFilePropertiesViewModel,
546+
nowPlayingScreenViewModel: NowPlayingScreenViewModel,
547+
playbackServiceController: ControlPlaybackService,
548+
playlistViewModel: NowPlayingPlaylistViewModel,
549+
childItemViewModelProvider: PooledCloseablesViewModel<ViewPlaylistFileItem>,
550+
applicationNavigation: NavigateApplication,
551+
itemListMenuBackPressedHandler: ItemListMenuBackPressedHandler,
552+
viewModelMessageBus: ViewModelMessageBus<NowPlayingMessage>,
553+
undoBackStack: UndoStack,
554554
) {
555555
val isScreenControlsVisible by nowPlayingScreenViewModel.isScreenControlsVisible.subscribeAsState()
556556

@@ -813,7 +813,7 @@ private fun ScreenDimensionsScope.NowPlayingWideView(
813813
applicationNavigation: NavigateApplication,
814814
itemListMenuBackPressedHandler: ItemListMenuBackPressedHandler,
815815
viewModelMessageBus: ViewModelMessageBus<NowPlayingMessage>,
816-
undoBackStack: BuildUndoBackStack
816+
undoBackStack: UndoStack
817817
) {
818818
val playlistWidth = screenHeight.coerceIn(minimumMenuWidth, maxWidth / 2)
819819
val playlistWidthPx = LocalDensity.current.run { playlistWidth.toPx() }
@@ -1007,18 +1007,18 @@ private fun ScreenDimensionsScope.NowPlayingWideView(
10071007
@ExperimentalFoundationApi
10081008
@Composable
10091009
fun NowPlayingView(
1010-
nowPlayingCoverArtViewModel: NowPlayingCoverArtViewModel,
1011-
nowPlayingFilePropertiesViewModel: NowPlayingFilePropertiesViewModel,
1012-
nowPlayingScreenViewModel: NowPlayingScreenViewModel,
1013-
playbackServiceController: ControlPlaybackService,
1014-
playlistViewModel: NowPlayingPlaylistViewModel,
1015-
childItemViewModelProvider: PooledCloseablesViewModel<ViewPlaylistFileItem>,
1016-
applicationNavigation: NavigateApplication,
1017-
itemListMenuBackPressedHandler: ItemListMenuBackPressedHandler,
1018-
connectionWatcherViewModel: ConnectionWatcherViewModel,
1019-
viewModelMessageBus: ViewModelMessageBus<NowPlayingMessage>,
1020-
bitmapProducer: ProduceBitmaps,
1021-
undoBackStack: BuildUndoBackStack,
1010+
nowPlayingCoverArtViewModel: NowPlayingCoverArtViewModel,
1011+
nowPlayingFilePropertiesViewModel: NowPlayingFilePropertiesViewModel,
1012+
nowPlayingScreenViewModel: NowPlayingScreenViewModel,
1013+
playbackServiceController: ControlPlaybackService,
1014+
playlistViewModel: NowPlayingPlaylistViewModel,
1015+
childItemViewModelProvider: PooledCloseablesViewModel<ViewPlaylistFileItem>,
1016+
applicationNavigation: NavigateApplication,
1017+
itemListMenuBackPressedHandler: ItemListMenuBackPressedHandler,
1018+
connectionWatcherViewModel: ConnectionWatcherViewModel,
1019+
viewModelMessageBus: ViewModelMessageBus<NowPlayingMessage>,
1020+
bitmapProducer: ProduceBitmaps,
1021+
undoBackStack: UndoStack,
10221022
) {
10231023
val systemUiController = rememberSystemUiController()
10241024
DisposableEffect(systemUiController) {

projectBlueWater/src/main/java/com/lasthopesoftware/bluewater/client/settings/LibrarySettingsView.kt

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -49,7 +49,7 @@ import com.lasthopesoftware.bluewater.NavigateApplication
4949
import com.lasthopesoftware.bluewater.R
5050
import com.lasthopesoftware.bluewater.client.browsing.library.repository.SyncedFileLocation
5151
import com.lasthopesoftware.bluewater.client.connection.trust.ProvideUserSslCertificates
52-
import com.lasthopesoftware.bluewater.shared.android.BuildUndoBackStack
52+
import com.lasthopesoftware.bluewater.shared.android.UndoStack
5353
import com.lasthopesoftware.bluewater.shared.android.ui.components.BackButton
5454
import com.lasthopesoftware.bluewater.shared.android.ui.components.ColumnMenuIcon
5555
import com.lasthopesoftware.bluewater.shared.android.ui.components.GradientSide
@@ -686,10 +686,10 @@ private fun LibrarySettingsList(
686686

687687
@Composable
688688
fun ServerTypeSelection(
689-
librarySettingsViewModel: LibrarySettingsViewModel,
690-
undoBackStack: BuildUndoBackStack,
691-
modifier: Modifier = Modifier,
692-
onServerTypeSelectionFinished: () -> Unit = {},
689+
librarySettingsViewModel: LibrarySettingsViewModel,
690+
undoBackStack: UndoStack,
691+
modifier: Modifier = Modifier,
692+
onServerTypeSelectionFinished: () -> Unit = {},
693693
) {
694694
val backAction = { onServerTypeSelectionFinished(); true.toPromise() }
695695
undoBackStack.addAction(backAction)
@@ -769,11 +769,11 @@ fun ServerTypeSelection(
769769
@OptIn(ExperimentalCoroutinesApi::class)
770770
@Composable
771771
fun LibrarySettingsView(
772-
librarySettingsViewModel: LibrarySettingsViewModel,
773-
navigateApplication: NavigateApplication,
774-
stringResources: GetStringResources,
775-
userSslCertificates: ProvideUserSslCertificates,
776-
undoBackStack: BuildUndoBackStack,
772+
librarySettingsViewModel: LibrarySettingsViewModel,
773+
navigateApplication: NavigateApplication,
774+
stringResources: GetStringResources,
775+
userSslCertificates: ProvideUserSslCertificates,
776+
undoBackStack: UndoStack,
777777
) {
778778
ControlSurface {
779779
RemoveServerConfirmationDialog(

projectBlueWater/src/main/java/com/lasthopesoftware/bluewater/client/stored/library/items/files/view/ActiveFileDownloadsView.kt

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -52,7 +52,7 @@ import com.lasthopesoftware.bluewater.client.browsing.files.list.ViewFileItem
5252
import com.lasthopesoftware.bluewater.client.browsing.items.list.ItemListContentType
5353
import com.lasthopesoftware.bluewater.client.stored.library.items.files.repository.StoredFile
5454
import com.lasthopesoftware.bluewater.client.stored.library.sync.SyncIcon
55-
import com.lasthopesoftware.bluewater.shared.android.BuildUndoBackStack
55+
import com.lasthopesoftware.bluewater.shared.android.UndoStack
5656
import com.lasthopesoftware.bluewater.shared.android.ui.components.BackButton
5757
import com.lasthopesoftware.bluewater.shared.android.ui.components.GradientSide
5858
import com.lasthopesoftware.bluewater.shared.android.ui.components.MarqueeText
@@ -78,10 +78,10 @@ private val boxHeight = expandedTitleHeight + appBarHeight
7878
@OptIn(ExperimentalCoroutinesApi::class)
7979
@Composable
8080
fun ActiveFileDownloadsView(
81-
activeFileDownloadsViewModel: ActiveFileDownloadsViewModel,
82-
trackHeadlineViewModelProvider: PooledCloseablesViewModel<ViewFileItem>,
83-
applicationNavigation: NavigateApplication,
84-
undoBackStack: BuildUndoBackStack,
81+
activeFileDownloadsViewModel: ActiveFileDownloadsViewModel,
82+
trackHeadlineViewModelProvider: PooledCloseablesViewModel<ViewFileItem>,
83+
applicationNavigation: NavigateApplication,
84+
undoBackStack: UndoStack,
8585
) {
8686
@Composable
8787
fun RenderTrackHeaderItem(storedFile: StoredFile) {

projectBlueWater/src/main/java/com/lasthopesoftware/bluewater/shared/android/BuildUndoBackStack.kt renamed to projectBlueWater/src/main/java/com/lasthopesoftware/bluewater/shared/android/UndoStack.kt

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

33
import com.namehillsoftware.handoff.promises.Promise
44

5-
interface BuildUndoBackStack {
5+
interface UndoStack {
66
fun addAction(action: () -> Promise<Boolean>)
77
fun removeAction(action: () -> Promise<*>)
8+
fun pop(): (() -> Promise<Boolean>)?
89
}
Lines changed: 7 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -1,25 +1,17 @@
11
package com.lasthopesoftware.bluewater.shared.android
22

3-
import androidx.lifecycle.ViewModel
43
import com.lasthopesoftware.bluewater.NavigateApplication
54
import com.lasthopesoftware.promises.extensions.toPromise
65
import com.namehillsoftware.handoff.promises.Promise
7-
import java.util.Stack
86

97
class UndoStackApplicationNavigation(
8+
private val undoStack: UndoStack,
109
private val inner: NavigateApplication,
11-
) : ViewModel(), NavigateApplication by inner, BuildUndoBackStack {
12-
private val backStack = Stack<() -> Promise<Boolean>>()
13-
14-
override fun addAction(action: () -> Promise<Boolean>) {
15-
backStack.push(action)
16-
}
17-
18-
override fun removeAction(action: () -> Promise<*>) {
19-
backStack.remove(action)
20-
}
21-
10+
) : NavigateApplication by inner {
2211
override fun backOut(): Promise<Boolean> =
23-
if (backStack.isNotEmpty()) backStack.pop()().eventually { if (it) it.toPromise() else backOut() }
24-
else inner.backOut()
12+
undoStack
13+
.pop()
14+
?.invoke()
15+
?.eventually { if (it) it.toPromise() else backOut() }
16+
?: inner.backOut()
2517
}

0 commit comments

Comments
 (0)