diff options
| author | Dmitri Plotnikov <dplotnikov@google.com> | 2020-03-24 15:43:57 -0700 |
|---|---|---|
| committer | Dmitri Plotnikov <dplotnikov@google.com> | 2020-03-24 15:49:15 -0700 |
| commit | be61c4468c89989c89341777dce5d0dba4cf6857 (patch) | |
| tree | aab24e04ceca34e8edb5cbef5c028c68e54b64ea /core/java/android/content/ContentProvider.java | |
| parent | 6a265d64e88f06bc03628e59e884608707cdea9d (diff) | |
Propagate exception thrown by ContentProvider.getType
Test: atest FrameworksCoreTests:android.content.ContentResolverTest
Fixes: 149184281
Change-Id: If3c33e58b1d0f3b88148eb3d2085c9d23cf12fc2
Diffstat (limited to 'core/java/android/content/ContentProvider.java')
| -rw-r--r-- | core/java/android/content/ContentProvider.java | 19 |
1 files changed, 18 insertions, 1 deletions
diff --git a/core/java/android/content/ContentProvider.java b/core/java/android/content/ContentProvider.java index d8e8b27d0621..5340d00b0486 100644 --- a/core/java/android/content/ContentProvider.java +++ b/core/java/android/content/ContentProvider.java @@ -47,6 +47,7 @@ import android.os.Bundle; import android.os.CancellationSignal; import android.os.IBinder; import android.os.ICancellationSignal; +import android.os.Parcel; import android.os.ParcelFileDescriptor; import android.os.Process; import android.os.RemoteCallback; @@ -303,7 +304,23 @@ public abstract class ContentProvider implements ContentInterface, ComponentCall @Override public void getTypeAsync(Uri uri, RemoteCallback callback) { final Bundle result = new Bundle(); - result.putString(ContentResolver.REMOTE_CALLBACK_RESULT, getType(uri)); + try { + result.putString(ContentResolver.REMOTE_CALLBACK_RESULT, getType(uri)); + } catch (Exception e) { + Parcel parcel = Parcel.obtain(); + try { + try { + parcel.writeException(e); + } catch (Exception ex) { + // getType threw an unparcelable exception. Wrap the message into + // a parcelable exception type + parcel.writeException(new IllegalStateException(e.getMessage())); + } + result.putByteArray(ContentResolver.REMOTE_CALLBACK_ERROR, parcel.marshall()); + } finally { + parcel.recycle(); + } + } callback.sendResult(result); } |
