Skip to content

Commit 3e81cd9

Browse files
Refatorando o código - criado repository e datasource com a classe de implementacao e interface na camada de data - criado o viewmodel com a classe RepositoryListRepositoryImpl na camada de presentation - modificado a config do NetworkUtils.
1 parent f65ce24 commit 3e81cd9

File tree

8 files changed

+118
-32
lines changed

8 files changed

+118
-32
lines changed
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
package com.devpass.githubapp.data.datasource
2+
3+
import com.devpass.githubapp.data.model.Repository
4+
import retrofit2.Call
5+
6+
interface RepositoryListDataSource {
7+
fun getRepositories(username: String): Call<List<Repository>>
8+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
package com.devpass.githubapp.data.datasource
2+
3+
import com.devpass.githubapp.data.api.GitHubEndpoint
4+
import com.devpass.githubapp.data.model.Repository
5+
import retrofit2.Call
6+
7+
class RepositoryListDataSourceImpl(
8+
private val service : GitHubEndpoint
9+
): RepositoryListDataSource {
10+
11+
override fun getRepositories(username: String): Call<List<Repository>> {
12+
return service.getRepositories(username = username)
13+
}
14+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
package com.devpass.githubapp.data.repository
2+
3+
import com.devpass.githubapp.data.model.Repository
4+
import retrofit2.Call
5+
6+
interface RepositoryListRepository {
7+
fun getRepositories(): Call<List<Repository>>
8+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
package com.devpass.githubapp.data.repository
2+
3+
import com.devpass.githubapp.data.datasource.RepositoryListDataSource
4+
import com.devpass.githubapp.data.model.Repository
5+
import retrofit2.Call
6+
7+
class RepositoryListRepositoryImpl(
8+
private val repositoryListDataSource: RepositoryListDataSource
9+
): RepositoryListRepository {
10+
11+
override fun getRepositories(): Call<List<Repository>> {
12+
return repositoryListDataSource.getRepositories(
13+
"devpass-tech")
14+
}
15+
}

solutions/devsprint-bruno-almeida-1/app/src/main/java/com/devpass/githubapp/presentation/RepositoryListActivity.kt

Lines changed: 25 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -4,46 +4,46 @@ import android.os.Bundle
44
import android.view.Menu
55
import android.view.MenuInflater
66
import android.view.MenuItem
7+
import androidx.activity.viewModels
78
import androidx.appcompat.app.AppCompatActivity
8-
import android.widget.Toast
99
import com.devpass.githubapp.R
1010
import com.devpass.githubapp.data.api.GitHubEndpoint
11+
import com.devpass.githubapp.data.datasource.RepositoryListDataSource
12+
import com.devpass.githubapp.data.datasource.RepositoryListDataSourceImpl
1113
import com.devpass.githubapp.data.model.Repository
14+
import com.devpass.githubapp.data.repository.RepositoryListRepository
15+
import com.devpass.githubapp.data.repository.RepositoryListRepositoryImpl
1216
import com.devpass.githubapp.databinding.ActivityMainBinding
17+
import com.devpass.githubapp.presentation.viewmodel.RepositoryListViewModel
1318
import com.devpass.githubapp.utils.NetworkUtils
14-
import retrofit2.Call
15-
import retrofit2.Callback
16-
import retrofit2.Response
1719

1820
class RepositoryListActivity : AppCompatActivity() {
1921

2022
private lateinit var binding: ActivityMainBinding
23+
private val service: GitHubEndpoint = NetworkUtils.getRetrofitInstance.create(GitHubEndpoint::class.java)
24+
private val dataSource: RepositoryListDataSource = RepositoryListDataSourceImpl(service)
25+
private val repository: RepositoryListRepository = RepositoryListRepositoryImpl(dataSource)
26+
private val viewModel: RepositoryListViewModel = RepositoryListViewModel(repository)
2127
private lateinit var adapter: RepositoryListAdapter
2228

2329
override fun onCreate(savedInstanceState: Bundle?) {
2430
super.onCreate(savedInstanceState)
25-
2631
binding = ActivityMainBinding.inflate(layoutInflater)
2732
setContentView(binding.root)
2833

29-
setSupportActionBar(binding.toolbar)
30-
31-
val retrofitClient = NetworkUtils.getRetrofitInstance("https://api.github.com")
32-
val endpoint = retrofitClient.create(GitHubEndpoint::class.java)
33-
val callback = endpoint.getRepositories("devpass-tech")
34-
35-
callback.enqueue(object : Callback<List<Repository>> {
36-
override fun onFailure(call: Call<List<Repository>>, t: Throwable) {
37-
Toast.makeText(baseContext, t.message, Toast.LENGTH_SHORT).show()
38-
}
34+
setupToolbar()
35+
viewModel.repositoryList.observe(this){
36+
setupRv(it)
37+
}
38+
}
3939

40-
override fun onResponse(call: Call<List<Repository>>, response: Response<List<Repository>>) {
41-
val repositoryList = response.body() ?: listOf()
40+
private fun setupRv(repositoryList: List<Repository>) {
41+
adapter = RepositoryListAdapter(repositoryList)
42+
binding.contentRepositoryListRv.adapter = adapter
43+
}
4244

43-
adapter = RepositoryListAdapter(repositoryList)
44-
binding.contentRepositoryListRv.adapter = adapter
45-
}
46-
})
45+
private fun setupToolbar() {
46+
setSupportActionBar(binding.toolbar)
4747
}
4848

4949
override fun onOptionsItemSelected(item: MenuItem): Boolean {
@@ -58,6 +58,10 @@ class RepositoryListActivity : AppCompatActivity() {
5858
val inflater: MenuInflater = menuInflater
5959
inflater.inflate(R.menu.menu_main, menu)
6060
return true
61+
} private fun observer() {
62+
viewModel.repositoryList.observe(this) {
63+
adapter.updateList(it as MutableList<Repository>)
64+
}
6165
}
6266

6367
}

solutions/devsprint-bruno-almeida-1/app/src/main/java/com/devpass/githubapp/presentation/RepositoryListAdapter.kt

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ import com.devpass.githubapp.data.model.Repository
88
import com.devpass.githubapp.databinding.RepositoryCellItemBinding
99

1010
class RepositoryListAdapter(
11-
private val repositoryList : List<Repository>
11+
private var repositoryList : List<Repository>
1212
) : RecyclerView.Adapter<RepositoryCellItem>() {
1313

1414
override fun onCreateViewHolder(
@@ -27,4 +27,8 @@ class RepositoryListAdapter(
2727
holder.bind(repositoryList[position])
2828
}
2929

30+
fun updateList(newList: MutableList<Repository>){
31+
repositoryList = newList
32+
notifyDataSetChanged()
33+
}
3034
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
package com.devpass.githubapp.presentation.viewmodel
2+
3+
import androidx.lifecycle.LiveData
4+
import androidx.lifecycle.MutableLiveData
5+
import androidx.lifecycle.ViewModel
6+
import com.devpass.githubapp.data.model.Repository
7+
import com.devpass.githubapp.data.repository.RepositoryListRepository
8+
import retrofit2.Call
9+
import retrofit2.Callback
10+
import retrofit2.Response
11+
12+
class RepositoryListViewModel(
13+
private val repository: RepositoryListRepository
14+
):ViewModel() {
15+
16+
private var _repositoriesList : MutableLiveData<List<Repository>> = MutableLiveData()
17+
val repositoryList : LiveData<List<Repository>> = _repositoriesList
18+
19+
init {
20+
getListRepositories()
21+
}
22+
23+
private fun getListRepositories() {
24+
repository.getRepositories().enqueue(
25+
object : Callback<List<Repository>>{
26+
override fun onFailure(call: Call<List<Repository>>, t: Throwable){
27+
}
28+
override fun onResponse(
29+
call: Call<List<Repository>>, response: Response<List<Repository>>
30+
) {
31+
_repositoriesList.value = response.body() ?: listOf()
32+
}
33+
})
34+
}
35+
}
Lines changed: 8 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,18 +1,16 @@
11
package com.devpass.githubapp.utils
22

3+
import com.google.gson.GsonBuilder
34
import retrofit2.Retrofit
45
import retrofit2.converter.gson.GsonConverterFactory
56

6-
class NetworkUtils {
7+
const val BASE_URL = "https://api.github.com"
78

8-
companion object {
9-
10-
fun getRetrofitInstance(path : String) : Retrofit {
11-
return Retrofit.Builder()
12-
.baseUrl(path)
13-
.addConverterFactory(GsonConverterFactory.create())
14-
.build()
15-
}
16-
}
9+
object NetworkUtils {
10+
val gson = GsonBuilder().setLenient().create()
1711

12+
val getRetrofitInstance = Retrofit.Builder()
13+
.baseUrl(BASE_URL)
14+
.addConverterFactory(GsonConverterFactory.create())
15+
.build()
1816
}

0 commit comments

Comments
 (0)