From e113606649d3b9a8253ccc15db4c12fe7e64305f Mon Sep 17 00:00:00 2001 From: AdityaGaikwad Date: Thu, 9 May 2024 20:35:00 +0530 Subject: [PATCH] Login Api and login proceed api integration DecisionDialog implemented For password api integration started --- .../com/woka/networking/RetrofitHelper.kt | 1 - .../java/com/woka/onboard/ChildAdapter.kt | 2 +- .../onboard/fragments/GetMoreInfoFragment.kt | 5 + .../woka/onboard/fragments/SignInFragment.kt | 46 +++++++- .../models/ForgotPasswrodOTPResponse.kt | 5 + .../woka/onboard/mvvm/OnboardApiService.kt | 4 + .../woka/onboard/mvvm/OnboardRepository.kt | 11 ++ .../java/com/woka/utils/DecisionDialog.kt | 91 +++++++++++++++ .../main/java/com/woka/utils/ProgressView.kt | 14 ++- app/src/main/res/layout/fragment_get_code.xml | 4 + .../main/res/layout/fragment_get_email.xml | 4 +- app/src/main/res/layout/fragment_sign_up.xml | 10 +- .../res/layout/layout_decision_dialog.xml | 106 ++++++++++++++++++ app/src/main/res/values-hi/strings.xml | 5 + app/src/main/res/values/strings.xml | 7 ++ 15 files changed, 294 insertions(+), 21 deletions(-) create mode 100644 app/src/main/java/com/woka/onboard/models/ForgotPasswrodOTPResponse.kt create mode 100644 app/src/main/java/com/woka/utils/DecisionDialog.kt create mode 100644 app/src/main/res/layout/layout_decision_dialog.xml diff --git a/app/src/main/java/com/woka/networking/RetrofitHelper.kt b/app/src/main/java/com/woka/networking/RetrofitHelper.kt index 5fed8fe..87ac32a 100644 --- a/app/src/main/java/com/woka/networking/RetrofitHelper.kt +++ b/app/src/main/java/com/woka/networking/RetrofitHelper.kt @@ -60,7 +60,6 @@ object RetrofitHelper { // api caller suspend fun handleApiCall(apiCall: suspend () -> Response>): ApiResult { return try { - delay(3000) val response = apiCall() // this api call can throw some exception handleApiResponse(response) // handling the response } catch (e: UnknownHostException) { diff --git a/app/src/main/java/com/woka/onboard/ChildAdapter.kt b/app/src/main/java/com/woka/onboard/ChildAdapter.kt index 59fd3e5..20cdd66 100644 --- a/app/src/main/java/com/woka/onboard/ChildAdapter.kt +++ b/app/src/main/java/com/woka/onboard/ChildAdapter.kt @@ -28,7 +28,7 @@ class ChildAdapter(private val childList: List) : RecyclerView.Adapter { progressView.hide() - it.data?.result?.let { - if (it.already_logged_in){ - Toast.makeText(activity, "Already logged in", Toast.LENGTH_SHORT).show() + it.data?.result?.let {data-> + if (data.already_logged_in){ + dialog.show() }else{ - Toast.makeText(activity, "Log in successful", Toast.LENGTH_SHORT).show() + Toast.makeText(activity, "${it.message}", Toast.LENGTH_SHORT).show() } } } null -> {} } } + + viewModel.loginProceedData.observe(viewLifecycleOwner){ + when(it){ + is ApiResult.Error -> { + progressView.hide() + Toast.makeText(activity, "${it.errorMessage}", Toast.LENGTH_SHORT).show() + } + is ApiResult.Loading -> { + progressView.show() + } + is ApiResult.Success -> { + progressView.hide() + Toast.makeText(activity, "${it.message}", Toast.LENGTH_SHORT).show() + } + null -> {} + } + } } override fun onDestroyView() { @@ -105,7 +139,7 @@ class SignInFragment : Fragment() { } viewModel.login(username.text.toString(), password.toString()) - }?:Toast.makeText(activity, "Something went wrong!", Toast.LENGTH_SHORT).show() + }?:Toast.makeText(activity, getString(R.string.something_went_wrong), Toast.LENGTH_SHORT).show() } } } diff --git a/app/src/main/java/com/woka/onboard/models/ForgotPasswrodOTPResponse.kt b/app/src/main/java/com/woka/onboard/models/ForgotPasswrodOTPResponse.kt new file mode 100644 index 0000000..9f68822 --- /dev/null +++ b/app/src/main/java/com/woka/onboard/models/ForgotPasswrodOTPResponse.kt @@ -0,0 +1,5 @@ +package com.woka.onboard.models + +data class ForgotPasswrodOTPResponse( + val email: String? +) \ No newline at end of file diff --git a/app/src/main/java/com/woka/onboard/mvvm/OnboardApiService.kt b/app/src/main/java/com/woka/onboard/mvvm/OnboardApiService.kt index ad2ee59..7018145 100644 --- a/app/src/main/java/com/woka/onboard/mvvm/OnboardApiService.kt +++ b/app/src/main/java/com/woka/onboard/mvvm/OnboardApiService.kt @@ -3,6 +3,7 @@ package com.woka.onboard.mvvm import com.woka.networking.ApiResponse import com.woka.onboard.models.AvatarList import com.woka.onboard.models.ChildListResponse +import com.woka.onboard.models.ForgotPasswrodOTPResponse import com.woka.onboard.models.InterestTopicResponse import com.woka.onboard.models.LoginResponse import com.woka.onboard.models.RegisterRequestData @@ -46,4 +47,7 @@ interface OnboardApiService { @POST("interest_topic_listing") suspend fun getInterestedTopics(): Response> + @POST("forgot_password_send_otp") + suspend fun forgotPasswordSendOTP(@Body body: FormBody): Response> + } \ No newline at end of file diff --git a/app/src/main/java/com/woka/onboard/mvvm/OnboardRepository.kt b/app/src/main/java/com/woka/onboard/mvvm/OnboardRepository.kt index a1c7886..fcd37b4 100644 --- a/app/src/main/java/com/woka/onboard/mvvm/OnboardRepository.kt +++ b/app/src/main/java/com/woka/onboard/mvvm/OnboardRepository.kt @@ -6,6 +6,7 @@ import com.woka.networking.RetrofitHelper.handleApiCall import com.woka.networking.RetrofitHelper.handleApiResponse import com.woka.onboard.models.AvatarList import com.woka.onboard.models.ChildListResponse +import com.woka.onboard.models.ForgotPasswrodOTPResponse import com.woka.onboard.models.InterestTopicResponse import com.woka.onboard.models.LoginResponse import com.woka.onboard.models.RegisterRequestData @@ -114,4 +115,14 @@ class OnboardRepository(private val apiService: OnboardApiService) { } } + suspend fun forgotPasswordSendOTP(userName: String): ApiResult{ + return handleApiCall { + apiService.forgotPasswordSendOTP( + FormBody.Builder() + .add("username", userName) + .build() + ) + } + } + } \ No newline at end of file diff --git a/app/src/main/java/com/woka/utils/DecisionDialog.kt b/app/src/main/java/com/woka/utils/DecisionDialog.kt new file mode 100644 index 0000000..d8a0220 --- /dev/null +++ b/app/src/main/java/com/woka/utils/DecisionDialog.kt @@ -0,0 +1,91 @@ +package com.woka.utils + +import android.app.Dialog +import android.content.Context +import android.graphics.Color +import android.graphics.drawable.ColorDrawable +import android.graphics.drawable.InsetDrawable +import android.view.LayoutInflater +import android.view.View.VISIBLE +import android.view.WindowManager +import com.woka.databinding.LayoutDecisionDialogBinding + +class DecisionDialog(context: Context) { + private val binding: LayoutDecisionDialogBinding + + private val dialog: Dialog + + var title: String + get() = binding.title.text.toString() + set(value) { + binding.title.text = value + } + + var message: String + get() = binding.message.text.toString() + set(value) { + binding.message.text = value + } + + init { + binding = LayoutDecisionDialogBinding.inflate( + LayoutInflater.from(context) + ) + + dialog = Dialog(context) + dialog.setContentView(binding.getRoot()) + + try { + val back = ColorDrawable(Color.TRANSPARENT) + val inset = InsetDrawable(back, 50) + dialog.window!!.setBackgroundDrawable(inset) + } catch (e: Exception) { + // do nothing + } + + try { + val layoutParams = dialog.window!!.attributes + layoutParams.width = WindowManager.LayoutParams.MATCH_PARENT + layoutParams.height = WindowManager.LayoutParams.WRAP_CONTENT + dialog.window!!.setAttributes(layoutParams) + } catch (e: Exception) { + // do nothing + } + } + + fun setPositiveButton(text: String, click: () -> Unit){ + binding.positiveBtn.apply { + visibility = VISIBLE + this.text = text + setOnClickListener { + click() + dialog.dismiss() + } + } + } + + fun setNegativeButton(text: String, click: (() -> Unit)? = null){ + binding.negativeBtn.apply { + visibility = VISIBLE + this.text = text + setOnClickListener { + click?.invoke() + dialog.dismiss() + } + } + } + + fun show(titleTxt: String, messageTxt: String): DecisionDialog{ + binding.apply { + title.text = titleTxt + message.text = messageTxt + }.also { + show() + } + return this + } + + fun show() = dialog.show() + + fun dismiss() = dialog.dismiss() +} \ No newline at end of file diff --git a/app/src/main/java/com/woka/utils/ProgressView.kt b/app/src/main/java/com/woka/utils/ProgressView.kt index 9454215..376c334 100644 --- a/app/src/main/java/com/woka/utils/ProgressView.kt +++ b/app/src/main/java/com/woka/utils/ProgressView.kt @@ -27,15 +27,17 @@ class ProgressView(context: Context, title: String? = null): ContextWrapper(cont }?: GONE } - fun show(title: String? = null) { - binding.title.visibility = title?.let { - binding.title.text = it - VISIBLE - }?: GONE + fun show(title: String) { + binding.title.apply{ + text = title + visibility = VISIBLE + } - dialog.show() + show() } + fun show() = dialog.show() + fun hide() = dialog.dismiss() fun setTitle(title: String) { diff --git a/app/src/main/res/layout/fragment_get_code.xml b/app/src/main/res/layout/fragment_get_code.xml index b35e283..a2008b4 100644 --- a/app/src/main/res/layout/fragment_get_code.xml +++ b/app/src/main/res/layout/fragment_get_code.xml @@ -108,6 +108,7 @@ android:gravity="center" android:textSize="@dimen/_14ssp" + android:hint="@string/otp_hint" android:textColorHint="@android:color/darker_gray" android:background="@drawable/otp_et_bg" @@ -138,6 +139,7 @@ android:gravity="center" android:textSize="@dimen/_14ssp" + android:hint="@string/otp_hint" android:textColorHint="@android:color/darker_gray" android:background="@drawable/otp_et_bg" @@ -168,6 +170,7 @@ android:gravity="center" android:textSize="@dimen/_14ssp" + android:hint="@string/otp_hint" android:textColorHint="@android:color/darker_gray" android:background="@drawable/otp_et_bg" @@ -197,6 +200,7 @@ android:gravity="center" android:textSize="@dimen/_14ssp" + android:hint="@string/otp_hint" android:textColorHint="@android:color/darker_gray" android:background="@drawable/otp_et_bg" diff --git a/app/src/main/res/layout/fragment_get_email.xml b/app/src/main/res/layout/fragment_get_email.xml index 8ac52df..1765dbc 100644 --- a/app/src/main/res/layout/fragment_get_email.xml +++ b/app/src/main/res/layout/fragment_get_email.xml @@ -64,7 +64,7 @@ android:text="@string/can_we_have_your_email" android:fontFamily="@font/exo_2_bold" - android:textSize="@dimen/_14ssp" + android:textSize="@dimen/_12ssp" android:textColor="@color/color_primary" android:textAlignment="center" @@ -94,7 +94,7 @@ android:background="@drawable/round_25_shadow" android:layout_marginHorizontal="15dp" - android:layout_marginTop="15dp" + android:layout_marginTop="10dp" android:layout_marginBottom="15dp" android:elevation="5dp" diff --git a/app/src/main/res/layout/fragment_sign_up.xml b/app/src/main/res/layout/fragment_sign_up.xml index c702679..bfa86b3 100644 --- a/app/src/main/res/layout/fragment_sign_up.xml +++ b/app/src/main/res/layout/fragment_sign_up.xml @@ -103,7 +103,7 @@ android:background="@drawable/round_25_shadow" android:layout_marginHorizontal="15dp" - android:layout_marginTop="15dp" + android:layout_marginTop="10dp" android:layout_marginBottom="15dp" android:elevation="5dp" @@ -112,7 +112,7 @@ android:paddingVertical="15dp" android:maxLength="16" - android:digits="@string/alphanumeric" + android:digits="@string/alphanumeric_special_characters_without_space" /> @@ -148,7 +148,7 @@ android:background="@drawable/round_25_shadow" android:layout_marginHorizontal="15dp" - android:layout_marginTop="15dp" + android:layout_marginTop="10dp" android:layout_marginBottom="15dp" android:elevation="5dp" @@ -179,8 +179,8 @@ android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_marginHorizontal="15dp" - android:layout_marginVertical="15dp" - app:cardElevation="5dp" + android:layout_marginVertical="10dp" + app:cardElevation="3dp" app:cardCornerRadius="25dp" > diff --git a/app/src/main/res/layout/layout_decision_dialog.xml b/app/src/main/res/layout/layout_decision_dialog.xml new file mode 100644 index 0000000..49c5ba3 --- /dev/null +++ b/app/src/main/res/layout/layout_decision_dialog.xml @@ -0,0 +1,106 @@ + + + + + + + + + + + +