diff --git a/app/src/main/java/com/zaneschepke/wireguardautotunnel/ui/common/navigation/TopNavBar.kt b/app/src/main/java/com/zaneschepke/wireguardautotunnel/ui/common/navigation/TopNavBar.kt new file mode 100644 index 0000000..122eefd --- /dev/null +++ b/app/src/main/java/com/zaneschepke/wireguardautotunnel/ui/common/navigation/TopNavBar.kt @@ -0,0 +1,33 @@ +package com.zaneschepke.wireguardautotunnel.ui.common.navigation + +import androidx.compose.material.icons.Icons +import androidx.compose.material.icons.automirrored.outlined.ArrowBack +import androidx.compose.material3.CenterAlignedTopAppBar +import androidx.compose.material3.ExperimentalMaterial3Api +import androidx.compose.material3.Icon +import androidx.compose.material3.IconButton +import androidx.compose.material3.Text +import androidx.compose.runtime.Composable + +@OptIn(ExperimentalMaterial3Api::class) +@Composable +fun TopNavBar(title: String, trailing: @Composable () -> Unit = {}) { + val navController = LocalNavController.current + CenterAlignedTopAppBar( + title = { + Text(title) + }, + navigationIcon = { + IconButton(onClick = { navController.popBackStack() }) { + val icon = Icons.AutoMirrored.Outlined.ArrowBack + Icon( + imageVector = icon, + contentDescription = icon.name + ) + } + }, + actions = { + trailing() + } + ) +} diff --git a/app/src/main/java/com/zaneschepke/wireguardautotunnel/ui/screens/config/ConfigScreen.kt b/app/src/main/java/com/zaneschepke/wireguardautotunnel/ui/screens/config/ConfigScreen.kt index 6f3755e..96b66bf 100644 --- a/app/src/main/java/com/zaneschepke/wireguardautotunnel/ui/screens/config/ConfigScreen.kt +++ b/app/src/main/java/com/zaneschepke/wireguardautotunnel/ui/screens/config/ConfigScreen.kt @@ -18,6 +18,7 @@ import androidx.compose.foundation.text.KeyboardActions import androidx.compose.foundation.text.KeyboardOptions import androidx.compose.foundation.verticalScroll import androidx.compose.material.icons.Icons +import androidx.compose.material.icons.outlined.Edit import androidx.compose.material.icons.rounded.ContentCopy import androidx.compose.material.icons.rounded.Delete import androidx.compose.material.icons.rounded.Refresh @@ -60,6 +61,7 @@ import com.zaneschepke.wireguardautotunnel.ui.Route import com.zaneschepke.wireguardautotunnel.ui.common.config.ConfigurationTextBox import com.zaneschepke.wireguardautotunnel.ui.common.config.ConfigurationToggle import com.zaneschepke.wireguardautotunnel.ui.common.navigation.LocalNavController +import com.zaneschepke.wireguardautotunnel.ui.common.navigation.TopNavBar import com.zaneschepke.wireguardautotunnel.ui.common.prompt.AuthorizationPrompt import com.zaneschepke.wireguardautotunnel.ui.common.snackbar.SnackbarController import com.zaneschepke.wireguardautotunnel.ui.common.text.SectionTitle @@ -69,7 +71,6 @@ import com.zaneschepke.wireguardautotunnel.util.Constants import com.zaneschepke.wireguardautotunnel.util.extensions.isRunningOnTv import kotlinx.coroutines.delay -@SuppressLint("UnusedMaterial3ScaffoldPaddingParameter") @Composable fun ConfigScreen(tunnelId: Int, focusRequester: FocusRequester) { val viewModel = hiltViewModel { factory -> @@ -168,6 +169,9 @@ fun ConfigScreen(tunnelId: Int, focusRequester: FocusRequester) { } Scaffold( + topBar = { + TopNavBar(stringResource(R.string.edit_tunnel)) + }, floatingActionButtonPosition = FabPosition.End, floatingActionButton = { FloatingActionButton( @@ -185,7 +189,7 @@ fun ConfigScreen(tunnelId: Int, focusRequester: FocusRequester) { } }, ) { - Column { + Column(Modifier.padding(it)) { Column( horizontalAlignment = Alignment.CenterHorizontally, verticalArrangement = Arrangement.Top, diff --git a/app/src/main/java/com/zaneschepke/wireguardautotunnel/ui/screens/options/OptionsScreen.kt b/app/src/main/java/com/zaneschepke/wireguardautotunnel/ui/screens/options/OptionsScreen.kt index 7f6a25a..2132348 100644 --- a/app/src/main/java/com/zaneschepke/wireguardautotunnel/ui/screens/options/OptionsScreen.kt +++ b/app/src/main/java/com/zaneschepke/wireguardautotunnel/ui/screens/options/OptionsScreen.kt @@ -1,6 +1,5 @@ package com.zaneschepke.wireguardautotunnel.ui.screens.options -import android.annotation.SuppressLint import androidx.compose.foundation.clickable import androidx.compose.foundation.interaction.MutableInteractionSource import androidx.compose.foundation.layout.Arrangement @@ -18,9 +17,11 @@ import androidx.compose.foundation.text.KeyboardActions import androidx.compose.foundation.text.KeyboardOptions import androidx.compose.foundation.verticalScroll import androidx.compose.material.icons.Icons +import androidx.compose.material.icons.automirrored.outlined.ArrowBack import androidx.compose.material.icons.filled.Close import androidx.compose.material.icons.filled.Edit import androidx.compose.material.icons.outlined.Add +import androidx.compose.material.icons.outlined.Edit import androidx.compose.material3.Icon import androidx.compose.material3.IconButton import androidx.compose.material3.MaterialTheme @@ -54,6 +55,7 @@ import com.zaneschepke.wireguardautotunnel.ui.common.ClickableIconButton import com.zaneschepke.wireguardautotunnel.ui.common.config.ConfigurationToggle import com.zaneschepke.wireguardautotunnel.ui.common.config.SubmitConfigurationTextBox import com.zaneschepke.wireguardautotunnel.ui.common.navigation.LocalNavController +import com.zaneschepke.wireguardautotunnel.ui.common.navigation.TopNavBar import com.zaneschepke.wireguardautotunnel.ui.common.text.SectionTitle import com.zaneschepke.wireguardautotunnel.ui.screens.main.components.ScrollDismissFab import com.zaneschepke.wireguardautotunnel.ui.screens.settings.components.WildcardSupportingLabel @@ -63,7 +65,6 @@ import com.zaneschepke.wireguardautotunnel.util.extensions.isValidIpv4orIpv6Addr import com.zaneschepke.wireguardautotunnel.util.extensions.openWebUrl import kotlinx.coroutines.delay -@SuppressLint("UnusedMaterial3ScaffoldPaddingParameter") @OptIn(ExperimentalLayoutApi::class) @Composable fun OptionsScreen(optionsViewModel: OptionsViewModel = hiltViewModel(), focusRequester: FocusRequester, appUiState: AppUiState, tunnelId: Int) { @@ -99,18 +100,17 @@ fun OptionsScreen(optionsViewModel: OptionsViewModel = hiltViewModel(), focusReq } Scaffold( - floatingActionButton = { - ScrollDismissFab(icon = { - val icon = Icons.Filled.Edit - Icon( - imageVector = icon, - contentDescription = icon.name, - tint = MaterialTheme.colorScheme.onPrimary, - ) - }, focusRequester, isVisible = true, onClick = { - navController.navigate( + topBar = { + TopNavBar(config.name, trailing = { + IconButton(onClick = { navController.navigate( Route.Config(config.id), - ) + ) }) { + val icon = Icons.Outlined.Edit + Icon( + imageVector = icon, + contentDescription = icon.name + ) + } }) }, ) { @@ -119,7 +119,7 @@ fun OptionsScreen(optionsViewModel: OptionsViewModel = hiltViewModel(), focusReq verticalArrangement = Arrangement.Top, modifier = Modifier - .fillMaxSize() + .fillMaxSize().padding(it) .verticalScroll(scrollState) .clickable( indication = null,