## 1. You can implement View.getActivity() like this: ```java public interface ViewWithActivity { // Using android-gradle-plugin 3.0, which has the desugar step for default methods on interfaces default Activity getActivity() { // https://android.googlesource.com/platform/frameworks/support/+/03e0f3daf3c97ee95cd78b2f07bc9c1be05d43db/v7/mediarouter/src/android/support/v7/app/MediaRouteButton.java#276 Context context = getContext(); while (context instanceof ContextWrapper) { if (context instanceof Activity) { return (Activity)context; } context = ((ContextWrapper) context).getBaseContext(); } throw new IllegalStateException("Context does not stem from an activity: " + getContext()); } } ``` ## 2. Create a parallel to the `Has*Injector` classes ```java interface HasViewInjector { AndroidInjector viewInjector(); } ``` ## 3. Define a new activity base class: ```java public abstract DaggerAppCompatWithViewActivityNamingIsFun extends DaggerAppCompatActivity implements HasViewInjector { @Inject DispatchingAndroidInjector viewInjector; @Override public AndroidInjector viewInjector() { return viewInjector; } } ``` ## 4. Create a module ```java @Module interface ViewInjectionModule { @Multibinds abstract Map, AndroidInjector.Factory> viewInjectorFactories(); } // ... @Component( modules = { AndroidSupportInjectionModule.class, ViewInjectionModule.class, // ... }) interface AppComponent ``` ## 5. `ViewInjection.inject` ```java public final class ViewInjection { public static void inject(ViewWithActivity view) { checkNotNull(view, "view"); Activity activity = view.getActivity(); if (!(application instanceof HasViewInjector)) { throw new RuntimeException( String.format( "%s does not implement %s", activity.getClass().getCanonicalName(), HasViewInjector.class.getCanonicalName())); } AndroidInjector viewInjector = ((HasViewInjector) activity).viewInjector(); checkNotNull(viewInjector, "%s.viewInjector() returned null", activity.getClass()); viewInjector.inject(view); } } ``` ## 6. Equivalent of `@ContributesAndroidInjector MyView` ## 7. Call `ViewInjection.inject(this)` I'm not sure where this should happen yet, perhaps `onFinishInflate` or `onAttachedToWindow()`?