1 /*
2  * Copyright (C) 2019 The Android Open Source Project
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 package com.android.wallpaper.testing;
17 
18 import android.content.Context;
19 
20 import androidx.fragment.app.Fragment;
21 
22 import com.android.wallpaper.compat.WallpaperManagerCompat;
23 import com.android.wallpaper.model.CategoryProvider;
24 import com.android.wallpaper.model.WallpaperInfo;
25 import com.android.wallpaper.module.AlarmManagerWrapper;
26 import com.android.wallpaper.module.BitmapCropper;
27 import com.android.wallpaper.module.CurrentWallpaperInfoFactory;
28 import com.android.wallpaper.module.DefaultLiveWallpaperInfoFactory;
29 import com.android.wallpaper.module.DrawableLayerResolver;
30 import com.android.wallpaper.module.ExploreIntentChecker;
31 import com.android.wallpaper.module.FormFactorChecker;
32 import com.android.wallpaper.module.Injector;
33 import com.android.wallpaper.module.LiveWallpaperInfoFactory;
34 import com.android.wallpaper.module.LoggingOptInStatusProvider;
35 import com.android.wallpaper.module.NetworkStatusNotifier;
36 import com.android.wallpaper.module.PackageStatusNotifier;
37 import com.android.wallpaper.module.PartnerProvider;
38 import com.android.wallpaper.module.SystemFeatureChecker;
39 import com.android.wallpaper.module.UserEventLogger;
40 import com.android.wallpaper.module.WallpaperPersister;
41 import com.android.wallpaper.module.WallpaperPreferences;
42 import com.android.wallpaper.module.WallpaperRefresher;
43 import com.android.wallpaper.module.WallpaperRotationRefresher;
44 import com.android.wallpaper.monitor.PerformanceMonitor;
45 import com.android.wallpaper.network.Requester;
46 import com.android.wallpaper.picker.ImagePreviewFragment;
47 import com.android.wallpaper.picker.individual.IndividualPickerFragment;
48 
49 /**
50  * Test implementation of the dependency injector.
51  */
52 public class TestInjector implements Injector {
53 
54     private BitmapCropper mBitmapCropper;
55     private CategoryProvider mCategoryProvider;
56     private PartnerProvider mPartnerProvider;
57     private WallpaperPreferences mPrefs;
58     private WallpaperPersister mWallpaperPersister;
59     private WallpaperRefresher mWallpaperRefresher;
60     private Requester mRequester;
61     private WallpaperManagerCompat mWallpaperManagerCompat;
62     private CurrentWallpaperInfoFactory mCurrentWallpaperInfoFactory;
63     private NetworkStatusNotifier mNetworkStatusNotifier;
64     private AlarmManagerWrapper mAlarmManagerWrapper;
65     private UserEventLogger mUserEventLogger;
66     private ExploreIntentChecker mExploreIntentChecker;
67     private SystemFeatureChecker mSystemFeatureChecker;
68     private FormFactorChecker mFormFactorChecker;
69     private WallpaperRotationRefresher mWallpaperRotationRefresher;
70     private PerformanceMonitor mPerformanceMonitor;
71     private LoggingOptInStatusProvider mLoggingOptInStatusProvider;
72 
73     @Override
getBitmapCropper()74     public BitmapCropper getBitmapCropper() {
75         if (mBitmapCropper == null) {
76             mBitmapCropper = new com.android.wallpaper.testing.TestBitmapCropper();
77         }
78         return mBitmapCropper;
79     }
80 
81     @Override
getCategoryProvider(Context context)82     public CategoryProvider getCategoryProvider(Context context) {
83         if (mCategoryProvider == null) {
84             mCategoryProvider = new TestCategoryProvider();
85         }
86         return mCategoryProvider;
87     }
88 
89     @Override
getPartnerProvider(Context context)90     public PartnerProvider getPartnerProvider(Context context) {
91         if (mPartnerProvider == null) {
92             mPartnerProvider = new TestPartnerProvider();
93         }
94         return mPartnerProvider;
95     }
96 
97     @Override
getPreferences(Context context)98     public WallpaperPreferences getPreferences(Context context) {
99         if (mPrefs == null) {
100             mPrefs = new TestWallpaperPreferences();
101         }
102         return mPrefs;
103     }
104 
105     @Override
getWallpaperPersister(Context context)106     public WallpaperPersister getWallpaperPersister(Context context) {
107         if (mWallpaperPersister == null) {
108             mWallpaperPersister = new TestWallpaperPersister(context.getApplicationContext());
109         }
110         return mWallpaperPersister;
111     }
112 
113     @Override
getWallpaperRefresher(Context context)114     public WallpaperRefresher getWallpaperRefresher(Context context) {
115         if (mWallpaperRefresher == null) {
116             mWallpaperRefresher = new TestWallpaperRefresher(context.getApplicationContext());
117         }
118         return mWallpaperRefresher;
119     }
120 
121     @Override
getRequester(Context unused)122     public Requester getRequester(Context unused) {
123         return null;
124     }
125 
126     @Override
getWallpaperManagerCompat(Context context)127     public WallpaperManagerCompat getWallpaperManagerCompat(Context context) {
128         if (mWallpaperManagerCompat == null) {
129             mWallpaperManagerCompat = new com.android.wallpaper.testing.TestWallpaperManagerCompat(
130                     context.getApplicationContext());
131         }
132         return mWallpaperManagerCompat;
133     }
134 
135     @Override
getCurrentWallpaperFactory(Context context)136     public CurrentWallpaperInfoFactory getCurrentWallpaperFactory(Context context) {
137         if (mCurrentWallpaperInfoFactory == null) {
138             mCurrentWallpaperInfoFactory =
139                     new TestCurrentWallpaperInfoFactory(context.getApplicationContext());
140         }
141         return mCurrentWallpaperInfoFactory;
142     }
143 
144     @Override
getLoggingOptInStatusProvider(Context context)145     public LoggingOptInStatusProvider getLoggingOptInStatusProvider(Context context) {
146         if (mLoggingOptInStatusProvider == null) {
147             mLoggingOptInStatusProvider = new TestLoggingOptInStatusProvider();
148         }
149         return mLoggingOptInStatusProvider;
150     }
151 
152     @Override
getNetworkStatusNotifier(Context context)153     public NetworkStatusNotifier getNetworkStatusNotifier(Context context) {
154         if (mNetworkStatusNotifier == null) {
155             mNetworkStatusNotifier = new TestNetworkStatusNotifier();
156         }
157         return mNetworkStatusNotifier;
158     }
159 
160     @Override
getAlarmManagerWrapper(Context unused)161     public AlarmManagerWrapper getAlarmManagerWrapper(Context unused) {
162         if (mAlarmManagerWrapper == null) {
163             mAlarmManagerWrapper = new TestAlarmManagerWrapper();
164         }
165         return mAlarmManagerWrapper;
166     }
167 
168     @Override
getUserEventLogger(Context unused)169     public UserEventLogger getUserEventLogger(Context unused) {
170         if (mUserEventLogger == null) {
171             mUserEventLogger = new com.android.wallpaper.testing.TestUserEventLogger();
172         }
173         return mUserEventLogger;
174     }
175 
176     @Override
getExploreIntentChecker(Context unused)177     public ExploreIntentChecker getExploreIntentChecker(Context unused) {
178         if (mExploreIntentChecker == null) {
179             mExploreIntentChecker = new TestExploreIntentChecker();
180         }
181         return mExploreIntentChecker;
182     }
183 
184     @Override
getSystemFeatureChecker()185     public SystemFeatureChecker getSystemFeatureChecker() {
186         if (mSystemFeatureChecker == null) {
187             mSystemFeatureChecker = new com.android.wallpaper.testing.TestSystemFeatureChecker();
188         }
189         return mSystemFeatureChecker;
190     }
191 
192     @Override
getFormFactorChecker(Context unused)193     public FormFactorChecker getFormFactorChecker(Context unused) {
194         if (mFormFactorChecker == null) {
195             mFormFactorChecker = new TestFormFactorChecker();
196         }
197         return mFormFactorChecker;
198     }
199 
200     @Override
getWallpaperRotationRefresher()201     public WallpaperRotationRefresher getWallpaperRotationRefresher() {
202         if (mWallpaperRotationRefresher == null) {
203             mWallpaperRotationRefresher = (context, listener) -> {
204                 // Not implemented
205                 listener.onError();
206             };
207         }
208         return mWallpaperRotationRefresher;
209     }
210 
211     @Override
getPreviewFragment(Context context, WallpaperInfo wallpaperInfo, int mode, boolean testingModeEnabled)212     public Fragment getPreviewFragment(Context context, WallpaperInfo wallpaperInfo, int mode,
213             boolean testingModeEnabled) {
214         return ImagePreviewFragment.newInstance(wallpaperInfo, mode, testingModeEnabled);
215     }
216 
217     @Override
getPackageStatusNotifier(Context context)218     public PackageStatusNotifier getPackageStatusNotifier(Context context) {
219         return null;
220     }
221 
222     @Override
getIndividualPickerFragment(String collectionId)223     public IndividualPickerFragment getIndividualPickerFragment(String collectionId) {
224         return IndividualPickerFragment.newInstance(collectionId);
225     }
226 
227     @Override
getLiveWallpaperInfoFactory(Context context)228     public LiveWallpaperInfoFactory getLiveWallpaperInfoFactory(Context context) {
229         return new DefaultLiveWallpaperInfoFactory();
230     }
231 
232     @Override
getDrawableLayerResolver()233     public DrawableLayerResolver getDrawableLayerResolver() {
234         return null;
235     }
236 
237     @Override
getPerformanceMonitor()238     public PerformanceMonitor getPerformanceMonitor() {
239         if (mPerformanceMonitor == null) {
240             mPerformanceMonitor = new TestPerformanceMonitor();
241         }
242         return mPerformanceMonitor;
243     }
244 }
245