1 /*
2  * Copyright (C) 2015 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 
17 package com.android.camera.captureintent.resource;
18 
19 import android.content.Context;
20 import android.content.Intent;
21 import android.os.Handler;
22 import android.os.HandlerThread;
23 
24 import com.android.camera.FatalErrorHandler;
25 import com.android.camera.SoundPlayer;
26 import com.android.camera.app.AppController;
27 import com.android.camera.app.LocationManager;
28 import com.android.camera.app.OrientationManager;
29 import com.android.camera.async.MainThread;
30 import com.android.camera.async.RefCountBase;
31 import com.android.camera.burst.BurstFacade;
32 import com.android.camera.captureintent.CaptureIntentModuleUI;
33 import com.android.camera.one.OneCameraManager;
34 import com.android.camera.one.OneCameraOpener;
35 import com.android.camera.settings.CameraFacingSetting;
36 import com.android.camera.settings.ResolutionSetting;
37 import com.android.camera.settings.SettingsManager;
38 
39 public final class ResourceConstructedImpl implements ResourceConstructed {
40     private final Intent mIntent;
41     private final CaptureIntentModuleUI mModuleUI;
42     private final String mSettingScopeNamespace;
43     private final MainThread mMainThread;
44     private final Context mContext;
45     private final OneCameraOpener mOneCameraOpener;
46     private final OneCameraManager mOneCameraManager;
47     private final LocationManager mLocationManager;
48     private final OrientationManager mOrientationManager;
49     private final SettingsManager mSettingsManager;
50     private final BurstFacade mBurstFacade;
51     private final CameraFacingSetting mCameraFacingSetting;
52     private final ResolutionSetting mResolutionSetting;
53     private final HandlerThread mCameraThread;
54     private final Handler mCameraHandler;
55     private final FatalErrorHandler mFatalErrorHandler;
56     private final SoundPlayer mSoundPlayer;
57 
58     // TODO: Hope one day we could get rid of AppController.
59     private final AppController mAppController;
60 
61     /**
62      * Creates a reference counted {@link ResourceConstructedImpl} object.
63      */
create( Intent intent, CaptureIntentModuleUI moduleUI, String settingScopeNamespace, MainThread mainThread, Context context, OneCameraOpener oneCameraOpener, OneCameraManager oneCameraManager, LocationManager locationManager, OrientationManager orientationManager, SettingsManager settingsManager, BurstFacade burstFacade, AppController appController, FatalErrorHandler fatalErrorHandler)64     public static RefCountBase<ResourceConstructed> create(
65             Intent intent,
66             CaptureIntentModuleUI moduleUI,
67             String settingScopeNamespace,
68             MainThread mainThread,
69             Context context,
70             OneCameraOpener oneCameraOpener,
71             OneCameraManager oneCameraManager,
72             LocationManager locationManager,
73             OrientationManager orientationManager,
74             SettingsManager settingsManager,
75             BurstFacade burstFacade,
76             AppController appController,
77             FatalErrorHandler fatalErrorHandler) {
78         final CameraFacingSetting cameraFacingSetting = new CameraFacingSetting(
79                 context.getResources(), settingsManager, settingScopeNamespace);
80         final ResolutionSetting resolutionSetting = new ResolutionSetting(
81                 settingsManager, oneCameraManager, context.getContentResolver());
82         return new RefCountBase<ResourceConstructed>(new ResourceConstructedImpl(
83                 intent, moduleUI, settingScopeNamespace, mainThread, context, oneCameraOpener,
84                 oneCameraManager, locationManager, orientationManager, settingsManager, burstFacade,
85                 cameraFacingSetting, resolutionSetting, appController, fatalErrorHandler));
86     }
87 
ResourceConstructedImpl( Intent intent, CaptureIntentModuleUI moduleUI, String settingScopeNamespace, MainThread mainThread, Context context, OneCameraOpener cameraManager, OneCameraManager hardwareManager, LocationManager locationManager, OrientationManager orientationManager, SettingsManager settingsManager, BurstFacade burstFacade, CameraFacingSetting cameraFacingSetting, ResolutionSetting resolutionSetting, AppController appController, FatalErrorHandler fatalErrorHandler)88     private ResourceConstructedImpl(
89             Intent intent,
90             CaptureIntentModuleUI moduleUI,
91             String settingScopeNamespace,
92             MainThread mainThread,
93             Context context,
94             OneCameraOpener cameraManager,
95             OneCameraManager hardwareManager,
96             LocationManager locationManager,
97             OrientationManager orientationManager,
98             SettingsManager settingsManager,
99             BurstFacade burstFacade,
100             CameraFacingSetting cameraFacingSetting,
101             ResolutionSetting resolutionSetting,
102             AppController appController,
103             FatalErrorHandler fatalErrorHandler) {
104         mIntent = intent;
105         mModuleUI = moduleUI;
106         mSettingScopeNamespace = settingScopeNamespace;
107         mMainThread = mainThread;
108         mContext = context;
109         mOneCameraOpener = cameraManager;
110         mOneCameraManager = hardwareManager;
111         mLocationManager = locationManager;
112         mOrientationManager = orientationManager;
113         mSettingsManager = settingsManager;
114         mBurstFacade = burstFacade;
115         mCameraFacingSetting = cameraFacingSetting;
116         mResolutionSetting = resolutionSetting;
117         mFatalErrorHandler = fatalErrorHandler;
118         mSoundPlayer = new SoundPlayer(mContext);
119         mAppController = appController;
120 
121         mCameraThread = new HandlerThread("ImageCaptureIntentModule.CameraHandler");
122         mCameraThread.start();
123         mCameraHandler = new Handler(mCameraThread.getLooper());
124     }
125 
126     @Override
close()127     public void close() {
128         mCameraThread.quit();
129     }
130 
131     @Override
getIntent()132     public Intent getIntent() {
133         return mIntent;
134     }
135 
136     @Override
getModuleUI()137     public CaptureIntentModuleUI getModuleUI() {
138         return mModuleUI;
139     }
140 
141     @Override
getSettingScopeNamespace()142     public String getSettingScopeNamespace() {
143         return mSettingScopeNamespace;
144     }
145 
146     @Override
getMainThread()147     public MainThread getMainThread() {
148         return mMainThread;
149     }
150 
151     @Override
getContext()152     public Context getContext() {
153         return mContext;
154     }
155 
156     @Override
getOneCameraManager()157     public OneCameraManager getOneCameraManager() {
158         return mOneCameraManager;
159     }
160 
161     @Override
getOneCameraOpener()162     public OneCameraOpener getOneCameraOpener() {
163         return mOneCameraOpener;
164     }
165 
166     @Override
getLocationManager()167     public LocationManager getLocationManager() {
168         return mLocationManager;
169     }
170 
171     @Override
getOrientationManager()172     public OrientationManager getOrientationManager() {
173         return mOrientationManager;
174     }
175 
176     @Override
getSettingsManager()177     public SettingsManager getSettingsManager() {
178         return mSettingsManager;
179     }
180 
181     @Override
getBurstFacade()182     public BurstFacade getBurstFacade() {
183         return mBurstFacade;
184     }
185 
186     @Override
getCameraFacingSetting()187     public CameraFacingSetting getCameraFacingSetting() {
188         return mCameraFacingSetting;
189     }
190 
191     @Override
getResolutionSetting()192     public ResolutionSetting getResolutionSetting() {
193         return mResolutionSetting;
194     }
195 
196     @Override
getCameraHandler()197     public Handler getCameraHandler() {
198         return mCameraHandler;
199     }
200 
201     @Override
getSoundPlayer()202     public SoundPlayer getSoundPlayer() {
203         return mSoundPlayer;
204     }
205 
206     @Override
getAppController()207     public AppController getAppController() {
208         return mAppController;
209     }
210 
211     @Override
getFatalErrorHandler()212     public FatalErrorHandler getFatalErrorHandler() {
213         return mFatalErrorHandler;
214     }
215 }
216