Skip to content
This repository was archived by the owner on Aug 20, 2025. It is now read-only.
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,7 @@
<category android:name="android.intent.category.DEFAULT"/>
</intent-filter>
</activity>
<activity android:name=".ExampleFragmentInjectionActivity"/>
<service android:name=".ExampleService"/>
</application>
</manifest>
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
package com.example;

import dagger.Module;
import dagger.android.ContributesAndroidInjector;

@Module
public abstract class ActivityModule {
@ContributesAndroidInjector(modules = ExampleActivity.LongModule.class)
abstract ExampleActivity contributeExampleActivity();

@ContributesAndroidInjector(modules = {ExampleActivity.LongModule.class, FragmentModule.class})
abstract ExampleFragmentInjectionActivity contributeExampleFragmentInjectionActivity();

@Module
abstract static class FragmentModule {
@ContributesAndroidInjector
abstract ExampleFragment exampleFragment();
}
}
Original file line number Diff line number Diff line change
@@ -1,20 +1,18 @@
package com.example;

import com.example.ExampleActivity.ExampleActivityModule;
import com.example.ExampleService.ExampleServiceModule;
import dagger.Component;
import dagger.android.AndroidInjectionModule;
import dagger.android.AndroidInjector;
import dagger.android.DispatchingAndroidInjector;

@Component(modules = {
ExampleActivityModule.class,
ExampleServiceModule.class,
AndroidInjectionModule.class,
StringModule.class
})
@Component(
modules = {
ActivityModule.class,
ExampleServiceModule.class,
AndroidInjectionModule.class,
StringModule.class
})
public interface AppComponent extends AndroidInjector<ExampleApp> {
@Component.Factory
interface Factory extends AndroidInjector.Factory<ExampleApp> {
}
interface Factory extends AndroidInjector.Factory<ExampleApp> {}
}
Original file line number Diff line number Diff line change
@@ -1,21 +1,19 @@
package com.example;

import static android.util.TypedValue.COMPLEX_UNIT_DIP;
import static android.view.Gravity.CENTER;
import static android.view.ViewGroup.LayoutParams.MATCH_PARENT;

import android.content.Intent;
import android.os.Bundle;
import android.view.ViewGroup.LayoutParams;
import android.widget.TextView;
import androidx.annotation.Nullable;
import dagger.Module;
import dagger.Provides;
import dagger.android.AndroidInjection;
import dagger.android.ContributesAndroidInjector;
import dagger.android.DaggerActivity;
import javax.inject.Inject;

import static android.util.TypedValue.COMPLEX_UNIT_DIP;
import static android.view.Gravity.CENTER;
import static android.view.ViewGroup.LayoutParams.MATCH_PARENT;

public final class ExampleActivity extends DaggerActivity {
@Inject String string;
@Inject long aLong;
Expand All @@ -35,20 +33,13 @@ protected void onCreate(@Nullable Bundle savedInstanceState) {
startService(new Intent(this, ExampleService.class));
}

@Module
static abstract class ExampleActivityModule {
@ContributesAndroidInjector(modules = LongModule.class)
abstract ExampleActivity activity();
}

@Module(includes = IntegerModule.class)
static class LongModule {

@Provides
static long provideLong() {
return 10L;
}

}

@Module
Expand All @@ -59,5 +50,4 @@ static int provideInt() {
return 20;
}
}

}
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,8 @@
import dagger.android.DaggerApplication;

