Browse Source

Implemented MVVM structure

PankajBranch
Hemant Khadase 2 years ago
parent
commit
93c2472300
21 changed files with 216 additions and 76 deletions
  1. +3
    -0
      app/src/GetAllRates.kt
  2. +7
    -0
      app/src/ROIDatalist.kt
  3. +7
    -0
      app/src/Response.kt
  4. +2
    -2
      app/src/main/java/com/nivesh/production/bajajfd/api/ApiClient.kt
  5. +0
    -36
      app/src/main/java/com/nivesh/production/bajajfd/interface/ApiInterface.kt
  6. +45
    -0
      app/src/main/java/com/nivesh/production/bajajfd/interfaces/ApiInterface.kt
  7. +1
    -1
      app/src/main/java/com/nivesh/production/bajajfd/interfaces/BajajFDInterface.kt
  8. +9
    -0
      app/src/main/java/com/nivesh/production/bajajfd/model/GetRatesRequest.kt
  9. +3
    -0
      app/src/main/java/com/nivesh/production/bajajfd/model/GetRatesResponse.kt
  10. +7
    -0
      app/src/main/java/com/nivesh/production/bajajfd/model/ROIDataList.kt
  11. +7
    -0
      app/src/main/java/com/nivesh/production/bajajfd/model/Response.kt
  12. +9
    -0
      app/src/main/java/com/nivesh/production/bajajfd/repositories/MainRepository.kt
  13. +20
    -6
      app/src/main/java/com/nivesh/production/bajajfd/ui/activity/BajajFdMainActivity.kt
  14. +1
    -1
      app/src/main/java/com/nivesh/production/bajajfd/ui/fragment/StepFiveBajajFDFragment.kt
  15. +1
    -1
      app/src/main/java/com/nivesh/production/bajajfd/ui/fragment/StepFourBajajFDFragment.kt
  16. +48
    -12
      app/src/main/java/com/nivesh/production/bajajfd/ui/fragment/StepOneBajajFDFragment.kt
  17. +1
    -1
      app/src/main/java/com/nivesh/production/bajajfd/ui/fragment/StepThreeBajajFDFragment.kt
  18. +1
    -1
      app/src/main/java/com/nivesh/production/bajajfd/ui/fragment/StepTwoBajajFDFragment.kt
  19. +15
    -0
      app/src/main/java/com/nivesh/production/bajajfd/ui/providerfactory/GetRatesModelProviderFactory.kt
  20. +1
    -14
      app/src/main/java/com/nivesh/production/bajajfd/util/Constants.kt
  21. +28
    -1
      app/src/main/java/com/nivesh/production/bajajfd/viewModel/StepOneViewModel.kt

+ 3
- 0
app/src/GetAllRates.kt View File

@ -0,0 +1,3 @@
data class GetAllRates(
val Response: Response
)

+ 7
- 0
app/src/ROIDatalist.kt View File

@ -0,0 +1,7 @@
data class ROIDatalist(
val Frequency: String,
val Provider: String,
val ROI: Double,
val Tenure: String,
val Type: String
)

+ 7
- 0
app/src/Response.kt View File

@ -0,0 +1,7 @@
data class Response(
val Errors: List<Any>,
val Message: String,
val ROIDatalist: List<ROIDatalist>,
val Status: String,
val StatusCode: Int
)

+ 2
- 2
app/src/main/java/com/nivesh/production/bajajfd/api/ApiClient.kt View File

@ -1,6 +1,6 @@
package com.nivesh.production.bajajfd.api
import com.nivesh.production.bajajfd.`interface`.ApiInterface
import com.nivesh.production.bajajfd.interfaces.ApiInterface
import com.nivesh.production.bajajfd.util.Constants.Companion.BASE_URL
import okhttp3.OkHttpClient
import okhttp3.logging.HttpLoggingInterceptor
@ -26,7 +26,7 @@ class ApiClient {
.client(client)
.build()
}
private val getApiClient by lazy {
val getApiClient by lazy {
client.create(ApiInterface::class.java)
}
}

+ 0
- 36
app/src/main/java/com/nivesh/production/bajajfd/interface/ApiInterface.kt View File

