O Google tem o compromisso de promover a igualdade racial para as comunidades negras. Saiba como.

Integrações de Hilt e Jetpack

O Hilt inclui extensões para fornecer classes de outras bibliotecas do Jetpack. Atualmente, o Hilt é compatível com os seguintes componentes do Jetpack:

  • ViewModel
  • WorkManager

É preciso adicionar as dependências do Hilt para aproveitar essas integrações. Para mais informações sobre como adicionar dependências, consulte Injeção de dependências com Hilt.

Injetar objetos ViewModel com Hilt

Adicione as seguintes dependências a mais ao arquivo do Gradle. Além da biblioteca, você precisa incluir outro processador de anotações que funcione sobre o processador Hilt:

app/build.gradle

...
dependencies {
  ...
  implementation 'androidx.hilt:hilt-lifecycle-viewmodel:1.0.0-alpha01'
  // When using Kotlin.
  kapt 'androidx.hilt:hilt-compiler:1.0.0-alpha01'
  // When using Java.
  annotationProcessor 'androidx.hilt:hilt-compiler:1.0.0-alpha01'
}

Forneça um ViewModel usando a anotação @ViewModelInject no construtor do objeto ViewModel. Também é necessário anotar a dependência SavedStateHandle com @Assisted:

Kotlin

class ExampleViewModel @ViewModelInject constructor(
  private val repository: ExampleRepository,
  @Assisted private val savedStateHandle: SavedStateHandle
) : ViewModel() {
  ...
}

Java

public class ExampleViewModel extends ViewModel {

  private final ExampleRepository repository;
  private final SavedStateHandle savedStateHandle;

  @ViewModelInject
  ExampleViewModel(
      ExampleRepository repository,
      @Assisted SavedStateHandle savedStateHandle)
    {
    this.repository = repository;
    this.savedStateHandle = savedStateHandle;
  }
  ...
}

Em seguida, uma atividade ou um fragmento anotado com @AndroidEntryPoint pode receber a instância ViewModel normalmente usando ViewModelProvider ou as extensões KTX by viewModels():

Kotlin

@AndroidEntryPoint
class ExampleActivity : AppCompatActivity() {
  private val exampleViewModel: ExampleViewModel by viewModels()
  ...
}

Java

@AndroidEntryPoint
public class ExampleActivity extends AppCompatActivity {

  private ExampleViewModel exampleViewModel;

  @Override
  protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    exampleViewModel = new ViewModelProvider(this).get(ExampleViewModel.class);
  }
  ...
}

Injetar WorkManager com Hilt

Adicione as seguintes dependências a mais ao arquivo do Gradle. Além da biblioteca, você precisa incluir outro processador de anotações que funcione sobre o processador Hilt:

app/build.gradle

...
dependencies {
  ...
  implementation 'androidx.hilt:hilt-work:1.0.0-alpha01'
  // When using Kotlin.
  kapt 'androidx.hilt:hilt-compiler:1.0.0-alpha01'
  // When using Java.
  annotationProcessor 'androidx.hilt:hilt-compiler:1.0.0-alpha01'
}

Injete um Worker usando a anotação @WorkerInject no construtor do objeto Worker. Só é possível usar @Singleton ou vinculações sem escopo em objetos Worker. Também é necessário anotar as dependências Context e WorkerParameters com @Assisted:

Kotlin

class ExampleWorker @WorkerInject constructor(
  @Assisted appContext: Context,
  @Assisted workerParams: WorkerParameters,
  workerDependency: WorkerDependency
) : Worker(appContext, workerParams) { ... }

Java

public class ExampleWorker extends Worker {

  private final WorkerDependency workerDependency;

  @WorkerInject
  ExampleWorker(
    @Assisted @NonNull Context context,
    @Assisted @NonNull WorkerParameters params,
    WorkerDependency workerDependency
  ) {
    super(context, params);
    this.workerDependency = workerDependency;
  }
  ...
}

Em seguida, faça com que a classe Application implemente a interface Configuration.Provider, injete uma instância de HiltWorkFactory e transmita-a para a configuração WorkManager da seguinte maneira:

Kotlin

@HiltAndroidApp
class ExampleApplication : Application(), Configuration.Provider {

  @Inject lateinit var workerFactory: HiltWorkerFactory

  override fun getWorkManagerConfiguration() =
      Configuration.Builder()
            .setWorkerFactory(workerFactory)
            .build()
}

Java

@HiltAndroidApp
public class ExampleApplication extends Application implements Configuration.Provider {

  @Inject HiltWorkerFactory workerFactory;

  @Override
  public Configuration getWorkManagerConfiguration() {
    return Configuration.Builder()
             .setWorkerFactory(workerFactory)
             .build();
  }
}