Annotation Type OptionalInject
-
@Target(TYPE) public @interface OptionalInject
When placed on anAndroidEntryPoint
-annotated activity / fragment / view / etc, allows injection to occur optionally based on whether or not the application is using Hilt.When using this annotation, you can use
OptionalInjectCheck.wasInjectedByHilt(androidx.activity.ComponentActivity)
to check at runtime if the annotated class was injected by Hilt. Additionally, this annotation will also cause a method,wasInjectedByHilt
to be generated in the Hilt base class as well, that behaves the same asOptionalInjectCheck.wasInjectedByHilt(androidx.activity.ComponentActivity)
. The method is available to users that extend the Hilt base class directly and don't use the Gradle plugin.Example usage:
@OptionalInject @AndroidEntryPoint public final class MyFragment extends Fragment { @Inject Foo foo; @Override public void onAttach(Activity activity) { // Injection will happen here, but only if the Activity and the Application are also // AndroidEntryPoints and were injected by Hilt. super.onAttach(activity); if (!OptionalInjectCheck.wasInjectedByHilt(this)) { // Get Dagger components the previous way and inject. } } }
This is useful for libraries that have to support Hilt users as well as non-Hilt users. Injection will happen if the parent type (e.g. the activity of a fragment) is an
AndroidEntryPoint
annotated class and if that parent was also injected via Hilt.- See Also:
OptionalInjectCheck
, Optional injection