Skip to content

Commit

Permalink
feat: Add SettingsDataManagementScreen
Browse files Browse the repository at this point in the history
  • Loading branch information
KevinBoulongne committed Oct 16, 2024
1 parent 9b208a4 commit 760f070
Show file tree
Hide file tree
Showing 2 changed files with 126 additions and 0 deletions.
Original file line number Diff line number Diff line change
@@ -0,0 +1,118 @@
/*
* Infomaniak SwissTransfer - Android
* Copyright (C) 2024 Infomaniak Network SA
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
package com.infomaniak.swisstransfer.ui.screen.main.settings

import androidx.compose.foundation.Image
import androidx.compose.foundation.layout.Column
import androidx.compose.foundation.layout.fillMaxWidth
import androidx.compose.foundation.layout.padding
import androidx.compose.foundation.rememberScrollState
import androidx.compose.foundation.verticalScroll
import androidx.compose.material3.Surface
import androidx.compose.material3.Text
import androidx.compose.runtime.Composable
import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier
import androidx.compose.ui.res.stringResource
import com.infomaniak.swisstransfer.R
import com.infomaniak.swisstransfer.ui.components.SharpRippleButton
import com.infomaniak.swisstransfer.ui.components.SwissTransferTopAppBar
import com.infomaniak.swisstransfer.ui.components.TopAppBarButton
import com.infomaniak.swisstransfer.ui.images.AppImages.AppIcons
import com.infomaniak.swisstransfer.ui.images.AppImages.AppIllus
import com.infomaniak.swisstransfer.ui.images.icons.Matomo
import com.infomaniak.swisstransfer.ui.images.icons.Sentry
import com.infomaniak.swisstransfer.ui.images.illus.DataProtection
import com.infomaniak.swisstransfer.ui.screen.main.components.SmallWindowTopAppBarScaffold
import com.infomaniak.swisstransfer.ui.screen.main.settings.components.EndIconType.CHEVRON
import com.infomaniak.swisstransfer.ui.screen.main.settings.components.SettingItem
import com.infomaniak.swisstransfer.ui.theme.Dimens
import com.infomaniak.swisstransfer.ui.theme.Margin
import com.infomaniak.swisstransfer.ui.theme.SwissTransferTheme
import com.infomaniak.swisstransfer.ui.utils.PreviewSmallWindow

@Composable
fun SettingsDataManagementScreen(
navigateBack: (() -> Unit)?,
onViewSourceCodeClicked: () -> Unit,
) {
SmallWindowTopAppBarScaffold(
smallWindowTopAppBar = {
SwissTransferTopAppBar(
titleRes = R.string.settingsOptionDataManagement,
navigationMenu = TopAppBarButton.backButton(navigateBack ?: {}),
)
},
) {
Column(
modifier = Modifier.verticalScroll(rememberScrollState()),
horizontalAlignment = Alignment.CenterHorizontally,
) {
Image(
imageVector = AppIllus.DataProtection, // TODO: Handle dark theme
contentDescription = null,
modifier = Modifier.padding(Margin.Medium),
)
Text(
text = stringResource(R.string.settingsDataManagementDescription),
style = SwissTransferTheme.typography.bodyRegular,
color = SwissTransferTheme.colors.primaryTextColor,
modifier = Modifier.padding(Margin.Medium),
)
SharpRippleButton(
modifier = Modifier.fillMaxWidth(),
onClick = { onViewSourceCodeClicked() },
) {
Text(
text = stringResource(R.string.settingsDataManagementSourceCode),
style = SwissTransferTheme.typography.bodyMedium,
color = SwissTransferTheme.materialColors.primary,
modifier = Modifier
.fillMaxWidth()
.padding(horizontal = Dimens.SettingHorizontalMargin, vertical = Dimens.SettingVerticalMargin),
)
}
SettingItem(
titleRes = R.string.matomo,
isSelected = { false },
icon = AppIcons.Matomo.image(),
endIcon = CHEVRON,
shouldTintIcon = false,
onClick = { /* TODO */ },
)
SettingItem(
titleRes = R.string.sentry,
isSelected = { false },
icon = AppIcons.Sentry.image(),
endIcon = CHEVRON,
shouldTintIcon = false,
onClick = { /* TODO */ },
)
}
}
}

@PreviewSmallWindow
@Composable
private fun SettingsDataManagementScreenPreview() {
SwissTransferTheme {
Surface {
SettingsDataManagementScreen({}, {})
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -123,13 +123,17 @@ private fun DetailPane(
emailLanguage: GetSetCallbacks<EmailLanguage>,
) {
var lastSelectedScreen by rememberSaveable { mutableStateOf<SettingsOptionScreens?>(null) }
val context = LocalContext.current

val destination = navigator.currentDestination?.content ?: lastSelectedScreen
navigator.currentDestination?.content?.let { lastSelectedScreen = it }

val navigateBackCallback: () -> Unit = { navigator.navigateBack() }
val navigateBack: (() -> Unit)? = if (navigator.canNavigateBack()) navigateBackCallback else null

// TODO: Update this URL when we know what we want.
val sourceCodeURL = stringResource(R.string.urlSourceCode)

when (destination) {
THEME -> SettingsThemeScreen(
theme = theme.get(),
Expand All @@ -151,6 +155,10 @@ private fun DetailPane(
navigateBack = navigateBack,
onEmailLanguageChange = { emailLanguage.set(it) },
)
DATA_MANAGEMENT -> SettingsDataManagementScreen(
navigateBack = navigateBack,
onViewSourceCodeClicked = { context.openUrl(sourceCodeURL) },
)
NOTIFICATIONS,
DISCOVER_INFOMANIAK,
SHARE_IDEAS,
Expand Down

0 comments on commit 760f070

Please sign in to comment.