@ -1,36 +0,0 @@
package com.nivesh.production.bajajfd.`interface`
import okhttp3.RequestBody
import retrofit2.http.Body
import retrofit2.http.POST
interface ApiInterface {
@POST("GetRates")
suspend fun getRates(@Body requestBody: RequestBody)
@POST("CheckFDCKYC")
suspend fun checkFDKYC(@Body requestBody: RequestBody)
@POST("CreateFDApplication")
suspend fun createFDApp(@Body requestBody: RequestBody)
@POST("DocumentsUpload")
suspend fun documentsUpload(@Body requestBody: RequestBody)
@POST("SaveFDOtherData")
suspend fun saveFDOtherData(@Body requestBody: RequestBody)
@POST("GetFDDetails")
suspend fun getFDDetails(@Body requestBody: RequestBody)
@POST("UpdateFDPaymentStatus")
suspend fun updateFDPaymentStatus(@Body requestBody: RequestBody)
@POST("FinaliseFD")
suspend fun finaliseFD(@Body requestBody: RequestBody)
@POST("FinaliseKYC")
suspend fun finaliseKYC(@Body requestBody: RequestBody)
}

+ 45
- 0
app/src/main/java/com/nivesh/production/bajajfd/interfaces/ApiInterface.kt View File

@ -0,0 +1,45 @@
package com.nivesh.production.bajajfd.interfaces
import GetRatesResponse
import com.nivesh.production.bajajfd.model.GetRatesRequest
import okhttp3.RequestBody
import retrofit2.Response
import retrofit2.http.Body
import retrofit2.http.POST
interface ApiInterface {
@POST("GetRates")
suspend fun getRates(@Body getRatesRequest: GetRatesRequest): Response<GetRatesResponse>
@POST("CheckFDCKYC")
suspend fun checkFDKYC(@Body requestBody: RequestBody) : Response<GetRatesResponse>
@POST("CreateFDApplication")
suspend fun createFDApp(@Body requestBody: RequestBody): Response<GetRatesResponse>
@POST("DocumentsUpload")
suspend fun documentsUpload(@Body requestBody: RequestBody): Response<GetRatesResponse>
@POST("SaveFDOtherData")
suspend fun saveFDOtherData(@Body requestBody: RequestBody): Response<GetRatesResponse>
@POST("GetFDDetails")
suspend fun getFDDetails(@Body requestBody: RequestBody): Response<GetRatesResponse>
@POST("UpdateFDPaymentStatus")
suspend fun updateFDPaymentStatus(@Body requestBody: RequestBody): Response<GetRatesResponse>
@POST("FinaliseFD")
suspend fun finaliseFD(@Body requestBody: RequestBody): Response<GetRatesResponse>
@POST("FinaliseKYC")
suspend fun finaliseKYC(@Body requestBody: RequestBody): Response<GetRatesResponse>
@POST("PaymentRequery")
suspend fun paymentReQuery(@Body requestBody: RequestBody): Response<GetRatesResponse>
@POST("GetCodes")
suspend fun getCodes(@Body requestBody: RequestBody): Response<GetRatesResponse>
}

app/src/main/java/com/nivesh/production/bajajfd/interface/BajajFDInterface.kt → app/src/main/java/com/nivesh/production/bajajfd/interfaces/BajajFDInterface.kt View File

