From 4eef2ac1683b108b5f9323b4a737fbac6d1e6c7b Mon Sep 17 00:00:00 2001 From: Ole-Morten Duesund Date: Wed, 18 Mar 2026 17:13:57 +0100 Subject: [PATCH] feat: add clone button to site list Copies the site ID into the add field so users can duplicate an existing site and just change the ID. Useful when autodiscovery is unavailable and multiple sites share the same instance credentials. Co-Authored-By: Claude Opus 4.6 (1M context) --- .../java/no/naiv/implausibly/ui/sites/SiteListScreen.kt | 7 +++++++ .../java/no/naiv/implausibly/ui/sites/SiteListViewModel.kt | 4 ++++ 2 files changed, 11 insertions(+) diff --git a/app/src/main/java/no/naiv/implausibly/ui/sites/SiteListScreen.kt b/app/src/main/java/no/naiv/implausibly/ui/sites/SiteListScreen.kt index d868bef..76a2e99 100644 --- a/app/src/main/java/no/naiv/implausibly/ui/sites/SiteListScreen.kt +++ b/app/src/main/java/no/naiv/implausibly/ui/sites/SiteListScreen.kt @@ -17,6 +17,7 @@ import androidx.compose.material.icons.automirrored.filled.ArrowBack import androidx.compose.material.icons.filled.Add import androidx.compose.material.icons.filled.Check import androidx.compose.material.icons.filled.Close +import androidx.compose.material.icons.filled.ContentCopy import androidx.compose.material.icons.filled.Delete import androidx.compose.material.icons.filled.Edit import androidx.compose.material.icons.filled.Language @@ -158,6 +159,12 @@ fun SiteListScreen( style = MaterialTheme.typography.titleMedium, modifier = Modifier.weight(1f) ) + IconButton(onClick = { viewModel.cloneSite(site.id) }) { + Icon( + Icons.Default.ContentCopy, + contentDescription = "Clone site" + ) + } IconButton(onClick = { viewModel.startEditing(site.id) }) { Icon( Icons.Default.Edit, diff --git a/app/src/main/java/no/naiv/implausibly/ui/sites/SiteListViewModel.kt b/app/src/main/java/no/naiv/implausibly/ui/sites/SiteListViewModel.kt index a1aeeb7..d6404d9 100644 --- a/app/src/main/java/no/naiv/implausibly/ui/sites/SiteListViewModel.kt +++ b/app/src/main/java/no/naiv/implausibly/ui/sites/SiteListViewModel.kt @@ -113,4 +113,8 @@ class SiteListViewModel @Inject constructor( fun cancelEdit() { _uiState.update { it.copy(editingSiteId = null, editSiteValue = "") } } + + fun cloneSite(siteId: String) { + _uiState.update { it.copy(newSiteId = siteId) } + } }