Avatars Screen

Login flow ui
forget password ui
This commit is contained in:
2024-05-02 19:31:36 +05:30
parent ddf5071d1f
commit 43565249d8
20 changed files with 782 additions and 35 deletions

View File

@@ -0,0 +1,61 @@
package com.woka.onboard
import android.view.LayoutInflater
import android.view.ViewGroup
import androidx.recyclerview.widget.RecyclerView
import androidx.recyclerview.widget.RecyclerView.ViewHolder
import com.bumptech.glide.Glide
import com.woka.R
import com.woka.databinding.AvatarViewholderBinding
import com.woka.onboard.models.Avatar
class AvatarAdapter(val avatarList: List<Avatar>) :
RecyclerView.Adapter<AvatarAdapter.AvatarViewHolder>() {
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
}
}
}

View File

@@ -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)
}
}
}
}
}

View File

@@ -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)

View File

@@ -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)
}
}
}

View File

@@ -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()
}
}
}
}

View File

@@ -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)
}
}
}
}

View File

@@ -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
}
}

View File

@@ -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)
}
}
}
}

View File

@@ -0,0 +1,7 @@
package com.woka.onboard.models
data class Avatar(
val avatar_image_url: String,
val avatar_name: String,
val id: Int
)