From ec8de93ee5d6b10659d778d02e8fcf444ec8f692 Mon Sep 17 00:00:00 2001 From: aritra Date: Wed, 15 May 2024 01:39:28 +0530 Subject: [PATCH] Revamped the whole Profile Screen --- .../uncrack/components/ProfileContainer.kt | 2 +- .../uncrack/components/SettingsItemGroup.kt | 31 +++ .../uncrack/components/UCSettingsCard.kt | 50 +++++ .../uncrack/navigation/Navigation.kt | 2 + .../account/profile/ProfileScreen.kt | 182 +++++++++++++----- app/src/main/res/drawable/help.xml | 9 + app/src/main/res/drawable/import_icon.xml | 20 ++ app/src/main/res/drawable/settings_new.xml | 16 ++ app/src/main/res/values/strings.xml | 4 + 9 files changed, 263 insertions(+), 53 deletions(-) create mode 100644 app/src/main/java/com/geekymusketeers/uncrack/components/SettingsItemGroup.kt create mode 100644 app/src/main/java/com/geekymusketeers/uncrack/components/UCSettingsCard.kt create mode 100644 app/src/main/res/drawable/help.xml create mode 100644 app/src/main/res/drawable/import_icon.xml create mode 100644 app/src/main/res/drawable/settings_new.xml diff --git a/app/src/main/java/com/geekymusketeers/uncrack/components/ProfileContainer.kt b/app/src/main/java/com/geekymusketeers/uncrack/components/ProfileContainer.kt index 202590aa..0b192c19 100644 --- a/app/src/main/java/com/geekymusketeers/uncrack/components/ProfileContainer.kt +++ b/app/src/main/java/com/geekymusketeers/uncrack/components/ProfileContainer.kt @@ -31,7 +31,7 @@ fun ProfileContainer( contentDescription = null, contentScale = ContentScale.Crop, modifier = modifier - .size(120.dp) + .size(100.dp) .clip(CircleShape) ) diff --git a/app/src/main/java/com/geekymusketeers/uncrack/components/SettingsItemGroup.kt b/app/src/main/java/com/geekymusketeers/uncrack/components/SettingsItemGroup.kt new file mode 100644 index 00000000..a051d044 --- /dev/null +++ b/app/src/main/java/com/geekymusketeers/uncrack/components/SettingsItemGroup.kt @@ -0,0 +1,31 @@ +package com.geekymusketeers.uncrack.components + +import androidx.compose.foundation.background +import androidx.compose.foundation.layout.Column +import androidx.compose.foundation.layout.ColumnScope +import androidx.compose.foundation.layout.padding +import androidx.compose.foundation.layout.widthIn +import androidx.compose.foundation.shape.RoundedCornerShape +import androidx.compose.runtime.Composable +import androidx.compose.ui.Alignment +import androidx.compose.ui.Modifier +import androidx.compose.ui.draw.clip +import androidx.compose.ui.unit.dp +import com.geekymusketeers.uncrack.ui.theme.BackgroundLight + +@Composable +fun SettingsItemGroup( + modifier: Modifier = Modifier, + columnScope: @Composable ColumnScope.() -> Unit +) { + Column( + modifier = modifier + .widthIn(max = 500.dp) + .padding(start = 12.dp, end = 12.dp) + .clip(RoundedCornerShape(8.dp)) + .background(BackgroundLight), + horizontalAlignment = Alignment.CenterHorizontally + ) { + columnScope() + } +} \ No newline at end of file diff --git a/app/src/main/java/com/geekymusketeers/uncrack/components/UCSettingsCard.kt b/app/src/main/java/com/geekymusketeers/uncrack/components/UCSettingsCard.kt new file mode 100644 index 00000000..0365ed55 --- /dev/null +++ b/app/src/main/java/com/geekymusketeers/uncrack/components/UCSettingsCard.kt @@ -0,0 +1,50 @@ +package com.geekymusketeers.uncrack.components + +import androidx.compose.foundation.clickable +import androidx.compose.foundation.layout.Arrangement +import androidx.compose.foundation.layout.Row +import androidx.compose.foundation.layout.fillMaxWidth +import androidx.compose.foundation.layout.padding +import androidx.compose.foundation.layout.size +import androidx.compose.material3.Icon +import androidx.compose.material3.Text +import androidx.compose.runtime.Composable +import androidx.compose.ui.Alignment +import androidx.compose.ui.Modifier +import androidx.compose.ui.graphics.Color +import androidx.compose.ui.res.painterResource +import androidx.compose.ui.res.stringResource +import androidx.compose.ui.unit.dp +import androidx.compose.ui.unit.sp +import com.geekymusketeers.uncrack.R +import com.geekymusketeers.uncrack.ui.theme.medium18 +import com.geekymusketeers.uncrack.ui.theme.normal16 +import com.geekymusketeers.uncrack.ui.theme.normal18 +import com.geekymusketeers.uncrack.ui.theme.normal20 + +@Composable +fun UCSettingsCard( + itemName: String, + iconId: Int, + modifier: Modifier = Modifier, + onClick: () -> Unit +) { + Row( + modifier = modifier + .fillMaxWidth() + .padding(16.dp) + .clickable { onClick() }, + horizontalArrangement = Arrangement.spacedBy(12.dp, Alignment.Start), + verticalAlignment = Alignment.CenterVertically + ) { + Icon( + modifier = Modifier.size(26.dp), + painter = painterResource(iconId), + contentDescription = stringResource(R.string.icon), + ) + Text( + text = itemName, + style = medium18.copy(Color.Black) + ) + } +} diff --git a/app/src/main/java/com/geekymusketeers/uncrack/navigation/Navigation.kt b/app/src/main/java/com/geekymusketeers/uncrack/navigation/Navigation.kt index 1241a043..cf821acc 100644 --- a/app/src/main/java/com/geekymusketeers/uncrack/navigation/Navigation.kt +++ b/app/src/main/java/com/geekymusketeers/uncrack/navigation/Navigation.kt @@ -87,6 +87,7 @@ fun Navigation( Screen.UpdateMasterKeyScreen.name, Screen.PasswordGeneratorScreen.name, Screen.CategoryScreen.name, + Screen.AccountScreen.name, "${Screen.ViewPasswordScreen.name}/{id}", Screen.PasswordHealthScreen.name ) @@ -192,6 +193,7 @@ fun Navigation( composable(route = Screen.ProfileScreen.name) { ProfileScreen( + navController, userViewModel ) } diff --git a/app/src/main/java/com/geekymusketeers/uncrack/presentation/account/profile/ProfileScreen.kt b/app/src/main/java/com/geekymusketeers/uncrack/presentation/account/profile/ProfileScreen.kt index f77fc10f..741ca8ca 100644 --- a/app/src/main/java/com/geekymusketeers/uncrack/presentation/account/profile/ProfileScreen.kt +++ b/app/src/main/java/com/geekymusketeers/uncrack/presentation/account/profile/ProfileScreen.kt @@ -1,8 +1,12 @@ package com.geekymusketeers.uncrack.presentation.account.profile +import android.content.Intent +import android.net.Uri import androidx.compose.foundation.background +import androidx.compose.foundation.clickable import androidx.compose.foundation.layout.Box import androidx.compose.foundation.layout.Column +import androidx.compose.foundation.layout.Row import androidx.compose.foundation.layout.Spacer import androidx.compose.foundation.layout.fillMaxSize import androidx.compose.foundation.layout.fillMaxWidth @@ -12,90 +16,164 @@ import androidx.compose.foundation.layout.padding import androidx.compose.foundation.rememberScrollState import androidx.compose.foundation.verticalScroll import androidx.compose.material3.ExperimentalMaterial3Api +import androidx.compose.material3.HorizontalDivider import androidx.compose.material3.Scaffold +import androidx.compose.material3.Text import androidx.compose.material3.TopAppBarDefaults import androidx.compose.runtime.Composable import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier import androidx.compose.ui.graphics.Color +import androidx.compose.ui.platform.LocalContext import androidx.compose.ui.res.stringResource import androidx.compose.ui.unit.dp +import androidx.navigation.NavHostController +import com.geekymusketeers.uncrack.BuildConfig import com.geekymusketeers.uncrack.R import com.geekymusketeers.uncrack.components.ProfileContainer +import com.geekymusketeers.uncrack.components.SettingsItemGroup import com.geekymusketeers.uncrack.components.UCButton +import com.geekymusketeers.uncrack.components.UCSettingsCard import com.geekymusketeers.uncrack.components.UCTextField import com.geekymusketeers.uncrack.components.UCTopAppBar +import com.geekymusketeers.uncrack.navigation.Screen +import com.geekymusketeers.uncrack.sharedViewModel.UserViewModel +import com.geekymusketeers.uncrack.ui.theme.BackgroundLight +import com.geekymusketeers.uncrack.ui.theme.OnPrimaryContainerLight +import com.geekymusketeers.uncrack.ui.theme.OnSurfaceLight +import com.geekymusketeers.uncrack.ui.theme.SurfaceTintLight +import com.geekymusketeers.uncrack.ui.theme.SurfaceVariantLight +import com.geekymusketeers.uncrack.ui.theme.medium22 +import com.geekymusketeers.uncrack.ui.theme.medium32 +import com.geekymusketeers.uncrack.ui.theme.normal14 +import com.geekymusketeers.uncrack.util.Constants +import com.geekymusketeers.uncrack.util.Util -@OptIn(ExperimentalMaterial3Api::class) @Composable fun ProfileScreen( + navHostController: NavHostController, + userViewModel: UserViewModel, modifier: Modifier = Modifier ) { - Scaffold( - topBar = { - UCTopAppBar( - title = "Profile", - colors = TopAppBarDefaults.topAppBarColors( - Color.White - ) - ) - } - ) { paddingValues -> - - Box( - modifier = modifier - .fillMaxSize() - .background(Color.White) - .padding(paddingValues) - .padding(bottom = 20.dp) - .imePadding() + val context = LocalContext.current + val userData = userViewModel.state.value + + Column( + modifier = modifier + .fillMaxSize() + .background(SurfaceVariantLight), + horizontalAlignment = Alignment.CenterHorizontally + ) { + + Row( + modifier = Modifier + .fillMaxWidth() + .background(BackgroundLight) + .padding(16.dp), + verticalAlignment = Alignment.CenterVertically ) { + Column( modifier = Modifier - .fillMaxSize() - .verticalScroll(rememberScrollState()), + .fillMaxWidth() + .padding(16.dp), horizontalAlignment = Alignment.CenterHorizontally ) { - ProfileContainer { - } - Spacer(modifier = Modifier.height(20.dp)) + Spacer(modifier = Modifier.height(22.dp)) - UCTextField( - modifier = Modifier - .fillMaxWidth() - .padding(20.dp, 0.dp), - headerText = "Name", - hintText = stringResource(id = R.string.name_hint), - value = "", - onValueChange = {} + Text( + text = userData.email, + style = medium22.copy(color = OnSurfaceLight) ) + } + } - Spacer(modifier = Modifier.height(20.dp)) + Spacer(modifier = Modifier.height(20.dp)) - UCTextField( - modifier = Modifier - .fillMaxWidth() - .padding(20.dp, 0.dp), - headerText = "Email", - hintText = stringResource(id = R.string.email_hint), - value = "", - onValueChange = {} - ) + SettingsItemGroup { + UCSettingsCard( + itemName = stringResource(id = R.string.settings), + iconId = R.drawable.settings_new, + onClick = { + navHostController.navigate(Screen.AccountScreen.name) + } + ) - Spacer(modifier = Modifier.weight(1f)) + HorizontalDivider( + thickness = 2.dp, + color = SurfaceVariantLight + ) - UCButton( - modifier = Modifier - .fillMaxWidth() - .padding(16.dp,0.dp), - text = stringResource(id = R.string.save), - onClick = {} - ) - } + UCSettingsCard( + itemName = "Import", + iconId = R.drawable.import_icon, + onClick = { + + } + ) + + HorizontalDivider( + thickness = 2.dp, + color = SurfaceVariantLight + ) + + UCSettingsCard( + itemName = stringResource(R.string.help), + iconId = R.drawable.help, + onClick = { + + } + ) } + + Spacer(modifier = Modifier.height(30.dp)) + + SettingsItemGroup { + UCSettingsCard( + itemName = stringResource(R.string.rate_uncrack), + iconId = R.drawable.rating, + onClick = { + val intent = Intent(Intent.ACTION_VIEW) + intent.data = Uri.parse(Util.PLAYSTORE_URL) + context.startActivity(intent) + } + ) + + HorizontalDivider( + thickness = 2.dp, + color = SurfaceVariantLight + ) + + UCSettingsCard( + itemName = stringResource(R.string.invite_friends), + iconId = R.drawable.share_app, + onClick = { + val sendIntent = Intent(Intent.ACTION_SEND).apply { + putExtra(Intent.EXTRA_TEXT, Constants.INVITE) + type = "text/plain" + } + val shareIntent = Intent.createChooser(sendIntent, null) + context.startActivity(shareIntent) + } + ) + } + + Spacer(modifier = Modifier.weight(1f)) + + Text( + modifier = Modifier.padding(top = 20.dp, bottom = 10.dp), + text = "Version: ${BuildConfig.VERSION_NAME} (${BuildConfig.VERSION_CODE})", + style = normal14.copy(color = SurfaceTintLight) + ) + Text( + modifier = Modifier.padding(bottom = 150.dp), + text = stringResource(R.string.by_aritra_das), + style = normal14.copy(color = SurfaceTintLight) + ) + } -} \ No newline at end of file +} diff --git a/app/src/main/res/drawable/help.xml b/app/src/main/res/drawable/help.xml new file mode 100644 index 00000000..de4462e4 --- /dev/null +++ b/app/src/main/res/drawable/help.xml @@ -0,0 +1,9 @@ + + + diff --git a/app/src/main/res/drawable/import_icon.xml b/app/src/main/res/drawable/import_icon.xml new file mode 100644 index 00000000..fd38649b --- /dev/null +++ b/app/src/main/res/drawable/import_icon.xml @@ -0,0 +1,20 @@ + + + + diff --git a/app/src/main/res/drawable/settings_new.xml b/app/src/main/res/drawable/settings_new.xml new file mode 100644 index 00000000..2ead17da --- /dev/null +++ b/app/src/main/res/drawable/settings_new.xml @@ -0,0 +1,16 @@ + + + + diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 6b09a77d..f796e3a5 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -207,6 +207,10 @@ You will be using Master Password as a key to unlock your passwords Create Master Password Kindly provide your Master Password + icon\n + Help + Rate UnCrack + Invite Friends Others PayPal