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 
17 package com.android.camera.app;
18 
19 import android.content.ContentValues;
20 import android.location.Location;
21 import android.net.Uri;
22 
23 import com.android.camera.exif.ExifInterface;
24 
25 /**
26  * An interface defining the media saver which saves media files in the
27  * background.
28  */
29 public interface MediaSaver {
30 
31     /**
32      * An interface defining the callback for task queue status changes.
33      */
34     public interface QueueListener {
35         /**
36          * The callback when the queue status changes. Every time a new
37          * {@link com.android.camera.app.MediaSaver.QueueListener} is set by
38          * {@link #setQueueListener(com.android.camera.app.MediaSaver.QueueListener)}
39          * this callback will be invoked to notify the current status of the
40          * queue.
41          *
42          * @param full Whether the queue is full.
43          */
onQueueStatus(boolean full)44         public void onQueueStatus(boolean full);
45     }
46 
47     /**
48      * An interface defining the callback when a media is saved.
49      */
50     public interface OnMediaSavedListener {
51         /**
52          * The callback when the saving is done in the background.
53          * @param uri The final content Uri of the saved media.
54          */
onMediaSaved(Uri uri)55         public void onMediaSaved(Uri uri);
56     }
57 
58     /**
59      * Checks whether the queue is full.
60      */
isQueueFull()61     boolean isQueueFull();
62 
63     /**
64      * Adds an image into {@link android.content.ContentResolver} and also
65      * saves the file to the storage in the background.
66      * <p/>
67      * Equivalent to calling
68      * {@link #addImage(byte[], String, long, Location, int, int, int,
69      * ExifInterface, OnMediaSavedListener, String)}
70      * with <code>image/jpeg</code> as <code>mimeType</code>.
71      *
72      * @param data The JPEG image data.
73      * @param title The title of the image.
74      * @param date The date when the image is created.
75      * @param loc The location where the image is created. Can be {@code null}.
76      * @param width The width of the image data before the orientation is
77      *              applied.
78      * @param height The height of the image data before the orientation is
79      *               applied.
80      * @param orientation The orientation of the image. The value should be a
81      *                    degree of rotation in clockwise. Valid values are
82      *                    0, 90, 180 and 270.
83      * @param exif The EXIF data of this image.
84      * @param l A callback object used when the saving is done.
85      */
addImage(byte[] data, String title, long date, Location loc, int width, int height, int orientation, ExifInterface exif, OnMediaSavedListener l)86     void addImage(byte[] data, String title, long date, Location loc, int width, int height,
87             int orientation, ExifInterface exif, OnMediaSavedListener l);
88 
89     /**
90      * Adds an image into {@link android.content.ContentResolver} and also
91      * saves the file to the storage in the background.
92      *
93      * @param data The image data.
94      * @param title The title of the image.
95      * @param date The date when the image is created.
96      * @param loc The location where the image is created. Can be {@code null}.
97      * @param width The width of the image data before the orientation is
98      *              applied.
99      * @param height The height of the image data before the orientation is
100      *               applied.
101      * @param orientation The orientation of the image. The value should be a
102      *                    degree of rotation in clockwise. Valid values are
103      *                    0, 90, 180 and 270.
104      * @param exif The EXIF data of this image.
105      * @param l A callback object used when the saving is done.
106      * @param mimeType The mimeType of the image.
107      */
addImage(byte[] data, String title, long date, Location loc, int width, int height, int orientation, ExifInterface exif, OnMediaSavedListener l, String mimeType)108     void addImage(byte[] data, String title, long date, Location loc, int width, int height,
109             int orientation, ExifInterface exif, OnMediaSavedListener l, String mimeType);
110 
111     /**
112      * Adds an image into {@link android.content.ContentResolver} and also
113      * saves the file to the storage in the background. The width and height
114      * will be obtained directly from the image data.
115      *
116      * @param data The JPEG image data.
117      * @param title The title of the image.
118      * @param date The date when the image is created.
119      * @param loc The location where the image is created. Can be {@code null}.
120      * @param orientation The orientation of the image. The value should be a
121      *                    degree of rotation in clockwise. Valid values are
122      *                    0, 90, 180 and 270.
123      * @param exif The EXIF data of this image.
124      * @param l A callback object used when the saving is done.
125      */
addImage(byte[] data, String title, long date, Location loc, int orientation, ExifInterface exif, OnMediaSavedListener l)126     void addImage(byte[] data, String title, long date, Location loc, int orientation,
127             ExifInterface exif, OnMediaSavedListener l);
128 
129     /**
130      * Adds an image into {@link android.content.ContentResolver} and also
131      * saves the file to the storage in the background. The time will be set by
132      * {@link System#currentTimeMillis()}.
133      * will be obtained directly from the image data.
134      *
135      * @param data The JPEG image data.
136      * @param title The title of the image.
137      * @param loc The location where the image is created. Can be {@code null}.
138      * @param width The width of the image data before the orientation is
139      *              applied.
140      * @param height The height of the image data before the orientation is
141      *               applied.
142      * @param orientation
143      * @param exif The EXIF data of this image.
144      * @param l A callback object used when the saving is done.
145      */
addImage(byte[] data, String title, Location loc, int width, int height, int orientation, ExifInterface exif, OnMediaSavedListener l)146     void addImage(byte[] data, String title, Location loc, int width, int height, int orientation,
147             ExifInterface exif, OnMediaSavedListener l);
148 
149     /**
150      * Adds the video data into the {@link android.content.ContentResolver} in
151      * the background. Only the database is updated here. The file should
152      * already be created by {@link android.media.MediaRecorder}.
153      * @param path The path of the video file on the storage.
154      * @param values The values to be stored in the database.
155      * @param l A callback object used when the saving is done.
156      */
addVideo(String path, ContentValues values, OnMediaSavedListener l)157     void addVideo(String path, ContentValues values, OnMediaSavedListener l);
158 
159     /**
160      * Sets the queue listener.
161      */
setQueueListener(QueueListener l)162     void setQueueListener(QueueListener l);
163 }
164