am 92537afd: Merge "Preload metadata for new videos." into gb-ub-photos-denali

* commit '92537afd29b1dd756e73c0bb58249521a6f65624':
  Preload metadata for new videos.
diff --git a/src/com/android/camera/CameraActivity.java b/src/com/android/camera/CameraActivity.java
index 4113905..a13fc43 100644
--- a/src/com/android/camera/CameraActivity.java
+++ b/src/com/android/camera/CameraActivity.java
@@ -91,6 +91,7 @@
 import com.android.camera.data.LocalMediaObserver;
 import com.android.camera.data.LocalSessionData;
 import com.android.camera.data.MediaDetails;
+import com.android.camera.data.MetadataLoader;
 import com.android.camera.data.PanoramaMetadataLoader;
 import com.android.camera.data.RgbzMetadataLoader;
 import com.android.camera.data.SimpleViewData;
@@ -1057,29 +1058,43 @@
         updateStorageSpaceAndHint(null);
         ContentResolver cr = getContentResolver();
         String mimeType = cr.getType(uri);
+        LocalData newData = null;
         if (LocalDataUtil.isMimeTypeVideo(mimeType)) {
             sendBroadcast(new Intent(CameraUtil.ACTION_NEW_VIDEO, uri));
-            LocalData newData = LocalMediaData.VideoData.fromContentUri(getContentResolver(), uri);
+            newData = LocalMediaData.VideoData.fromContentUri(getContentResolver(), uri);
             if (newData == null) {
                 Log.e(TAG, "Can't find video data in content resolver:" + uri);
                 return;
             }
-            if (mDataAdapter.addData(newData)) {
-                startPeekAnimation(newData);
-            }
         } else if (LocalDataUtil.isMimeTypeImage(mimeType)) {
             CameraUtil.broadcastNewPicture(mAppContext, uri);
-            LocalData newData = LocalMediaData.PhotoData.fromContentUri(getContentResolver(), uri);
+            newData = LocalMediaData.PhotoData.fromContentUri(getContentResolver(), uri);
             if (newData == null) {
                 Log.e(TAG, "Can't find photo data in content resolver:" + uri);
                 return;
             }
-            if (mDataAdapter.addData(newData)) {
-                startPeekAnimation(newData);
-            }
         } else {
             Log.w(TAG, "Unknown new media with MIME type:" + mimeType + ", uri:" + uri);
+            return;
         }
+        // We are preloading the metadata for new video since we need the
+        // rotation info for the thumbnail.
+        new AsyncTask<LocalData, Void, LocalData>() {
+
+            @Override
+            protected LocalData doInBackground(LocalData... params) {
+                LocalData data = params[0];
+                MetadataLoader.loadMetadata(getAndroidContext(), data);
+                return data;
+            }
+
+            @Override
+            protected void onPostExecute(LocalData data) {
+                if (mDataAdapter.addData(data)) {
+                    startPeekAnimation(data);
+                }
+            }
+        }.executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR, newData);
     }
 
     @Override
diff --git a/src/com/android/camera/data/MetadataLoader.java b/src/com/android/camera/data/MetadataLoader.java
index 311f5cf..99811ce 100644
--- a/src/com/android/camera/data/MetadataLoader.java
+++ b/src/com/android/camera/data/MetadataLoader.java
@@ -22,7 +22,7 @@
  * A helper class to load the metadata of
  * {@link com.android.camera.data.LocalData}.
  */
-class MetadataLoader {
+public class MetadataLoader {
 
     private static final String KEY_METADATA_CACHED = "metadata_cached";
 
@@ -36,7 +36,7 @@
      * @param data The data to update metadata for.
      * @return true if any metadata was added to the data, false otherwise.
      */
-    static boolean loadMetadata(final Context context, final LocalData data) {
+    public static boolean loadMetadata(final Context context, final LocalData data) {
         boolean metadataAdded = false;
         if (data.getLocalDataType() == LocalData.LOCAL_IMAGE) {
             PanoramaMetadataLoader.loadPanoramaMetadata(context, data.getUri(),