-
Notifications
You must be signed in to change notification settings - Fork 211
Commit
- Loading branch information
There are no files selected for viewing
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,25 @@ | ||
package com.droidcba.kedditbysteps | ||
|
||
import android.app.Application | ||
import com.droidcba.kedditbysteps.di.AppModule | ||
import com.droidcba.kedditbysteps.di.news.DaggerNewsComponent | ||
import com.droidcba.kedditbysteps.di.news.NewsComponent | ||
|
||
/** | ||
* | ||
* @author juancho. | ||
*/ | ||
class KedditApp : Application() { | ||
|
||
companion object { | ||
lateinit var newsComponent: NewsComponent | ||
} | ||
|
||
override fun onCreate() { | ||
super.onCreate() | ||
newsComponent = DaggerNewsComponent.builder() | ||
.appModule(AppModule(this)) | ||
//.newsModule(NewsModule()) Module with empty constructor is implicitly created by dagger. | ||
.build() | ||
} | ||
} |
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,23 +1,11 @@ | ||
package com.droidcba.kedditbysteps.api | ||
|
||
import retrofit2.Call | ||
import retrofit2.Retrofit | ||
import retrofit2.converter.moshi.MoshiConverterFactory | ||
import javax.inject.Inject | ||
|
||
class NewsRestAPI() : NewsAPI { | ||
|
||
private val redditApi: RedditApi | ||
|
||
init { | ||
val retrofit = Retrofit.Builder() | ||
.baseUrl("https://www.reddit.com") | ||
.addConverterFactory(MoshiConverterFactory.create()) | ||
.build() | ||
|
||
redditApi = retrofit.create(RedditApi::class.java) | ||
} | ||
class NewsRestAPI @Inject constructor(private val redditApi: RedditApi) : NewsAPI { | ||
This comment has been minimized.
Sorry, something went wrong.
This comment has been minimized.
Sorry, something went wrong.
juanchosaravia
Author
Owner
|
||
|
||
override fun getNews(after: String, limit: String): Call<RedditNewsResponse> { | ||
return redditApi.getTop(after, limit) | ||
} | ||
} | ||
} |
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,27 @@ | ||
package com.droidcba.kedditbysteps.di | ||
|
||
import android.content.Context | ||
import com.droidcba.kedditbysteps.KedditApp | ||
import dagger.Module | ||
import dagger.Provides | ||
import javax.inject.Singleton | ||
|
||
/** | ||
* | ||
* @author juancho. | ||
*/ | ||
@Module | ||
class AppModule(val app: KedditApp) { | ||
|
||
@Provides | ||
@Singleton | ||
fun provideContext(): Context { | ||
This comment has been minimized.
Sorry, something went wrong.
This comment has been minimized.
Sorry, something went wrong. |
||
return app; | ||
} | ||
|
||
@Provides | ||
@Singleton | ||
fun provideApplication(): KedditApp { | ||
return app; | ||
} | ||
} |
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,24 @@ | ||
package com.droidcba.kedditbysteps.di | ||
|
||
import dagger.Module | ||
import dagger.Provides | ||
import retrofit2.Retrofit | ||
import retrofit2.converter.moshi.MoshiConverterFactory | ||
import javax.inject.Singleton | ||
|
||
/** | ||
* | ||
* @author juancho. | ||
*/ | ||
@Module | ||
class NetworkModule { | ||
|
||
@Provides | ||
@Singleton | ||
fun provideRetrofit(): Retrofit { | ||
return Retrofit.Builder() | ||
.baseUrl("https://www.reddit.com") | ||
.addConverterFactory(MoshiConverterFactory.create()) | ||
.build() | ||
} | ||
} |
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,23 @@ | ||
package com.droidcba.kedditbysteps.di.news | ||
|
||
import com.droidcba.kedditbysteps.di.AppModule | ||
import com.droidcba.kedditbysteps.di.NetworkModule | ||
import com.droidcba.kedditbysteps.features.news.NewsFragment | ||
import dagger.Component | ||
import javax.inject.Singleton | ||
|
||
/** | ||
* | ||
* @author juancho. | ||
*/ | ||
@Singleton | ||
@Component(modules = arrayOf( | ||
AppModule::class, | ||
This comment has been minimized.
Sorry, something went wrong. |
||
NewsModule::class, | ||
NetworkModule::class) | ||
) | ||
interface NewsComponent { | ||
|
||
fun inject(newsFragment: NewsFragment) | ||
|
||
} |
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,34 @@ | ||
package com.droidcba.kedditbysteps.di.news | ||
|
||
import com.droidcba.kedditbysteps.api.NewsAPI | ||
import com.droidcba.kedditbysteps.api.NewsRestAPI | ||
import com.droidcba.kedditbysteps.api.RedditApi | ||
import dagger.Module | ||
import dagger.Provides | ||
import retrofit2.Retrofit | ||
import javax.inject.Singleton | ||
|
||
/** | ||
* | ||
* @author juancho. | ||
*/ | ||
@Module | ||
class NewsModule { | ||
|
||
@Provides | ||
@Singleton | ||
fun provideNewsAPI(redditApi: RedditApi): NewsAPI { | ||
return NewsRestAPI(redditApi) | ||
} | ||
|
||
@Provides | ||
@Singleton | ||
fun provideRedditApi(retrofit: Retrofit): RedditApi { | ||
return retrofit.create(RedditApi::class.java) | ||
} | ||
|
||
/** | ||
* NewsManager is automatically provided by Dagger as we set the @Inject annotation in the | ||
* constructor, so we can avoid adding a 'provider method' here. | ||
*/ | ||
} |
Why @Inject for constructor and not lateinit?