Common buttons

This commit is contained in:
Pierre-Yves Nicolas
2025-07-06 14:37:00 +02:00
parent da78c1a57c
commit 2455f2cfc7
3 changed files with 42 additions and 43 deletions

View File

@@ -15,9 +15,13 @@
package org.mydomain.myscan.view package org.mydomain.myscan.view
import androidx.compose.foundation.layout.Spacer import androidx.compose.foundation.layout.Spacer
import androidx.compose.foundation.layout.size
import androidx.compose.foundation.layout.width import androidx.compose.foundation.layout.width
import androidx.compose.material3.Button import androidx.compose.material3.Button
import androidx.compose.material3.FilledIconButton
import androidx.compose.material3.Icon import androidx.compose.material3.Icon
import androidx.compose.material3.IconButtonDefaults
import androidx.compose.material3.MaterialTheme
import androidx.compose.material3.Text import androidx.compose.material3.Text
import androidx.compose.runtime.Composable import androidx.compose.runtime.Composable
import androidx.compose.ui.Modifier import androidx.compose.ui.Modifier
@@ -39,3 +43,26 @@ fun MainActionButton(
Text(text) Text(text)
} }
} }
@Composable
fun SecondaryActionButton(
icon: ImageVector,
contentDescription: String,
onClick: () -> Unit,
modifier: Modifier = Modifier
) {
FilledIconButton (
onClick = onClick,
colors = IconButtonDefaults.outlinedIconButtonColors(
containerColor = MaterialTheme.colorScheme.secondaryContainer.copy(alpha = 0.6f),
contentColor = MaterialTheme.colorScheme.primary
),
modifier = modifier.size(40.dp)
) {
Icon(
imageVector = icon,
contentDescription = contentDescription,
tint = MaterialTheme.colorScheme.primary
)
}
}

View File

@@ -43,8 +43,9 @@ import androidx.compose.foundation.lazy.LazyListState
import androidx.compose.foundation.lazy.rememberLazyListState import androidx.compose.foundation.lazy.rememberLazyListState
import androidx.compose.foundation.shape.CircleShape import androidx.compose.foundation.shape.CircleShape
import androidx.compose.foundation.shape.RoundedCornerShape import androidx.compose.foundation.shape.RoundedCornerShape
import androidx.compose.material.icons.Icons
import androidx.compose.material.icons.filled.Done
import androidx.compose.material3.BottomAppBar import androidx.compose.material3.BottomAppBar
import androidx.compose.material3.Button
import androidx.compose.material3.MaterialTheme import androidx.compose.material3.MaterialTheme
import androidx.compose.material3.Scaffold import androidx.compose.material3.Scaffold
import androidx.compose.material3.Surface import androidx.compose.material3.Surface
@@ -407,13 +408,12 @@ fun CameraScreenFooter(
style = MaterialTheme.typography.bodyMedium, style = MaterialTheme.typography.bodyMedium,
modifier = Modifier.clickable(onClick = onPageCountClick) modifier = Modifier.clickable(onClick = onPageCountClick)
) )
MainActionButton(
Button (
onClick = onFinalizePressed, onClick = onFinalizePressed,
enabled = pageCount > 0 enabled = pageCount > 0,
) { text = "Finish",
Text("Finish") icon = Icons.Default.Done,
} )
} }
} }
} }

View File

