Merge "Fixes save filename for panos after edit." into gb-ub-photos-carlsbad
diff --git a/src/com/android/gallery3d/filtershow/tools/SaveCopyTask.java b/src/com/android/gallery3d/filtershow/tools/SaveCopyTask.java
index 2862be2..9f7cba3 100644
--- a/src/com/android/gallery3d/filtershow/tools/SaveCopyTask.java
+++ b/src/com/android/gallery3d/filtershow/tools/SaveCopyTask.java
@@ -65,7 +65,10 @@
         void onCursorResult(Cursor cursor);
     }
 
-    private static final String TIME_STAMP_NAME = "'IMG'_yyyyMMdd_HHmmss";
+    private static final String TIME_STAMP_NAME = "_yyyyMMdd_HHmmss";
+    private static final String PREFIX_PANO = "PANO";
+    private static final String PREFIX_IMG = "IMG";
+    private static final String POSTFIX_JPG = ".jpg";
 
     private final Context context;
     private final Uri sourceUri;
@@ -84,7 +87,7 @@
             this.destinationFile = destination;
         }
 
-        saveFileName = new SimpleDateFormat(TIME_STAMP_NAME).format(new Date(
+        saveFileName = PREFIX_IMG +  new SimpleDateFormat(TIME_STAMP_NAME).format(new Date(
                 System.currentTimeMillis()));
     }
 
@@ -104,7 +107,10 @@
         File saveDirectory = getFinalSaveDirectory(context, sourceUri);
         String filename = new SimpleDateFormat(TIME_STAMP_NAME).format(new Date(
                 System.currentTimeMillis()));
-        return new File(saveDirectory, filename + ".JPG");
+        if (hasPanoPrefix(context, sourceUri)) {
+            return new File(saveDirectory, PREFIX_PANO + filename + POSTFIX_JPG);
+        }
+        return new File(saveDirectory, PREFIX_IMG + filename + POSTFIX_JPG);
     }
 
     public Object getPanoramaXMPData(Uri source, ImagePreset preset) {
@@ -264,6 +270,33 @@
     }
 
     /**
+     * Gets the actual filename for a Uri from Gallery's ContentProvider.
+     */
+    private static String getTrueFilename(Context context, Uri src) {
+        if (context == null || src == null) {
+            return null;
+        }
+        final String[] trueName = new String[1];
+        querySource(context, src, new String[] {
+                ImageColumns.DATA
+        }, new ContentResolverQueryCallback() {
+            @Override
+            public void onCursorResult(Cursor cursor) {
+                trueName[0] = new File(cursor.getString(0)).getName();
+            }
+        });
+        return trueName[0];
+    }
+
+    /**
+     * Checks whether the true filename has the panorama image prefix.
+     */
+    private static boolean hasPanoPrefix(Context context, Uri src) {
+        String name = getTrueFilename(context, src);
+        return name != null && name.startsWith(PREFIX_PANO);
+    }
+
+    /**
      * Insert the content (saved file) with proper source photo properties.
      */
     public static Uri insertContent(Context context, Uri sourceUri, File file, String saveFileName,