• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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;
18 
19 import android.graphics.Bitmap;
20 import android.location.Location;
21 import android.net.Uri;
22 
23 import com.android.camera.debug.Log;
24 import com.android.camera.exif.ExifInterface;
25 import com.android.camera.session.CaptureSession;
26 import com.android.camera.session.CaptureSessionManager;
27 import com.android.camera.session.SessionNotifier;
28 import com.android.camera.session.StackSaver;
29 import com.android.camera.session.TemporarySessionFile;
30 import com.android.camera.stats.CaptureSessionStatsCollector;
31 import com.android.camera.util.Size;
32 import com.google.common.base.Optional;
33 import com.google.common.util.concurrent.Futures;
34 import com.google.common.util.concurrent.ListenableFuture;
35 
36 import javax.annotation.Nonnull;
37 
38 /**
39  * An implementation of {@link CaptureSession} which is used by
40  * {@link CaptureIntentModule}.
41  */
42 public class CaptureIntentSession implements CaptureSession {
43     private static final Log.Tag TAG = new Log.Tag("CapIntSession");
44 
45     /** For aggregation of capture information */
46     // TODO: Implement mCaptureSessionStatsCollector.decorateAtTimeCaptureRequest call.
47     private final CaptureSessionStatsCollector mCaptureSessionStatsCollector =
48             new CaptureSessionStatsCollector();
49     /** The capture session manager responsible for this session. */
50     private final CaptureSessionManager mSessionManager;
51     /** Used to inform about session status updates. */
52     private final SessionNotifier mSessionNotifier;
53     /** The title of the item being processed. */
54     private final String mTitle;
55     /** The location this session was created at. Used for media store. */
56     private Location mLocation;
57     /** Whether one of start methods are called. */
58     private boolean isStarted;
59 
60     /**
61      * Creates a new {@link CaptureSession}.
62      *
63      * @param title the title of this session.
64      * @param location the location of this session, used for media store.
65      * @param captureSessionManager the capture session manager responsible for
66      *            this session.
67      */
CaptureIntentSession(String title, Location location, CaptureSessionManager captureSessionManager, SessionNotifier sessionNotifier)68     public CaptureIntentSession(String title, Location location,
69             CaptureSessionManager captureSessionManager, SessionNotifier sessionNotifier) {
70         mTitle = title;
71         mLocation = location;
72         mSessionManager = captureSessionManager;
73         mSessionNotifier = sessionNotifier;
74         isStarted = false;
75     }
76 
77     @Override
getTitle()78     public String getTitle() {
79         return mTitle;
80     }
81 
82     @Override
getLocation()83     public Location getLocation() {
84         return mLocation;
85     }
86 
87     @Override
setLocation(Location location)88     public void setLocation(Location location) {
89         mLocation = location;
90     }
91 
92     // TODO: Support progress in the future once HDR is enabled for capture intent.
93     @Override
getProgress()94     public synchronized int getProgress() {
95         return 0;
96     }
97 
98     @Override
setProgress(int percent)99     public synchronized void setProgress(int percent) {
100         // Do nothing.
101     }
102 
103     @Override
getProgressMessageId()104     public synchronized int getProgressMessageId() {
105         return -1;
106     }
107 
108     @Override
setProgressMessage(int messageId)109     public synchronized void setProgressMessage(int messageId) {
110     }
111 
112     @Override
updateThumbnail(Bitmap bitmap)113     public void updateThumbnail(Bitmap bitmap) {
114         mSessionNotifier.notifySessionThumbnailAvailable(bitmap);
115     }
116 
117     @Override
updateCaptureIndicatorThumbnail(Bitmap indicator, int rotationDegrees)118     public void updateCaptureIndicatorThumbnail(Bitmap indicator, int rotationDegrees) {
119         // Do nothing
120     }
121 
122     @Override
startEmpty(ImageLifecycleListener listener, @Nonnull Size pictureSize)123     public synchronized void startEmpty(ImageLifecycleListener listener, @Nonnull Size pictureSize) {
124         isStarted = true;
125     }
126 
127     @Override
startSession(ImageLifecycleListener listener, @Nonnull Bitmap placeholder, int progressMessageId)128     public synchronized void startSession(ImageLifecycleListener listener, @Nonnull Bitmap placeholder,
129           int progressMessageId) {
130         throw new RuntimeException("Not supported.");
131     }
132 
133     @Override
startSession(ImageLifecycleListener listener, @Nonnull byte[] placeholder, int progressMessageId)134     public synchronized void startSession(ImageLifecycleListener listener, @Nonnull byte[] placeholder,
135           int progressMessageId) {
136         throw new RuntimeException("Not supported.");
137     }
138 
139     @Override
startSession(ImageLifecycleListener listener, @Nonnull Uri uri, @Nonnull int progressMessageId)140     public synchronized void startSession(ImageLifecycleListener listener, @Nonnull Uri uri,
141           @Nonnull int progressMessageId) {
142         throw new RuntimeException("Not supported.");
143     }
144 
145     @Override
cancel()146     public synchronized void cancel() {
147     }
148 
149     @Override
saveAndFinish(byte[] data, int width, int height, int orientation, ExifInterface exif)150     public synchronized ListenableFuture<Optional<Uri>> saveAndFinish(byte[] data, int width,
151             int height, int orientation, ExifInterface exif) {
152         mSessionNotifier.notifySessionPictureDataAvailable(data, orientation);
153         return Futures.immediateFuture(Optional.<Uri> absent());
154     }
155 
156     @Override
getStackSaver()157     public StackSaver getStackSaver() {
158         return null;
159     }
160 
161     @Override
finish()162     public void finish() {
163         // Do nothing.
164     }
165 
166     @Override
getTempOutputFile()167     public TemporarySessionFile getTempOutputFile() {
168         throw new RuntimeException("Not supported.");
169     }
170 
171     @Override
getUri()172     public Uri getUri() {
173         throw new RuntimeException("Not supported.");
174     }
175 
176     @Override
updatePreview()177     public void updatePreview() {
178         throw new RuntimeException("Not supported.");
179     }
180 
181     @Override
finishWithFailure(int progressMessageId, boolean removeFromFilmstrip)182     public void finishWithFailure(int progressMessageId, boolean removeFromFilmstrip) {
183         throw new RuntimeException("Not supported.");
184     }
185 
186     @Override
finalizeSession()187     public void finalizeSession() {
188         // Do nothing.
189     }
190 
191     @Override
addProgressListener(CaptureSession.ProgressListener listener)192     public void addProgressListener(CaptureSession.ProgressListener listener) {
193         // Do nothing.
194     }
195 
196     @Override
removeProgressListener(CaptureSession.ProgressListener listener)197     public void removeProgressListener(CaptureSession.ProgressListener listener) {
198         // Do nothing.
199     }
200 
201     @Override
getCollector()202     public CaptureSessionStatsCollector getCollector() {
203         return mCaptureSessionStatsCollector;
204     }
205 
isStarted()206     private boolean isStarted() {
207         return isStarted;
208     }
209 }
210