summaryrefslogtreecommitdiffstats
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
parent5ee018e25ecda8955f865cbf7b0b946bcad2b294 (diff)
downloadpackages_apps_browser-51f6a2f1dc524b31476fb71de36f2bd79f499d08.zip
packages_apps_browser-51f6a2f1dc524b31476fb71de36f2bd79f499d08.tar.gz
packages_apps_browser-51f6a2f1dc524b31476fb71de36f2bd79f499d08.tar.bz2
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
-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 e9c91f3..4e64fb7 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 ee578fa..5947e4a 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) {