Skip to content

Commit

Permalink
Merge pull request #1 from baristpl/mvvm-arch
Browse files Browse the repository at this point in the history
merged the mvvm-arch based version to the master branch
  • Loading branch information
baristpl authored Jul 13, 2022
2 parents c6dbac9 + db34355 commit f2a822d
Show file tree
Hide file tree
Showing 4 changed files with 215 additions and 133 deletions.
189 changes: 62 additions & 127 deletions app/src/main/java/com/example/retrofitgetdata/HomeFragment.kt
Original file line number Diff line number Diff line change
@@ -1,30 +1,22 @@
package com.example.retrofitgetdata

import android.os.Bundle
import android.util.Log
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import androidx.fragment.app.Fragment
import androidx.fragment.app.viewModels
import androidx.recyclerview.widget.GridLayoutManager
import androidx.recyclerview.widget.LinearLayoutManager
import androidx.recyclerview.widget.RecyclerView
import com.example.retrofitgetdata.databinding.FragmentHomeBinding
import com.example.retrofitgetdata.models.CardModel
import com.example.retrofitgetdata.recycler.CardAdapter
import com.example.retrofitgetdata.recycler.GridAdapter
import com.example.retrofitgetdata.clientApi.ClientApi
import com.example.retrofitgetdata.clientApi.Service
import retrofit2.Call
import retrofit2.Callback
import retrofit2.Response

lateinit var universityList: List<UniversityResult>
lateinit var departmentList: List<DepartmentResult>
lateinit var countryList: List<CountryResult>
lateinit var blogList: List<BlogResult>

class HomeFragment : Fragment() {
private val viewModel: HomeViewModel by viewModels()

private var _binding: FragmentHomeBinding? = null
private val binding get() = _binding!!

Expand All @@ -34,134 +26,77 @@ class HomeFragment : Fragment() {
): View {
_binding = FragmentHomeBinding.inflate(inflater, container, false)
return binding.root

}

override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)

val universityRecycler = binding.universityRecycler
val countryRecycler = binding.countryRecycler
val blogRecycler = binding.blogRecycler
val departmentRecycler = binding.departmentRecycler
val recyclerList =
listOf(universityRecycler, departmentRecycler, countryRecycler, blogRecycler)

getFromRestApi(recyclerList)
}

