Skip to content

Commit 0866fc6

Browse files
committed
Refactor: Introduce WorkspaceActionHandler interface
Simplifies workspace action handling by consolidating multiple callback parameters into a single handler interface. All workspace pages (Explorer, Editor, Searcher, Templates) now use this unified interface instead of individual callback functions.
1 parent 7220937 commit 0866fc6

17 files changed

Lines changed: 186 additions & 336 deletions

File tree

app-workspace-editor/src/main/java/eu/darken/butler/editor/ui/editor/EditorWorkspacePage.kt

Lines changed: 10 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
package eu.darken.butler.editor.ui.editor
2+
23
import androidx.compose.foundation.layout.Arrangement
34
import androidx.compose.foundation.layout.Box
45
import androidx.compose.foundation.layout.Column
@@ -13,22 +14,15 @@ import androidx.compose.foundation.layout.width
1314
import androidx.compose.material.icons.Icons
1415
import androidx.compose.material.icons.twotone.Close
1516
import androidx.compose.material.icons.twotone.Error
16-
import androidx.compose.material.icons.filled.FolderOpen
17-
import androidx.compose.material.icons.filled.FormatListNumbered
18-
import androidx.compose.material.icons.filled.Info
19-
import androidx.compose.material.icons.filled.KeyboardArrowDown
20-
import androidx.compose.material.icons.filled.KeyboardArrowUp
21-
import androidx.compose.material.icons.twotone.Save
22-
import androidx.compose.material.icons.filled.Search
2317
import androidx.compose.material.icons.twotone.FolderOpen
2418
import androidx.compose.material.icons.twotone.FormatListNumbered
2519
import androidx.compose.material.icons.twotone.Info
2620
import androidx.compose.material.icons.twotone.KeyboardArrowDown
2721
import androidx.compose.material.icons.twotone.KeyboardArrowUp
22+
import androidx.compose.material.icons.twotone.Save
2823
import androidx.compose.material.icons.twotone.Search
2924
import androidx.compose.material3.AlertDialog
3025
import androidx.compose.material3.CircularProgressIndicator
31-
import androidx.compose.material3.ExperimentalMaterial3Api
3226
import androidx.compose.material3.Icon
3327
import androidx.compose.material3.IconButton
3428
import androidx.compose.material3.MaterialTheme
@@ -65,7 +59,7 @@ import eu.darken.butler.editor.core.MemoryStats
6559
import eu.darken.butler.editor.core.SearchResult
6660
import eu.darken.butler.editor.core.TextPosition
6761
import eu.darken.butler.workspace.core.Workspace
68-
import eu.darken.butler.workspace.core.WorkspaceAction
62+
import eu.darken.butler.workspace.ui.manager.WorkspaceActionHandler
6963
import eu.darken.butler.workspace.ui.manager.WorkspaceButton
7064
import eu.darken.butler.workspace.ui.manager.WorkspaceButtonViewModel
7165
import eu.darken.butler.workspace.ui.manager.WorkspaceDesign
@@ -93,9 +87,7 @@ fun EditorWorkspacePageHost(
9387
state?.let { state ->
9488
EditorWorkspacePage(
9589
workspaceButtonState = workspaceButtonState,
96-
onWorkspaceAction = workspaceButtonVm::onWorkspaceAction,
97-
onNavToWorkspaceManager = workspaceButtonVm::onNavToWorkspaceManager,
98-
onNavToSettings = workspaceButtonVm::onNavToSettings,
90+
workspaceActionHandler = workspaceButtonVm,
9991
design = design,
10092
state = state,
10193
onOpenFile = vm::openFile,
@@ -124,10 +116,8 @@ fun EditorWorkspacePageHost(
124116

125117
@Composable
126118
fun EditorWorkspacePage(
127-
workspaceButtonState: WorkspaceButtonViewModel.State?,
128-
onWorkspaceAction: (WorkspaceAction) -> Unit,
129-
onNavToWorkspaceManager: () -> Unit,
130-
onNavToSettings: () -> Unit,
119+
workspaceButtonState: WorkspaceButtonViewModel.State? = null,
120+
workspaceActionHandler: WorkspaceActionHandler? = null,
131121
design: WorkspaceDesign,
132122
state: EditorWorkspaceViewModel.State,
133123
onOpenFile: (APath) -> Unit,
@@ -194,9 +184,7 @@ fun EditorWorkspacePage(
194184
onGoToLine = { showGoToLineDialog = true },
195185
onToggleMemoryStats = { showMemoryStats = !showMemoryStats },
196186
workspaceButtonState = workspaceButtonState,
197-
onWorkspaceAction = onWorkspaceAction,
198-
onNavToWorkspaceManager = onNavToWorkspaceManager,
199-
onNavToSettings = onNavToSettings,
187+
workspaceActionHandler = workspaceActionHandler,
200188
)
201189

202190
Column(
@@ -288,7 +276,7 @@ fun EditorWorkspacePage(
288276
onDismiss = { showSearchDialog = false }
289277
)
290278
}
291-
279+
292280
// File picker host
293281
FilePickerHost(
294282
launcher = filePickerLauncher,
@@ -314,9 +302,7 @@ private fun EditorHeader(
314302
onGoToLine: () -> Unit,
315303
onToggleMemoryStats: () -> Unit,
316304
workspaceButtonState: WorkspaceButtonViewModel.State?,
317-
onWorkspaceAction: (WorkspaceAction) -> Unit,
318-
onNavToWorkspaceManager: () -> Unit,
319-
onNavToSettings: () -> Unit,
305+
workspaceActionHandler: WorkspaceActionHandler? = null,
320306
) {
321307
Surface(
322308
color = MaterialTheme.colorScheme.surfaceContainerHigh,
@@ -353,9 +339,7 @@ private fun EditorHeader(
353339

354340
WorkspaceButton(
355341
state = workspaceButtonState,
356-
onAction = onWorkspaceAction,
357-
onNavToWorkspaceManager = onNavToWorkspaceManager,
358-
onNavToSettings = onNavToSettings,
342+
workspaceActionHandler = workspaceActionHandler,
359343
)
360344
}
361345
}
@@ -664,10 +648,6 @@ private fun EditorPagePreview() {
664648
PreviewWrapper {
665649
EditorWorkspacePage(
666650
design = WorkspaceDesign(),
667-
workspaceButtonState = null,
668-
onWorkspaceAction = {},
669-
onNavToWorkspaceManager = {},
670-
onNavToSettings = {},
671651
state = EditorWorkspaceViewModel.State(
672652
id = Workspace.Id(),
673653
totalLines = 1000,

app-workspace-explorer/src/main/java/eu/darken/butler/explorer/ui/explorer/ExplorerTopBar.kt

Lines changed: 4 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@ import eu.darken.butler.common.files.LocalPath
1818
import eu.darken.butler.explorer.R
1919
import eu.darken.butler.explorer.core.ExplorerBreadcrumb
2020
import eu.darken.butler.explorer.core.ExplorerNavigation
21-
import eu.darken.butler.workspace.core.WorkspaceAction
21+
import eu.darken.butler.workspace.ui.manager.WorkspaceActionHandler
2222
import eu.darken.butler.workspace.ui.manager.WorkspaceButton
2323
import eu.darken.butler.workspace.ui.manager.WorkspaceButtonViewModel
2424

@@ -31,9 +31,7 @@ fun ExplorerTopBar(
3131
onNavigateToPath: (String) -> Unit,
3232
workspaceButtonState: WorkspaceButtonViewModel.State?,
3333
showWorkspaceButton: Boolean,
34-
onWorkspaceAction: (WorkspaceAction) -> Unit,
35-
onNavToWorkspaceManager: () -> Unit,
36-
onNavToSettings: () -> Unit,
34+
workspaceActionHandler: WorkspaceActionHandler? = null,
3735
) {
3836
TopAppBar(
3937
modifier = modifier,
@@ -54,9 +52,7 @@ fun ExplorerTopBar(
5452
WorkspaceButton(
5553
modifier = Modifier.padding(end = 8.dp),
5654
state = workspaceButtonState,
57-
onAction = onWorkspaceAction,
58-
onNavToWorkspaceManager = onNavToWorkspaceManager,
59-
onNavToSettings = onNavToSettings,
55+
workspaceActionHandler = workspaceActionHandler,
6056
)
6157
}
6258
},
@@ -86,7 +82,7 @@ fun ExplorerTopBarPreview() {
8682
target = ExplorerNavigation.Target.Directory(LocalPath.build("/storage/emulated/0"))
8783
)
8884
)
89-
85+
9086
PreviewWrapper {
9187
ExplorerTopBar(
9288
breadcrumbs = mockBreadcrumbs,
@@ -95,9 +91,6 @@ fun ExplorerTopBarPreview() {
9591
onNavigateToPath = {},
9692
workspaceButtonState = null,
9793
showWorkspaceButton = true,
98-
onWorkspaceAction = {},
99-
onNavToWorkspaceManager = {},
100-
onNavToSettings = {},
10194
)
10295
}
10396
}

0 commit comments

Comments
 (0)