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 | |
parent | 5ee018e25ecda8955f865cbf7b0b946bcad2b294 (diff) | |
download | packages_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.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 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) { |