diff --git a/src/com/android/browser/ShareDialog.java b/src/com/android/browser/ShareDialog.java
index 63f6183..4fe54d3 100644
--- a/src/com/android/browser/ShareDialog.java
+++ b/src/com/android/browser/ShareDialog.java
@@ -43,6 +43,7 @@
 import android.net.Uri;
 import android.os.AsyncTask;
 import android.os.Build;
+import android.os.Environment;
 
 import java.util.List;
 import java.util.Collections;
@@ -50,7 +51,6 @@
 import android.util.Log;
 
 import org.chromium.base.ContentUriUtils;
-import org.chromium.ui.UiUtils;
 
 import java.io.File;
 import java.io.FileOutputStream;
@@ -67,6 +67,8 @@
     public final static String EXTRA_SHARE_FAVICON = "share_favicon";
     private static final String SCREENSHOT_DIRECTORY_NAME = "screenshot_share";
     private static final int MAX_SCREENSHOT_COUNT = 10;
+    public static final String EXTERNAL_IMAGE_FILE_PATH = "browser-images";
+    public static final String IMAGE_FILE_PATH = "images";
 
     public ShareDialog (Activity activity, String title, String url, Bitmap favicon, Bitmap screenshot) {
         super(null);
@@ -94,7 +96,7 @@
     }
 
     private File getScreenshotDir() throws IOException {
-        File baseDir = UiUtils.getDirectoryForImageCapture(activity);
+        File baseDir = getDirectoryForImageCapture(activity);
         return new File(baseDir, SCREENSHOT_DIRECTORY_NAME);
     }
 
@@ -190,7 +192,7 @@
                     screenshot.compress(Bitmap.CompressFormat.JPEG, 90, fOut);
                     fOut.flush();
                     fOut.close();
-                    uri = UiUtils.getUriForImageCaptureFile(activity, saveFile);
+                    uri = getUriForImageCaptureFile(activity, saveFile);
                 }
             } catch (IOException ie) {
                 if (fOut != null) {
@@ -204,4 +206,30 @@
         }
         return uri;
    }
+
+    public static Uri getUriForImageCaptureFile(Context context, File file) {
+        return Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR2
+            ? ContentUriUtils.getContentUriFromFile(context, file)
+            : Uri.fromFile(file);
+    }
+
+    public static File getDirectoryForImageCapture(Context context) throws IOException {
+        File path;
+        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR2) {
+            path = new File(context.getFilesDir(), IMAGE_FILE_PATH);
+            if (!path.exists() && !path.mkdir()) {
+                throw new IOException("Folder cannot be created.");
+            }
+        } else {
+            File externalDataDir =
+            Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DCIM);
+            path = new File(
+            externalDataDir.getAbsolutePath() + File.separator + EXTERNAL_IMAGE_FILE_PATH);
+            if (!path.exists() && !path.mkdirs()) {
+                path = externalDataDir;
+            }
+        }
+        return path;
+    }
+
 }
