From 0ec406570d05cfe01db6da72b15b1282cfb794e6 Mon Sep 17 00:00:00 2001 From: Ashish Kumar Date: Mon, 13 Feb 2023 14:44:16 +0000 Subject: Added a new api ContentProvider#getTypeAnonymous - When an app is unable to acquire IContentProvider in contentResolver#getType, they can only call getTypeAnonymous via activityManagerService. - default getTypeUnchecked returns getType (to ensure less breaking) - getType calls are protected by readPermission. - updated logging of getType calls without readPermisison. Bug: b/161370118 Test: Build, manual test and logging Change-Id: Ia5fe69061de36ed70d93b30754d68b63ad791c83 --- .../src/android/test/mock/MockContentProvider.java | 27 ++++++++++++++++++++-- .../android/test/mock/MockIContentProvider.java | 20 +++++++++++++--- 2 files changed, 42 insertions(+), 5 deletions(-) (limited to 'test-mock/src') diff --git a/test-mock/src/android/test/mock/MockContentProvider.java b/test-mock/src/android/test/mock/MockContentProvider.java index 7be42f4f36f5..7f084f896e3f 100644 --- a/test-mock/src/android/test/mock/MockContentProvider.java +++ b/test-mock/src/android/test/mock/MockContentProvider.java @@ -80,15 +80,21 @@ public class MockContentProvider extends ContentProvider { } @Override - public String getType(Uri url) throws RemoteException { + public String getType(@NonNull AttributionSource attributionSource, + Uri url) throws RemoteException { return MockContentProvider.this.getType(url); } @Override - public void getTypeAsync(Uri uri, RemoteCallback callback) throws RemoteException { + public void getTypeAsync(@NonNull AttributionSource attributionSource, + Uri uri, RemoteCallback callback) throws RemoteException { MockContentProvider.this.getTypeAsync(uri, callback); } + @Override + public void getTypeAnonymousAsync(Uri uri, RemoteCallback callback) throws RemoteException { + MockContentProvider.this.getTypeAnonymousAsync(uri, callback); + } @Override public Uri insert(@NonNull AttributionSource attributionSource, Uri url, ContentValues initialValues, Bundle extras) throws RemoteException { @@ -246,6 +252,23 @@ public class MockContentProvider extends ContentProvider { }); } + @Override + public String getTypeAnonymous(Uri uri) { + throw new UnsupportedOperationException("unimplemented mock method"); + } + + /** + * @hide + */ + @SuppressWarnings("deprecation") + public void getTypeAnonymousAsync(Uri uri, RemoteCallback remoteCallback) { + AsyncTask.SERIAL_EXECUTOR.execute(() -> { + final Bundle bundle = new Bundle(); + bundle.putString(ContentResolver.REMOTE_CALLBACK_RESULT, getTypeAnonymous(uri)); + remoteCallback.sendResult(bundle); + }); + } + @Override public Uri insert(Uri uri, ContentValues values) { throw new UnsupportedOperationException("unimplemented mock method"); diff --git a/test-mock/src/android/test/mock/MockIContentProvider.java b/test-mock/src/android/test/mock/MockIContentProvider.java index b81c70704d79..bb2996a2cb40 100644 --- a/test-mock/src/android/test/mock/MockIContentProvider.java +++ b/test-mock/src/android/test/mock/MockIContentProvider.java @@ -61,16 +61,30 @@ public class MockIContentProvider implements IContentProvider { } @Override - public String getType(Uri url) { + public String getType(@NonNull AttributionSource attributionSource, Uri url) { throw new UnsupportedOperationException("unimplemented mock method"); } @Override @SuppressWarnings("deprecation") - public void getTypeAsync(Uri uri, RemoteCallback remoteCallback) { + public void getTypeAsync(@NonNull AttributionSource attributionSource, + Uri uri, RemoteCallback remoteCallback) { AsyncTask.SERIAL_EXECUTOR.execute(() -> { final Bundle bundle = new Bundle(); - bundle.putString(ContentResolver.REMOTE_CALLBACK_RESULT, getType(uri)); + bundle.putString(ContentResolver.REMOTE_CALLBACK_RESULT, getType(attributionSource, + uri)); + remoteCallback.sendResult(bundle); + }); + } + public String getTypeAnonymous(Uri url) { + throw new UnsupportedOperationException("unimplemented mock method"); + } + @Override + @SuppressWarnings("deprecation") + public void getTypeAnonymousAsync(Uri uri, RemoteCallback remoteCallback) { + AsyncTask.SERIAL_EXECUTOR.execute(() -> { + final Bundle bundle = new Bundle(); + bundle.putString(ContentResolver.REMOTE_CALLBACK_RESULT, getTypeAnonymous(uri)); remoteCallback.sendResult(bundle); }); } -- cgit v1.2.3-59-g8ed1b