xref: /aosp_15_r20/external/dagger2/javatests/dagger/hilt/android/OptionalInjectTestClasses.java (revision f585d8a307d0621d6060bd7e80091fdcbf94fe27)
1 /*
2  * Copyright (C) 2021 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.hilt.android;
18 
19 import android.app.IntentService;
20 import android.app.Service;
21 import android.content.BroadcastReceiver;
22 import android.content.Context;
23 import android.content.Intent;
24 import android.os.IBinder;
25 import androidx.fragment.app.Fragment;
26 import androidx.fragment.app.FragmentActivity;
27 import android.widget.LinearLayout;
28 import androidx.lifecycle.ViewModel;
29 import dagger.Module;
30 import dagger.Provides;
31 import dagger.hilt.InstallIn;
32 import dagger.hilt.android.lifecycle.HiltViewModel;
33 import dagger.hilt.android.migration.OptionalInject;
34 import dagger.hilt.components.SingletonComponent;
35 import javax.inject.Inject;
36 import javax.inject.Qualifier;
37 
38 /** Test classes for optional injection. */
39 public final class OptionalInjectTestClasses {
40   public static final String APP_BINDING = "app binding";
41   public static final String ACTIVITY_BINDING = "activity binding";
42   public static final String FRAGMENT_BINDING = "fragment binding";
43   public static final String VIEW_BINDING = "view binding";
44 
45   @Qualifier
46   @interface ActivityLevel {}
47 
48   @Qualifier
49   @interface FragmentLevel {}
50 
51   @Qualifier
52   @interface ViewLevel {}
53 
54   @AndroidEntryPoint(FragmentActivity.class)
55   @OptionalInject
56   public static class TestActivity extends Hilt_OptionalInjectTestClasses_TestActivity {
57     @Inject @ActivityLevel String testActivityBinding;
58   }
59 
60   @AndroidEntryPoint(TestActivity.class)
61   public static final class NonOptionalSubclassActivity
62       extends Hilt_OptionalInjectTestClasses_NonOptionalSubclassActivity {
63     @Inject @ActivityLevel String testActivitySubclassBinding;
64   }
65 
66   @AndroidEntryPoint(TestActivity.class)
67   @OptionalInject
68   public static final class OptionalSubclassActivity
69       extends Hilt_OptionalInjectTestClasses_OptionalSubclassActivity {
70     @Inject @ActivityLevel String testActivitySubclassBinding;
71   }
72 
73   @AndroidEntryPoint(Fragment.class)
74   @OptionalInject
75   public static final class TestFragment extends Hilt_OptionalInjectTestClasses_TestFragment {
76     @Inject @FragmentLevel String testFragmentBinding;
77   }
78 
79   @AndroidEntryPoint(LinearLayout.class)
80   @OptionalInject
81   public static final class TestView extends Hilt_OptionalInjectTestClasses_TestView {
82     @Inject @ViewLevel String testViewBinding;
83 
TestView(Context context)84     TestView(Context context) {
85       super(context);
86     }
87   }
88 
89   @WithFragmentBindings
90   @AndroidEntryPoint(LinearLayout.class)
91   @OptionalInject
92   public static final class TestWithFragmentBindingsView
93       extends Hilt_OptionalInjectTestClasses_TestWithFragmentBindingsView {
94     @Inject @ViewLevel String testViewBinding;
95 
TestWithFragmentBindingsView(Context context)96     TestWithFragmentBindingsView(Context context) {
97       super(context);
98     }
99   }
100 
101   @HiltViewModel
102   public static final class TestViewModel extends ViewModel {
103     final String appBinding;
104 
TestViewModel(String appBinding)105     @Inject TestViewModel(String appBinding) {
106       this.appBinding = appBinding;
107     }
108   }
109 
110   public static final class NonHiltViewModel extends ViewModel {}
111 
112   @AndroidEntryPoint(Service.class)
113   @OptionalInject
114   public static final class TestService extends Hilt_OptionalInjectTestClasses_TestService {
115     @Inject String testAppBinding;
116 
117     @Override
onBind(Intent intent)118     public IBinder onBind(Intent intent) {
119       return null;
120     }
121   }
122 
123   @AndroidEntryPoint(IntentService.class)
124   @OptionalInject
125   public static final class TestIntentService
126       extends Hilt_OptionalInjectTestClasses_TestIntentService {
TestIntentService()127     TestIntentService() {
128       super("TestIntentService");
129     }
130 
131     @Inject String testAppBinding;
132 
133     @Override
onHandleIntent(Intent intent)134     public void onHandleIntent(Intent intent) {}
135   }
136 
137   @AndroidEntryPoint(BroadcastReceiver.class)
138   @OptionalInject
139   public static final class TestBroadcastReceiver
140       extends Hilt_OptionalInjectTestClasses_TestBroadcastReceiver {
141     @Inject String testAppBinding;
142   }
143 
144   @Module
145   @InstallIn(SingletonComponent.class)
146   static final class AppModule {
147     @Provides
provideAppString()148     static String provideAppString() {
149       return APP_BINDING;
150     }
151 
152     @Provides
153     @ActivityLevel
provideActivityString()154     static String provideActivityString() {
155       return ACTIVITY_BINDING;
156     }
157 
158     @Provides
159     @FragmentLevel
provideFragmentString()160     static String provideFragmentString() {
161       return FRAGMENT_BINDING;
162     }
163 
164     @Provides
165     @ViewLevel
provideViewString()166     static String provideViewString() {
167       return VIEW_BINDING;
168     }
169   }
170 }
171