Merge "Revert "Remove set wallpaper context item""
diff --git a/src/com/android/browser/Controller.java b/src/com/android/browser/Controller.java
index 6b72c25..062814b 100644
--- a/src/com/android/browser/Controller.java
+++ b/src/com/android/browser/Controller.java
@@ -678,7 +678,7 @@
     }
 
     void onDestroy() {
-        if (mUploadHandler != null) {
+        if (!mUploadHandler.handled()) {
             mUploadHandler.onResult(Activity.RESULT_CANCELED, null);
             mUploadHandler = null;
         }
@@ -1088,10 +1088,10 @@
                 }
                 break;
             case FILE_SELECTED:
-                // Choose a file from the file picker.
-                if (null == mUploadHandler) break;
+                // Chose a file from the file picker.
+                if (null == mUploadHandler)
+                    break;
                 mUploadHandler.onResult(resultCode, intent);
-                mUploadHandler = null;
                 break;
             case AUTOFILL_SETUP:
                 // Determine whether a profile was actually set up or not
diff --git a/src/com/android/browser/UploadHandler.java b/src/com/android/browser/UploadHandler.java
index ee578fa..5947e4a 100644
--- a/src/com/android/browser/UploadHandler.java
+++ b/src/com/android/browser/UploadHandler.java
@@ -39,6 +39,9 @@
     private ValueCallback<Uri> mUploadMessage;
     private String mCameraFilePath;
 
+    private boolean mHandled;
+    private boolean mCaughtActivityNotFoundException;
+
     private Controller mController;
 
     public UploadHandler(Controller controller) {
@@ -49,7 +52,19 @@
         return mCameraFilePath;
     }
 
+    boolean handled() {
+        return mHandled;
+    }
+
     void onResult(int resultCode, Intent intent) {
+
+        if (resultCode == Activity.RESULT_CANCELED && mCaughtActivityNotFoundException) {
+            // Couldn't resolve an activity, we are going to try again so skip
+            // this result.
+            mCaughtActivityNotFoundException = false;
+            return;
+        }
+
         Uri result = intent == null || resultCode != Activity.RESULT_OK ? null
                 : intent.getData();
 
@@ -71,6 +86,8 @@
         }
 
         mUploadMessage.onReceiveValue(result);
+        mHandled = true;
+        mCaughtActivityNotFoundException = false;
     }
 
     void openFileChooser(ValueCallback<Uri> uploadMsg, String acceptType) {
@@ -183,6 +200,7 @@
             // No installed app was able to handle the intent that
             // we sent, so fallback to the default file upload control.
             try {
+                mCaughtActivityNotFoundException = true;
                 mController.getActivity().startActivityForResult(createDefaultOpenableIntent(),
                         Controller.FILE_SELECTED);
             } catch (ActivityNotFoundException e2) {