summaryrefslogtreecommitdiffstats
path: root/src/com/android/browser
diff options
context:
space:
mode:
authorBen Murdoch <benm@google.com>2011-02-21 12:27:07 +0000
committerBen Murdoch <benm@google.com>2011-02-22 18:18:02 +0000
commit51f6a2f1dc524b31476fb71de36f2bd79f499d08 (patch)
tree89a026916b06a026f4b92be4e9cb3c055d2fce9e /src/com/android/browser
parent5ee018e25ecda8955f865cbf7b0b946bcad2b294 (diff)
downloadpackages_apps_Browser-51f6a2f1dc524b31476fb71de36f2bd79f499d08.tar.gz
packages_apps_Browser-51f6a2f1dc524b31476fb71de36f2bd79f499d08.tar.bz2
packages_apps_Browser-51f6a2f1dc524b31476fb71de36f2bd79f499d08.zip
Fix file upload handling after ActivityNotFoundException.
When we launch the file picker for uploads, if nothing can handle the type of file then we catch the ActivityNotFoundException so that we do not crash and launch a default picker instead. However we still will receive a callback for the intent that failed so in this case we must skip processing it. Bug:3447924 Change-Id: Ic309f4ba1a6feda981fcce5231b9aed9be70eef2
Diffstat (limited to 'src/com/android/browser')
-rw-r--r--src/com/android/browser/Controller.java8
-rw-r--r--src/com/android/browser/UploadHandler.java18
2 files changed, 22 insertions, 4 deletions
diff --git a/src/com/android/browser/Controller.java b/src/com/android/browser/Controller.java
index e9c91f3bb..4e64fb7e5 100644
--- a/src/com/android/browser/Controller.java
+++ b/src/com/android/browser/Controller.java
@@ -678,7 +678,7 @@ public class Controller
}
void onDestroy() {
- if (mUploadHandler != null) {
+ if (!mUploadHandler.handled()) {
mUploadHandler.onResult(Activity.RESULT_CANCELED, null);
mUploadHandler = null;
}
@@ -1088,10 +1088,10 @@ public class Controller
}
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 ee578fa4e..5947e4a72 100644
--- a/src/com/android/browser/UploadHandler.java
+++ b/src/com/android/browser/UploadHandler.java
@@ -39,6 +39,9 @@ public class UploadHandler {
private ValueCallback<Uri> mUploadMessage;
private String mCameraFilePath;
+ private boolean mHandled;
+ private boolean mCaughtActivityNotFoundException;
+
private Controller mController;
public UploadHandler(Controller controller) {
@@ -49,7 +52,19 @@ public class UploadHandler {
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 @@ public class UploadHandler {
}
mUploadMessage.onReceiveValue(result);
+ mHandled = true;
+ mCaughtActivityNotFoundException = false;
}
void openFileChooser(ValueCallback<Uri> uploadMsg, String acceptType) {
@@ -183,6 +200,7 @@ public class UploadHandler {
// 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) {