diff --git a/solutions/devsprint-bruno-almeida-1/app/build.gradle b/solutions/devsprint-bruno-almeida-1/app/build.gradle index b42ad0b..9c6624d 100644 --- a/solutions/devsprint-bruno-almeida-1/app/build.gradle +++ b/solutions/devsprint-bruno-almeida-1/app/build.gradle @@ -2,6 +2,8 @@ plugins { id 'com.android.application' id 'org.jetbrains.kotlin.android' id "kotlin-kapt" + id("com.google.dagger.hilt.android") + } android { @@ -52,4 +54,17 @@ dependencies { //Glide implementation 'com.github.bumptech.glide:glide:4.13.2' kapt 'com.github.bumptech.glide:compiler:4.13.2' + + //Hilt + implementation("com.google.dagger:hilt-android:2.44") + kapt("com.google.dagger:hilt-android-compiler:2.44") + + //Lifecycle + def lifecycle_version = "2.5.1" + implementation "androidx.lifecycle:lifecycle-viewmodel:$lifecycle_version" + implementation "androidx.lifecycle:lifecycle-viewmodel-ktx:$lifecycle_version" +} + +kapt { + correctErrorTypes = true } \ No newline at end of file diff --git a/solutions/devsprint-bruno-almeida-1/app/src/main/AndroidManifest.xml b/solutions/devsprint-bruno-almeida-1/app/src/main/AndroidManifest.xml index b1d1c6f..1479eec 100644 --- a/solutions/devsprint-bruno-almeida-1/app/src/main/AndroidManifest.xml +++ b/solutions/devsprint-bruno-almeida-1/app/src/main/AndroidManifest.xml @@ -5,6 +5,7 @@ > -} \ No newline at end of file +} diff --git a/solutions/devsprint-bruno-almeida-1/app/src/main/java/com/devpass/githubapp/data/datasource/RepositoryListDataSourceImpl.kt b/solutions/devsprint-bruno-almeida-1/app/src/main/java/com/devpass/githubapp/data/datasource/RepositoryListDataSourceImpl.kt index dd3e1c0..08486f3 100644 --- a/solutions/devsprint-bruno-almeida-1/app/src/main/java/com/devpass/githubapp/data/datasource/RepositoryListDataSourceImpl.kt +++ b/solutions/devsprint-bruno-almeida-1/app/src/main/java/com/devpass/githubapp/data/datasource/RepositoryListDataSourceImpl.kt @@ -3,8 +3,9 @@ package com.devpass.githubapp.data.datasource import com.devpass.githubapp.data.api.GitHubEndpoint import com.devpass.githubapp.data.model.Repository import retrofit2.Call +import javax.inject.Inject -class RepositoryListDataSourceImpl( +class RepositoryListDataSourceImpl @Inject constructor( private val service: GitHubEndpoint ) : RepositoryListDataSource { diff --git a/solutions/devsprint-bruno-almeida-1/app/src/main/java/com/devpass/githubapp/data/model/Repository.kt b/solutions/devsprint-bruno-almeida-1/app/src/main/java/com/devpass/githubapp/data/model/Repository.kt index 14be7c2..8bd14f2 100644 --- a/solutions/devsprint-bruno-almeida-1/app/src/main/java/com/devpass/githubapp/data/model/Repository.kt +++ b/solutions/devsprint-bruno-almeida-1/app/src/main/java/com/devpass/githubapp/data/model/Repository.kt @@ -6,13 +6,13 @@ data class Repository( @SerializedName("name") var name : String, @SerializedName("description") - var description : String, + var description : String?, @SerializedName("stargazers_count") - var stargazersCount : Int, + var stargazersCount : Int?, @SerializedName("forks_count") - var forksCount : Int, + var forksCount : Int?, @SerializedName("owner") var owner : Owner, @SerializedName("license") - var license : License + var license : License? ) \ No newline at end of file diff --git a/solutions/devsprint-bruno-almeida-1/app/src/main/java/com/devpass/githubapp/data/repository/RepositoryListRepositoryImpl.kt b/solutions/devsprint-bruno-almeida-1/app/src/main/java/com/devpass/githubapp/data/repository/RepositoryListRepositoryImpl.kt index f297e84..9015a16 100644 --- a/solutions/devsprint-bruno-almeida-1/app/src/main/java/com/devpass/githubapp/data/repository/RepositoryListRepositoryImpl.kt +++ b/solutions/devsprint-bruno-almeida-1/app/src/main/java/com/devpass/githubapp/data/repository/RepositoryListRepositoryImpl.kt @@ -3,8 +3,9 @@ package com.devpass.githubapp.data.repository import com.devpass.githubapp.data.datasource.RepositoryListDataSource import com.devpass.githubapp.data.model.Repository import retrofit2.Call +import javax.inject.Inject -class RepositoryListRepositoryImpl( +class RepositoryListRepositoryImpl @Inject constructor( private val repositoryListDataSource: RepositoryListDataSource ) : RepositoryListRepository { diff --git a/solutions/devsprint-bruno-almeida-1/app/src/main/java/com/devpass/githubapp/di/Modules.kt b/solutions/devsprint-bruno-almeida-1/app/src/main/java/com/devpass/githubapp/di/Modules.kt new file mode 100644 index 0000000..f0a167f --- /dev/null +++ b/solutions/devsprint-bruno-almeida-1/app/src/main/java/com/devpass/githubapp/di/Modules.kt @@ -0,0 +1,52 @@ +package com.devpass.githubapp.di + +import com.devpass.githubapp.data.api.GitHubEndpoint +import com.devpass.githubapp.data.datasource.RepositoryListDataSource +import com.devpass.githubapp.data.datasource.RepositoryListDataSourceImpl +import com.devpass.githubapp.data.repository.RepositoryListRepository +import com.devpass.githubapp.data.repository.RepositoryListRepositoryImpl +import com.devpass.githubapp.presentation.viewmodel.RepositoryListViewModel +import com.devpass.githubapp.utils.NetworkUtils +import dagger.Binds +import dagger.Module +import dagger.Provides +import dagger.hilt.InstallIn +import dagger.hilt.android.components.ActivityComponent +import dagger.hilt.components.SingletonComponent + +@Module +@InstallIn(SingletonComponent::class) +abstract class Modules { + + @Binds + abstract fun bindRepositoryListDataSource( + repositoryListDataSource: RepositoryListDataSourceImpl + ): RepositoryListDataSource + + @Binds + abstract fun bindRepositoryListRepository( + repositoryListRepository: RepositoryListRepositoryImpl + ): RepositoryListRepository +} + +@Module +@InstallIn(SingletonComponent::class) +class Module2 { + @Provides + fun provideGitHubEndpoint(): GitHubEndpoint { + return NetworkUtils + .getRetrofitInstance + .create(GitHubEndpoint::class.java) + } +} + +@Module +@InstallIn(ActivityComponent::class) +class Module3 { + @Provides + fun provideRepositorListViewModel( + repository: RepositoryListRepository + ): RepositoryListViewModel { + return RepositoryListViewModel(repository) + } +} \ No newline at end of file diff --git a/solutions/devsprint-bruno-almeida-1/app/src/main/java/com/devpass/githubapp/presentation/RepositoryListActivity.kt b/solutions/devsprint-bruno-almeida-1/app/src/main/java/com/devpass/githubapp/presentation/RepositoryListActivity.kt index fcd6419..ea6bcfd 100644 --- a/solutions/devsprint-bruno-almeida-1/app/src/main/java/com/devpass/githubapp/presentation/RepositoryListActivity.kt +++ b/solutions/devsprint-bruno-almeida-1/app/src/main/java/com/devpass/githubapp/presentation/RepositoryListActivity.kt @@ -6,24 +6,20 @@ import android.view.MenuItem import android.widget.SearchView import androidx.appcompat.app.AppCompatActivity import com.devpass.githubapp.R -import com.devpass.githubapp.data.api.GitHubEndpoint -import com.devpass.githubapp.data.datasource.RepositoryListDataSource -import com.devpass.githubapp.data.datasource.RepositoryListDataSourceImpl import com.devpass.githubapp.data.model.Repository -import com.devpass.githubapp.data.repository.RepositoryListRepository -import com.devpass.githubapp.data.repository.RepositoryListRepositoryImpl import com.devpass.githubapp.databinding.ActivityMainBinding import com.devpass.githubapp.presentation.viewmodel.RepositoryListViewModel -import com.devpass.githubapp.utils.NetworkUtils +import dagger.hilt.android.AndroidEntryPoint +import javax.inject.Inject +@AndroidEntryPoint class RepositoryListActivity : AppCompatActivity(), SearchView.OnQueryTextListener { private lateinit var binding: ActivityMainBinding - private val service: GitHubEndpoint = - NetworkUtils.getRetrofitInstance.create(GitHubEndpoint::class.java) - private val dataSource: RepositoryListDataSource = RepositoryListDataSourceImpl(service) - private val repository: RepositoryListRepository = RepositoryListRepositoryImpl(dataSource) - private val viewModel: RepositoryListViewModel = RepositoryListViewModel(repository) + + @Inject + lateinit var viewModel: RepositoryListViewModel + private lateinit var adapter: RepositoryListAdapter override fun onCreate(savedInstanceState: Bundle?) { @@ -35,7 +31,7 @@ class RepositoryListActivity : AppCompatActivity(), SearchView.OnQueryTextListen viewModel.repositoryList.observe(this) { setupRv(it) } - //viewModel.getListRepositories() + viewModel.getListRepositories() } private fun setupRv(repositoryList: List) { diff --git a/solutions/devsprint-bruno-almeida-1/app/src/main/java/com/devpass/githubapp/presentation/viewmodel/RepositoryListViewModel.kt b/solutions/devsprint-bruno-almeida-1/app/src/main/java/com/devpass/githubapp/presentation/viewmodel/RepositoryListViewModel.kt index e159b0c..5365b55 100644 --- a/solutions/devsprint-bruno-almeida-1/app/src/main/java/com/devpass/githubapp/presentation/viewmodel/RepositoryListViewModel.kt +++ b/solutions/devsprint-bruno-almeida-1/app/src/main/java/com/devpass/githubapp/presentation/viewmodel/RepositoryListViewModel.kt @@ -5,20 +5,19 @@ import androidx.lifecycle.MutableLiveData import androidx.lifecycle.ViewModel import com.devpass.githubapp.data.model.Repository import com.devpass.githubapp.data.repository.RepositoryListRepository +import dagger.hilt.android.lifecycle.HiltViewModel import retrofit2.Call import retrofit2.Callback import retrofit2.Response +import javax.inject.Inject -class RepositoryListViewModel( +@HiltViewModel +class RepositoryListViewModel @Inject constructor( private val repository: RepositoryListRepository ) : ViewModel() { private var _repositoriesList: MutableLiveData> = MutableLiveData() val repositoryList: LiveData> = _repositoriesList - init { - getListRepositories() - } - fun getListRepositories() { repository.getRepositories("devpass-tech").enqueue( object : Callback> { @@ -33,7 +32,7 @@ class RepositoryListViewModel( }) } - fun searchRepository(query: String){ + fun searchRepository(query: String) { repository.getRepositories(query).enqueue( object : Callback> { override fun onFailure(call: Call>, t: Throwable) { diff --git a/solutions/devsprint-bruno-almeida-1/app/src/main/java/com/devpass/githubapp/utils/NetworkUtils.kt b/solutions/devsprint-bruno-almeida-1/app/src/main/java/com/devpass/githubapp/utils/NetworkUtils.kt index eb4e505..ba9c430 100644 --- a/solutions/devsprint-bruno-almeida-1/app/src/main/java/com/devpass/githubapp/utils/NetworkUtils.kt +++ b/solutions/devsprint-bruno-almeida-1/app/src/main/java/com/devpass/githubapp/utils/NetworkUtils.kt @@ -1,11 +1,14 @@ package com.devpass.githubapp.utils import com.google.gson.GsonBuilder +import dagger.Module +import dagger.hilt.InstallIn +import dagger.hilt.android.components.ActivityComponent import retrofit2.Retrofit import retrofit2.converter.gson.GsonConverterFactory -const val BASE_URL = "https://api.github.com" +const val BASE_URL = "https://api.github.com" object NetworkUtils { val gson = GsonBuilder().setLenient().create()