Merge "Import translations. DO NOT MERGE" into ub-camera-everglades
diff --git a/src/com/android/camera/CameraActivity.java b/src/com/android/camera/CameraActivity.java
index 95ec0a4..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
@@ -1825,8 +1840,9 @@
         }
 
         if (message != null) {
+            Log.w(TAG, "Storage warning: " + message);
             if (mStorageHint == null) {
-                mStorageHint = OnScreenHint.makeText(mAppContext, message);
+                mStorageHint = OnScreenHint.makeText(CameraActivity.this, message);
             } else {
                 mStorageHint.setText(message);
             }
@@ -1834,7 +1850,7 @@
         } else if (mStorageHint != null) {
             mStorageHint.cancel();
             mStorageHint = null;
-        }
+       }
     }
 
     protected void setResultEx(int resultCode) {
diff --git a/src/com/android/camera/OnScreenHint.java b/src/com/android/camera/OnScreenHint.java
index b6bb71f..edc877b 100644
--- a/src/com/android/camera/OnScreenHint.java
+++ b/src/com/android/camera/OnScreenHint.java
@@ -16,6 +16,7 @@
 
 package com.android.camera;
 
+import android.app.Activity;
 import android.content.Context;
 import android.graphics.PixelFormat;
 import android.os.Handler;
@@ -62,9 +63,9 @@
      *                 {@link android.app.Application} or
      *                 {@link android.app.Activity} object.
      */
-    private OnScreenHint(Context context) {
-        mWM = (WindowManager) context.getSystemService(Context.WINDOW_SERVICE);
-        mY = context.getResources().getDimensionPixelSize(
+    private OnScreenHint(Activity activity) {
+        mWM = (WindowManager) activity.getSystemService(Context.WINDOW_SERVICE);
+        mY = activity.getResources().getDimensionPixelSize(
                 R.dimen.hint_y_offset);
 
         mParams.height = WindowManager.LayoutParams.WRAP_CONTENT;
@@ -103,11 +104,11 @@
      * @param text     The text to show.  Can be formatted text.
      *
      */
-    public static OnScreenHint makeText(Context context, CharSequence text) {
-        OnScreenHint result = new OnScreenHint(context);
+    public static OnScreenHint makeText(Activity activity, CharSequence text) {
+        OnScreenHint result = new OnScreenHint(activity);
 
         LayoutInflater inflate =
-                (LayoutInflater) context.getSystemService(
+                (LayoutInflater) activity.getSystemService(
                 Context.LAYOUT_INFLATER_SERVICE);
         View v = inflate.inflate(R.layout.on_screen_hint, null);
         TextView tv = (TextView) v.findViewById(R.id.message);
@@ -188,4 +189,3 @@
         }
     };
 }
-
diff --git a/src/com/android/camera/VideoModule.java b/src/com/android/camera/VideoModule.java
index 498129a..7d73246 100644
--- a/src/com/android/camera/VideoModule.java
+++ b/src/com/android/camera/VideoModule.java
@@ -393,7 +393,11 @@
 
     private void takeASnapshot() {
         // Only take snapshots if video snapshot is supported by device
-        if (CameraUtil.isVideoSnapshotSupported(mParameters) && !mIsVideoCaptureIntent) {
+        if(!mParameters.isVideoSnapshotSupported()) {
+            Log.w(TAG, "Cannot take a video snapshot - not supported by hardware");
+            return;
+        }
+        if (!mIsVideoCaptureIntent) {
             if (!mMediaRecorderRecording || mPaused || mSnapshotInProgress
                     || !mAppController.isShutterEnabled()) {
                 return;
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(),