Adding gcam module to Camera2 app.

Bug: 10430748

Change-Id: I0c53085553cd8505ba376b1518507d36065894f5
diff --git a/src/com/android/camera/PhotoModule.java b/src/com/android/camera/PhotoModule.java
index 861dead..150b6e8 100644
--- a/src/com/android/camera/PhotoModule.java
+++ b/src/com/android/camera/PhotoModule.java
@@ -57,6 +57,7 @@
 import com.android.camera.CameraManager.CameraPictureCallback;
 import com.android.camera.CameraManager.CameraProxy;
 import com.android.camera.CameraManager.CameraShutterCallback;
+import com.android.camera.PhotoModule.NamedImages.NamedEntity;
 import com.android.camera.exif.ExifInterface;
 import com.android.camera.exif.ExifTag;
 import com.android.camera.exif.Rational;
@@ -75,6 +76,7 @@
 import java.io.OutputStream;
 import java.util.ArrayList;
 import java.util.List;
+import java.util.Vector;
 
 public class PhotoModule
         implements CameraModule,
@@ -721,8 +723,9 @@
                     width = s.height;
                     height = s.width;
                 }
-                String title = mNamedImages.getTitle();
-                long date = mNamedImages.getDate();
+                NamedEntity name = mNamedImages.getNextNameEntity();
+                String title = (name == null) ? null : name.title;
+                long date = (name == null) ? -1 : name.date;
                 if (title == null) {
                     Log.e(TAG, "Unbalanced name/data pair");
                 } else {
@@ -790,41 +793,35 @@
         }
     }
 
-    private static class NamedImages {
-        private ArrayList<NamedEntity> mQueue;
-        private NamedEntity mNamedEntity;
+    /**
+     * This class is just a thread-safe queue for name,date holder objects.
+     */
+    public static class NamedImages {
+        private Vector<NamedEntity> mQueue;
 
         public NamedImages() {
-            mQueue = new ArrayList<NamedEntity>();
+            mQueue = new Vector<NamedEntity>();
         }
 
-        public void nameNewImage(ContentResolver resolver, long date) {
+        public void nameNewImage(long date) {
             NamedEntity r = new NamedEntity();
             r.title = CameraUtil.createJpegName(date);
             r.date = date;
             mQueue.add(r);
         }
 
-        public String getTitle() {
-            if (mQueue.isEmpty()) {
-                mNamedEntity = null;
-                return null;
+        public NamedEntity getNextNameEntity() {
+            synchronized(mQueue) {
+                if (!mQueue.isEmpty()) {
+                    return mQueue.remove(0);
+                }
             }
-            mNamedEntity = mQueue.get(0);
-            mQueue.remove(0);
-
-            return mNamedEntity.title;
+            return null;
         }
 
-        // Must be called after getTitle().
-        public long getDate() {
-            if (mNamedEntity == null) return -1;
-            return mNamedEntity.date;
-        }
-
-        private static class NamedEntity {
-            String title;
-            long date;
+        public static class NamedEntity {
+            public String title;
+            public long date;
         }
     }
 
@@ -893,7 +890,7 @@
                 mRawPictureCallback, mPostViewPictureCallback,
                 new JpegPictureCallback(loc));
 
-        mNamedImages.nameNewImage(mContentResolver, mCaptureStartTime);
+        mNamedImages.nameNewImage(mCaptureStartTime);
 
         mFaceDetectionStarted = false;
         setCameraState(SNAPSHOT_IN_PROGRESS);