diff --git a/app/src/androidTest/java/com/github/lookupgroup27/lookup/ui/authentication/SignInKtTest.kt b/app/src/androidTest/java/com/github/lookupgroup27/lookup/ui/authentication/SignInKtTest.kt
index 659d7c290..e21222d8c 100644
--- a/app/src/androidTest/java/com/github/lookupgroup27/lookup/ui/authentication/SignInKtTest.kt
+++ b/app/src/androidTest/java/com/github/lookupgroup27/lookup/ui/authentication/SignInKtTest.kt
@@ -40,7 +40,7 @@ class SignInKtTest : TestCase() {
// Scroll to make sure components are visible on smaller screens
composeTestRule.onNodeWithTag("loginTitle").performScrollTo().assertIsDisplayed()
- composeTestRule.onNodeWithTag("loginTitle").assertTextEquals("Welcome to the Cosmos")
+ composeTestRule.onNodeWithTag("loginTitle").assertTextEquals("Explore the Cosmos")
composeTestRule.onNodeWithTag("loginButton").performScrollTo().assertIsDisplayed()
composeTestRule.onNodeWithTag("loginButton").assertHasClickAction()
diff --git a/app/src/androidTest/java/com/github/lookupgroup27/lookup/ui/profile/ProfileInformationKtTest.kt b/app/src/androidTest/java/com/github/lookupgroup27/lookup/ui/profile/ProfileInformationKtTest.kt
index 9e8483da3..e33dc2bc2 100644
--- a/app/src/androidTest/java/com/github/lookupgroup27/lookup/ui/profile/ProfileInformationKtTest.kt
+++ b/app/src/androidTest/java/com/github/lookupgroup27/lookup/ui/profile/ProfileInformationKtTest.kt
@@ -122,30 +122,78 @@ class ProfileInformationScreenTest {
}
@Test
- fun deleteButtonWorks() {
+ fun deleteButtonShowsConfirmationDialog() {
composeTestRule.setContent { ProfileInformationScreen(profileViewModel, navigationActions) }
- // Assert: Save button is initially disabled
- composeTestRule.onNodeWithTag("profileSaveButton").assertIsNotEnabled()
+ // Fill in the fields to enable the delete button
+ composeTestRule.onNodeWithTag("editProfileUsername").performTextInput("JohnDoe")
+ composeTestRule.onNodeWithTag("editProfileEmail").performTextInput("john.doe@example.com")
+ composeTestRule.onNodeWithTag("editProfileBio").performTextInput("This is a bio")
- // Act: Fill in only the username
+ // Click delete button
+ composeTestRule.onNodeWithTag("profileDelete").performScrollTo().performClick()
+
+ // Verify dialog appears
+ composeTestRule.onNodeWithTag("deleteConfirmationDialog").assertExists()
+ }
+
+ @Test
+ fun deleteConfirmationDialogCancelWorks() {
+ composeTestRule.setContent { ProfileInformationScreen(profileViewModel, navigationActions) }
+
+ // Fill in the fields to enable the delete button
composeTestRule.onNodeWithTag("editProfileUsername").performTextInput("JohnDoe")
- // Assert: Save button is still disabled
- composeTestRule.onNodeWithTag("profileSaveButton").assertIsNotEnabled()
+ composeTestRule.onNodeWithTag("editProfileEmail").performTextInput("john.doe@example.com")
+ composeTestRule.onNodeWithTag("editProfileBio").performTextInput("This is a bio")
- // Act: Fill in email
+ // Click delete button
+ composeTestRule.onNodeWithTag("profileDelete").performScrollTo().performClick()
+
+ // Click cancel button
+ composeTestRule.onNodeWithTag("cancelDeleteButton").performClick()
+
+ // Verify dialog disappears
+ composeTestRule.onNodeWithTag("deleteConfirmationDialog").assertDoesNotExist()
+ }
+
+ @Test
+ fun deleteConfirmationDialogConfirmWorks() {
+ composeTestRule.setContent { ProfileInformationScreen(profileViewModel, navigationActions) }
+
+ // Fill in the fields to enable the delete button
+ composeTestRule.onNodeWithTag("editProfileUsername").performTextInput("JohnDoe")
composeTestRule.onNodeWithTag("editProfileEmail").performTextInput("john.doe@example.com")
- // Assert: Save button is still disabled because bio is empty
- composeTestRule.onNodeWithTag("profileSaveButton").assertIsNotEnabled()
+ composeTestRule.onNodeWithTag("editProfileBio").performTextInput("This is a bio")
- // Act: Fill in the bio
+ // Click delete button
+ composeTestRule.onNodeWithTag("profileDelete").performScrollTo().performClick()
+
+ // Click confirm button
+ composeTestRule.onNodeWithTag("confirmDeleteButton").performClick()
+
+ // Verify navigation to menu screen
+ verify(navigationActions).navigateTo(Screen.MENU)
+ }
+
+ @Test
+ fun deleteButtonWorks() {
+ composeTestRule.setContent { ProfileInformationScreen(profileViewModel, navigationActions) }
+
+ // Fill in the fields
+ composeTestRule.onNodeWithTag("editProfileUsername").performTextInput("JohnDoe")
+ composeTestRule.onNodeWithTag("editProfileEmail").performTextInput("john.doe@example.com")
composeTestRule.onNodeWithTag("editProfileBio").performTextInput("This is a bio")
- composeTestRule.onNodeWithTag("profileSaveButton").performClick()
- verify(navigationActions).navigateTo(Screen.PROFILE)
- // Assert: Save button should now be enabled
- composeTestRule.onNodeWithTag("profileDelete").assertIsEnabled()
- // Scroll to the delete button if it's off-screen, then click it
+
+ // Click delete button
composeTestRule.onNodeWithTag("profileDelete").performScrollTo().performClick()
+
+ // Verify dialog appears
+ composeTestRule.onNodeWithTag("deleteConfirmationDialog").assertExists()
+
+ // Click confirm button
+ composeTestRule.onNodeWithTag("confirmDeleteButton").performClick()
+
+ // Verify navigation to menu screen
verify(navigationActions).navigateTo(Screen.MENU)
}
}
diff --git a/app/src/main/java/com/github/lookupgroup27/lookup/ui/authentication/SignIn.kt b/app/src/main/java/com/github/lookupgroup27/lookup/ui/authentication/SignIn.kt
index bb5307818..08cae3be4 100644
--- a/app/src/main/java/com/github/lookupgroup27/lookup/ui/authentication/SignIn.kt
+++ b/app/src/main/java/com/github/lookupgroup27/lookup/ui/authentication/SignIn.kt
@@ -44,6 +44,10 @@ import androidx.compose.ui.unit.sp
import com.github.lookupgroup27.lookup.R
import com.github.lookupgroup27.lookup.ui.navigation.NavigationActions
import com.github.lookupgroup27.lookup.ui.navigation.Screen
+import com.github.lookupgroup27.lookup.ui.theme.CosmosPurple
+import com.github.lookupgroup27.lookup.ui.theme.LightPurple
+import com.github.lookupgroup27.lookup.ui.theme.PurpleBlue
+import com.github.lookupgroup27.lookup.ui.theme.StarLightWhite
import com.google.android.gms.auth.api.signin.GoogleSignIn
import com.google.android.gms.auth.api.signin.GoogleSignInOptions
import com.google.android.gms.common.api.ApiException
@@ -80,7 +84,7 @@ fun SignInScreen(navigationActions: NavigationActions) {
Scaffold(
modifier = Modifier.fillMaxSize().testTag("auth_screen"),
- containerColor = Color.Black,
+ containerColor = PurpleBlue,
topBar = {
TopAppBar(
title = {},
@@ -94,7 +98,7 @@ fun SignInScreen(navigationActions: NavigationActions) {
tint = Color.White)
}
},
- colors = TopAppBarDefaults.topAppBarColors(containerColor = Color.Black))
+ colors = TopAppBarDefaults.topAppBarColors(containerColor = PurpleBlue))
},
content = { padding ->
Column(
@@ -104,27 +108,25 @@ fun SignInScreen(navigationActions: NavigationActions) {
.verticalScroll(
rememberScrollState()), // Enable vertical scrolling in all orientations
horizontalAlignment = Alignment.CenterHorizontally,
- verticalArrangement = Arrangement.Center) {
- Spacer(modifier = Modifier.height(16.dp))
+ verticalArrangement = Arrangement.Top) {
+ Spacer(modifier = Modifier.height(70.dp))
Image(
painter = painterResource(id = R.drawable.app_logo),
contentDescription = "App Logo",
- modifier = Modifier.size(250.dp))
+ modifier = Modifier.size(200.dp))
- Spacer(modifier = Modifier.height(16.dp))
+ Spacer(modifier = Modifier.height(30.dp))
Text(
modifier = Modifier.testTag("loginTitle"),
- text = "Welcome to the Cosmos",
- style =
- MaterialTheme.typography.headlineMedium.copy(
- fontSize = 42.sp, lineHeight = 50.sp, letterSpacing = 1.5.sp),
+ text = "Explore the Cosmos",
+ style = MaterialTheme.typography.displaySmall,
fontWeight = FontWeight.SemiBold,
textAlign = TextAlign.Center,
- color = Color(0xFF8A9BB7))
+ color = StarLightWhite)
- Spacer(modifier = Modifier.height(48.dp))
+ Spacer(modifier = Modifier.height(38.dp))
GoogleSignInButton(
onSignInClick = {
@@ -137,13 +139,14 @@ fun SignInScreen(navigationActions: NavigationActions) {
launcher.launch(googleSignInClient.signInIntent)
})
- Spacer(modifier = Modifier.height(16.dp))
+ Spacer(modifier = Modifier.height(30.dp))
// Register Button
Button(
onClick = { navigationActions.navigateTo(Screen.REGISTER) },
modifier = Modifier.fillMaxWidth(0.8f).height(44.dp),
- colors = ButtonDefaults.buttonColors(containerColor = Color(0xFF1A1A2E))) {
+ colors = ButtonDefaults.buttonColors(containerColor = LightPurple),
+ border = BorderStroke(1.dp, StarLightWhite)) {
Text("Register", color = Color.White)
}
@@ -153,7 +156,8 @@ fun SignInScreen(navigationActions: NavigationActions) {
Button(
onClick = { navigationActions.navigateTo(Screen.LOGIN) },
modifier = Modifier.fillMaxWidth(0.8f).height(44.dp),
- colors = ButtonDefaults.buttonColors(containerColor = Color(0xFF1A1A2E))) {
+ colors = ButtonDefaults.buttonColors(containerColor = LightPurple),
+ border = BorderStroke(1.dp, StarLightWhite)) {
Text("Login", color = Color.White)
}
}
@@ -168,11 +172,11 @@ fun GoogleSignInButton(onSignInClick: () -> Unit) {
// Set dimensions based on orientation
val buttonHeight = if (isLandscape) 40.dp else 48.dp
val buttonWidthModifier =
- if (isLandscape) Modifier.fillMaxWidth(0.7f) else Modifier.fillMaxWidth()
+ if (isLandscape) Modifier.fillMaxWidth(0.7f) else Modifier.fillMaxWidth(0.5f)
Button(
onClick = onSignInClick,
- colors = ButtonDefaults.buttonColors(containerColor = Color(0xFF1A1A2E)),
+ colors = ButtonDefaults.buttonColors(containerColor = CosmosPurple),
shape = RoundedCornerShape(50),
border = BorderStroke(1.dp, Color(0xFF9DACE6)),
modifier =
@@ -193,7 +197,7 @@ fun GoogleSignInButton(onSignInClick: () -> Unit) {
Text(
text = "Sign in with Google",
- color = Color.White,
+ color = StarLightWhite,
fontSize = 14.sp, // Slightly smaller font in landscape
fontWeight = FontWeight.Medium)
}
diff --git a/app/src/main/java/com/github/lookupgroup27/lookup/ui/feed/Feed.kt b/app/src/main/java/com/github/lookupgroup27/lookup/ui/feed/Feed.kt
index d586f360e..596aa5494 100644
--- a/app/src/main/java/com/github/lookupgroup27/lookup/ui/feed/Feed.kt
+++ b/app/src/main/java/com/github/lookupgroup27/lookup/ui/feed/Feed.kt
@@ -17,6 +17,7 @@ import androidx.compose.material3.*
import androidx.compose.runtime.*
import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier
+import androidx.compose.ui.draw.blur
import androidx.compose.ui.draw.drawBehind
import androidx.compose.ui.graphics.Brush
import androidx.compose.ui.graphics.Color
@@ -164,10 +165,10 @@ fun FeedScreen(
Color.Black.copy(alpha = 0.6f))))
}) {
Image(
- painter = painterResource(R.drawable.background_blurred),
+ painter = painterResource(R.drawable.landscape_background),
contentDescription = null,
contentScale = ContentScale.Crop,
- modifier = Modifier.fillMaxSize())
+ modifier = Modifier.fillMaxSize().blur(20.dp))
Scaffold(
containerColor = Color.Transparent,
diff --git a/app/src/main/java/com/github/lookupgroup27/lookup/ui/map/Map.kt b/app/src/main/java/com/github/lookupgroup27/lookup/ui/map/Map.kt
index 3edde2a87..3d3834a33 100644
--- a/app/src/main/java/com/github/lookupgroup27/lookup/ui/map/Map.kt
+++ b/app/src/main/java/com/github/lookupgroup27/lookup/ui/map/Map.kt
@@ -8,6 +8,8 @@ import android.content.pm.PackageManager
import android.util.Log
import android.widget.Toast
import androidx.activity.ComponentActivity
+import androidx.compose.foundation.BorderStroke
+import androidx.compose.foundation.Image
import androidx.compose.foundation.background
import androidx.compose.foundation.layout.Arrangement
import androidx.compose.foundation.layout.Box
@@ -32,9 +34,12 @@ import androidx.compose.runtime.remember
import androidx.compose.runtime.setValue
import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier
+import androidx.compose.ui.draw.blur
import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.layout.ContentScale
import androidx.compose.ui.platform.LocalContext
import androidx.compose.ui.platform.testTag
+import androidx.compose.ui.res.painterResource
import androidx.compose.ui.res.stringResource
import androidx.compose.ui.text.font.FontWeight
import androidx.compose.ui.unit.dp
@@ -49,9 +54,9 @@ import com.github.lookupgroup27.lookup.ui.navigation.BottomNavigationMenu
import com.github.lookupgroup27.lookup.ui.navigation.LIST_TOP_LEVEL_DESTINATION
import com.github.lookupgroup27.lookup.ui.navigation.NavigationActions
import com.github.lookupgroup27.lookup.ui.navigation.Route
-import com.github.lookupgroup27.lookup.ui.theme.DarkPurple
+import com.github.lookupgroup27.lookup.ui.theme.LightPurple
+import com.github.lookupgroup27.lookup.ui.theme.StarLightWhite
import com.google.firebase.auth.FirebaseAuth
-import components.BackgroundImage
private const val LOCATION_PERMISSION_REQUEST_CODE: Int = 1001
@@ -164,10 +169,11 @@ fun MapScreen(navigationActions: NavigationActions, mapViewModel: MapViewModel)
Box(
modifier = Modifier.fillMaxSize().padding(innerPadding).testTag("map_screen"),
contentAlignment = Alignment.Center) {
- BackgroundImage(
- painterResId = R.drawable.background_blurred,
+ Image(
+ painter = painterResource(R.drawable.landscape_background),
contentDescription = stringResource(R.string.background_description),
- testTag = "background_test_tag")
+ modifier = Modifier.fillMaxSize().testTag("background_test_tag").blur(20.dp),
+ contentScale = ContentScale.Crop)
Column(
horizontalAlignment = Alignment.CenterHorizontally,
@@ -183,7 +189,8 @@ fun MapScreen(navigationActions: NavigationActions, mapViewModel: MapViewModel)
onClick = { refreshKey++ },
colors =
androidx.compose.material3.ButtonDefaults.buttonColors(
- containerColor = DarkPurple, contentColor = Color.White),
+ containerColor = LightPurple, contentColor = StarLightWhite),
+ border = BorderStroke(0.7.dp, StarLightWhite),
modifier = Modifier.testTag("refresh_button")) {
Text("Refresh")
}
diff --git a/app/src/main/java/com/github/lookupgroup27/lookup/ui/navigation/BottomNavigationMenu.kt b/app/src/main/java/com/github/lookupgroup27/lookup/ui/navigation/BottomNavigationMenu.kt
index 5ed80c101..18cb57add 100644
--- a/app/src/main/java/com/github/lookupgroup27/lookup/ui/navigation/BottomNavigationMenu.kt
+++ b/app/src/main/java/com/github/lookupgroup27/lookup/ui/navigation/BottomNavigationMenu.kt
@@ -35,7 +35,7 @@ fun BottomNavigationMenu(
val context = LocalContext.current
val isOnline = remember { mutableStateOf(NetworkUtils.isNetworkAvailable(context)) }
NavigationBar(
- modifier = Modifier.fillMaxWidth().height(60.dp).testTag("bottomNavigationMenu"),
+ modifier = Modifier.fillMaxWidth().height(80.dp).testTag("bottomNavigationMenu"),
containerColor = Color(0xFF0D1023),
content = {
tabList.forEach { tab ->
diff --git a/app/src/main/java/com/github/lookupgroup27/lookup/ui/overview/Landing.kt b/app/src/main/java/com/github/lookupgroup27/lookup/ui/overview/Landing.kt
index 8c53fbcfd..bd2bb9666 100644
--- a/app/src/main/java/com/github/lookupgroup27/lookup/ui/overview/Landing.kt
+++ b/app/src/main/java/com/github/lookupgroup27/lookup/ui/overview/Landing.kt
@@ -33,6 +33,7 @@ import androidx.navigation.compose.rememberNavController
import com.github.lookupgroup27.lookup.R
import com.github.lookupgroup27.lookup.ui.navigation.NavigationActions
import com.github.lookupgroup27.lookup.ui.navigation.Screen
+import com.github.lookupgroup27.lookup.ui.theme.StarLightWhite
import com.github.lookupgroup27.lookup.util.NetworkUtils
import com.github.lookupgroup27.lookup.util.ToastHelper
import components.BackgroundImage
@@ -64,7 +65,7 @@ fun LandingScreen(
}) {
// Background Image
BackgroundImage(
- painterResId = R.drawable.landing_screen_bckgrnd,
+ painterResId = R.drawable.landscape_background,
contentDescription = stringResource(R.string.background_description),
)
@@ -77,19 +78,20 @@ fun LandingScreen(
.padding(16.dp),
verticalArrangement = Arrangement.SpaceBetween,
horizontalAlignment = Alignment.CenterHorizontally) {
+ Spacer(modifier = Modifier.height(25.dp))
// Top Prompt Text
Text(
text = "Click for full map view",
fontSize = 18.sp,
- fontWeight = FontWeight.Bold,
- color = Color.White,
+ fontWeight = FontWeight.Normal,
+ color = StarLightWhite,
modifier = Modifier.padding(top = 32.dp))
// Centered Logo Image
Image(
painter = painterResource(id = R.drawable.app_logo),
contentDescription = "Look Up Logo",
- modifier = Modifier.size(250.dp).align(Alignment.CenterHorizontally),
+ modifier = Modifier.size(250.dp),
contentScale = ContentScale.Fit)
// Bottom Home Button
diff --git a/app/src/main/java/com/github/lookupgroup27/lookup/ui/overview/Menu.kt b/app/src/main/java/com/github/lookupgroup27/lookup/ui/overview/Menu.kt
index 57a33cdd4..ce9a15dad 100644
--- a/app/src/main/java/com/github/lookupgroup27/lookup/ui/overview/Menu.kt
+++ b/app/src/main/java/com/github/lookupgroup27/lookup/ui/overview/Menu.kt
@@ -3,6 +3,7 @@ package com.github.lookupgroup27.lookup.ui.overview
import android.annotation.SuppressLint
import android.content.pm.ActivityInfo
import androidx.activity.ComponentActivity
+import androidx.compose.foundation.BorderStroke
import androidx.compose.foundation.Image
import androidx.compose.foundation.layout.*
import androidx.compose.foundation.rememberScrollState
@@ -23,6 +24,8 @@ import androidx.compose.ui.unit.dp
import com.github.lookupgroup27.lookup.R
import com.github.lookupgroup27.lookup.ui.navigation.*
import com.github.lookupgroup27.lookup.ui.profile.profilepic.AvatarViewModel
+import com.github.lookupgroup27.lookup.ui.theme.LightPurple
+import com.github.lookupgroup27.lookup.ui.theme.StarLightWhite
import com.github.lookupgroup27.lookup.util.NetworkUtils
import com.github.lookupgroup27.lookup.util.ToastHelper
import com.google.firebase.auth.FirebaseAuth
@@ -66,7 +69,7 @@ fun MenuScreen(
Box(modifier = Modifier.fillMaxSize().padding(paddingValues)) {
// Blurred map screen as the background
Image(
- painter = painterResource(id = R.drawable.landing_screen_bckgrnd),
+ painter = painterResource(id = R.drawable.landscape_background),
contentDescription = "Background",
modifier = Modifier.fillMaxSize().testTag("background_image").blur(20.dp),
contentScale = ContentScale.Crop)
@@ -91,7 +94,7 @@ fun MenuScreen(
Icon(
painter = painterResource(id = iconRes!!),
contentDescription = "Profile",
- modifier = Modifier.size(56.dp),
+ modifier = Modifier.size(64.dp),
tint =
if (iconRes == R.drawable.default_profile_icon) Color.White
else Color.Unspecified)
@@ -116,13 +119,15 @@ fun MenuScreen(
Button(
onClick = { navigationActions.navigateTo(Screen.QUIZ) },
- modifier = Modifier.fillMaxWidth(0.6f)) {
+ colors = ButtonDefaults.buttonColors(LightPurple),
+ border = BorderStroke(0.5.dp, StarLightWhite),
+ modifier = Modifier.fillMaxWidth(0.8f).height(60.dp)) {
Text(
text = "Quizzes",
style = MaterialTheme.typography.headlineSmall,
- fontWeight = FontWeight.Bold)
+ color = StarLightWhite,
+ fontWeight = FontWeight.Normal)
}
- Spacer(modifier = Modifier.height(8.dp))
// Blocked buttons when offline
Button(
@@ -130,33 +135,41 @@ fun MenuScreen(
if (isOnline.value) navigationActions.navigateTo(Screen.CALENDAR)
else toastHelper.showNoInternetToast()
},
- modifier = Modifier.fillMaxWidth(0.6f)) {
+ colors = ButtonDefaults.buttonColors(LightPurple),
+ border = BorderStroke(0.5.dp, StarLightWhite),
+ modifier = Modifier.fillMaxWidth(0.8f).height(60.dp)) {
Text(
text = "Calendar",
style = MaterialTheme.typography.headlineSmall,
- fontWeight = FontWeight.Bold)
+ color = StarLightWhite,
+ fontWeight = FontWeight.Normal)
}
- Spacer(modifier = Modifier.height(8.dp))
Button(
onClick = {
if (isOnline.value) navigationActions.navigateTo(Screen.GOOGLE_MAP)
else toastHelper.showNoInternetToast()
},
- modifier = Modifier.fillMaxWidth(0.6f)) {
+ colors = ButtonDefaults.buttonColors(LightPurple),
+ border = BorderStroke(0.5.dp, StarLightWhite),
+ modifier = Modifier.fillMaxWidth(0.8f).height(60.dp)) {
Text(
text = "Google Map",
style = MaterialTheme.typography.headlineSmall,
- fontWeight = FontWeight.Bold)
+ color = StarLightWhite,
+ fontWeight = FontWeight.Normal)
}
- Spacer(modifier = Modifier.height(8.dp))
+
Button(
onClick = { navigationActions.navigateTo(Screen.PLANET_SELECTION) },
- modifier = Modifier.fillMaxWidth(0.6f)) {
+ colors = ButtonDefaults.buttonColors(LightPurple),
+ border = BorderStroke(0.5.dp, StarLightWhite),
+ modifier = Modifier.fillMaxWidth(0.8f).height(60.dp)) {
Text(
text = "Planets",
style = MaterialTheme.typography.headlineSmall,
- fontWeight = FontWeight.Bold)
+ color = StarLightWhite,
+ fontWeight = FontWeight.Normal)
}
}
}
diff --git a/app/src/main/java/com/github/lookupgroup27/lookup/ui/profile/Collection.kt b/app/src/main/java/com/github/lookupgroup27/lookup/ui/profile/Collection.kt
index 221996517..943676657 100644
--- a/app/src/main/java/com/github/lookupgroup27/lookup/ui/profile/Collection.kt
+++ b/app/src/main/java/com/github/lookupgroup27/lookup/ui/profile/Collection.kt
@@ -64,10 +64,10 @@ fun CollectionScreen(
contentAlignment = Alignment.TopCenter,
) {
Image(
- painter = painterResource(id = R.drawable.landing_screen_bckgrnd),
+ painter = painterResource(id = R.drawable.landscape_background),
contentDescription = "Background",
contentScale = ContentScale.Crop,
- modifier = Modifier.fillMaxSize().blur(10.dp).testTag("background_image"))
+ modifier = Modifier.fillMaxSize().blur(20.dp).testTag("background_image"))
IconButton(
onClick = { navigationActions.navigateTo(Screen.PROFILE) },
diff --git a/app/src/main/java/com/github/lookupgroup27/lookup/ui/profile/Profile.kt b/app/src/main/java/com/github/lookupgroup27/lookup/ui/profile/Profile.kt
index 6b852bfaf..1058d2608 100644
--- a/app/src/main/java/com/github/lookupgroup27/lookup/ui/profile/Profile.kt
+++ b/app/src/main/java/com/github/lookupgroup27/lookup/ui/profile/Profile.kt
@@ -3,6 +3,7 @@ package com.github.lookupgroup27.lookup.ui.profile
import android.content.pm.ActivityInfo
import android.content.res.Configuration
import androidx.activity.ComponentActivity
+import androidx.compose.foundation.Image
import androidx.compose.foundation.layout.*
import androidx.compose.foundation.rememberScrollState
import androidx.compose.foundation.verticalScroll
@@ -12,7 +13,9 @@ import androidx.compose.runtime.Composable
import androidx.compose.runtime.collectAsState
import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier
+import androidx.compose.ui.draw.blur
import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.layout.ContentScale
import androidx.compose.ui.platform.LocalConfiguration
import androidx.compose.ui.platform.LocalContext
import androidx.compose.ui.platform.testTag
@@ -31,7 +34,6 @@ import com.github.lookupgroup27.lookup.ui.profile.profilepic.AvatarViewModel
import com.google.firebase.Firebase
import com.google.firebase.auth.FirebaseAuth
import com.google.firebase.auth.auth
-import components.BackgroundImage
@Composable
fun ProfileScreen(navigationActions: NavigationActions, avatarViewModel: AvatarViewModel) {
@@ -67,9 +69,11 @@ fun ProfileScreen(navigationActions: NavigationActions, avatarViewModel: AvatarV
}) { innerPadding ->
Box(modifier = Modifier.fillMaxSize().padding(innerPadding).testTag("profile_screen")) {
// Background Image
- BackgroundImage(
- painterResId = R.drawable.background_blurred,
- contentDescription = stringResource(R.string.background_description))
+ Image(
+ painter = painterResource(R.drawable.landscape_background),
+ modifier = Modifier.fillMaxSize().testTag("profile_background").blur(20.dp),
+ contentDescription = stringResource(R.string.background_description),
+ contentScale = ContentScale.Crop)
// Scrollable Profile Content
Column(
diff --git a/app/src/main/java/com/github/lookupgroup27/lookup/ui/profile/ProfileInformation.kt b/app/src/main/java/com/github/lookupgroup27/lookup/ui/profile/ProfileInformation.kt
index b6626ae46..26064a677 100644
--- a/app/src/main/java/com/github/lookupgroup27/lookup/ui/profile/ProfileInformation.kt
+++ b/app/src/main/java/com/github/lookupgroup27/lookup/ui/profile/ProfileInformation.kt
@@ -11,14 +11,21 @@ import androidx.compose.material.icons.automirrored.filled.ArrowBack
import androidx.compose.material3.*
import androidx.compose.runtime.*
import androidx.compose.ui.*
+import androidx.compose.ui.draw.blur
import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.layout.ContentScale
import androidx.compose.ui.platform.LocalContext
import androidx.compose.ui.platform.testTag
+import androidx.compose.ui.res.painterResource
import androidx.compose.ui.unit.dp
+import com.github.lookupgroup27.lookup.R
import com.github.lookupgroup27.lookup.model.profile.*
import com.github.lookupgroup27.lookup.ui.navigation.*
+import com.github.lookupgroup27.lookup.ui.theme.LightPurple
+import com.github.lookupgroup27.lookup.ui.theme.StarLightWhite
import com.google.firebase.auth.FirebaseAuth
+@OptIn(ExperimentalMaterial3Api::class)
@SuppressLint("StateFlowValueCalledInComposition")
@Composable
fun ProfileInformationScreen(
@@ -39,119 +46,195 @@ fun ProfileInformationScreen(
profileViewModel.fetchUserProfile()
val profile = profileViewModel.userProfile.value
- val user = FirebaseAuth.getInstance().currentUser // Get the current signed-in user
+ val user = FirebaseAuth.getInstance().currentUser
val userEmail = user?.email ?: ""
var username by remember { mutableStateOf(profile?.username ?: "") }
var bio by remember { mutableStateOf(profile?.bio ?: "") }
var email by remember { mutableStateOf(userEmail) }
+ val fieldColors =
+ OutlinedTextFieldDefaults.colors(
+ focusedTextColor = StarLightWhite, // Text color when focused
+ unfocusedTextColor = StarLightWhite, // Text color when not focused
+ disabledTextColor = StarLightWhite, // Text color when disabled
+ focusedContainerColor = Color.Black.copy(alpha = 0.2f), // Darker background when focused
+ unfocusedContainerColor =
+ Color.Black.copy(alpha = 0.2f), // Darker background when not focused
+ focusedBorderColor = StarLightWhite, // Border color when focused
+ unfocusedBorderColor = StarLightWhite, // Border color when not focused
+ )
+ var showDeleteConfirmation by remember { mutableStateOf(false) }
- Column(
- verticalArrangement = Arrangement.Top,
- horizontalAlignment = Alignment.Start,
- modifier =
- Modifier.padding(8.dp)
- .width(412.dp)
- .height(892.dp)
- .verticalScroll(scrollState)
- .testTag("editProfileScreen")) {
- Spacer(modifier = Modifier.height(16.dp))
- Icon(
- imageVector = Icons.AutoMirrored.Filled.ArrowBack,
- contentDescription = "Back",
- modifier =
- Modifier.padding(start = 16.dp)
- .size(30.dp)
- .clickable { navigationActions.goBack() }
- .testTag("goBackButton"))
- Spacer(modifier = Modifier.height(16.dp))
- Text(
- text = "Your Personal Information",
- style = MaterialTheme.typography.headlineMedium,
- modifier = Modifier.padding(start = 16.dp).fillMaxWidth().testTag("editProfileTitle"))
-
- Column(
- verticalArrangement = Arrangement.spacedBy(0.dp, Alignment.Top),
- horizontalAlignment = Alignment.CenterHorizontally,
- modifier = Modifier.padding(20.dp).fillMaxWidth()) {
- Spacer(modifier = Modifier.height(16.dp))
- OutlinedTextField(
- value = username,
- onValueChange = { new_name -> username = new_name },
- label = { Text("Username") },
- placeholder = { Text("Enter username") },
- shape = RoundedCornerShape(16.dp),
- modifier =
- Modifier.padding(0.dp)
- .width(312.dp)
- .height(60.dp)
- .testTag("editProfileUsername"))
- Spacer(modifier = Modifier.height(30.dp))
- OutlinedTextField(
- value = email,
- onValueChange = {
- if (userEmail.isEmpty()) {
- email = it
+ Box(modifier = Modifier.fillMaxSize().testTag("background_box")) {
+ // Background Image
+ Image(
+ painter = painterResource(id = R.drawable.landscape_background),
+ contentDescription = "Background",
+ contentScale = ContentScale.Crop,
+ modifier = Modifier.fillMaxSize().blur(20.dp).testTag("background_image"))
+
+ // Content
+ Column(
+ verticalArrangement = Arrangement.Top,
+ horizontalAlignment = Alignment.Start,
+ modifier =
+ Modifier.padding(8.dp)
+ .fillMaxSize()
+ .verticalScroll(scrollState)
+ .testTag("editProfileScreen")) {
+ Spacer(modifier = Modifier.height(16.dp))
+
+ // Back Button
+ Icon(
+ imageVector = Icons.AutoMirrored.Filled.ArrowBack,
+ contentDescription = "Back",
+ tint = Color.White,
+ modifier =
+ Modifier.padding(start = 16.dp)
+ .size(30.dp)
+ .clickable { navigationActions.goBack() }
+ .testTag("goBackButton"))
+
+ Spacer(modifier = Modifier.height(16.dp))
+
+ // Title
+ Text(
+ text = "Your Personal Information",
+ style = MaterialTheme.typography.headlineMedium,
+ color = Color.White,
+ modifier = Modifier.padding(start = 16.dp).fillMaxWidth().testTag("editProfileTitle"))
+
+ // Form Fields
+ Column(
+ verticalArrangement = Arrangement.spacedBy(0.dp, Alignment.Top),
+ horizontalAlignment = Alignment.CenterHorizontally,
+ modifier = Modifier.padding(20.dp).fillMaxWidth()) {
+ Spacer(modifier = Modifier.height(16.dp))
+
+ OutlinedTextField(
+ value = username,
+ onValueChange = { new_name -> username = new_name },
+ label = { Text(text = "Username", color = StarLightWhite) },
+ placeholder = { Text("Enter username") },
+ shape = RoundedCornerShape(16.dp),
+ colors = fieldColors,
+ modifier =
+ Modifier.padding(0.dp)
+ .width(312.dp)
+ .height(60.dp)
+ .testTag("editProfileUsername"))
+
+ Spacer(modifier = Modifier.height(30.dp))
+
+ OutlinedTextField(
+ value = email,
+ onValueChange = {
+ if (userEmail.isEmpty()) {
+ email = it
+ }
+ },
+ label = { Text(text = "E-mail", color = StarLightWhite) },
+ placeholder = { Text("Enter your e-mail") },
+ shape = RoundedCornerShape(16.dp),
+ colors = fieldColors,
+ modifier =
+ Modifier.padding(0.dp)
+ .width(312.dp)
+ .height(60.dp)
+ .testTag("editProfileEmail"))
+
+ Spacer(modifier = Modifier.height(30.dp))
+
+ OutlinedTextField(
+ value = bio,
+ onValueChange = { new_description -> bio = new_description },
+ label = { Text(text = "Bio", color = StarLightWhite) },
+ placeholder = { Text("Enter a bio") },
+ shape = RoundedCornerShape(16.dp),
+ colors = fieldColors,
+ modifier =
+ Modifier.padding(0.dp)
+ .width(312.dp)
+ .height(80.dp)
+ .testTag("editProfileBio"))
+
+ Spacer(modifier = Modifier.height(72.dp))
+
+ // Buttons
+ Button(
+ onClick = {
+ val newProfile: UserProfile =
+ profile?.copy(username = username, bio = bio, email = email)
+ ?: UserProfile(username = username, bio = bio, email = email)
+ profileViewModel.updateUserProfile(newProfile)
+ navigationActions.navigateTo(Screen.PROFILE)
+ },
+ enabled = username.isNotEmpty() && bio.isNotEmpty() && email.isNotEmpty(),
+ colors =
+ ButtonDefaults.buttonColors(
+ containerColor = LightPurple,
+ disabledContainerColor = LightPurple.copy(alpha = 0.5f)),
+ border = BorderStroke(0.2.dp, StarLightWhite),
+ modifier = Modifier.width(131.dp).height(40.dp).testTag("profileSaveButton")) {
+ Text(text = "Save", color = Color.White)
}
- },
- label = { Text("E-mail") },
- placeholder = { Text("Enter your e-mail") },
- shape = RoundedCornerShape(16.dp),
- modifier =
- Modifier.padding(0.dp)
- .width(312.dp)
- .height(60.dp)
- .testTag("editProfileEmail"))
- Spacer(modifier = Modifier.height(30.dp))
- OutlinedTextField(
- value = bio,
- onValueChange = { new_description -> bio = new_description },
- label = { Text("Bio") },
- placeholder = { Text("Enter a bio") },
- shape = RoundedCornerShape(16.dp),
- modifier =
- Modifier.padding(0.dp).width(312.dp).height(80.dp).testTag("editProfileBio"))
- Spacer(modifier = Modifier.height(72.dp))
- Spacer(modifier = Modifier.height(30.dp))
-
- Button(
- onClick = {
- val newProfile: UserProfile =
- profile?.copy(username = username, bio = bio, email = email)
- ?: UserProfile(username = username, bio = bio, email = email)
- profileViewModel.updateUserProfile(newProfile)
- navigationActions.navigateTo(Screen.PROFILE)
- },
- enabled = username.isNotEmpty() && bio.isNotEmpty() && email.isNotEmpty(),
- colors = ButtonDefaults.buttonColors(containerColor = Color(0xFF30315B)),
- modifier = Modifier.width(131.dp).height(40.dp).testTag("profileSaveButton")) {
- Text(text = "Save", color = Color.White)
- }
- Spacer(modifier = Modifier.height(30.dp))
- Button(
- onClick = {
- profileViewModel.logoutUser()
- navigationActions.navigateTo(Screen.LANDING)
- },
- enabled = true,
- colors = ButtonDefaults.buttonColors(containerColor = Color(0xFF410002)),
- modifier = Modifier.width(131.dp).height(40.dp).testTag("profileLogout")) {
- Text(text = "Sign out", color = Color.White)
- }
- Spacer(modifier = Modifier.height(30.dp))
- Button(
- onClick = {
- profile?.let {
- profileViewModel.deleteUserProfile(it)
+ Spacer(modifier = Modifier.height(30.dp))
+
+ Button(
+ onClick = {
profileViewModel.logoutUser()
+ navigationActions.navigateTo(Screen.LANDING)
+ },
+ colors = ButtonDefaults.buttonColors(containerColor = Color(0xFF410002)),
+ border = BorderStroke(0.2.dp, StarLightWhite),
+ modifier = Modifier.width(131.dp).height(40.dp).testTag("profileLogout")) {
+ Text(text = "Sign out", color = Color.White)
}
- navigationActions.navigateTo(Screen.MENU)
- },
- enabled = username.isNotEmpty() && bio.isNotEmpty() && email.isNotEmpty(),
- colors = ButtonDefaults.buttonColors(containerColor = Color(0xFF410002)),
- modifier = Modifier.width(131.dp).height(40.dp).testTag("profileDelete")) {
- Text(text = "Delete", color = Color.White)
+
+ Spacer(modifier = Modifier.height(30.dp))
+
+ Button(
+ onClick = { showDeleteConfirmation = true },
+ enabled = username.isNotEmpty() && bio.isNotEmpty() && email.isNotEmpty(),
+ colors =
+ ButtonDefaults.buttonColors(
+ containerColor = Color(0xFF410002),
+ disabledContainerColor = Color(0xFF410002).copy(alpha = 0.5f)),
+ border = BorderStroke(0.2.dp, StarLightWhite),
+ modifier = Modifier.width(131.dp).height(40.dp).testTag("profileDelete")) {
+ Text(text = "Delete", color = Color.White)
+ }
+ }
+ }
+
+ if (showDeleteConfirmation) {
+ AlertDialog(
+ onDismissRequest = { showDeleteConfirmation = false },
+ title = { Text("Confirm Deletion") },
+ text = { Text("Are you sure you want to delete your profile?") },
+ confirmButton = {
+ Button(
+ onClick = {
+ profile?.let {
+ profileViewModel.deleteUserProfile(it)
+ profileViewModel.logoutUser()
}
- }
- }
+ navigationActions.navigateTo(Screen.MENU)
+ },
+ colors = ButtonDefaults.buttonColors(containerColor = Color(0xFF410002)),
+ modifier = Modifier.testTag("confirmDeleteButton")) {
+ Text("Yes", color = Color.White)
+ }
+ },
+ dismissButton = {
+ Button(
+ onClick = { showDeleteConfirmation = false },
+ colors = ButtonDefaults.buttonColors(containerColor = Color(0xFF30315B)),
+ modifier = Modifier.testTag("cancelDeleteButton")) {
+ Text("Cancel", color = Color.White)
+ }
+ },
+ modifier = Modifier.testTag("deleteConfirmationDialog"))
+ }
+ }
}
diff --git a/app/src/main/java/com/github/lookupgroup27/lookup/ui/profile/components/ChangeAvatarButton.kt b/app/src/main/java/com/github/lookupgroup27/lookup/ui/profile/components/ChangeAvatarButton.kt
index 0417c379b..e025c2e07 100644
--- a/app/src/main/java/com/github/lookupgroup27/lookup/ui/profile/components/ChangeAvatarButton.kt
+++ b/app/src/main/java/com/github/lookupgroup27/lookup/ui/profile/components/ChangeAvatarButton.kt
@@ -10,7 +10,8 @@ import androidx.compose.ui.Modifier
import androidx.compose.ui.res.stringResource
import androidx.compose.ui.unit.dp
import com.github.lookupgroup27.lookup.R
-import com.github.lookupgroup27.lookup.ui.theme.DarkPurple
+import com.github.lookupgroup27.lookup.ui.theme.LightPurple
+import com.github.lookupgroup27.lookup.ui.theme.StarLightWhite
/**
* A composable function that displays a "Change Avatar" button when a custom avatar is selected.
@@ -37,7 +38,9 @@ fun ChangeAvatarButton(
Button(
onClick = onButtonClick,
modifier = Modifier.padding(top = 16.dp),
- colors = ButtonDefaults.buttonColors(DarkPurple)) {
+ colors =
+ ButtonDefaults.buttonColors(
+ containerColor = LightPurple, contentColor = StarLightWhite)) {
Text(stringResource(R.string.profile_change_avatar))
}
}
diff --git a/app/src/main/java/com/github/lookupgroup27/lookup/ui/profile/components/ProfileButtons.kt b/app/src/main/java/com/github/lookupgroup27/lookup/ui/profile/components/ProfileButtons.kt
index 5806cd5c8..d0b4035c4 100644
--- a/app/src/main/java/com/github/lookupgroup27/lookup/ui/profile/components/ProfileButtons.kt
+++ b/app/src/main/java/com/github/lookupgroup27/lookup/ui/profile/components/ProfileButtons.kt
@@ -3,6 +3,7 @@ package com.github.lookupgroup27.lookup.ui.profile.components
import android.content.res.Configuration
import androidx.compose.foundation.border
import androidx.compose.foundation.layout.fillMaxWidth
+import androidx.compose.foundation.layout.height
import androidx.compose.foundation.layout.padding
import androidx.compose.foundation.layout.width
import androidx.compose.foundation.shape.RoundedCornerShape
@@ -18,19 +19,22 @@ import androidx.compose.ui.text.font.FontWeight
import androidx.compose.ui.text.style.TextAlign
import androidx.compose.ui.unit.dp
import androidx.compose.ui.unit.sp
-import com.github.lookupgroup27.lookup.ui.theme.DarkPurple
+import com.github.lookupgroup27.lookup.ui.theme.LightPurple
+import com.github.lookupgroup27.lookup.ui.theme.StarLightWhite
@Composable
fun ProfileButton(text: String, onClick: () -> Unit) {
Button(
onClick = onClick,
- colors = ButtonDefaults.buttonColors(containerColor = DarkPurple, contentColor = Color.White),
+ colors =
+ ButtonDefaults.buttonColors(containerColor = LightPurple, contentColor = StarLightWhite),
shape = RoundedCornerShape(174.dp),
modifier =
Modifier.width(
if (LocalConfiguration.current.orientation == Configuration.ORIENTATION_LANDSCAPE)
200.dp
else 262.dp)
+ .height(80.dp)
.padding(vertical = 8.dp)
.border(
width = 1.dp,
@@ -39,7 +43,7 @@ fun ProfileButton(text: String, onClick: () -> Unit) {
.shadow(elevation = 20.dp, shape = RoundedCornerShape(20.dp), clip = true)) {
Text(
text = text,
- fontSize = 19.sp,
+ fontSize = 21.sp,
fontWeight = FontWeight.W800,
textAlign = TextAlign.Center,
modifier = Modifier.fillMaxWidth())
diff --git a/app/src/main/java/com/github/lookupgroup27/lookup/ui/quiz/Quiz.kt b/app/src/main/java/com/github/lookupgroup27/lookup/ui/quiz/Quiz.kt
index 2b414ea3b..1f6634679 100644
--- a/app/src/main/java/com/github/lookupgroup27/lookup/ui/quiz/Quiz.kt
+++ b/app/src/main/java/com/github/lookupgroup27/lookup/ui/quiz/Quiz.kt
@@ -3,6 +3,7 @@ package com.github.lookupgroup27.lookup.ui.quiz
import android.annotation.SuppressLint
import android.content.pm.ActivityInfo
import androidx.activity.ComponentActivity
+import androidx.compose.foundation.Image
import androidx.compose.foundation.layout.*
import androidx.compose.foundation.rememberScrollState
import androidx.compose.foundation.verticalScroll
@@ -16,9 +17,12 @@ import androidx.compose.runtime.Composable
import androidx.compose.runtime.DisposableEffect
import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier
+import androidx.compose.ui.draw.blur
import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.layout.ContentScale
import androidx.compose.ui.platform.LocalContext
import androidx.compose.ui.platform.testTag
+import androidx.compose.ui.res.painterResource
import androidx.compose.ui.res.stringResource
import androidx.compose.ui.text.font.FontWeight
import androidx.compose.ui.unit.dp
@@ -27,7 +31,7 @@ import com.github.lookupgroup27.lookup.R
import com.github.lookupgroup27.lookup.ui.navigation.NavigationActions
import com.github.lookupgroup27.lookup.ui.navigation.Screen
import com.github.lookupgroup27.lookup.ui.quiz.components.QuizThemeButton
-import components.BackgroundImage
+import com.github.lookupgroup27.lookup.ui.theme.StarLightWhite
/**
* Composable function that displays the main screen for selecting a quiz. This screen includes a
@@ -54,10 +58,11 @@ fun QuizScreen(viewModel: QuizViewModel, navigationActions: NavigationActions) {
BoxWithConstraints(modifier = Modifier.fillMaxSize().testTag("quiz_screen")) {
// Background Image
- BackgroundImage(
- painterResId = R.drawable.background_blurred,
+ Image(
+ painter = painterResource(id = R.drawable.landscape_background),
contentDescription = stringResource(R.string.background_description),
- testTag = "background_test_tag")
+ modifier = Modifier.fillMaxSize().testTag("background_test_tag").blur(20.dp),
+ contentScale = ContentScale.Crop)
// Back Button
IconButton(
@@ -82,7 +87,7 @@ fun QuizScreen(viewModel: QuizViewModel, navigationActions: NavigationActions) {
// Title
Text(
text = "Take a Quiz",
- color = Color.White,
+ color = StarLightWhite,
style =
MaterialTheme.typography.displaySmall.copy(
fontWeight = FontWeight.Bold, fontSize = 32.sp),
diff --git a/app/src/main/java/com/github/lookupgroup27/lookup/ui/quiz/QuizPlay.kt b/app/src/main/java/com/github/lookupgroup27/lookup/ui/quiz/QuizPlay.kt
index 11abb51e8..7bd69bb87 100644
--- a/app/src/main/java/com/github/lookupgroup27/lookup/ui/quiz/QuizPlay.kt
+++ b/app/src/main/java/com/github/lookupgroup27/lookup/ui/quiz/QuizPlay.kt
@@ -31,7 +31,7 @@ import com.github.lookupgroup27.lookup.ui.navigation.NavigationActions
import com.github.lookupgroup27.lookup.ui.navigation.Route
import com.github.lookupgroup27.lookup.ui.quiz.components.*
import com.github.lookupgroup27.lookup.ui.theme.AnswerSelectedColor
-import com.github.lookupgroup27.lookup.ui.theme.DarkPurple
+import com.github.lookupgroup27.lookup.ui.theme.LightPurple
/**
* Displays the main QuizPlayScreen where the user interacts with questions and navigates through
@@ -61,10 +61,10 @@ fun QuizPlayScreen(viewModel: QuizViewModel, navigationActions: NavigationAction
BoxWithConstraints(modifier = Modifier.fillMaxSize()) {
Image(
- painter = painterResource(id = R.drawable.landing_screen_bckgrnd),
+ painter = painterResource(id = R.drawable.landscape_background),
contentDescription = "Background",
contentScale = ContentScale.Crop,
- modifier = Modifier.fillMaxSize().blur(8.dp).testTag("quiz_background"))
+ modifier = Modifier.fillMaxSize().blur(10.dp).testTag("quiz_background"))
Column(
modifier =
@@ -103,7 +103,7 @@ fun QuizPlayScreen(viewModel: QuizViewModel, navigationActions: NavigationAction
Column(verticalArrangement = Arrangement.spacedBy(15.dp)) {
question.answers.forEachIndexed { index, answer ->
val backgroundColor =
- if (selectedAnswer == answer) AnswerSelectedColor else DarkPurple
+ if (selectedAnswer == answer) AnswerSelectedColor else LightPurple
AnswerButton(
answer = answer,
backgroundColor = backgroundColor,
diff --git a/app/src/main/java/com/github/lookupgroup27/lookup/ui/quiz/components/LeaveQuizButton.kt b/app/src/main/java/com/github/lookupgroup27/lookup/ui/quiz/components/LeaveQuizButton.kt
index 9e7d1106c..b998ee5dd 100644
--- a/app/src/main/java/com/github/lookupgroup27/lookup/ui/quiz/components/LeaveQuizButton.kt
+++ b/app/src/main/java/com/github/lookupgroup27/lookup/ui/quiz/components/LeaveQuizButton.kt
@@ -23,7 +23,7 @@ fun LeaveQuizButton(onClick: () -> Unit, modifier: Modifier) {
modifier = modifier,
colors =
androidx.compose.material3.ButtonDefaults.buttonColors(
- containerColor = Color.Red, contentColor = Color.White),
+ containerColor = Color(0xFF410002), contentColor = Color.White),
shape = RoundedCornerShape(8.dp)) {
Text(text = "Leave Quiz", textAlign = TextAlign.Center, fontSize = 16.sp)
}
diff --git a/app/src/main/java/com/github/lookupgroup27/lookup/ui/quiz/components/QuizThemeButton.kt b/app/src/main/java/com/github/lookupgroup27/lookup/ui/quiz/components/QuizThemeButton.kt
index 5e7b15243..9046f9716 100644
--- a/app/src/main/java/com/github/lookupgroup27/lookup/ui/quiz/components/QuizThemeButton.kt
+++ b/app/src/main/java/com/github/lookupgroup27/lookup/ui/quiz/components/QuizThemeButton.kt
@@ -1,5 +1,6 @@
package com.github.lookupgroup27.lookup.ui.quiz.components
+import androidx.compose.foundation.BorderStroke
import androidx.compose.foundation.layout.Arrangement
import androidx.compose.foundation.layout.Row
import androidx.compose.foundation.layout.fillMaxWidth
@@ -11,12 +12,13 @@ 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.platform.testTag
import androidx.compose.ui.text.font.FontStyle
import androidx.compose.ui.text.font.FontWeight
import androidx.compose.ui.unit.dp
import androidx.compose.ui.unit.sp
+import com.github.lookupgroup27.lookup.ui.theme.LightPurple
+import com.github.lookupgroup27.lookup.ui.theme.StarLightWhite
/**
* Button component to represent each quiz theme with its best score.
@@ -32,9 +34,8 @@ fun QuizThemeButton(theme: String, bestScore: String, onClick: () -> Unit, testT
onClick = onClick,
shape = RoundedCornerShape(16.dp),
modifier = Modifier.fillMaxWidth().height(56.dp).testTag(testTag),
- colors =
- androidx.compose.material3.ButtonDefaults.buttonColors(
- containerColor = Color(0xFF4E5DAB))) {
+ colors = androidx.compose.material3.ButtonDefaults.buttonColors(containerColor = LightPurple),
+ border = BorderStroke(0.3.dp, StarLightWhite)) {
Row(
modifier = Modifier.fillMaxWidth(),
verticalAlignment = Alignment.CenterVertically,
@@ -43,14 +44,15 @@ fun QuizThemeButton(theme: String, bestScore: String, onClick: () -> Unit, testT
text = theme,
fontSize = 15.sp,
fontWeight = FontWeight.Bold,
- color = Color.White,
+ color = StarLightWhite,
modifier = Modifier.padding(start = 4.dp))
Text(
text = "Best Score: $bestScore/15",
fontSize = 13.sp,
fontStyle = FontStyle.Italic,
fontWeight = FontWeight.Normal,
- color = Color(0xFFDADADA))
+ color = StarLightWhite.copy(alpha = 0.7f),
+ )
}
}
}
diff --git a/app/src/main/java/com/github/lookupgroup27/lookup/ui/theme/Color.kt b/app/src/main/java/com/github/lookupgroup27/lookup/ui/theme/Color.kt
index d837b40aa..4d3947db3 100644
--- a/app/src/main/java/com/github/lookupgroup27/lookup/ui/theme/Color.kt
+++ b/app/src/main/java/com/github/lookupgroup27/lookup/ui/theme/Color.kt
@@ -8,15 +8,19 @@ val NebulaPurple = Color(0xFF3D0075) // Deep purple for accents
val StarlightBlue = Color(0xFF0077CC) // Blue for secondary highlights
val CosmicPink = Color(0xFFB4004E) // Accent pink
-val StarWhite = Color(0xFFFFFFFF) // Light color for text on dark backgrounds
+var StarWhite = Color(0xFFFFFFFF) // White for text on dark backgrounds
+val StarLightWhite = Color(0xFFFAFDE8) // Light color for text on dark backgrounds
val MeteorGrey = Color(0xFF333333) // Subtle grey for background contrast
-val DarkPurple = Color(0xFF30315B)
+val DarkPurple = Color(0xFF1A1A2E)
+val LightPurple = Color(0xFF30315B)
+val CosmosPurple = Color(0xFF473074)
val DarkBlue = Color(0xFF0D1023) // Dark blue
+val PurpleBlue = Color(0xFF060817)
val CorrectAnswerColor = Color(0xFF4CAF50)
-val IncorrectAnswerColor = Color(0xFFF44336)
+val IncorrectAnswerColor = Color(0xFF410002)
val AnswerSelectedColor = Color(0xFFFF731F)
val NextButtonEnabledColor = Color(0xFF00C853)
val NextButtonDisabledColor = Color(0xFF6A9605)
diff --git a/app/src/main/res/drawable/landscape_background.jpg b/app/src/main/res/drawable/landscape_background.jpg
new file mode 100644
index 000000000..7a6d2d272
Binary files /dev/null and b/app/src/main/res/drawable/landscape_background.jpg differ
diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml
index 3aec47864..81f6dbbc3 100644
--- a/app/src/main/res/values/strings.xml
+++ b/app/src/main/res/values/strings.xml
@@ -17,8 +17,8 @@
Profile Icon
Add Avatar
Change Avatar
- Personal Info >
- Your Collection >
+ Personal Info
+ Your Collection
Sky Map
Menu
Reset