diff --git a/.idea/.name b/.idea/.name new file mode 100644 index 0000000..5ebbc93 --- /dev/null +++ b/.idea/.name @@ -0,0 +1 @@ +Weekly \ No newline at end of file diff --git a/.idea/codeStyles/Project.xml b/.idea/codeStyles/Project.xml new file mode 100644 index 0000000..7643783 --- /dev/null +++ b/.idea/codeStyles/Project.xml @@ -0,0 +1,123 @@ + + + + + + + + + + \ No newline at end of file diff --git a/.idea/codeStyles/codeStyleConfig.xml b/.idea/codeStyles/codeStyleConfig.xml new file mode 100644 index 0000000..79ee123 --- /dev/null +++ b/.idea/codeStyles/codeStyleConfig.xml @@ -0,0 +1,5 @@ + + + + \ No newline at end of file diff --git a/.idea/deploymentTargetDropDown.xml b/.idea/deploymentTargetDropDown.xml index c5fefdb..2fdf5a4 100644 --- a/.idea/deploymentTargetDropDown.xml +++ b/.idea/deploymentTargetDropDown.xml @@ -1,17 +1,17 @@ - + - + - + - - + + \ No newline at end of file diff --git a/app/src/main/java/com/ottogo/weekly/api/WeeklyApiService.kt b/app/src/main/java/com/ottogo/weekly/api/WeeklyApiService.kt index 4258dd6..c41f46d 100644 --- a/app/src/main/java/com/ottogo/weekly/api/WeeklyApiService.kt +++ b/app/src/main/java/com/ottogo/weekly/api/WeeklyApiService.kt @@ -27,6 +27,8 @@ private val retrofit = Retrofit.Builder() interface WeeklyApiService { @POST("api/account/login/") suspend fun login(@Body body: Map) + @POST("api/account/create/") + suspend fun signup(@Body body: Map) : Map } diff --git a/app/src/main/java/com/ottogo/weekly/ui/components/Message.kt b/app/src/main/java/com/ottogo/weekly/ui/components/Message.kt index 8d7b876..1b7fedc 100644 --- a/app/src/main/java/com/ottogo/weekly/ui/components/Message.kt +++ b/app/src/main/java/com/ottogo/weekly/ui/components/Message.kt @@ -19,7 +19,7 @@ import androidx.navigation.NavController @Composable -fun Message(navController: NavController, message: String) { +fun Message(message: String) { diff --git a/app/src/main/java/com/ottogo/weekly/ui/login/LandingPage.kt b/app/src/main/java/com/ottogo/weekly/ui/login/LandingPage.kt index 076077c..c15e81d 100644 --- a/app/src/main/java/com/ottogo/weekly/ui/login/LandingPage.kt +++ b/app/src/main/java/com/ottogo/weekly/ui/login/LandingPage.kt @@ -1,43 +1,75 @@ package com.ottogo.weekly.ui.login +import android.graphics.Color import android.os.Bundle import android.util.Log +import android.widget.TextView import androidx.activity.ComponentActivity import androidx.activity.compose.setContent -import androidx.compose.foundation.layout.Column -import androidx.compose.foundation.layout.fillMaxSize -import androidx.compose.foundation.layout.padding +import androidx.compose.foundation.background +import androidx.compose.foundation.horizontalScroll +import androidx.compose.foundation.layout.* import androidx.compose.material.MaterialTheme import androidx.compose.material.Surface import androidx.compose.material.Text import androidx.compose.runtime.* import androidx.compose.runtime.saveable.rememberSaveable import androidx.compose.ui.Modifier +import androidx.compose.ui.focus.focusModifier +import androidx.compose.ui.text.font.FontFamily +import androidx.compose.ui.text.font.FontWeight import androidx.compose.ui.tooling.preview.Preview import androidx.compose.ui.unit.dp +import androidx.compose.ui.unit.sp import androidx.navigation.NavController import com.ottogo.weekly.api.WeeklyApi import com.ottogo.weekly.ui.components.CustomButton +import com.ottogo.weekly.ui.theme.nunitoFamily import kotlinx.coroutines.runBlocking +import java.time.format.TextStyle @Composable fun LandingPage(navController: NavController) { + Column(modifier = Modifier.padding(24.dp)){ - Column(){ + displayTitle("Weekly") + displayGreeting("Make your best memories") - CustomButton(buttonText = "Sign up"){ - runBlocking { - navController.navigate("signupBirthdayPage") + + Spacer(modifier = Modifier.padding(187.dp)) + CustomButton(buttonText = "Sign up") { + runBlocking { + navController.navigate("signupBirthdayPage") + } + Modifier.height(48.dp) } - } - CustomButton(buttonText = "Login"){ - runBlocking { - navController.navigate("loginPage") + Spacer(modifier = Modifier.height(15.dp)) + CustomButton(buttonText = "Login") { + runBlocking { + navController.navigate("loginPage") + } } } - } -} \ No newline at end of file +} + +@Composable +fun displayTitle(appName: String) { + Spacer(modifier = Modifier.height(65.dp)) + Text(text = appName, + fontSize = 48.sp, + fontWeight = FontWeight(700), + fontFamily = nunitoFamily + ) +} +@Composable +fun displayGreeting(greeting: String) { + Spacer(modifier = Modifier.height(17.dp)) + Text(text = greeting, + fontSize = 24.sp, + fontWeight = FontWeight(700), + fontFamily = nunitoFamily) +} diff --git a/app/src/main/java/com/ottogo/weekly/ui/login/SignupBirthdayPage.kt b/app/src/main/java/com/ottogo/weekly/ui/login/SignupBirthdayPage.kt index 11ac590..2d05d07 100644 --- a/app/src/main/java/com/ottogo/weekly/ui/login/SignupBirthdayPage.kt +++ b/app/src/main/java/com/ottogo/weekly/ui/login/SignupBirthdayPage.kt @@ -7,6 +7,7 @@ import androidx.activity.compose.setContent import androidx.compose.foundation.layout.Column import androidx.compose.foundation.layout.fillMaxSize import androidx.compose.foundation.layout.padding +import androidx.compose.foundation.layout.width import androidx.compose.material.MaterialTheme import androidx.compose.material.Surface import androidx.compose.material.Text @@ -16,6 +17,8 @@ import androidx.compose.ui.Modifier import androidx.compose.ui.tooling.preview.Preview import androidx.compose.ui.unit.dp import androidx.navigation.NavController +import com.ottogo.weekly.ui.components.CustomButton +import kotlinx.coroutines.runBlocking /* * @@ -33,7 +36,13 @@ fun SignupBirthdayPage(navController: NavController) { Column(){ - + Text(text ="birthday page") + CustomButton(buttonText = "Sign up") { + runBlocking { + navController.navigate("signupPage/{dob}") + } + Modifier.width(27.dp) + } } } \ No newline at end of file diff --git a/app/src/main/java/com/ottogo/weekly/ui/login/SignupPage.kt b/app/src/main/java/com/ottogo/weekly/ui/login/SignupPage.kt index c8d7a8e..2f4bf66 100644 --- a/app/src/main/java/com/ottogo/weekly/ui/login/SignupPage.kt +++ b/app/src/main/java/com/ottogo/weekly/ui/login/SignupPage.kt @@ -1,21 +1,37 @@ package com.ottogo.weekly.ui.login +import android.graphics.Paint import android.os.Bundle import android.util.Log import androidx.activity.ComponentActivity import androidx.activity.compose.setContent -import androidx.compose.foundation.layout.Column -import androidx.compose.foundation.layout.fillMaxSize -import androidx.compose.foundation.layout.padding -import androidx.compose.material.MaterialTheme -import androidx.compose.material.Surface -import androidx.compose.material.Text +import androidx.compose.animation.expandHorizontally +import androidx.compose.animation.expandVertically +import androidx.compose.foundation.layout.* +import androidx.compose.foundation.layout.Arrangement.Absolute.Center +import androidx.compose.foundation.layout.Arrangement.Absolute.aligned +import androidx.compose.material.* +import androidx.compose.material.icons.materialIcon import androidx.compose.runtime.* import androidx.compose.runtime.saveable.rememberSaveable +import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier +import androidx.compose.ui.focus.focusModifier +import androidx.compose.ui.graphics.Color +import androidx.compose.ui.text.font.FontWeight +import androidx.compose.ui.text.style.TextAlign import androidx.compose.ui.tooling.preview.Preview import androidx.compose.ui.unit.dp +import androidx.compose.ui.unit.sp import androidx.navigation.NavController +import com.ottogo.weekly.api.WeeklyApi +import com.ottogo.weekly.ui.components.CustomButton +import com.ottogo.weekly.ui.components.CustomTextField +import com.ottogo.weekly.ui.login.ui.components.Message +import com.ottogo.weekly.ui.theme.nunitoFamily +import kotlinx.coroutines.runBlocking +import retrofit2.HttpException +import java.io.IOException /* * @@ -30,13 +46,158 @@ import androidx.navigation.NavController * Try your best! Please don't hesitate to ask any questions * * */ + + +// todo : implement Shriya's custom text fields +// question : is alignment and padding correct? +// question : Are we using Scaffold/ floating action button ? +// what am I recieving from birthday? +// getting string value +// todo: add response errors + @Composable -fun SignupPage(navController: NavController, dob: String) { +fun SignupPage(navController: NavController, dob: String = "2001-07-10") { + val phoneNumber = remember { mutableStateOf("") } + val username = remember { mutableStateOf("") } + val password = remember { mutableStateOf("") } + var error: String? by remember {mutableStateOf(value = null)} + + Column(horizontalAlignment = Alignment.CenterHorizontally, + modifier = Modifier + .fillMaxSize() + .padding(horizontal = 24.dp) + ){ + Box( + modifier = Modifier.fillMaxWidth() + ){ + //todo : add navigation back button + Spacer(modifier = Modifier.height(64.dp)) + displaySignupTitle(title = "Sign Up") + } + if (error != null){ + Spacer(modifier = Modifier.height(32.dp)) + Message(error.toString()) + } + // phone text field + Spacer(modifier = Modifier.height(32.dp)) + CustomTextField( + helper = "Phone", + hint = "9517596842", + input = phoneNumber.value, + onChange = { phoneNumber.value = it }) + // username text field + Spacer(modifier = Modifier.height(24.dp)) + CustomTextField( + helper = "Username", + hint = "Username", + input = username.value, + onChange = { username.value = it }) - Column(){ + // Password text field + Spacer(modifier = Modifier.height(24.dp)) + CustomTextField( + helper = "Password", + hint = "Password", + input = password.value, + onChange = { password.value = it }) + // todo : navigate to verify page and pass token to verify page + Spacer(modifier = Modifier.height(25.dp)) + CustomButton(buttonText = "Sign Up") { + runBlocking { + navController.navigate("signupVerifyPage/{token}") + try { + WeeklyApi.retrofitService.signup( + mapOf( + "phone" to phoneNumber.toString(), + "username" to username.toString(), + "password" to password.toString(), + "dob" to dob + ) + ) + } catch (e: Exception) { + when (e) { + is HttpException -> { + val statuscode = e.code() + if (statuscode == 400) { + error = "400 error" + } + if (statuscode == 500) { + error = "500 error" + } + } + is IOException -> { + error = "Check your connection" + } + } + } + + } + } + + //test + Spacer(modifier = Modifier.height(32.dp)) + Text( + //modifier = Modifier.size(250.dp), + text = "By tapping \"Sign Up\", I agree to", + fontSize = 14.sp, + fontFamily = nunitoFamily, + color = Color.Gray + ) + // todo : policy and eula in row + Row() { + Text( + text = "Privacy Policy" , + fontFamily = nunitoFamily, + fontSize = 14.sp, + color = Color.Gray + ) + Spacer(modifier = Modifier.width(16.dp)) + Text( + text = "EULA", + fontFamily = nunitoFamily, + fontSize = 14.sp, + color = Color.Gray + ) + } + + } } -} \ No newline at end of file + +@Composable +fun displaySignupTitle(title: String) { + Spacer(modifier = Modifier.height(44.dp)) + Text(text = title, + fontSize = 42.sp, + fontWeight = FontWeight(700), + fontFamily = nunitoFamily + ) +} + +@Composable +fun displayTextFieldTitle(title: String){ + Text(text = title, + textAlign = TextAlign.Left, + fontSize = 16.sp, + fontWeight = FontWeight(700), + fontFamily = nunitoFamily + ) +} + +// todo: make red box +@Composable +fun ErrorMessage500(){ + Text(text = "We are experiencing issues please try again later", + fontFamily = nunitoFamily, + color = Color.Red) +} +@Composable +fun ErrorMessage400(){ + Text(text = "an unexpected error occurred", + fontFamily = nunitoFamily, + color = Color.Red) +} +