Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 471d6d34 authored by Dmitri Plotnikov's avatar Dmitri Plotnikov Committed by Android (Google) Code Review
Browse files

Merge "Add async version of "uncanonicalize""

parents 99f31ae3 ec2bc8d9
Loading
Loading
Loading
Loading
+14 −0
Original line number Diff line number Diff line
@@ -623,6 +623,20 @@ public abstract class ContentProvider implements ContentInterface, ComponentCall
            }
        }

        @Override
        public void uncanonicalizeAsync(String callingPkg, @Nullable String attributionTag, Uri uri,
                RemoteCallback callback) {
            final Bundle result = new Bundle();
            try {
                result.putParcelable(ContentResolver.REMOTE_CALLBACK_RESULT,
                        uncanonicalize(callingPkg, attributionTag, uri));
            } catch (Exception e) {
                result.putParcelable(ContentResolver.REMOTE_CALLBACK_ERROR,
                        new ParcelableException(e));
            }
            callback.sendResult(result);
        }

        @Override
        public boolean refresh(String callingPkg, String attributionTag, Uri uri, Bundle extras,
                ICancellationSignal cancellationSignal) throws RemoteException {
+29 −0
Original line number Diff line number Diff line
@@ -382,6 +382,16 @@ abstract public class ContentProviderNative extends Binder implements IContentPr
                    return true;
                }

                case UNCANONICALIZE_ASYNC_TRANSACTION: {
                    data.enforceInterface(IContentProvider.descriptor);
                    String callingPkg = data.readString();
                    String featureId = data.readString();
                    Uri uri = Uri.CREATOR.createFromParcel(data);
                    RemoteCallback callback = RemoteCallback.CREATOR.createFromParcel(data);
                    uncanonicalizeAsync(callingPkg, featureId, uri, callback);
                    return true;
                }

                case REFRESH_TRANSACTION: {
                    data.enforceInterface(IContentProvider.descriptor);
                    String callingPkg = data.readString();
@@ -874,6 +884,25 @@ final class ContentProviderProxy implements IContentProvider
        }
    }

    @Override
    /* oneway */ public void uncanonicalizeAsync(String callingPkg, @Nullable String featureId,
            Uri uri, RemoteCallback callback) throws RemoteException {
        Parcel data = Parcel.obtain();
        try {
            data.writeInterfaceToken(IContentProvider.descriptor);

            data.writeString(callingPkg);
            data.writeString(featureId);
            uri.writeToParcel(data, 0);
            callback.writeToParcel(data, 0);

            mRemote.transact(IContentProvider.UNCANONICALIZE_ASYNC_TRANSACTION, data, null,
                    Binder.FLAG_ONEWAY);
        } finally {
            data.recycle();
        }
    }

    @Override
    public boolean refresh(String callingPkg, @Nullable String featureId, Uri url, Bundle extras,
            ICancellationSignal signal) throws RemoteException {
+8 −1
Original line number Diff line number Diff line
@@ -1338,7 +1338,14 @@ public abstract class ContentResolver implements ContentInterface {
        }

        try {
            return provider.uncanonicalize(mPackageName, mAttributionTag, url);
            final UriResultListener resultListener = new UriResultListener();
            provider.uncanonicalizeAsync(mPackageName, mAttributionTag, url,
                    new RemoteCallback(resultListener));
            resultListener.waitForResult(CONTENT_PROVIDER_TIMEOUT_MILLIS);
            if (resultListener.exception != null) {
                throw resultListener.exception;
            }
            return resultListener.result;
        } catch (RemoteException e) {
            // Arbitrary and not worth documenting, as Activity
            // Manager will kill this process shortly anyway.
+9 −0
Original line number Diff line number Diff line
@@ -137,6 +137,14 @@ public interface IContentProvider extends IInterface {
    public Uri uncanonicalize(String callingPkg, @Nullable String attributionTag, Uri uri)
            throws RemoteException;

    /**
     * A oneway version of uncanonicalize. The functionality is exactly the same, except that the
     * call returns immediately, and the resulting type is returned when available via
     * a binder callback.
     */
    void uncanonicalizeAsync(String callingPkg, @Nullable String attributionTag, Uri uri,
            RemoteCallback callback) throws RemoteException;

    public boolean refresh(String callingPkg, @Nullable String attributionTag, Uri url,
            @Nullable Bundle extras, ICancellationSignal cancellationSignal) throws RemoteException;

@@ -172,4 +180,5 @@ public interface IContentProvider extends IInterface {
    static final int CHECK_URI_PERMISSION_TRANSACTION = IBinder.FIRST_CALL_TRANSACTION + 27;
    int GET_TYPE_ASYNC_TRANSACTION = IBinder.FIRST_CALL_TRANSACTION + 28;
    int CANONICALIZE_ASYNC_TRANSACTION = IBinder.FIRST_CALL_TRANSACTION + 29;
    int UNCANONICALIZE_ASYNC_TRANSACTION = IBinder.FIRST_CALL_TRANSACTION + 30;
}
+8 −0
Original line number Diff line number Diff line
@@ -261,4 +261,12 @@ public class ContentResolverTest {
            // Expected
        }
    }

    @Test
    public void testUncanonicalize() {
        Uri uncanonical = mResolver.uncanonicalize(
                Uri.parse("content://android.content.FakeProviderRemote/something"));
        assertThat(uncanonical).isEqualTo(
                Uri.parse("content://android.content.FakeProviderRemote/uncanonical"));
    }
}
Loading