1/*
2 * Copyright (C) 2013 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
17package com.android.camera.session;
18
19import android.graphics.Bitmap;
20import android.location.Location;
21import android.net.Uri;
22
23import java.io.File;
24import java.io.IOException;
25
26/**
27 * Modules use this manager to store capture results.
28 */
29public interface CaptureSessionManager {
30    /**
31     * Callback interface for session events.
32     */
33    public interface SessionListener {
34        /**
35         * Called when the session with the given Uri was queued and will be
36         * processed.
37         */
38        public void onSessionQueued(Uri mediaUri);
39
40        /**
41         * Called when the media underlying the session with the given Uri has
42         * been updated.
43         */
44        public void onSessionUpdated(Uri mediaUri);
45
46        /**
47         * Called when the capture indicator for the given session has changed
48         * and should be updated.
49         *
50         * @param bitmap the capture indicator bitmap
51         * @param rotationDegrees the rotation of the updated preview
52         */
53        public void onSessionCaptureIndicatorUpdate(Bitmap bitmap, int rotationDegrees);
54
55        /** Called when the session with the given Uri finished. */
56        public void onSessionDone(Uri mediaUri);
57
58        /** Called when the session with the given Uri failed processing. */
59        public void onSessionFailed(Uri mediaUri, int failureMessageId, boolean removeFromFilmstrip);
60
61        /** Called when the session with the given Uri was canceled. */
62        public void onSessionCanceled(Uri mediaUri);
63
64        /** Called when the session with the given Uri has progressed. */
65        public void onSessionProgress(Uri mediaUri, int progress);
66
67        /** Called when the session with the given Uri has changed its progress text. */
68        public void onSessionProgressText(Uri mediaUri, int messageId);
69
70        /**
71         * Called when the thumbnail for the given session has changed and
72         * should be updated. This is only used by @{link CaptureIntentModule}.
73         * Filmstrip uses onSessionUpdated to refresh the thumbnail.
74         *
75         * @param bitmap the thumbnail bitmap
76         */
77        public void onSessionThumbnailUpdate(Bitmap bitmap);
78
79        /**
80         * Called when the compressed picture data for the given session has
81         * changed and should be updated.
82         *
83         * @param pictureData the picture JPEG byte array.
84         * @param orientation the picture orientation.
85         */
86        public void onSessionPictureDataUpdate(byte[] pictureData, int orientation);
87    }
88
89    /**
90     * Creates a new capture session.
91     *
92     * @param title the title of the new session.
93     * @param sessionStartMillis the start time of the new session (millis since epoch).
94     * @param location the location of the new session.
95     */
96    public CaptureSession createNewSession(String title, long sessionStartMillis, Location location);
97
98    /**
99     * Returns a session by session Uri or null if it is not found.
100     *
101     * @param sessionUri the Uri to look up.
102     *
103     * @return The corresponding CaptureSession.
104     */
105    public CaptureSession getSession(Uri sessionUri);
106
107    /**
108     * Add a listener to be informed about capture session updates.
109     * <p>
110     * Note: It is guaranteed that the callbacks will happen on the main thread,
111     * so callers have to make sure to not block execution.
112     */
113    public void addSessionListener(SessionListener listener);
114
115    /**
116     * Adds the session with the given uri.
117     */
118    public void putSession(Uri sessionUri, CaptureSession session);
119
120    /**
121     * Removes the session with the given uri from the manager. This may not
122     * remove temporary in memory resources from the session itself, see
123     * {@link CaptureSession#finalizeSession()} to complete session removal.
124     */
125    public CaptureSession removeSession(Uri sessionUri);
126
127    /**
128     * Removes a previously added listener from receiving further capture
129     * session updates.
130     */
131    public void removeSessionListener(SessionListener listener);
132
133    /**
134     * Calls the given listener for all the sessions that are currently
135     * in-flight.
136     */
137    public void fillTemporarySession(SessionListener listener);
138
139    /**
140     * Gets the directory to be used for temporary data. See
141     * {@link SessionStorageManager#getSessionDirectory(String)}
142     */
143    public File getSessionDirectory(String subDirectory) throws IOException;
144
145    /**
146     * @return Whether the session with the given URI exists and has an error
147     *         message.
148     */
149    public boolean hasErrorMessage(Uri uri);
150
151    /**
152     * @return If existant, returns the error message ID for the session with the
153     *         given URI, -1 otherwise.
154     */
155    public int getErrorMessageId(Uri uri);
156
157    /**
158     * Removes any existing error messages for the session with the given URI.
159     */
160    public void removeErrorMessage(Uri uri);
161
162    /** Sets the error message for the session with the given URI. */
163    public void putErrorMessage(Uri uri, int failureMessageId);
164}
165