public final class ExampleApp extends DaggerApplication {
@Override protected AndroidInjector<? extends DaggerApplication> applicationInjector() {
@Override
protected AndroidInjector<? extends DaggerApplication> applicationInjector() {
return DaggerAppComponent.factory().create(this);
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,33 @@
package com.example;

import static android.util.TypedValue.COMPLEX_UNIT_DIP;
import static android.view.Gravity.CENTER;
import static android.view.ViewGroup.LayoutParams.MATCH_PARENT;

import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.TextView;
import androidx.annotation.Nullable;
import dagger.android.DaggerFragment;
import javax.inject.Inject;

public class ExampleFragment extends DaggerFragment {
@Inject String string;
@Inject long aLong;
@Inject int anInt;

@Nullable
@Override
public View onCreateView(
LayoutInflater inflater, @Nullable ViewGroup container, Bundle savedInstanceState) {
TextView textView = new TextView(getActivity());
textView.setLayoutParams(new ViewGroup.LayoutParams(MATCH_PARENT, MATCH_PARENT));
textView.setGravity(CENTER);
textView.setTextSize(COMPLEX_UNIT_DIP, 40);
textView.setText(string);

return textView;
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
package com.example;

import android.os.Bundle;
import androidx.annotation.Nullable;
import dagger.android.DaggerActivity;

public class ExampleFragmentInjectionActivity extends DaggerActivity {

@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);

if (savedInstanceState == null) {
getFragmentManager()
.beginTransaction()
.replace(android.R.id.content, new ExampleFragment(), "ExampleFragment")
.commit();
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,6 @@
import android.os.IBinder;
import android.widget.Toast;
import dagger.Module;
import dagger.android.AndroidInjection;
import dagger.android.ContributesAndroidInjector;
import dagger.android.DaggerService;
import javax.inject.Inject;
Expand All @@ -27,7 +26,7 @@ public void onCreate() {
}

@Module
static abstract class ExampleServiceModule {
abstract static class ExampleServiceModule {
@ContributesAndroidInjector
abstract ExampleService service();
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,8 @@

@Module
abstract class StringModule {
@Provides static String string() {
@Provides
static String string() {
return "Hello!";
}
}
Original file line number Diff line number Diff line change
@@ -1,16 +1,15 @@
package com.example;

import static androidx.lifecycle.Lifecycle.State.CREATED;
import static androidx.test.core.app.ActivityScenario.launch;
import static com.google.common.truth.Truth.assertThat;
import static org.junit.Assume.assumeFalse;

import androidx.test.core.app.ActivityScenario;
import org.junit.BeforeClass;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.robolectric.RobolectricTestRunner;
import org.robolectric.annotation.Config;

import static androidx.lifecycle.Lifecycle.State.CREATED;
import static androidx.test.core.app.ActivityScenario.launch;
import static com.google.common.truth.Truth.assertThat;
import static org.junit.Assume.assumeFalse;

@RunWith(RobolectricTestRunner.class) //
public final class ExampleActivityTest {
Expand All @@ -20,14 +19,16 @@ public static void beforeClass() {
assumeFalse(BuildConfig.FLAVOR.equals("reflect"));
}

@Test public void activityInjection() {
@Test
public void activityInjection() {
try (ActivityScenario<ExampleActivity> scenario = launch(ExampleActivity.class)) {
scenario.moveToState(CREATED);
scenario.onActivity(activity -> {
assertThat(activity.string).isEqualTo("Hello!");
assertThat(activity.aLong).isEqualTo(10L);
assertThat(activity.anInt).isEqualTo(20);
});
scenario.onActivity(
activity -> {
assertThat(activity.string).isEqualTo("Hello!");
assertThat(activity.aLong).isEqualTo(10L);
assertThat(activity.anInt).isEqualTo(20);
});
}
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,38 @@
package com.example;

import static androidx.lifecycle.Lifecycle.State.CREATED;
import static androidx.test.core.app.ActivityScenario.launch;
import static com.google.common.truth.Truth.assertThat;
import static org.junit.Assume.assumeFalse;

import androidx.test.core.app.ActivityScenario;

import org.junit.BeforeClass;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.robolectric.RobolectricTestRunner;

@RunWith(RobolectricTestRunner.class) //
public class ExampleFragmentInjectionActivityTest {
@BeforeClass
public static void beforeClass() {
// TODO https://github.com/JakeWharton/dagger-reflect/issues/202
assumeFalse(BuildConfig.FLAVOR.equals("reflect"));
}
@Test
public void activityFragmentInjection() {
try (ActivityScenario<ExampleFragmentInjectionActivity> scenario =
launch(ExampleFragmentInjectionActivity.class)) {
scenario.moveToState(CREATED);
scenario.onActivity(
activity -> {
ExampleFragment fragment =
(ExampleFragment)
activity.getFragmentManager().findFragmentByTag("ExampleFragment");
assertThat(fragment.string).isEqualTo("Hello!");
assertThat(fragment.aLong).isEqualTo(10L);
assertThat(fragment.anInt).isEqualTo(20);
});
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,7 @@
<category android:name="android.intent.category.DEFAULT"/>
</intent-filter>
</activity>
<activity android:name=".ExampleFragmentInjectionActivity"/>
<service android:name=".ExampleService"/>
</application>
</manifest>
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
package com.example;

import dagger.Module;
import dagger.android.ContributesAndroidInjector;

@Module
public abstract class ActivityModule {
@ContributesAndroidInjector(modules = ExampleActivity.LongModule.class)
abstract ExampleActivity contributeExampleActivity();

@ContributesAndroidInjector(modules = {ExampleActivity.LongModule.class, FragmentModule.class})
abstract ExampleFragmentInjectionActivity contributeExampleFragmentInjectionActivity();

@Module
abstract static class FragmentModule {
@ContributesAndroidInjector
abstract ExampleFragment exampleFragment();
}
}
Original file line number Diff line number Diff line change
@@ -1,17 +1,17 @@
package com.example;

import com.example.ExampleActivity.ExampleActivityModule;
import com.example.ExampleService.ExampleServiceModule;
import dagger.Component;
import dagger.android.AndroidInjectionModule;
import dagger.android.DispatchingAndroidInjector;

@Component(modules = {
ExampleActivityModule.class,
ExampleServiceModule.class,
AndroidInjectionModule.class,
StringModule.class
})
@Component(
modules = {
ActivityModule.class,
ExampleServiceModule.class,
AndroidInjectionModule.class,
StringModule.class
})
interface AppComponent {
DispatchingAndroidInjector<Object> androidInjector();
}
Original file line number Diff line number Diff line change
@@ -1,5 +1,9 @@
package com.example;

import static android.util.TypedValue.COMPLEX_UNIT_DIP;
import static android.view.Gravity.CENTER;
import static android.view.ViewGroup.LayoutParams.MATCH_PARENT;

import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
Expand All @@ -9,13 +13,8 @@
import dagger.Module;
import dagger.Provides;
import dagger.android.AndroidInjection;
import dagger.android.ContributesAndroidInjector;
import javax.inject.Inject;

import static android.util.TypedValue.COMPLEX_UNIT_DIP;
import static android.view.Gravity.CENTER;
import static android.view.ViewGroup.LayoutParams.MATCH_PARENT;

public final class ExampleActivity extends Activity {
@Inject String string;
@Inject long aLong;
Expand All @@ -36,20 +35,13 @@ protected void onCreate(@Nullable Bundle savedInstanceState) {
startService(new Intent(this, ExampleService.class));
}

@Module
static abstract class ExampleActivityModule {
@ContributesAndroidInjector(modules = LongModule.class)
abstract ExampleActivity activity();
}

@Module(includes = IntegerModule.class)
static class LongModule {

@Provides
static long provideLong() {
return 10L;
}

}

@Module
Expand All @@ -60,5 +52,4 @@ static int provideInt() {
return 20;
}
}

}
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,8 @@
public final class ExampleApp extends Application implements HasAndroidInjector {
private AppComponent component;

@Override public void onCreate() {
@Override
public void onCreate() {
super.onCreate();

component = Dagger.create(AppComponent.class);
Expand Down
Loading