diff --git a/app/build.gradle b/app/build.gradle
index 39eb805..60e2727 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -42,6 +42,8 @@ dependencies {
implementation 'com.google.android.flexbox:flexbox:3.0.0'
+ implementation 'com.github.bumptech.glide:glide:4.16.0'
+
implementation libs.androidx.core.ktx
implementation libs.androidx.appcompat
implementation libs.material
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index a9bb014..ae4f024 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -18,7 +18,7 @@
) :
+ RecyclerView.Adapter() {
+
+ var selectedPos: Int? = null
+
+ inner class AvatarViewHolder(val binding: AvatarViewholderBinding) : ViewHolder(binding.root)
+
+ override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): AvatarViewHolder {
+ return AvatarViewHolder(
+ AvatarViewholderBinding.inflate(
+ LayoutInflater.from(parent.context),
+ parent,
+ false
+ )
+ )
+ }
+
+ override fun getItemCount(): Int = avatarList.size
+
+ override fun onBindViewHolder(holder: AvatarViewHolder, position: Int) {
+ Glide.with(holder.binding.root)
+ .load(avatarList[position].avatar_image_url)
+ .into(holder.binding.avatar)
+
+ holder.binding.card.apply {
+ if (selectedPos == position){
+ cardElevation = 5f
+ setCardBackgroundColor(holder.itemView.context.getColor(R.color.white))
+ }else{
+ cardElevation = 0f
+ setCardBackgroundColor(holder.itemView.context.getColor(R.color.white_50))
+ }
+ }
+
+ holder.binding.card.setOnClickListener {
+ if (selectedPos == position) return@setOnClickListener
+
+ holder.binding.card.apply {
+ setCardBackgroundColor(holder.itemView.context.getColor(R.color.white))
+ cardElevation = 5f
+ }
+
+ selectedPos?.let {
+ notifyItemChanged(it)
+ }
+ selectedPos = position
+ }
+
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/woka/onboard/fragments/GetCodeFragment.kt b/app/src/main/java/com/woka/onboard/fragments/GetCodeFragment.kt
index 369c9f9..f79f55a 100644
--- a/app/src/main/java/com/woka/onboard/fragments/GetCodeFragment.kt
+++ b/app/src/main/java/com/woka/onboard/fragments/GetCodeFragment.kt
@@ -9,19 +9,29 @@ import androidx.core.widget.addTextChangedListener
import androidx.navigation.fragment.findNavController
import com.woka.R
import com.woka.databinding.FragmentGetCodeBinding
+import com.woka.onboard.fragments.GetEmailFragment.Companion.IS_RESET_PASSWORD_INTENT
import com.woka.onboard.fragments.GetEmailFragment.Companion.IS_UNDER_16
import com.woka.utils.closeKeyboard
+/*
+ This fragment is to get the otp code input
+ It is used in three scenarios:
+ 1 (Default). Registration process of parent (@Param isUnder16 = false)
+ 2. Registration process of child (@Param isUnder16 = true)
+ 3. Forget password process ( @Param isResetPasswordIntent = true)
+ */
class GetCodeFragment : Fragment() {
private lateinit var binding: FragmentGetCodeBinding
- private var isUnder16 = false
+ private var isUnder16: Boolean = false
+ private var isResetPasswordIntent: Boolean = false
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
arguments?.let {
isUnder16 = it.getBoolean(IS_UNDER_16, false)
+ isResetPasswordIntent = it.getBoolean(IS_RESET_PASSWORD_INTENT, false)
}
}
@@ -40,6 +50,15 @@ class GetCodeFragment : Fragment() {
private fun initViews() {
binding.apply {
+ if (isResetPasswordIntent){
+ title.text = getString(R.string.please_get_otp_under_16)
+ infoText.text = getString(R.string.request_them_for_the_code_to_reset_your_password)
+ }
+ else if (isUnder16){
+ title.text = getString(R.string.please_get_otp_under_16)
+ infoText.text = getString(R.string.request_them_for_verification_)
+ }
+
et1.addTextChangedListener {
if (it?.isEmpty() == false){
et2.requestFocus()
@@ -70,19 +89,6 @@ class GetCodeFragment : Fragment() {
et3.requestFocus()
}
}
-
- if (isUnder16){
- title.text = getString(R.string.please_get_otp_under_16)
- infoText.text = getString(R.string.request_them_for_verification_)
- }
-
- binding.next.setOnClickListener {
- val args = Bundle().apply {
- putBoolean(IS_UNDER_16, isUnder16)
- }
-
- findNavController().navigate(R.id.action_getCodeFragment_to_signUpFragment, args)
- }
}
}
@@ -91,6 +97,18 @@ class GetCodeFragment : Fragment() {
backBtn.setOnClickListener {
activity?.onBackPressedDispatcher?.onBackPressed()
}
+
+ next.setOnClickListener {
+ if (isResetPasswordIntent){
+ findNavController().navigate(R.id.action_getCodeFragment_to_newPasswordFragment2)
+ }else{
+ val args = Bundle().apply {
+ putBoolean(IS_UNDER_16, isUnder16)
+ }
+
+ findNavController().navigate(R.id.action_getCodeFragment_to_signUpFragment, args)
+ }
+ }
}
}
}
\ No newline at end of file
diff --git a/app/src/main/java/com/woka/onboard/fragments/GetEmailFragment.kt b/app/src/main/java/com/woka/onboard/fragments/GetEmailFragment.kt
index 01994cd..bb3b229 100644
--- a/app/src/main/java/com/woka/onboard/fragments/GetEmailFragment.kt
+++ b/app/src/main/java/com/woka/onboard/fragments/GetEmailFragment.kt
@@ -12,20 +12,30 @@ import androidx.navigation.fragment.findNavController
import com.woka.R
import com.woka.databinding.FragmentGetEmailBinding
+/*
+ This fragment is to get the email user input
+ It is used in three scenarios:
+ 1 (Default). Registration process of parent (@Param isUnder16 = false)
+ 2. Registration process of child (@Param isUnder16 = true)
+ 3. Forget password process ( @Param isResetPasswordIntent = true)
+ */
class GetEmailFragment : Fragment() {
companion object{
const val IS_UNDER_16 = "is_under_16"
+ const val IS_RESET_PASSWORD_INTENT = "reset_password_intent"
}
private lateinit var binding: FragmentGetEmailBinding
private var isUnder16: Boolean = false
+ private var isResetPasswordIntent: Boolean = false
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
arguments?.let {
isUnder16 = it.getBoolean(IS_UNDER_16, false)
+ isResetPasswordIntent = it.getBoolean(IS_RESET_PASSWORD_INTENT, false)
}
}
@@ -44,7 +54,17 @@ class GetEmailFragment : Fragment() {
private fun initViews() {
binding.apply {
- if (isUnder16){
+ if (isResetPasswordIntent){
+ // scenario 3
+
+ title.text = getString(R.string.forgot_your_password)
+ can.text = getString(R.string.please_give_us_your_username)
+ email.hint = getString(R.string.enter_your_username)
+ verificationTxt.text = getString(R.string.we_will_send_a_reset_code_to_your_parent_s_email)
+ verificationTxt.visibility = VISIBLE
+ }else if (isUnder16){
+ // scenario 2
+
title.text = getString(R.string.let_s_be_safe)
can.text = getString(R.string.can_we_have_your_parent_s_email)
email.hint = getString(R.string.enter_your_parent_s_email)
@@ -62,8 +82,14 @@ class GetEmailFragment : Fragment() {
return@setOnClickListener
}
- val args = Bundle().apply {
- putBoolean(IS_UNDER_16, isUnder16)
+ val args = if (isResetPasswordIntent){
+ Bundle().apply {
+ putBoolean(IS_RESET_PASSWORD_INTENT, isResetPasswordIntent)
+ }
+ }else{
+ Bundle().apply {
+ putBoolean(IS_UNDER_16, isUnder16)
+ }
}
findNavController().navigate(R.id.action_getEmailFragment_to_getCodeFragment, args)
diff --git a/app/src/main/java/com/woka/onboard/fragments/GetMoreInfoFragment.kt b/app/src/main/java/com/woka/onboard/fragments/GetMoreInfoFragment.kt
index fe0f6dc..da7a480 100644
--- a/app/src/main/java/com/woka/onboard/fragments/GetMoreInfoFragment.kt
+++ b/app/src/main/java/com/woka/onboard/fragments/GetMoreInfoFragment.kt
@@ -10,6 +10,7 @@ import android.widget.TextView
import android.widget.Toast
import androidx.core.view.allViews
import androidx.fragment.app.Fragment
+import androidx.navigation.fragment.findNavController
import com.woka.R
import com.woka.databinding.FragmentGetMoreInfoBinding
import com.woka.onboard.InterestTopicView
@@ -53,6 +54,10 @@ class GetMoreInfoFragment : Fragment() {
genderF.setOnClickListener{selectGender(Gender.FEMALE)}
backBtn.setOnClickListener { activity?.onBackPressedDispatcher?.onBackPressed() }
+
+ next.setOnClickListener {
+ findNavController().navigate(R.id.action_getMoreInfoFragment_to_selectAvatarFragment)
+ }
}
}
diff --git a/app/src/main/java/com/woka/onboard/fragments/NewPasswordFragment.kt b/app/src/main/java/com/woka/onboard/fragments/NewPasswordFragment.kt
new file mode 100644
index 0000000..677f5c9
--- /dev/null
+++ b/app/src/main/java/com/woka/onboard/fragments/NewPasswordFragment.kt
@@ -0,0 +1,31 @@
+package com.woka.onboard.fragments
+
+import android.os.Bundle
+import androidx.fragment.app.Fragment
+import android.view.LayoutInflater
+import android.view.View
+import android.view.ViewGroup
+import com.woka.R
+import com.woka.databinding.FragmentNewPasswordBinding
+
+class NewPasswordFragment : Fragment() {
+
+ private lateinit var binding: FragmentNewPasswordBinding
+
+ override fun onCreateView(
+ inflater: LayoutInflater, container: ViewGroup?,
+ savedInstanceState: Bundle?
+ ): View? {
+ binding = FragmentNewPasswordBinding.inflate(inflater, container, false)
+ clickEvents()
+ return binding.root
+ }
+
+ private fun clickEvents() {
+ binding.apply {
+ backBtn.setOnClickListener {
+ activity?.onBackPressedDispatcher?.onBackPressed()
+ }
+ }
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/woka/onboard/fragments/OnboardFragment.kt b/app/src/main/java/com/woka/onboard/fragments/OnboardFragment.kt
index a7f782e..ab9605e 100644
--- a/app/src/main/java/com/woka/onboard/fragments/OnboardFragment.kt
+++ b/app/src/main/java/com/woka/onboard/fragments/OnboardFragment.kt
@@ -49,12 +49,19 @@ class OnboardFragment : Fragment() {
}
private fun clickEvents(){
- binding.backBtn.setOnClickListener{
- activity?.onBackPressedDispatcher?.onBackPressed()
- }
- binding.createAccount.setOnClickListener {
- findNavController().navigate(R.id.action_onboardFragment_to_age_select_fragment)
+ binding.apply {
+ backBtn.setOnClickListener{
+ activity?.onBackPressedDispatcher?.onBackPressed()
+ }
+
+ createAccount.setOnClickListener {
+ findNavController().navigate(R.id.action_onboardFragment_to_age_select_fragment)
+ }
+
+ login.setOnClickListener {
+ findNavController().navigate(R.id.action_onboardFragment_to_signInFragment)
+ }
}
}
}
\ No newline at end of file
diff --git a/app/src/main/java/com/woka/onboard/fragments/SelectAvatarFragment.kt b/app/src/main/java/com/woka/onboard/fragments/SelectAvatarFragment.kt
index 20d736e..7c00378 100644
--- a/app/src/main/java/com/woka/onboard/fragments/SelectAvatarFragment.kt
+++ b/app/src/main/java/com/woka/onboard/fragments/SelectAvatarFragment.kt
@@ -5,19 +5,83 @@ import androidx.fragment.app.Fragment
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
-import com.woka.R
+import android.widget.Toast
import com.woka.databinding.FragmentSelectAvatarBinding
+import com.woka.onboard.AvatarAdapter
+import com.woka.onboard.models.Avatar
class SelectAvatarFragment : Fragment() {
private lateinit var binding: FragmentSelectAvatarBinding
+ private var adapter: AvatarAdapter? = null
+
override fun onCreateView(
inflater: LayoutInflater, container: ViewGroup?,
savedInstanceState: Bundle?
): View? {
binding = FragmentSelectAvatarBinding.inflate(inflater, container, false)
-
+ clickEvents()
return binding.root
}
+
+ private fun clickEvents() {
+ binding.apply {
+ backBtn.setOnClickListener {
+ activity?.onBackPressedDispatcher?.onBackPressed()
+ }
+
+ next.setOnClickListener {
+ if (adapter?.selectedPos == null){
+ Toast.makeText(activity, "Please select an avatar", Toast.LENGTH_SHORT).show()
+ return@setOnClickListener
+ }
+ Toast.makeText(activity, "${adapter?.avatarList?.get(adapter?.selectedPos!!)?.id}", Toast.LENGTH_SHORT).show()
+ }
+ }
+ }
+
+ override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
+ super.onViewCreated(view, savedInstanceState)
+ // static avatars
+ adapter = AvatarAdapter(
+ listOf(
+ Avatar(
+ "https://wokastaging.in/storage/app/public/uploads/avtar/avatar1.png?d=1714636151",
+ "1", 1
+ ),
+ Avatar(
+ "https://wokastaging.in/storage/app/public/uploads/avtar/avatar2.png?d=1714636151",
+ "2", 2
+ ),
+ Avatar(
+ "https://wokastaging.in/storage/app/public/uploads/avtar/avatar3.png?d=1714636151",
+ "1", 3
+ ),
+ Avatar(
+ "https://wokastaging.in/storage/app/public/uploads/avtar/avatar4.png?d=1714636151",
+ "2", 4
+ ),
+ Avatar(
+ "https://wokastaging.in/storage/app/public/uploads/avtar/avatar1.png?d=1714636151",
+ "1", 5
+ ),
+ Avatar(
+ "https://wokastaging.in/storage/app/public/uploads/avtar/avatar2.png?d=1714636151",
+ "2", 6
+ ),
+ Avatar(
+ "https://wokastaging.in/storage/app/public/uploads/avtar/avatar3.png?d=1714636151",
+ "1", 7
+ ),
+ Avatar(
+ "https://wokastaging.in/storage/app/public/uploads/avtar/avatar4.png?d=1714636151",
+ "2", 8
+ )
+ )
+ )
+
+ binding.rvAvatar.adapter = adapter
+
+ }
}
\ No newline at end of file
diff --git a/app/src/main/java/com/woka/onboard/fragments/SignInFragment.kt b/app/src/main/java/com/woka/onboard/fragments/SignInFragment.kt
index 258c1ae..a556a36 100644
--- a/app/src/main/java/com/woka/onboard/fragments/SignInFragment.kt
+++ b/app/src/main/java/com/woka/onboard/fragments/SignInFragment.kt
@@ -1,12 +1,16 @@
package com.woka.onboard.fragments
+import android.graphics.Color
import android.os.Bundle
import androidx.fragment.app.Fragment
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
+import android.view.WindowManager
+import androidx.navigation.fragment.findNavController
import com.woka.R
import com.woka.databinding.FragmentSignInBinding
+import com.woka.onboard.fragments.GetEmailFragment.Companion.IS_RESET_PASSWORD_INTENT
class SignInFragment : Fragment() {
@@ -19,6 +23,8 @@ class SignInFragment : Fragment() {
savedInstanceState: Bundle?
): View? {
binding = FragmentSignInBinding.inflate(inflater, container, false)
+ activity?.window?.addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS)
+ activity?.window?.statusBarColor = Color.parseColor("#6ed5fe")
clickEvents()
@@ -27,7 +33,20 @@ class SignInFragment : Fragment() {
private fun clickEvents() {
binding.apply {
+ forgotPassword.setOnClickListener {
+ findNavController().navigate(R.id.action_signInFragment_to_getEmailFragment,
+ Bundle().apply {
+ putBoolean(IS_RESET_PASSWORD_INTENT, true)
+ })
+ }
+ backBtn.setOnClickListener {
+ activity?.onBackPressedDispatcher?.onBackPressed()
+ }
+
+ createAccount.setOnClickListener {
+ findNavController().navigate(R.id.action_signInFragment_to_age_select_fragment)
+ }
}
}
}
\ No newline at end of file
diff --git a/app/src/main/java/com/woka/onboard/models/Avatar.kt b/app/src/main/java/com/woka/onboard/models/Avatar.kt
new file mode 100644
index 0000000..f532047
--- /dev/null
+++ b/app/src/main/java/com/woka/onboard/models/Avatar.kt
@@ -0,0 +1,7 @@
+package com.woka.onboard.models
+
+data class Avatar(
+ val avatar_image_url: String,
+ val avatar_name: String,
+ val id: Int
+)
\ No newline at end of file
diff --git a/app/src/main/res/layout/avatar_viewholder.xml b/app/src/main/res/layout/avatar_viewholder.xml
new file mode 100644
index 0000000..9066863
--- /dev/null
+++ b/app/src/main/res/layout/avatar_viewholder.xml
@@ -0,0 +1,23 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/layout/fragment_get_more_info.xml b/app/src/main/res/layout/fragment_get_more_info.xml
index eec83d4..e11e76b 100644
--- a/app/src/main/res/layout/fragment_get_more_info.xml
+++ b/app/src/main/res/layout/fragment_get_more_info.xml
@@ -202,7 +202,7 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/layout/fragment_select_avatar.xml b/app/src/main/res/layout/fragment_select_avatar.xml
index cc5fb9b..34ea15d 100644
--- a/app/src/main/res/layout/fragment_select_avatar.xml
+++ b/app/src/main/res/layout/fragment_select_avatar.xml
@@ -15,7 +15,7 @@
android:src="@drawable/ic_arrow_back"
app:layout_constraintBottom_toBottomOf="@+id/title"
app:layout_constraintEnd_toStartOf="@+id/title"
- app:layout_constraintHorizontal_bias="0.30"
+ app:layout_constraintHorizontal_bias="0.40"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="@+id/title"
app:tint="@color/color_primary" />
@@ -40,6 +40,7 @@
app:layout_constraintTop_toTopOf="parent" />