/* * Copyright (c) 2023 Samson Achiaga * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package com.certified.audionote.features.settings import android.content.res.* import androidx.compose.foundation.* import androidx.compose.foundation.layout.* import androidx.compose.foundation.shape.* import androidx.compose.material.icons.* import androidx.compose.material.icons.automirrored.outlined.* import androidx.compose.material.icons.outlined.* import androidx.compose.material3.* import androidx.compose.runtime.* import androidx.compose.ui.* import androidx.compose.ui.draw.* import androidx.compose.ui.graphics.vector.* import androidx.compose.ui.res.* import androidx.compose.ui.text.* import androidx.compose.ui.tooling.preview.* import androidx.compose.ui.unit.* import com.certified.audionote.R import com.certified.audionote.ui.theme.* /** * Created by MJ Jacobs on 2024/12/28 at 14:54 */ @Composable fun SettingsScreen( modifier: Modifier = Modifier ) { SettingsScreenContent( modifier = modifier ) } @Composable private fun SettingsScreenContent( modifier: Modifier = Modifier ) { Column( modifier = modifier.fillMaxSize(), content = { // Display title Text( modifier = Modifier .fillMaxWidth() .padding(start = largePadding + 24.dp), text = stringResource(R.string.display), style = TextStyle( color = if (isSystemInDarkTheme()) primaryDark else primaryLight, fontSize = 20.sp ) ) Spacer(modifier = Modifier.height(normalPadding)) // Theme selection SettingsRowItem( icon = Icons.Outlined.BrightnessMedium, imageDescription = stringResource(R.string.theme), title = stringResource(R.string.theme), description = stringResource(R.string.theme_system_default), onClick = { /*TODO*/ } ) Spacer(modifier = Modifier.height(normalPadding)) // About title Text( modifier = Modifier .fillMaxWidth() .padding(start = largePadding + 24.dp), text = stringResource(R.string.about), style = TextStyle( color = if (isSystemInDarkTheme()) primaryDark else primaryLight, fontSize = 20.sp ) ) Spacer(modifier = Modifier.height(normalPadding)) // Theme selection SettingsRowItem( icon = Icons.Outlined.Person, imageDescription = stringResource(R.string.developer), title = stringResource(R.string.developer), description = stringResource(R.string.developer_nick), onClick = { /*TODO*/ } ) Spacer(modifier = Modifier.height(normalPadding)) // Theme selection SettingsRowItem( icon = Icons.Outlined.Code, imageDescription = stringResource(R.string.contribute), title = stringResource(R.string.contribute), description = stringResource(R.string.contribute_summary), onClick = { /*TODO*/ } ) Spacer(modifier = Modifier.height(normalPadding)) // Theme selection SettingsRowItem( icon = Icons.AutoMirrored.Outlined.ContactSupport, imageDescription = stringResource(R.string.contact_feedback), title = stringResource(R.string.contact_feedback), description = stringResource(R.string.developer_mail), onClick = { /*TODO*/ } ) Spacer(modifier = Modifier.height(normalPadding)) // Theme selection SettingsRowItem( icon = Icons.Outlined.Info, imageDescription = stringResource(R.string.about), title = stringResource(R.string.about), description = stringResource(R.string.app_version_licence_and_more), onClick = { /*TODO*/ } ) Spacer(modifier = Modifier.height(normalPadding)) } ) } @Composable private fun SettingsRowItem( icon: ImageVector, imageDescription: String, title: String, description: String, onClick: () -> Unit, ) { Row( modifier = Modifier .fillMaxWidth() .clip(RoundedCornerShape(defaultCornerSize)) .clickable { onClick() }, verticalAlignment = Alignment.CenterVertically, content = { // Icon Icon( modifier = Modifier.padding(normalPadding), imageVector = icon, contentDescription = imageDescription ) Column( modifier = Modifier.fillMaxWidth(), content = { // Title text field Text( text = title, style = MaterialTheme.typography.titleMedium ) Text( text = description, style = MaterialTheme.typography.bodyMedium ) } ) } ) } @Preview(uiMode = Configuration.UI_MODE_NIGHT_NO, showBackground = true) @Composable private fun PreviewSettingsScreenContentLightTheme() { AudioNoteTheme { SettingsScreenContent() } } @Preview(uiMode = Configuration.UI_MODE_NIGHT_NO, showBackground = true) @Composable private fun PreviewSettingsScreenContentDarkTheme() { AudioNoteTheme { SettingsScreenContent() } }