@@ -27,7 +27,6 @@ import androidx.compose.foundation.layout.Spacer
import androidx.compose.foundation.layout.fillMaxSize import androidx.compose.foundation.layout.fillMaxSize
import androidx.compose.foundation.layout.fillMaxWidth import androidx.compose.foundation.layout.fillMaxWidth
import androidx.compose.foundation.layout.padding import androidx.compose.foundation.layout.padding
import androidx.compose.foundation.layout.size
import androidx.compose.foundation.layout.width import androidx.compose.foundation.layout.width
import androidx.compose.foundation.shape.RoundedCornerShape import androidx.compose.foundation.shape.RoundedCornerShape
import androidx.compose.material.icons.Icons import androidx.compose.material.icons.Icons
@@ -37,12 +36,9 @@ import androidx.compose.material.icons.filled.PictureAsPdf
import androidx.compose.material.icons.filled.RestartAlt import androidx.compose.material.icons.filled.RestartAlt
import androidx.compose.material.icons.outlined.Delete import androidx.compose.material.icons.outlined.Delete
import androidx.compose.material3.AlertDialog import androidx.compose.material3.AlertDialog
import androidx.compose.material3.Button
import androidx.compose.material3.ExperimentalMaterial3Api import androidx.compose.material3.ExperimentalMaterial3Api
import androidx.compose.material3.FilledIconButton
import androidx.compose.material3.Icon import androidx.compose.material3.Icon
import androidx.compose.material3.IconButton import androidx.compose.material3.IconButton
import androidx.compose.material3.IconButtonDefaults
import androidx.compose.material3.MaterialTheme import androidx.compose.material3.MaterialTheme
import androidx.compose.material3.Scaffold import androidx.compose.material3.Scaffold
import androidx.compose.material3.Text import androidx.compose.material3.Text
@@ -60,7 +56,6 @@ import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier import androidx.compose.ui.Modifier
import androidx.compose.ui.geometry.Size import androidx.compose.ui.geometry.Size
import androidx.compose.ui.graphics.asImageBitmap import androidx.compose.ui.graphics.asImageBitmap
import androidx.compose.ui.graphics.vector.ImageVector
import androidx.compose.ui.platform.LocalContext import androidx.compose.ui.platform.LocalContext
import androidx.compose.ui.text.font.FontWeight import androidx.compose.ui.text.font.FontWeight
import androidx.compose.ui.tooling.preview.Preview import androidx.compose.ui.tooling.preview.Preview
@@ -168,7 +163,7 @@ private fun DocumentPreview(
) )
} }
} }
MyIconButton( SecondaryActionButton(
Icons.Outlined.Delete, Icons.Outlined.Delete,
contentDescription = "Delete page", contentDescription = "Delete page",
onClick = { onDeleteImage(imageId) }, onClick = { onDeleteImage(imageId) },
@@ -205,7 +200,7 @@ private fun PageList(
onPageClick = { index -> currentPageIndex.value = index }, onPageClick = { index -> currentPageIndex.value = index },
currentPageIndex = currentPageIndex.value, currentPageIndex = currentPageIndex.value,
) )
MyIconButton( SecondaryActionButton(
icon = Icons.Default.Add, icon = Icons.Default.Add,
onClick = toCameraScreen, onClick = toCameraScreen,
contentDescription = "Add page", contentDescription = "Add page",
@@ -229,13 +224,13 @@ private fun BottomBar(
verticalAlignment = Alignment.CenterVertically, verticalAlignment = Alignment.CenterVertically,
horizontalArrangement = Arrangement.End horizontalArrangement = Arrangement.End
) { ) {
Button(onClick = { showPdfDialog.value = true }) { MainActionButton(
Icon(Icons.Default.PictureAsPdf, contentDescription = "Generate PDF") onClick = { showPdfDialog.value = true },
Spacer(Modifier.width(8.dp)) icon = Icons.Default.PictureAsPdf,
Text("Generate PDF") text = "Generate PDF",
} )
Spacer(modifier = Modifier.width(8.dp)) Spacer(modifier = Modifier.width(8.dp))
MyIconButton( SecondaryActionButton(
icon = Icons.Default.RestartAlt, icon = Icons.Default.RestartAlt,
contentDescription = "Restart", contentDescription = "Restart",
onClick = { showNewDocDialog.value = true }, onClick = { showNewDocDialog.value = true },
@@ -266,29 +261,6 @@ fun NewDocumentDialog(onConfirm: () -> Unit, showDialog: MutableState<Boolean>)
) )
} }
@Composable
fun MyIconButton(
icon: ImageVector,
contentDescription: String,
onClick: () -> Unit,
modifier: Modifier = Modifier
) {
FilledIconButton (
onClick = onClick,
colors = IconButtonDefaults.outlinedIconButtonColors(
containerColor = MaterialTheme.colorScheme.secondaryContainer.copy(alpha = 0.6f),
contentColor = MaterialTheme.colorScheme.primary
),
modifier = modifier.size(40.dp)
) {
Icon(
imageVector = icon,
contentDescription = contentDescription,
tint = MaterialTheme.colorScheme.primary
)
}
}
@Composable @Composable
@Preview @Preview
fun DocumentScreenPreview() { fun DocumentScreenPreview() {