Skip to content
This repository has been archived by the owner on May 16, 2024. It is now read-only.

Commit

Permalink
Adding AndroidX work manager integrated with dagger
Browse files Browse the repository at this point in the history
  • Loading branch information
lucassales committed Mar 6, 2019
1 parent 1ada565 commit 95e94bc
Show file tree
Hide file tree
Showing 19 changed files with 154 additions and 33 deletions.
11 changes: 10 additions & 1 deletion app/build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -112,7 +112,9 @@ dependencies {
rx_java_version = "2.2.4",
rx_kolin_version = "2.2.0",
ktx_version = "1.0.1",
rx_lint_version = '1.7.0'
rx_lint_version = '1.7.0',
work_version = "1.0.0",
assisted_inject_version = "0.3.2"

fileTree(dir: "libs", include: ["*.jar"])
androidTestImplementation("androidx.test.espresso:espresso-core:$espresso_core_version", {
Expand All @@ -131,10 +133,14 @@ dependencies {
implementation "androidx.constraintlayout:constraintlayout:$constraint_layout_version"
implementation 'androidx.multidex:multidex:2.0.1'

// Dagger
implementation "com.google.dagger:dagger-android:$dagger_version"
implementation "com.google.dagger:dagger-android-support:$dagger_version"
kapt "com.google.dagger:dagger-compiler:$dagger_version"
kapt "com.google.dagger:dagger-android-processor:$dagger_version"
// Assisted Inject
implementation "com.squareup.inject:assisted-inject-annotations-dagger2:$assisted_inject_version"
kapt "com.squareup.inject:assisted-inject-processor-dagger2:$assisted_inject_version"

implementation "net.hockeyapp.android:HockeySDK:$hockey_sdk_version"
implementation "com.jakewharton.timber:timber:$timber_version"
Expand All @@ -154,6 +160,9 @@ dependencies {
implementation "io.reactivex.rxjava2:rxjava:$rx_java_version"
implementation "io.reactivex.rxjava2:rxkotlin:$rx_kolin_version"

// Work manager
implementation "android.arch.work:work-runtime-ktx:$work_version"

// Testing
testImplementation "junit:junit:$junit_version"
// required if you want to use Mockito for unit tests
Expand Down
7 changes: 7 additions & 0 deletions app/src/main/AndroidManifest.xml
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,13 @@
android:value="${apiKey}"
tools:replace="android:value"/>

<provider
android:name="androidx.work.impl.WorkManagerInitializer"
android:authorities="${applicationId}.workmanager-init"
android:exported="false"
tools:node="remove"/>


<!-- hockey id included from build.gradle manifest placeholder -->
<meta-data android:name="net.hockeyapp.android.appIdentifier" android:value="${HOCKEYAPP_APP_ID}" />

Expand Down
24 changes: 24 additions & 0 deletions app/src/main/java/dk/nodes/template/domain/tasks/SampleTask.kt
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
package dk.nodes.template.domain.tasks

import android.content.Context
import androidx.work.Worker
import androidx.work.WorkerParameters
import com.squareup.inject.assisted.Assisted
import com.squareup.inject.assisted.AssistedInject
import dk.nodes.template.domain.repositories.PostRepository
import dk.nodes.template.injection.factories.ChildWorkerFactory
import timber.log.Timber

class SampleTask @AssistedInject constructor(
@Assisted params: WorkerParameters,
@Assisted context: Context,
private val postRepository: PostRepository
) : Worker(context, params) {
override fun doWork(): Result {
Timber.d("postRepository injected!")
return Result.success()
}

@AssistedInject.Factory
interface Factory : ChildWorkerFactory
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
package dk.nodes.template.inititializers

import android.app.Application
import androidx.work.Configuration
import androidx.work.WorkManager
import androidx.work.WorkerFactory
import javax.inject.Inject

class WorkManagerInitializer @Inject constructor(private val workerFactory: WorkerFactory) :
AppInitializer {
override fun init(app: Application) {
WorkManager.initialize(app, Configuration.Builder().setWorkerFactory(workerFactory).build())
}
}
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
package dk.nodes.template.injection
package dk.nodes.template.injection.annotations

import androidx.lifecycle.ViewModel
import dagger.MapKey
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
package dk.nodes.template.injection.annotations

import androidx.work.ListenableWorker
import dagger.MapKey
import kotlin.reflect.KClass

@MapKey
@Retention(AnnotationRetention.RUNTIME)
@Target(AnnotationTarget.FUNCTION)
annotation class WorkerKey(val value: KClass<out ListenableWorker>)
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,8 @@ import dk.nodes.template.injection.modules.*
InteractorModule::class,
RestModule::class,
RestRepositoryModule::class,
StorageModule::class
StorageModule::class,
TasksModule::class
]
)
@AppScope
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
package dk.nodes.template.injection.factories

import android.content.Context
import androidx.work.ListenableWorker
import androidx.work.WorkerParameters

interface ChildWorkerFactory {
fun create(context: Context, params: WorkerParameters): ListenableWorker
}
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
package dk.nodes.template.injection
package dk.nodes.template.injection.factories

import androidx.lifecycle.ViewModel
import androidx.lifecycle.ViewModelProvider
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
package dk.nodes.template.injection.factories

import android.content.Context
import androidx.work.ListenableWorker
import androidx.work.WorkerFactory
import androidx.work.WorkerParameters
import javax.inject.Inject
import javax.inject.Provider

class DaggerWorkerFactory @Inject constructor(
private val creators: Map<Class<out ListenableWorker>, @JvmSuppressWildcards Provider<ChildWorkerFactory>>
) : WorkerFactory() {
override fun createWorker(
context: Context,
workerClassName: String,
workerParameters: WorkerParameters
): ListenableWorker? {
val workerClass = Class.forName(workerClassName)
val foundEntry = creators.entries.find { workerClass.isAssignableFrom(it.key) }
val factory = foundEntry?.value
?: throw IllegalArgumentException("unknown worker class name: $workerClassName")
return factory.get().create(context, workerParameters)
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@ import dk.nodes.template.App
import dk.nodes.template.inititializers.AppInitializers
import dk.nodes.template.inititializers.NStackInitializer
import dk.nodes.template.inititializers.TimberInitializer
import dk.nodes.template.inititializers.WorkManagerInitializer

@Module
class AppModule {
Expand All @@ -16,8 +17,9 @@ class AppModule {
@Provides
fun provideInitializers(
nStackInitializer: NStackInitializer,
timberInitializer: TimberInitializer
timberInitializer: TimberInitializer,
workManagerInitializer: WorkManagerInitializer
): AppInitializers {
return AppInitializers(nStackInitializer, timberInitializer)
return AppInitializers(nStackInitializer, timberInitializer, workManagerInitializer)
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
package dk.nodes.template.injection.modules

import androidx.work.WorkManager
import dagger.Module
import dagger.Provides
import dk.nodes.arch.domain.injection.scopes.AppScope

@Module(includes = [WorkerBindingModule::class, TasksAssistedModule::class])
class TasksModule {
@Provides
@AppScope
fun provideWorkManager(): WorkManager = WorkManager.getInstance()
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
package dk.nodes.template.injection.modules

import com.squareup.inject.assisted.dagger2.AssistedModule
import dagger.Module

@Module(includes = [AssistedInject_TasksAssistedModule::class])
@AssistedModule
interface TasksAssistedModule
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@ package dk.nodes.template.injection.modules
import androidx.lifecycle.ViewModelProvider
import dagger.Binds
import dagger.Module
import dk.nodes.template.injection.DaggerViewModelFactory
import dk.nodes.template.injection.factories.DaggerViewModelFactory
import dk.nodes.template.presentation.ui.main.MainActivityBuilder

@Module(
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
package dk.nodes.template.injection.modules

import androidx.work.WorkerFactory
import dagger.Binds
import dagger.Module
import dagger.multibindings.IntoMap
import dk.nodes.arch.domain.injection.scopes.AppScope
import dk.nodes.template.domain.tasks.SampleTask
import dk.nodes.template.injection.annotations.WorkerKey
import dk.nodes.template.injection.factories.ChildWorkerFactory
import dk.nodes.template.injection.factories.DaggerWorkerFactory

@Module
interface WorkerBindingModule {

@AppScope
@Binds
fun bindWorkerFactory(factory: DaggerWorkerFactory): WorkerFactory

@Binds
@IntoMap
@WorkerKey(SampleTask::class)
fun bindSampleTask(factory: SampleTask.Factory): ChildWorkerFactory
}
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@ import dagger.Binds
import dagger.Module
import dagger.android.ContributesAndroidInjector
import dagger.multibindings.IntoMap
import dk.nodes.template.injection.ViewModelKey
import dk.nodes.template.injection.annotations.ViewModelKey

@Module
internal abstract class MainActivityBuilder {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -34,8 +34,4 @@ class MainActivityViewModel @Inject constructor(
)
}
}

override fun onCleared() {
super.onCleared()
}
}
2 changes: 1 addition & 1 deletion build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@ buildscript {
jcenter()
}
dependencies {
classpath 'com.android.tools.build:gradle:3.3.0'
classpath 'com.android.tools.build:gradle:3.3.2'
classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
classpath "dk.nodes.nstack:translation:1.0.4"
classpath "com.github.gfx.ribbonizer:ribbonizer-plugin:2.1.0"
Expand Down
20 changes: 0 additions & 20 deletions gradle.properties

This file was deleted.

0 comments on commit 95e94bc

Please sign in to comment.