• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (C) 2017 The Dagger Authors.
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  * http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  */
16 
17 package dagger.android.support.functional;
18 
19 import dagger.Binds;
20 import dagger.Component;
21 import dagger.Module;
22 import dagger.Provides;
23 import dagger.Subcomponent;
24 import dagger.android.AndroidInjectionModule;
25 import dagger.android.AndroidInjector;
26 import dagger.android.support.DaggerApplication;
27 import dagger.android.support.functional.AllControllersAreDirectChildrenOfApplication.ApplicationComponent.BroadcastReceiverSubcomponent.BroadcastReceiverModule;
28 import dagger.android.support.functional.AllControllersAreDirectChildrenOfApplication.ApplicationComponent.ContentProviderSubcomponent.ContentProviderModule;
29 import dagger.android.support.functional.AllControllersAreDirectChildrenOfApplication.ApplicationComponent.InnerActivitySubcomponent.InnerActivityModule;
30 import dagger.android.support.functional.AllControllersAreDirectChildrenOfApplication.ApplicationComponent.IntentServiceSubcomponent.IntentServiceModule;
31 import dagger.android.support.functional.AllControllersAreDirectChildrenOfApplication.ApplicationComponent.ServiceSubcomponent.ServiceModule;
32 import dagger.multibindings.ClassKey;
33 import dagger.multibindings.IntoMap;
34 import dagger.multibindings.IntoSet;
35 
36 public final class AllControllersAreDirectChildrenOfApplication extends DaggerApplication {
37 
38   @Override
applicationInjector()39   protected AndroidInjector<AllControllersAreDirectChildrenOfApplication> applicationInjector() {
40     return DaggerAllControllersAreDirectChildrenOfApplication_ApplicationComponent.create();
41   }
42 
43   @Component(modules = {ApplicationComponent.ApplicationModule.class, AndroidInjectionModule.class})
44   interface ApplicationComponent
45       extends AndroidInjector<AllControllersAreDirectChildrenOfApplication> {
46     @Module(
47       subcomponents = {
48         ActivitySubcomponent.class,
49         InnerActivitySubcomponent.class,
50         ParentFragmentSubcomponent.class,
51         ChildFragmentSubcomponent.class,
52         DialogFragmentSubcomponent.class,
53         ServiceSubcomponent.class,
54         IntentServiceSubcomponent.class,
55         BroadcastReceiverSubcomponent.class,
56         ContentProviderSubcomponent.class
57       }
58     )
59     abstract class ApplicationModule {
60       @Provides
61       @IntoSet
addToComponentHierarchy()62       static Class<?> addToComponentHierarchy() {
63         return ApplicationComponent.class;
64       }
65 
66       @Binds
67       @IntoMap
68       @ClassKey(TestActivity.class)
bindFactoryForTestActivity( ActivitySubcomponent.Builder builder)69       abstract AndroidInjector.Factory<?> bindFactoryForTestActivity(
70           ActivitySubcomponent.Builder builder);
71 
72       @Binds
73       @IntoMap
74       @ClassKey(OuterClass.TestInnerClassActivity.class)
bindFactoryForInnerActivity( InnerActivitySubcomponent.Builder builder)75       abstract AndroidInjector.Factory<?> bindFactoryForInnerActivity(
76           InnerActivitySubcomponent.Builder builder);
77 
78       @Binds
79       @IntoMap
80       @ClassKey(TestParentFragment.class)
bindFactoryForParentFragment( ParentFragmentSubcomponent.Builder builder)81       abstract AndroidInjector.Factory<?> bindFactoryForParentFragment(
82           ParentFragmentSubcomponent.Builder builder);
83 
84       @Binds
85       @IntoMap
86       @ClassKey(TestChildFragment.class)
bindFactoryForChildFragment( ChildFragmentSubcomponent.Builder builder)87       abstract AndroidInjector.Factory<?> bindFactoryForChildFragment(
88           ChildFragmentSubcomponent.Builder builder);
89 
90       @Binds
91       @IntoMap
92       @ClassKey(TestDialogFragment.class)
bindFactoryForDialogFragment( DialogFragmentSubcomponent.Builder builder)93       abstract AndroidInjector.Factory<?> bindFactoryForDialogFragment(
94           DialogFragmentSubcomponent.Builder builder);
95 
96       @Binds
97       @IntoMap
98       @ClassKey(TestService.class)
bindFactoryForService( ServiceSubcomponent.Builder builder)99       abstract AndroidInjector.Factory<?> bindFactoryForService(
100           ServiceSubcomponent.Builder builder);
101 
102       @Binds
103       @IntoMap
104       @ClassKey(TestIntentService.class)
bindFactoryForIntentService( IntentServiceSubcomponent.Builder builder)105       abstract AndroidInjector.Factory<?> bindFactoryForIntentService(
106           IntentServiceSubcomponent.Builder builder);
107 
108       @Binds
109       @IntoMap
110       @ClassKey(TestBroadcastReceiver.class)
bindFactoryForBroadcastReceiver( BroadcastReceiverSubcomponent.Builder builder)111       abstract AndroidInjector.Factory<?> bindFactoryForBroadcastReceiver(
112           BroadcastReceiverSubcomponent.Builder builder);
113 
114       @Binds
115       @IntoMap
116       @ClassKey(TestContentProvider.class)
bindFactoryForContentProvider( ContentProviderSubcomponent.Builder builder)117       abstract AndroidInjector.Factory<?> bindFactoryForContentProvider(
118           ContentProviderSubcomponent.Builder builder);
119     }
120 
121     @Subcomponent(modules = ActivitySubcomponent.ActivityModule.class)
122     interface ActivitySubcomponent extends AndroidInjector<TestActivity> {
123       @Module
124       abstract class ActivityModule {
125         @Provides
126         @IntoSet
addToComponentHierarchy()127         static Class<?> addToComponentHierarchy() {
128           return ActivitySubcomponent.class;
129         }
130       }
131 
132       @Subcomponent.Builder
133       abstract class Builder extends AndroidInjector.Builder<TestActivity> {}
134     }
135 
136     @Subcomponent(modules = InnerActivityModule.class)
137     interface InnerActivitySubcomponent extends AndroidInjector<OuterClass.TestInnerClassActivity> {
138       @Subcomponent.Builder
139       abstract class Builder extends AndroidInjector.Builder<OuterClass.TestInnerClassActivity> {}
140 
141       @Module
142       abstract class InnerActivityModule {
143         @Provides
144         @IntoSet
addToComponentHierarchy()145         static Class<?> addToComponentHierarchy() {
146           return InnerActivitySubcomponent.class;
147         }
148       }
149     }
150 
151     @Subcomponent(modules = ParentFragmentSubcomponent.ParentFragmentModule.class)
152     interface ParentFragmentSubcomponent extends AndroidInjector<TestParentFragment> {
153       @Module
154       abstract class ParentFragmentModule {
155         @Provides
156         @IntoSet
addToComponentHierarchy()157         static Class<?> addToComponentHierarchy() {
158           return ParentFragmentSubcomponent.class;
159         }
160       }
161 
162       @Subcomponent.Builder
163       abstract class Builder extends AndroidInjector.Builder<TestParentFragment> {}
164     }
165 
166     @Subcomponent(modules = ChildFragmentSubcomponent.ChildFragmentModule.class)
167     interface ChildFragmentSubcomponent extends AndroidInjector<TestChildFragment> {
168       @Module
169       abstract class ChildFragmentModule {
170         @Provides
171         @IntoSet
addToComponentHierarchy()172         static Class<?> addToComponentHierarchy() {
173           return ChildFragmentSubcomponent.class;
174         }
175       }
176 
177       @Subcomponent.Builder
178       abstract class Builder extends AndroidInjector.Builder<TestChildFragment> {}
179     }
180 
181     @Subcomponent(modules = DialogFragmentSubcomponent.DialogFragmentModule.class)
182     interface DialogFragmentSubcomponent extends AndroidInjector<TestDialogFragment> {
183       @Module
184       abstract class DialogFragmentModule {
185         @Provides
186         @IntoSet
addToComponentHierarchy()187         static Class<?> addToComponentHierarchy() {
188           return DialogFragmentSubcomponent.class;
189         }
190       }
191 
192       @Subcomponent.Builder
193       abstract class Builder extends AndroidInjector.Builder<TestDialogFragment> {}
194     }
195 
196     @Subcomponent(modules = ServiceModule.class)
197     interface ServiceSubcomponent extends AndroidInjector<TestService> {
198       @Subcomponent.Builder
199       abstract class Builder extends AndroidInjector.Builder<TestService> {}
200 
201       @Module
202       abstract class ServiceModule {
203         @Provides
204         @IntoSet
addToComponentHierarchy()205         static Class<?> addToComponentHierarchy() {
206           return ServiceSubcomponent.class;
207         }
208       }
209     }
210 
211     @Subcomponent(modules = IntentServiceModule.class)
212     interface IntentServiceSubcomponent extends AndroidInjector<TestIntentService> {
213       @Subcomponent.Builder
214       abstract class Builder extends AndroidInjector.Builder<TestIntentService> {}
215 
216       @Module
217       abstract class IntentServiceModule {
218         @Provides
219         @IntoSet
addToComponentHierarchy()220         static Class<?> addToComponentHierarchy() {
221           return IntentServiceSubcomponent.class;
222         }
223       }
224     }
225 
226     @Subcomponent(modules = BroadcastReceiverModule.class)
227     interface BroadcastReceiverSubcomponent extends AndroidInjector<TestBroadcastReceiver> {
228       @Subcomponent.Builder
229       abstract class Builder extends AndroidInjector.Builder<TestBroadcastReceiver> {}
230 
231       @Module
232       abstract class BroadcastReceiverModule {
233         @Provides
234         @IntoSet
addToComponentHierarchy()235         static Class<?> addToComponentHierarchy() {
236           return BroadcastReceiverSubcomponent.class;
237         }
238       }
239     }
240 
241     @Subcomponent(modules = ContentProviderModule.class)
242     interface ContentProviderSubcomponent extends AndroidInjector<TestContentProvider> {
243       @Subcomponent.Builder
244       abstract class Builder extends AndroidInjector.Builder<TestContentProvider> {}
245 
246       @Module
247       abstract class ContentProviderModule {
248         @Provides
249         @IntoSet
addToComponentHierarchy()250         static Class<?> addToComponentHierarchy() {
251           return ContentProviderSubcomponent.class;
252         }
253       }
254     }
255   }
256 }
257