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 202590a..0b192c1 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 0000000..a051d04
--- /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 0000000..0365ed5
--- /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 1241a04..cf821ac 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 f77fc10..741ca8c 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 0000000..de4462e
--- /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 0000000..fd38649
--- /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 0000000..2ead17d
--- /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 6b09a77..f796e3a 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