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 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 com.nivesh.production.bajajfd.util.Constants.Companion.BASE_URL
import okhttp3.OkHttpClient import okhttp3.OkHttpClient
import okhttp3.logging.HttpLoggingInterceptor import okhttp3.logging.HttpLoggingInterceptor
@ -26,7 +26,7 @@ class ApiClient {
.client(client) .client(client)
.build() .build()
} }
private val getApiClient by lazy {
val getApiClient by lazy {
client.create(ApiInterface::class.java) 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 { interface BajajFDInterface {
fun stepOneApi(data: String?) 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.Color
import android.graphics.drawable.Drawable import android.graphics.drawable.Drawable
import android.graphics.drawable.GradientDrawable import android.graphics.drawable.GradientDrawable
import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle import android.os.Bundle
import android.util.Log import android.util.Log
import androidx.appcompat.app.AppCompatActivity
import androidx.lifecycle.ViewModelProvider
import androidx.viewpager.widget.ViewPager import androidx.viewpager.widget.ViewPager
import com.nivesh.production.bajajfd.`interface`.BajajFDInterface
import com.nivesh.production.bajajfd.adapter.SectionsPagerAdapter 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.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.fragment.*
import com.nivesh.production.bajajfd.ui.providerfactory.GetRatesModelProviderFactory
import com.nivesh.production.bajajfd.util.Colors 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 private lateinit var binding: ActivityBajajFdBinding
lateinit var viewModel: StepOneViewModel
override fun onCreate(savedInstanceState: Bundle?) { override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState) super.onCreate(savedInstanceState)
init() init()
} }
private fun init(){
private fun init() {
binding = ActivityBajajFdBinding.inflate(layoutInflater) binding = ActivityBajajFdBinding.inflate(layoutInflater)
setContentView(binding.root) setContentView(binding.root)
//start Repository
val viewModelProviderFactory = GetRatesModelProviderFactory(MainRepository(ApiClient.getApiClient))
viewModel = ViewModelProvider(this, viewModelProviderFactory)[StepOneViewModel::class.java]
binding.imgBack.setOnClickListener { binding.imgBack.setOnClickListener {
finish() finish()
} }
@ -33,7 +46,8 @@ class BajajFdMainActivity : AppCompatActivity(),BajajFDInterface {
setBackground(selectedShape(), defaultShape(), defaultShape(), defaultShape()) setBackground(selectedShape(), defaultShape(), defaultShape(), defaultShape())
// set viewPager // set viewPager
val sectionsPagerAdapter = SectionsPagerAdapter(this@BajajFdMainActivity, supportFragmentManager)
val sectionsPagerAdapter =
SectionsPagerAdapter(this@BajajFdMainActivity, supportFragmentManager)
val viewPager: ViewPager = binding.viewPager val viewPager: ViewPager = binding.viewPager
sectionsPagerAdapter.addFragment(StepOneBajajFDFragment.getInstance(this@BajajFdMainActivity)) sectionsPagerAdapter.addFragment(StepOneBajajFDFragment.getInstance(this@BajajFdMainActivity))
sectionsPagerAdapter.addFragment(StepTwoBajajFDFragment.getInstance(this@BajajFdMainActivity)) sectionsPagerAdapter.addFragment(StepTwoBajajFDFragment.getInstance(this@BajajFdMainActivity))
@ -86,7 +100,7 @@ class BajajFdMainActivity : AppCompatActivity(),BajajFDInterface {
defaultShape() defaultShape()
) )
} }
4 ->{
4 -> {
setBackground( setBackground(
selectedShape(), selectedShape(),
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 android.view.ViewGroup
import androidx.fragment.app.Fragment import androidx.fragment.app.Fragment
import androidx.lifecycle.ViewModelProvider 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.databinding.FragmentBajajfdStepFiveBinding
import com.nivesh.production.bajajfd.viewModel.StepFiveViewModel 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 android.view.ViewGroup
import androidx.fragment.app.Fragment import androidx.fragment.app.Fragment
import androidx.lifecycle.ViewModelProvider 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.databinding.FragmentBajajfdStepFourBinding
import com.nivesh.production.bajajfd.viewModel.StepFourViewModel 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 package com.nivesh.production.bajajfd.ui.fragment
import androidx.lifecycle.ViewModelProvider
import GetRatesResponse
import android.os.Bundle import android.os.Bundle
import androidx.fragment.app.Fragment
import android.util.Log
import android.view.LayoutInflater import android.view.LayoutInflater
import android.view.View import android.view.View
import android.view.ViewGroup 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.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 import com.nivesh.production.bajajfd.viewModel.StepOneViewModel
class StepOneBajajFDFragment : Fragment() { class StepOneBajajFDFragment : Fragment() {
@ -18,7 +22,7 @@ class StepOneBajajFDFragment : Fragment() {
private lateinit var bajajFDInterface: BajajFDInterface private lateinit var bajajFDInterface: BajajFDInterface
companion object { companion object {
fun getInstance(fdInterface: BajajFDInterface): StepOneBajajFDFragment{
fun getInstance(fdInterface: BajajFDInterface): StepOneBajajFDFragment {
val stepStartFragment = StepOneBajajFDFragment() val stepStartFragment = StepOneBajajFDFragment()
stepStartFragment.setApi(fdInterface) stepStartFragment.setApi(fdInterface)
return stepStartFragment return stepStartFragment
@ -29,20 +33,42 @@ class StepOneBajajFDFragment : Fragment() {
bajajFDInterface = bajajFDInterfaces bajajFDInterface = bajajFDInterfaces
} }
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
stepOneViewModel = ViewModelProvider(this)[StepOneViewModel::class.java].apply {
}
}
override fun onCreateView( override fun onCreateView(
inflater: LayoutInflater, container: ViewGroup?, inflater: LayoutInflater, container: ViewGroup?,
savedInstanceState: Bundle? savedInstanceState: Bundle?
): View { ): View {
_binding = FragmentBajajfdStepOneBinding.inflate(inflater,container,false)
_binding = FragmentBajajfdStepOneBinding.inflate(inflater, container, false)
val root = binding.root 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 { // binding.txtInterestTenure.setOnClickListener {
// //
// } // }
@ -54,6 +80,16 @@ class StepOneBajajFDFragment : Fragment() {
return root return root
} }
private fun refreshToken() {
}
private fun getRatesData(getRatesResponse: GetRatesResponse) {
}
override fun onDestroyView() { override fun onDestroyView() {
super.onDestroyView() super.onDestroyView()
_binding = null _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 android.view.ViewGroup
import androidx.fragment.app.Fragment import androidx.fragment.app.Fragment
import androidx.lifecycle.ViewModelProvider 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.databinding.FragmentBajajfdStepThreeBinding
import com.nivesh.production.bajajfd.viewModel.StepThreeViewModel 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 android.view.ViewGroup
import androidx.fragment.app.Fragment import androidx.fragment.app.Fragment
import androidx.lifecycle.ViewModelProvider 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.databinding.FragmentBajajfdStepTwoBinding
import com.nivesh.production.bajajfd.viewModel.StepTwoViewModel 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 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 //valid email check
private fun isValidEmail(emailText:String?): String? { private fun isValidEmail(emailText:String?): String? {
@ -117,5 +103,6 @@ class Constants() {
//returns a boolean value //returns a boolean value
return match.matches() 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 package com.nivesh.production.bajajfd.viewModel
import GetRatesResponse
import Response
import androidx.lifecycle.MutableLiveData
import androidx.lifecycle.ViewModel 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 // 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.