From 7807d228507f0be3f130ce7cb0e5215e4a941741 Mon Sep 17 00:00:00 2001 From: Rihab Date: Fri, 20 Dec 2024 00:39:31 +0100 Subject: [PATCH 1/5] feat: enhance overall UI and add delete confirmation in profile - Changed background for multiple screens - Update theme color for consistency across buttons - Implement confirmation dialog for profile deletion - Add tests for delete confirmation dialog --- .../lookup/ui/authentication/SignInKtTest.kt | 4 +- .../ui/profile/ProfileInformationKtTest.kt | 78 ++++- .../lookup/ui/authentication/SignIn.kt | 40 +-- .../lookupgroup27/lookup/ui/feed/Feed.kt | 5 +- .../github/lookupgroup27/lookup/ui/map/Map.kt | 19 +- .../lookup/ui/overview/Landing.kt | 10 +- .../lookupgroup27/lookup/ui/overview/Menu.kt | 39 ++- .../lookup/ui/profile/Collection.kt | 4 +- .../lookup/ui/profile/Profile.kt | 13 +- .../lookup/ui/profile/ProfileInformation.kt | 294 +++++++++++------- .../profile/components/ChangeAvatarButton.kt | 7 +- .../ui/profile/components/ProfileButtons.kt | 10 +- .../lookupgroup27/lookup/ui/theme/Color.kt | 8 +- .../res/drawable/landscape_background.jpg | Bin 0 -> 116105 bytes app/src/main/res/values/strings.xml | 4 +- 15 files changed, 354 insertions(+), 181 deletions(-) create mode 100644 app/src/main/res/drawable/landscape_background.jpg 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 fe1172c57..edec73142 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 @@ -42,7 +42,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() @@ -90,7 +90,7 @@ class SignInKtTest : TestCase() { // Scroll to each component and verify it is displayed composeTestRule.onNodeWithTag("loginTitle").performScrollTo().assertIsDisplayed() - composeTestRule.onNodeWithTag("loginTitle").assertTextEquals("Welcome to the Cosmos") + composeTestRule.onNodeWithTag("loginTitle").assertTextEquals("Explore the Cosmos") composeTestRule .onNodeWithTag("loginButton") .performScrollTo() 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 b924cc852..ba2cd41d3 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 @@ -42,6 +42,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 @@ -72,7 +76,7 @@ fun SignInScreen(navigationActions: NavigationActions) { Scaffold( modifier = Modifier.fillMaxSize().testTag("auth_screen"), - containerColor = Color.Black, + containerColor = PurpleBlue, topBar = { TopAppBar( title = {}, @@ -86,7 +90,7 @@ fun SignInScreen(navigationActions: NavigationActions) { tint = Color.White) } }, - colors = TopAppBarDefaults.topAppBarColors(containerColor = Color.Black)) + colors = TopAppBarDefaults.topAppBarColors(containerColor = PurpleBlue)) }, content = { padding -> Column( @@ -96,27 +100,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 = { @@ -129,13 +131,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) } @@ -145,7 +148,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) } } @@ -160,11 +164,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 = @@ -185,7 +189,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 1278d9a7b..e0b209553 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 @@ -15,6 +15,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 @@ -155,10 +156,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 fff781f29..043bf6cae 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 @@ -156,10 +161,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, @@ -175,7 +181,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/overview/Landing.kt b/app/src/main/java/com/github/lookupgroup27/lookup/ui/overview/Landing.kt index 91165b6f1..b67d809a6 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 @@ -30,6 +30,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 @@ -53,7 +54,7 @@ fun LandingScreen( }) { // Background Image BackgroundImage( - painterResId = R.drawable.landing_screen_bckgrnd, + painterResId = R.drawable.landscape_background, contentDescription = stringResource(R.string.background_description), ) @@ -66,19 +67,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 0b3512beb..85b438ab8 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 @@ -1,6 +1,7 @@ package com.github.lookupgroup27.lookup.ui.overview import android.annotation.SuppressLint +import androidx.compose.foundation.BorderStroke import androidx.compose.foundation.Image import androidx.compose.foundation.layout.* import androidx.compose.foundation.rememberScrollState @@ -21,6 +22,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 @@ -56,7 +59,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) @@ -81,7 +84,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) @@ -106,13 +109,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( @@ -120,33 +125,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 a0ea468bf..56c481dcd 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 @@ -52,10 +52,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 474ad9e4c..cd518be66 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 @@ -1,6 +1,7 @@ package com.github.lookupgroup27.lookup.ui.profile import android.content.res.Configuration +import androidx.compose.foundation.Image import androidx.compose.foundation.layout.* import androidx.compose.foundation.rememberScrollState import androidx.compose.foundation.verticalScroll @@ -10,8 +11,11 @@ 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.testTag import androidx.compose.ui.res.painterResource import androidx.compose.ui.res.stringResource import androidx.compose.ui.unit.dp @@ -27,7 +31,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) { @@ -54,9 +57,11 @@ fun ProfileScreen(navigationActions: NavigationActions, avatarViewModel: AvatarV }) { innerPadding -> Box(modifier = Modifier.fillMaxSize().padding(innerPadding)) { // 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 16904f93e..9ec50cf5d 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 @@ -9,137 +9,219 @@ 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.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( profileViewModel: ProfileViewModel, navigationActions: NavigationActions ) { - val scrollState = rememberScrollState() 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) } + + 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)) - 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 + 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/theme/Color.kt b/app/src/main/java/com/github/lookupgroup27/lookup/ui/theme/Color.kt index d837b40aa..00399304c 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,12 +8,16 @@ 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) 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 0000000000000000000000000000000000000000..7a6d2d272065723f1285ba8acb56aaef0affd9f2 GIT binary patch literal 116105 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%0Dkqc| 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 Icon Add Avatar Change Avatar - Personal Info > - Your Collection > + Personal Info + Your Collection Sky Map Menu Reset From 6563ac7eec91b70dcec8116876f13cc1b20d1a12 Mon Sep 17 00:00:00 2001 From: Rihab Date: Fri, 20 Dec 2024 01:46:24 +0100 Subject: [PATCH 2/5] feat: enhance UI of quizzes --- .../lookup/ui/navigation/BottomNavigationMenu.kt | 2 +- .../github/lookupgroup27/lookup/ui/quiz/Quiz.kt | 15 ++++++++++----- .../lookupgroup27/lookup/ui/quiz/QuizPlay.kt | 8 ++++---- .../lookup/ui/quiz/components/LeaveQuizButton.kt | 2 +- .../lookup/ui/quiz/components/QuizThemeButton.kt | 14 ++++++++------ .../github/lookupgroup27/lookup/ui/theme/Color.kt | 2 +- 6 files changed, 25 insertions(+), 18 deletions(-) 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/quiz/Quiz.kt b/app/src/main/java/com/github/lookupgroup27/lookup/ui/quiz/Quiz.kt index b3882a29f..261a30e20 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 @@ -1,6 +1,7 @@ package com.github.lookupgroup27.lookup.ui.quiz import android.annotation.SuppressLint +import androidx.compose.foundation.Image import androidx.compose.foundation.layout.* import androidx.compose.foundation.rememberScrollState import androidx.compose.foundation.verticalScroll @@ -13,9 +14,12 @@ import androidx.compose.material3.Text import androidx.compose.runtime.Composable 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 @@ -24,7 +28,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 @@ -43,10 +47,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( @@ -71,7 +76,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 9c481c65c..69f81f353 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 @@ -27,7 +27,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 @@ -48,10 +48,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 = @@ -90,7 +90,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 00399304c..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 @@ -20,7 +20,7 @@ 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) From f2b8e03e6447e4d17f09a635aa343b089ce6199b Mon Sep 17 00:00:00 2001 From: Ismaillat Date: Fri, 20 Dec 2024 02:18:25 +0100 Subject: [PATCH 3/5] fix: remove landscape tests from profile tests --- .../lookup/ui/profile/ProfileKtTest.kt | 41 ------------------- 1 file changed, 41 deletions(-) diff --git a/app/src/androidTest/java/com/github/lookupgroup27/lookup/ui/profile/ProfileKtTest.kt b/app/src/androidTest/java/com/github/lookupgroup27/lookup/ui/profile/ProfileKtTest.kt index 80be8f682..d881e463c 100644 --- a/app/src/androidTest/java/com/github/lookupgroup27/lookup/ui/profile/ProfileKtTest.kt +++ b/app/src/androidTest/java/com/github/lookupgroup27/lookup/ui/profile/ProfileKtTest.kt @@ -4,10 +4,7 @@ import androidx.compose.ui.test.junit4.createComposeRule import androidx.compose.ui.test.onNodeWithContentDescription import androidx.compose.ui.test.onNodeWithText import androidx.compose.ui.test.performClick -import androidx.compose.ui.test.performScrollTo import androidx.test.ext.junit.runners.AndroidJUnit4 -import androidx.test.platform.app.InstrumentationRegistry -import androidx.test.uiautomator.UiDevice import com.github.lookupgroup27.lookup.R import com.github.lookupgroup27.lookup.model.profile.ProfileRepository import com.github.lookupgroup27.lookup.ui.navigation.LIST_TOP_LEVEL_DESTINATION @@ -182,42 +179,4 @@ class ProfileKtTest { // Verify that no further interactions (including `navigateTo()`) occurred Mockito.verifyNoMoreInteractions(mockNavigationActions) } - - @Test - fun testProfileScreenIsScrollableAndFullyVisibleInLandscape() { - // Set the device to landscape orientation - setLandscapeOrientation() - - // Launch the ProfileScreen in landscape mode - composeTestRule.setContent { - ProfileScreen( - navigationActions = mockNavigationActions, avatarViewModel = mockAvatarViewModel) - } - - // Check that main elements are displayed after scrolling in landscape mode - composeTestRule - .onNodeWithContentDescription(getResourceString(R.string.profile_profile_icon_description)) - .assertExists() - composeTestRule - .onNodeWithText(getResourceString(R.string.profile_personal_info_button)) - .performScrollTo() - .assertExists() - composeTestRule - .onNodeWithText(getResourceString(R.string.profile_collection_button)) - .performScrollTo() - .assertExists() - - // Reset orientation to portrait after the test - resetOrientation() - } - - private fun setLandscapeOrientation() { - val device = UiDevice.getInstance(InstrumentationRegistry.getInstrumentation()) - device.setOrientationLeft() - } - - private fun resetOrientation() { - val device = UiDevice.getInstance(InstrumentationRegistry.getInstrumentation()) - device.setOrientationNatural() - } } From dcb515284ad36c53a044d168ede52f20d5cc1b06 Mon Sep 17 00:00:00 2001 From: Ismaillat Date: Fri, 20 Dec 2024 02:23:07 +0100 Subject: [PATCH 4/5] Revert "fix: remove landscape tests from profile tests" This reverts commit f2b8e03e6447e4d17f09a635aa343b089ce6199b. revert commit --- .../lookup/ui/profile/ProfileKtTest.kt | 41 +++++++++++++++++++ 1 file changed, 41 insertions(+) diff --git a/app/src/androidTest/java/com/github/lookupgroup27/lookup/ui/profile/ProfileKtTest.kt b/app/src/androidTest/java/com/github/lookupgroup27/lookup/ui/profile/ProfileKtTest.kt index d881e463c..80be8f682 100644 --- a/app/src/androidTest/java/com/github/lookupgroup27/lookup/ui/profile/ProfileKtTest.kt +++ b/app/src/androidTest/java/com/github/lookupgroup27/lookup/ui/profile/ProfileKtTest.kt @@ -4,7 +4,10 @@ import androidx.compose.ui.test.junit4.createComposeRule import androidx.compose.ui.test.onNodeWithContentDescription import androidx.compose.ui.test.onNodeWithText import androidx.compose.ui.test.performClick +import androidx.compose.ui.test.performScrollTo import androidx.test.ext.junit.runners.AndroidJUnit4 +import androidx.test.platform.app.InstrumentationRegistry +import androidx.test.uiautomator.UiDevice import com.github.lookupgroup27.lookup.R import com.github.lookupgroup27.lookup.model.profile.ProfileRepository import com.github.lookupgroup27.lookup.ui.navigation.LIST_TOP_LEVEL_DESTINATION @@ -179,4 +182,42 @@ class ProfileKtTest { // Verify that no further interactions (including `navigateTo()`) occurred Mockito.verifyNoMoreInteractions(mockNavigationActions) } + + @Test + fun testProfileScreenIsScrollableAndFullyVisibleInLandscape() { + // Set the device to landscape orientation + setLandscapeOrientation() + + // Launch the ProfileScreen in landscape mode + composeTestRule.setContent { + ProfileScreen( + navigationActions = mockNavigationActions, avatarViewModel = mockAvatarViewModel) + } + + // Check that main elements are displayed after scrolling in landscape mode + composeTestRule + .onNodeWithContentDescription(getResourceString(R.string.profile_profile_icon_description)) + .assertExists() + composeTestRule + .onNodeWithText(getResourceString(R.string.profile_personal_info_button)) + .performScrollTo() + .assertExists() + composeTestRule + .onNodeWithText(getResourceString(R.string.profile_collection_button)) + .performScrollTo() + .assertExists() + + // Reset orientation to portrait after the test + resetOrientation() + } + + private fun setLandscapeOrientation() { + val device = UiDevice.getInstance(InstrumentationRegistry.getInstrumentation()) + device.setOrientationLeft() + } + + private fun resetOrientation() { + val device = UiDevice.getInstance(InstrumentationRegistry.getInstrumentation()) + device.setOrientationNatural() + } } From 20a48f14d10ba93982204aec8d1ab1919a348ef2 Mon Sep 17 00:00:00 2001 From: Rihab Date: Fri, 20 Dec 2024 03:32:30 +0100 Subject: [PATCH 5/5] merge: resolve merge conflicts with main --- .../lookupgroup27/lookup/ui/authentication/SignInKtTest.kt | 1 - .../java/com/github/lookupgroup27/lookup/ui/profile/Profile.kt | 3 +-- .../main/java/com/github/lookupgroup27/lookup/ui/quiz/Quiz.kt | 2 +- 3 files changed, 2 insertions(+), 4 deletions(-) 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 784ca0268..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 @@ -78,7 +78,6 @@ class SignInKtTest : TestCase() { verify(mockNavigationActions).navigateTo(Screen.MENU) } - @Test fun backArrowIsInTopLeftCorner() { composeTestRule.setContent { SignInScreen(mockNavigationActions) } 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 f3228d625..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 @@ -2,8 +2,8 @@ package com.github.lookupgroup27.lookup.ui.profile import android.content.pm.ActivityInfo import android.content.res.Configuration -import androidx.compose.foundation.Image import androidx.activity.ComponentActivity +import androidx.compose.foundation.Image import androidx.compose.foundation.layout.* import androidx.compose.foundation.rememberScrollState import androidx.compose.foundation.verticalScroll @@ -17,7 +17,6 @@ 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.testTag import androidx.compose.ui.platform.LocalContext import androidx.compose.ui.platform.testTag import androidx.compose.ui.res.painterResource 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 6d20744f0..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 @@ -1,9 +1,9 @@ package com.github.lookupgroup27.lookup.ui.quiz import android.annotation.SuppressLint -import androidx.compose.foundation.Image 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