@ -1,4 +1,4 @@
package com.nivesh.production.bajajfd.`interface`
package com.nivesh.production.bajajfd.interfaces
interface BajajFDInterface {
fun stepOneApi(data: String?)

+ 9
- 0
app/src/main/java/com/nivesh/production/bajajfd/model/GetRatesRequest.kt View File

@ -0,0 +1,9 @@
package com.nivesh.production.bajajfd.model
import com.google.gson.annotations.SerializedName
data class GetRatesRequest(
@SerializedName("FDProvider") var fdProvider: String? = null,
@SerializedName("Frequency") var frequency: String? = null,
@SerializedName("Type") var type: String? = null
)

+ 3
- 0
app/src/main/java/com/nivesh/production/bajajfd/model/GetRatesResponse.kt View File

@ -0,0 +1,3 @@
data class GetRatesResponse(
val Response: Response
)

+ 7
- 0
app/src/main/java/com/nivesh/production/bajajfd/model/ROIDataList.kt View File

@ -0,0 +1,7 @@
data class ROIDatalist(
val Frequency: String,
val Provider: String,
val ROI: Double,
val Tenure: String,
val Type: String
)

+ 7
- 0
app/src/main/java/com/nivesh/production/bajajfd/model/Response.kt View File

@ -0,0 +1,7 @@
data class Response(
val Errors: List<Any>,
val Message: String,
val ROIDatalist: List<ROIDatalist>,
val Status: String,
val StatusCode: Int
)

+ 9
- 0
app/src/main/java/com/nivesh/production/bajajfd/repositories/MainRepository.kt View File

@ -0,0 +1,9 @@
package com.nivesh.production.bajajfd.repositories
import com.nivesh.production.bajajfd.interfaces.ApiInterface
import com.nivesh.production.bajajfd.model.GetRatesRequest
class MainRepository constructor(private val apiInterface: ApiInterface) {
suspend fun getAllRatesResponse(getRatesRequest: GetRatesRequest) =
apiInterface.getRates(getRatesRequest)
}

+ 20
- 6
app/src/main/java/com/nivesh/production/bajajfd/ui/activity/BajajFdMainActivity.kt View File

@ -3,28 +3,41 @@ package com.nivesh.production.bajajfd.ui.activity
import android.graphics.Color
import android.graphics.drawable.Drawable
import android.graphics.drawable.GradientDrawable
import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import android.util.Log
import androidx.appcompat.app.AppCompatActivity
import androidx.lifecycle.ViewModelProvider
import androidx.viewpager.widget.ViewPager
import com.nivesh.production.bajajfd.`interface`.BajajFDInterface
import com.nivesh.production.bajajfd.adapter.SectionsPagerAdapter
import com.nivesh.production.bajajfd.api.ApiClient
import com.nivesh.production.bajajfd.databinding.ActivityBajajFdBinding
import com.nivesh.production.bajajfd.interfaces.BajajFDInterface
import com.nivesh.production.bajajfd.repositories.MainRepository
import com.nivesh.production.bajajfd.ui.fragment.*
import com.nivesh.production.bajajfd.ui.providerfactory.GetRatesModelProviderFactory
import com.nivesh.production.bajajfd.util.Colors
import com.nivesh.production.bajajfd.viewModel.StepOneViewModel
class BajajFdMainActivity : AppCompatActivity(),BajajFDInterface {
class BajajFdMainActivity : AppCompatActivity(), BajajFDInterface {
private lateinit var binding: ActivityBajajFdBinding
lateinit var viewModel: StepOneViewModel
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
init()
}
private fun init(){
private fun init() {
binding = ActivityBajajFdBinding.inflate(layoutInflater)
setContentView(binding.root)
//start Repository
val viewModelProviderFactory = GetRatesModelProviderFactory(MainRepository(ApiClient.getApiClient))
viewModel = ViewModelProvider(this, viewModelProviderFactory)[StepOneViewModel::class.java]
binding.imgBack.setOnClickListener {
finish()
}
@ -33,7 +46,8 @@ class BajajFdMainActivity : AppCompatActivity(),BajajFDInterface {
setBackground(selectedShape(), defaultShape(), defaultShape(), defaultShape())
// set viewPager
val sectionsPagerAdapter = SectionsPagerAdapter(this@BajajFdMainActivity, supportFragmentManager)
val sectionsPagerAdapter =
SectionsPagerAdapter(this@BajajFdMainActivity, supportFragmentManager)
val viewPager: ViewPager = binding.viewPager
sectionsPagerAdapter.addFragment(StepOneBajajFDFragment.getInstance(this@BajajFdMainActivity))
sectionsPagerAdapter.addFragment(StepTwoBajajFDFragment.getInstance(this@BajajFdMainActivity))
@ -86,7 +100,7 @@ class BajajFdMainActivity : AppCompatActivity(),BajajFDInterface {
defaultShape()
)
}
4 ->{
4 -> {
setBackground(
selectedShape(),
selectedShape(),


+ 1
- 1
app/src/main/java/com/nivesh/production/bajajfd/ui/fragment/StepFiveBajajFDFragment.kt View File

@ -6,7 +6,7 @@ import android.view.View
import android.view.ViewGroup
import androidx.fragment.app.Fragment
import androidx.lifecycle.ViewModelProvider
import com.nivesh.production.bajajfd.`interface`.BajajFDInterface
import com.nivesh.production.bajajfd.interfaces.BajajFDInterface
import com.nivesh.production.bajajfd.databinding.FragmentBajajfdStepFiveBinding
import com.nivesh.production.bajajfd.viewModel.StepFiveViewModel


+ 1
- 1
app/src/main/java/com/nivesh/production/bajajfd/ui/fragment/StepFourBajajFDFragment.kt View File

@ -6,7 +6,7 @@ import android.view.View
import android.view.ViewGroup
import androidx.fragment.app.Fragment
import androidx.lifecycle.ViewModelProvider
import com.nivesh.production.bajajfd.`interface`.BajajFDInterface
import com.nivesh.production.bajajfd.interfaces.BajajFDInterface
import com.nivesh.production.bajajfd.databinding.FragmentBajajfdStepFourBinding
import com.nivesh.production.bajajfd.viewModel.StepFourViewModel


+ 48
- 12
app/src/main/java/com/nivesh/production/bajajfd/ui/fragment/StepOneBajajFDFragment.kt View File

@ -1,13 +1,17 @@
package com.nivesh.production.bajajfd.ui.fragment
import androidx.lifecycle.ViewModelProvider
import GetRatesResponse
import android.os.Bundle
import androidx.fragment.app.Fragment
import android.util.Log
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import com.nivesh.production.bajajfd.`interface`.BajajFDInterface
import androidx.fragment.app.Fragment
import com.nivesh.production.bajajfd.databinding.FragmentBajajfdStepOneBinding
import com.nivesh.production.bajajfd.interfaces.BajajFDInterface
import com.nivesh.production.bajajfd.model.GetRatesRequest
import com.nivesh.production.bajajfd.ui.activity.BajajFdMainActivity
import com.nivesh.production.bajajfd.util.Resource
import com.nivesh.production.bajajfd.viewModel.StepOneViewModel
class StepOneBajajFDFragment : Fragment() {
@ -18,7 +22,7 @@ class StepOneBajajFDFragment : Fragment() {
private lateinit var bajajFDInterface: BajajFDInterface
companion object {
fun getInstance(fdInterface: BajajFDInterface): StepOneBajajFDFragment{
fun getInstance(fdInterface: BajajFDInterface): StepOneBajajFDFragment {
val stepStartFragment = StepOneBajajFDFragment()
stepStartFragment.setApi(fdInterface)
return stepStartFragment
@ -29,20 +33,42 @@ class StepOneBajajFDFragment : Fragment() {
bajajFDInterface = bajajFDInterfaces
}
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
stepOneViewModel = ViewModelProvider(this)[StepOneViewModel::class.java].apply {
}
}
override fun onCreateView(
inflater: LayoutInflater, container: ViewGroup?,
savedInstanceState: Bundle?
): View {
_binding = FragmentBajajfdStepOneBinding.inflate(inflater,container,false)
_binding = FragmentBajajfdStepOneBinding.inflate(inflater, container, false)
val root = binding.root
val getRatesRequest = GetRatesRequest()
getRatesRequest.fdProvider = ""
getRatesRequest.frequency = ""
getRatesRequest.type = ""
stepOneViewModel.getAllRates(getRatesRequest)
stepOneViewModel = (activity as BajajFdMainActivity).viewModel
stepOneViewModel.getRatesMutableData.observe(viewLifecycleOwner) { response ->
when (response) {
is Resource.Success -> {
response.data?.Response?.StatusCode?.let { code ->
when (code) {
200 -> getRatesData(response.data)
650 -> refreshToken()
else -> {}
}
}
}
is Resource.Error -> {
response.message?.let { message ->
Log.e(" ", "An error occurred:$message")
}
}
is Resource.Loading -> {
}
}
}
// binding.txtInterestTenure.setOnClickListener {
//
// }
@ -54,6 +80,16 @@ class StepOneBajajFDFragment : Fragment() {
return root
}
private fun refreshToken() {
}
private fun getRatesData(getRatesResponse: GetRatesResponse) {
}
override fun onDestroyView() {
super.onDestroyView()
_binding = null


+ 1
- 1
app/src/main/java/com/nivesh/production/bajajfd/ui/fragment/StepThreeBajajFDFragment.kt View File

@ -6,7 +6,7 @@ import android.view.View
import android.view.ViewGroup
import androidx.fragment.app.Fragment
import androidx.lifecycle.ViewModelProvider
import com.nivesh.production.bajajfd.`interface`.BajajFDInterface
import com.nivesh.production.bajajfd.interfaces.BajajFDInterface
import com.nivesh.production.bajajfd.databinding.FragmentBajajfdStepThreeBinding
import com.nivesh.production.bajajfd.viewModel.StepThreeViewModel


+ 1
- 1
app/src/main/java/com/nivesh/production/bajajfd/ui/fragment/StepTwoBajajFDFragment.kt View File

@ -6,7 +6,7 @@ import android.view.View
import android.view.ViewGroup
import androidx.fragment.app.Fragment
import androidx.lifecycle.ViewModelProvider
import com.nivesh.production.bajajfd.`interface`.BajajFDInterface
import com.nivesh.production.bajajfd.interfaces.BajajFDInterface
import com.nivesh.production.bajajfd.databinding.FragmentBajajfdStepTwoBinding
import com.nivesh.production.bajajfd.viewModel.StepTwoViewModel


+ 15
- 0
app/src/main/java/com/nivesh/production/bajajfd/ui/providerfactory/GetRatesModelProviderFactory.kt View File

@ -0,0 +1,15 @@
package com.nivesh.production.bajajfd.ui.providerfactory
import androidx.lifecycle.ViewModel
import androidx.lifecycle.ViewModelProvider
import com.nivesh.production.bajajfd.repositories.MainRepository
import com.nivesh.production.bajajfd.viewModel.StepOneViewModel
class GetRatesModelProviderFactory (val mainRepository: MainRepository) : ViewModelProvider.Factory {
// @Override fun <T : ViewModel?> create(modelClass: Class<T>): T {
// return StepOneViewModel(mainRepository) as T
// }
override fun <T : ViewModel> create(modelClass: Class<T>): T {
return StepOneViewModel(mainRepository) as T
}
}

+ 1
- 14
app/src/main/java/com/nivesh/production/bajajfd/util/Constants.kt View File

@ -52,21 +52,7 @@ class Constants() {
}
return false
}
//phone number
private fun checkValidPhoneNumber(phoneText: String?): String? {
if (phoneText != null) {
if(!phoneText.matches(".*[0-9].*".toRegex())){
return "Must be all Digits"
}
}
if (phoneText != null) {
if(phoneText.length != 10){
return "Must be 10 Digits"
}
}
return null
}
//valid email check
private fun isValidEmail(emailText:String?): String? {
@ -117,5 +103,6 @@ class Constants() {
//returns a boolean value
return match.matches()
}
}
}

+ 28
- 1
app/src/main/java/com/nivesh/production/bajajfd/viewModel/StepOneViewModel.kt View File

@ -1,7 +1,34 @@
package com.nivesh.production.bajajfd.viewModel
import GetRatesResponse
import Response
import androidx.lifecycle.MutableLiveData
import androidx.lifecycle.ViewModel
import androidx.lifecycle.viewModelScope
import com.nivesh.production.bajajfd.model.GetRatesRequest
import com.nivesh.production.bajajfd.repositories.MainRepository
import com.nivesh.production.bajajfd.util.Resource
import kotlinx.coroutines.launch
class StepOneViewModel : ViewModel() {
class StepOneViewModel(private val mainRepository: MainRepository) : ViewModel() {
// TODO: Implement the ViewModel
// var getRateResponse: GetRatesResponse? = null
val getRatesMutableData: MutableLiveData<Resource<GetRatesResponse>> = MutableLiveData()
fun getAllRates(getRatesRequest: GetRatesRequest) = viewModelScope.launch {
getRatesMutableData.postValue(Resource.Loading())
val response = mainRepository.getAllRatesResponse(getRatesRequest)
getRatesMutableData.postValue(handleRatesResponse(response))
}
private fun handleRatesResponse(response: retrofit2.Response<GetRatesResponse>): Resource<GetRatesResponse> {
if (response.isSuccessful) {
response.body()?.let { resultResponse ->
return Resource.Success(resultResponse)
}
}
return Resource.Error(response.message())
}
}

Loading…
Cancel
Save

Powered by TurnKey Linux.