diff options
| author | Ben Murdoch <benm@google.com> | 2011-02-21 12:27:07 +0000 |
|---|---|---|
| committer | Ben Murdoch <benm@google.com> | 2011-02-22 18:18:02 +0000 |
| commit | 51f6a2f1dc524b31476fb71de36f2bd79f499d08 (patch) | |
| tree | 89a026916b06a026f4b92be4e9cb3c055d2fce9e /src/com/android/browser | |
| parent | 5ee018e25ecda8955f865cbf7b0b946bcad2b294 (diff) | |
| download | packages_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.java | 8 | ||||
| -rw-r--r-- | src/com/android/browser/UploadHandler.java | 18 |
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) { |
