xref: /aosp_15_r20/external/dagger2/javatests/dagger/hilt/android/OptionalInjectTestClasses.java (revision f585d8a307d0621d6060bd7e80091fdcbf94fe27)
1*f585d8a3SJacky Wang /*
2*f585d8a3SJacky Wang  * Copyright (C) 2021 The Dagger Authors.
3*f585d8a3SJacky Wang  *
4*f585d8a3SJacky Wang  * Licensed under the Apache License, Version 2.0 (the "License");
5*f585d8a3SJacky Wang  * you may not use this file except in compliance with the License.
6*f585d8a3SJacky Wang  * You may obtain a copy of the License at
7*f585d8a3SJacky Wang  *
8*f585d8a3SJacky Wang  * http://www.apache.org/licenses/LICENSE-2.0
9*f585d8a3SJacky Wang  *
10*f585d8a3SJacky Wang  * Unless required by applicable law or agreed to in writing, software
11*f585d8a3SJacky Wang  * distributed under the License is distributed on an "AS IS" BASIS,
12*f585d8a3SJacky Wang  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13*f585d8a3SJacky Wang  * See the License for the specific language governing permissions and
14*f585d8a3SJacky Wang  * limitations under the License.
15*f585d8a3SJacky Wang  */
16*f585d8a3SJacky Wang 
17*f585d8a3SJacky Wang package dagger.hilt.android;
18*f585d8a3SJacky Wang 
19*f585d8a3SJacky Wang import android.app.IntentService;
20*f585d8a3SJacky Wang import android.app.Service;
21*f585d8a3SJacky Wang import android.content.BroadcastReceiver;
22*f585d8a3SJacky Wang import android.content.Context;
23*f585d8a3SJacky Wang import android.content.Intent;
24*f585d8a3SJacky Wang import android.os.IBinder;
25*f585d8a3SJacky Wang import androidx.fragment.app.Fragment;
26*f585d8a3SJacky Wang import androidx.fragment.app.FragmentActivity;
27*f585d8a3SJacky Wang import android.widget.LinearLayout;
28*f585d8a3SJacky Wang import androidx.lifecycle.ViewModel;
29*f585d8a3SJacky Wang import dagger.Module;
30*f585d8a3SJacky Wang import dagger.Provides;
31*f585d8a3SJacky Wang import dagger.hilt.InstallIn;
32*f585d8a3SJacky Wang import dagger.hilt.android.lifecycle.HiltViewModel;
33*f585d8a3SJacky Wang import dagger.hilt.android.migration.OptionalInject;
34*f585d8a3SJacky Wang import dagger.hilt.components.SingletonComponent;
35*f585d8a3SJacky Wang import javax.inject.Inject;
36*f585d8a3SJacky Wang import javax.inject.Qualifier;
37*f585d8a3SJacky Wang 
38*f585d8a3SJacky Wang /** Test classes for optional injection. */
39*f585d8a3SJacky Wang public final class OptionalInjectTestClasses {
40*f585d8a3SJacky Wang   public static final String APP_BINDING = "app binding";
41*f585d8a3SJacky Wang   public static final String ACTIVITY_BINDING = "activity binding";
42*f585d8a3SJacky Wang   public static final String FRAGMENT_BINDING = "fragment binding";
43*f585d8a3SJacky Wang   public static final String VIEW_BINDING = "view binding";
44*f585d8a3SJacky Wang 
45*f585d8a3SJacky Wang   @Qualifier
46*f585d8a3SJacky Wang   @interface ActivityLevel {}
47*f585d8a3SJacky Wang 
48*f585d8a3SJacky Wang   @Qualifier
49*f585d8a3SJacky Wang   @interface FragmentLevel {}
50*f585d8a3SJacky Wang 
51*f585d8a3SJacky Wang   @Qualifier
52*f585d8a3SJacky Wang   @interface ViewLevel {}
53*f585d8a3SJacky Wang 
54*f585d8a3SJacky Wang   @AndroidEntryPoint(FragmentActivity.class)
55*f585d8a3SJacky Wang   @OptionalInject
56*f585d8a3SJacky Wang   public static class TestActivity extends Hilt_OptionalInjectTestClasses_TestActivity {
57*f585d8a3SJacky Wang     @Inject @ActivityLevel String testActivityBinding;
58*f585d8a3SJacky Wang   }
59*f585d8a3SJacky Wang 
60*f585d8a3SJacky Wang   @AndroidEntryPoint(TestActivity.class)
61*f585d8a3SJacky Wang   public static final class NonOptionalSubclassActivity
62*f585d8a3SJacky Wang       extends Hilt_OptionalInjectTestClasses_NonOptionalSubclassActivity {
63*f585d8a3SJacky Wang     @Inject @ActivityLevel String testActivitySubclassBinding;
64*f585d8a3SJacky Wang   }
65*f585d8a3SJacky Wang 
66*f585d8a3SJacky Wang   @AndroidEntryPoint(TestActivity.class)
67*f585d8a3SJacky Wang   @OptionalInject
68*f585d8a3SJacky Wang   public static final class OptionalSubclassActivity
69*f585d8a3SJacky Wang       extends Hilt_OptionalInjectTestClasses_OptionalSubclassActivity {
70*f585d8a3SJacky Wang     @Inject @ActivityLevel String testActivitySubclassBinding;
71*f585d8a3SJacky Wang   }
72*f585d8a3SJacky Wang 
73*f585d8a3SJacky Wang   @AndroidEntryPoint(Fragment.class)
74*f585d8a3SJacky Wang   @OptionalInject
75*f585d8a3SJacky Wang   public static final class TestFragment extends Hilt_OptionalInjectTestClasses_TestFragment {
76*f585d8a3SJacky Wang     @Inject @FragmentLevel String testFragmentBinding;
77*f585d8a3SJacky Wang   }
78*f585d8a3SJacky Wang 
79*f585d8a3SJacky Wang   @AndroidEntryPoint(LinearLayout.class)
80*f585d8a3SJacky Wang   @OptionalInject
81*f585d8a3SJacky Wang   public static final class TestView extends Hilt_OptionalInjectTestClasses_TestView {
82*f585d8a3SJacky Wang     @Inject @ViewLevel String testViewBinding;
83*f585d8a3SJacky Wang 
TestView(Context context)84*f585d8a3SJacky Wang     TestView(Context context) {
85*f585d8a3SJacky Wang       super(context);
86*f585d8a3SJacky Wang     }
87*f585d8a3SJacky Wang   }
88*f585d8a3SJacky Wang 
89*f585d8a3SJacky Wang   @WithFragmentBindings
90*f585d8a3SJacky Wang   @AndroidEntryPoint(LinearLayout.class)
91*f585d8a3SJacky Wang   @OptionalInject
92*f585d8a3SJacky Wang   public static final class TestWithFragmentBindingsView
93*f585d8a3SJacky Wang       extends Hilt_OptionalInjectTestClasses_TestWithFragmentBindingsView {
94*f585d8a3SJacky Wang     @Inject @ViewLevel String testViewBinding;
95*f585d8a3SJacky Wang 
TestWithFragmentBindingsView(Context context)96*f585d8a3SJacky Wang     TestWithFragmentBindingsView(Context context) {
97*f585d8a3SJacky Wang       super(context);
98*f585d8a3SJacky Wang     }
99*f585d8a3SJacky Wang   }
100*f585d8a3SJacky Wang 
101*f585d8a3SJacky Wang   @HiltViewModel
102*f585d8a3SJacky Wang   public static final class TestViewModel extends ViewModel {
103*f585d8a3SJacky Wang     final String appBinding;
104*f585d8a3SJacky Wang 
TestViewModel(String appBinding)105*f585d8a3SJacky Wang     @Inject TestViewModel(String appBinding) {
106*f585d8a3SJacky Wang       this.appBinding = appBinding;
107*f585d8a3SJacky Wang     }
108*f585d8a3SJacky Wang   }
109*f585d8a3SJacky Wang 
110*f585d8a3SJacky Wang   public static final class NonHiltViewModel extends ViewModel {}
111*f585d8a3SJacky Wang 
112*f585d8a3SJacky Wang   @AndroidEntryPoint(Service.class)
113*f585d8a3SJacky Wang   @OptionalInject
114*f585d8a3SJacky Wang   public static final class TestService extends Hilt_OptionalInjectTestClasses_TestService {
115*f585d8a3SJacky Wang     @Inject String testAppBinding;
116*f585d8a3SJacky Wang 
117*f585d8a3SJacky Wang     @Override
onBind(Intent intent)118*f585d8a3SJacky Wang     public IBinder onBind(Intent intent) {
119*f585d8a3SJacky Wang       return null;
120*f585d8a3SJacky Wang     }
121*f585d8a3SJacky Wang   }
122*f585d8a3SJacky Wang 
123*f585d8a3SJacky Wang   @AndroidEntryPoint(IntentService.class)
124*f585d8a3SJacky Wang   @OptionalInject
125*f585d8a3SJacky Wang   public static final class TestIntentService
126*f585d8a3SJacky Wang       extends Hilt_OptionalInjectTestClasses_TestIntentService {
TestIntentService()127*f585d8a3SJacky Wang     TestIntentService() {
128*f585d8a3SJacky Wang       super("TestIntentService");
129*f585d8a3SJacky Wang     }
130*f585d8a3SJacky Wang 
131*f585d8a3SJacky Wang     @Inject String testAppBinding;
132*f585d8a3SJacky Wang 
133*f585d8a3SJacky Wang     @Override
onHandleIntent(Intent intent)134*f585d8a3SJacky Wang     public void onHandleIntent(Intent intent) {}
135*f585d8a3SJacky Wang   }
136*f585d8a3SJacky Wang 
137*f585d8a3SJacky Wang   @AndroidEntryPoint(BroadcastReceiver.class)
138*f585d8a3SJacky Wang   @OptionalInject
139*f585d8a3SJacky Wang   public static final class TestBroadcastReceiver
140*f585d8a3SJacky Wang       extends Hilt_OptionalInjectTestClasses_TestBroadcastReceiver {
141*f585d8a3SJacky Wang     @Inject String testAppBinding;
142*f585d8a3SJacky Wang   }
143*f585d8a3SJacky Wang 
144*f585d8a3SJacky Wang   @Module
145*f585d8a3SJacky Wang   @InstallIn(SingletonComponent.class)
146*f585d8a3SJacky Wang   static final class AppModule {
147*f585d8a3SJacky Wang     @Provides
provideAppString()148*f585d8a3SJacky Wang     static String provideAppString() {
149*f585d8a3SJacky Wang       return APP_BINDING;
150*f585d8a3SJacky Wang     }
151*f585d8a3SJacky Wang 
152*f585d8a3SJacky Wang     @Provides
153*f585d8a3SJacky Wang     @ActivityLevel
provideActivityString()154*f585d8a3SJacky Wang     static String provideActivityString() {
155*f585d8a3SJacky Wang       return ACTIVITY_BINDING;
156*f585d8a3SJacky Wang     }
157*f585d8a3SJacky Wang 
158*f585d8a3SJacky Wang     @Provides
159*f585d8a3SJacky Wang     @FragmentLevel
provideFragmentString()160*f585d8a3SJacky Wang     static String provideFragmentString() {
161*f585d8a3SJacky Wang       return FRAGMENT_BINDING;
162*f585d8a3SJacky Wang     }
163*f585d8a3SJacky Wang 
164*f585d8a3SJacky Wang     @Provides
165*f585d8a3SJacky Wang     @ViewLevel
provideViewString()166*f585d8a3SJacky Wang     static String provideViewString() {
167*f585d8a3SJacky Wang       return VIEW_BINDING;
168*f585d8a3SJacky Wang     }
169*f585d8a3SJacky Wang   }
170*f585d8a3SJacky Wang }
171