private fun getFromRestApi(recyclerList: List<RecyclerView>) {
val service = ClientApi.getClient().create(Service::class.java)

service.getUniList().enqueue(object : Callback<UniversityModel> {
override fun onFailure(call: Call<UniversityModel>, t: Throwable) {
Log.e("response", "failed", t)
val dummyCardModel = arrayListOf<CardModel>()
dummyCardModel.add(CardModel("Title", "SubTitle","https://dummyimage.com/560x265"))

universityRecycler.apply {
layoutManager = LinearLayoutManager(
requireContext(),
RecyclerView.HORIZONTAL,
false
)
adapter = CardAdapter(requireContext()).apply {
setData(dummyCardModel)
}

override fun onResponse(
call: Call<UniversityModel>,
response: Response<UniversityModel>
) {
if (response.isSuccessful) {
universityList = response.body()?.results_!!
val data = arrayListOf<CardModel>()

for (result in universityList)
data.add(CardModel(result.name_, result.province_.name_, result.thumbnail_))

recyclerList[0].apply {
layoutManager = LinearLayoutManager(
view?.context,
RecyclerView.HORIZONTAL,
false
)
adapter = CardAdapter(data, context!!)
}
}
}

countryRecycler.apply {
layoutManager = LinearLayoutManager(
requireContext(),
RecyclerView.HORIZONTAL,
false
)
adapter = CardAdapter(requireContext()).apply {
setData(dummyCardModel)
}
})

service.getDepartmentList().enqueue(object : Callback<DepartmentModel> {
override fun onFailure(call: Call<DepartmentModel>, t: Throwable) {
Log.e("responseFail", "failed", t)
}

blogRecycler.apply {
layoutManager = LinearLayoutManager(
requireContext(),
RecyclerView.HORIZONTAL,
false
)
adapter = CardAdapter(requireContext()).apply {
setData(dummyCardModel)
}

override fun onResponse(
call: Call<DepartmentModel>,
response: Response<DepartmentModel>
) {
if (response.isSuccessful) {
departmentList = response.body()?.results_!!
val departmentNameList = arrayListOf<String>()

for (result in departmentList)
departmentNameList.add(result.name_)

recyclerList[1].apply {
layoutManager =
GridLayoutManager(view?.context, 2, RecyclerView.VERTICAL, false)
adapter = GridAdapter(departmentNameList)

}
}
}

viewModel.universityContent.observe(viewLifecycleOwner) {
val universityAdapter = universityRecycler.adapter as CardAdapter
universityAdapter.setData(it)
universityAdapter.notifyDataSetChanged()
}

viewModel.countryContent.observe(viewLifecycleOwner){
val countryAdapter = countryRecycler.adapter as CardAdapter
countryAdapter.setData(it)
countryAdapter.notifyDataSetChanged()

}

viewModel.blogContent.observe(viewLifecycleOwner){
val blogAdapter = blogRecycler.adapter as CardAdapter
blogAdapter.setData(it)
blogAdapter.notifyDataSetChanged()
}

viewModel.departmentContent.observe(viewLifecycleOwner) {
departmentRecycler.apply {
layoutManager =
GridLayoutManager(requireContext(), 2, RecyclerView.VERTICAL, false)
adapter = GridAdapter(it)
}
})

service.getCountryList().enqueue(object : Callback<CountryModel> {
override fun onFailure(call: Call<CountryModel>, t: Throwable) {
Log.e("response", "failed", t)
}

override fun onResponse(
call: Call<CountryModel>,
response: Response<CountryModel>
) {
if (response.isSuccessful) {
countryList = response.body()?.results_!!
val data = arrayListOf<CardModel>()

for (result in countryList)
data.add(CardModel(result.name_, "", result.image_))

recyclerList[2].apply {
layoutManager = LinearLayoutManager(
view?.context,
RecyclerView.HORIZONTAL,
false
)
adapter = CardAdapter(data, context!!)
}
}
}
})

service.getBlogList().enqueue(object : Callback<BlogModel> {
override fun onFailure(call: Call<BlogModel>, t: Throwable) {
Log.e("response", "failed", t)
}

override fun onResponse(
call: Call<BlogModel>,
response: Response<BlogModel>
) {
if (response.isSuccessful) {
blogList = response.body()?.results_!!
val data = arrayListOf<CardModel>()

for (result in blogList)
data.add(CardModel(result.name_, "", result.thumbnail_))

recyclerList[3].apply {
layoutManager = LinearLayoutManager(
view?.context,
RecyclerView.HORIZONTAL,
false
)
adapter = CardAdapter(data, context!!)
}
}
}
})

}
}

}
143 changes: 143 additions & 0 deletions app/src/main/java/com/example/retrofitgetdata/HomeViewModel.kt
Original file line number Diff line number Diff line change
@@ -0,0 +1,143 @@
package com.example.retrofitgetdata

import android.util.Log
import androidx.lifecycle.LiveData
import androidx.lifecycle.MutableLiveData
import androidx.lifecycle.ViewModel
import com.example.retrofitgetdata.clientApi.ClientApi
import com.example.retrofitgetdata.clientApi.Service
import com.example.retrofitgetdata.models.CardModel
import retrofit2.Call
import retrofit2.Callback
import retrofit2.Response
import kotlin.collections.ArrayList
import kotlin.properties.Delegates

const val REQUEST_NUM = 4

class HomeViewModel : ViewModel() {

private lateinit var universityResult: List<UniversityResult>
private lateinit var departmentResult: List<DepartmentResult>
private lateinit var countryResult: List<CountryResult>
private lateinit var blogResult: List<BlogResult>

private var _universityContent = MutableLiveData<ArrayList<CardModel>>()
val universityContent: LiveData<ArrayList<CardModel>>
get() = _universityContent

private var _countryContent = MutableLiveData<ArrayList<CardModel>>()
val countryContent: LiveData<ArrayList<CardModel>>
get() = _countryContent

private var _blogContent = MutableLiveData<ArrayList<CardModel>>()
val blogContent: LiveData<ArrayList<CardModel>>
get() = _blogContent

private var _departmentContent = MutableLiveData<ArrayList<String>>()
val departmentContent: LiveData<ArrayList<String>>
get() = _departmentContent

private var fetchControl: Int by Delegates.observable(0) { _, _, newValue ->
if (newValue == REQUEST_NUM) initializeContent()
}

private fun initializeContent() {
val tempContent = arrayListOf<CardModel>()
val tempDepartmentList = arrayListOf<String>()

for (result in universityResult) {
tempContent.add(CardModel(result.name_, result.province_.name_, result.thumbnail_))
}
_universityContent.value = tempContent
tempContent.clear()

for (result in countryResult) {
tempContent.add(CardModel(result.name_, "", result.image_))
}
_countryContent.value = tempContent
tempContent.clear()

for (result in blogResult) {
tempContent.add(CardModel(result.name_, "", result.thumbnail_))
}
_blogContent.value = tempContent
tempContent.clear()

for (result in departmentResult)
tempDepartmentList.add(result.name_)

_departmentContent.value = tempDepartmentList
}

init {
getContentFromRestApi()
}

private fun getContentFromRestApi() {
val service = ClientApi.getClient().create(Service::class.java)

service.getUniList().enqueue(object : Callback<UniversityModel> {
override fun onFailure(call: Call<UniversityModel>, t: Throwable) {
Log.e("response", "failed", t)
}

override fun onResponse(
call: Call<UniversityModel>,
response: Response<UniversityModel>
) {
if (response.isSuccessful)
universityResult = response.body()?.results_!!
++fetchControl

}
})

service.getDepartmentList().enqueue(object : Callback<DepartmentModel> {
override fun onFailure(call: Call<DepartmentModel>, t: Throwable) {
Log.e("responseFail", "failed", t)
}

override fun onResponse(
call: Call<DepartmentModel>,
response: Response<DepartmentModel>
) {
if (response.isSuccessful)
departmentResult = response.body()?.results_!!
++fetchControl
}
})

service.getCountryList().enqueue(object : Callback<CountryModel> {
override fun onFailure(call: Call<CountryModel>, t: Throwable) {
Log.e("response", "failed", t)
}

override fun onResponse(
call: Call<CountryModel>,
response: Response<CountryModel>
) {
if (response.isSuccessful)
countryResult = response.body()?.results_!!
++fetchControl
}
})

service.getBlogList().enqueue(object : Callback<BlogModel> {
override fun onFailure(call: Call<BlogModel>, t: Throwable) {
Log.e("response", "failed", t)
}

override fun onResponse(
call: Call<BlogModel>,
response: Response<BlogModel>
) {
if (response.isSuccessful)
blogResult = response.body()?.results_!!
++fetchControl
}
})

}

}
Loading

0 comments on commit f2a822d

Please sign in to comment.