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

Commit 128b7036 authored by Philip P. Moltmann's avatar Philip P. Moltmann
Browse files

Note with featureId from ContentProvider

This takes the Context#getFeatureId from the calling context and pipes
it all way through to the noteOp calls done by the content provider.

Bug: 136595429
Test: atest CtsAppOpsTestCases (new test added to capture this case)
            TelecomUnitTests:CallLogManagerTest
	    ContentProviderClientTest
	    TelecomUnitTests:MissedCallNotifierImplTest
	    TelecomUnitTests:BasicCallTests
	    MediaInserterTest
	    PreferencesHelperTest
	    RankingHelperTest
	    PinnedSliceStateTest
	    FrameworksCoreTests:ContentResolverTest
Change-Id: I53b1035626229c920b353509a5bece157b52fb51
parent a7f66b7e
Loading
Loading
Loading
Loading
+1 −0
Original line number Diff line number Diff line
@@ -9467,6 +9467,7 @@ package android.content {
    method @NonNull public final android.content.ContentProvider.CallingIdentity clearCallingIdentity();
    method public abstract int delete(@NonNull android.net.Uri, @Nullable String, @Nullable String[]);
    method public void dump(java.io.FileDescriptor, java.io.PrintWriter, String[]);
    method @Nullable public final String getCallingFeatureId();
    method @Nullable public final String getCallingPackage();
    method @Nullable public final android.content.Context getContext();
    method @Nullable public final android.content.pm.PathPermission[] getPathPermissions();
+7 −7
Original line number Diff line number Diff line
@@ -508,7 +508,7 @@ public class Content {

        @Override
        public void onExecute(IContentProvider provider) throws Exception {
            provider.insert(resolveCallingPackage(), mUri, mContentValues);
            provider.insert(resolveCallingPackage(), null, mUri, mContentValues);
        }
    }

@@ -522,7 +522,7 @@ public class Content {

        @Override
        public void onExecute(IContentProvider provider) throws Exception {
            provider.delete(resolveCallingPackage(), mUri, mWhere, null);
            provider.delete(resolveCallingPackage(), null, mUri, mWhere, null);
        }
    }

@@ -557,7 +557,7 @@ public class Content {

        @Override
        public void onExecute(IContentProvider provider) throws Exception {
            Bundle result = provider.call(null, mUri.getAuthority(), mMethod, mArg, mExtras);
            Bundle result = provider.call(null, null, mUri.getAuthority(), mMethod, mArg, mExtras);
            if (result != null) {
                result.size(); // unpack
            }
@@ -584,7 +584,7 @@ public class Content {

        @Override
        public void onExecute(IContentProvider provider) throws Exception {
            try (ParcelFileDescriptor fd = provider.openFile(null, mUri, "r", null, null)) {
            try (ParcelFileDescriptor fd = provider.openFile(null, null, mUri, "r", null, null)) {
                FileUtils.copy(fd.getFileDescriptor(), FileDescriptor.out);
            }
        }
@@ -597,7 +597,7 @@ public class Content {

        @Override
        public void onExecute(IContentProvider provider) throws Exception {
            try (ParcelFileDescriptor fd = provider.openFile(null, mUri, "w", null, null)) {
            try (ParcelFileDescriptor fd = provider.openFile(null, null, mUri, "w", null, null)) {
                FileUtils.copy(FileDescriptor.in, fd.getFileDescriptor());
            }
        }
@@ -616,7 +616,7 @@ public class Content {

        @Override
        public void onExecute(IContentProvider provider) throws Exception {
            Cursor cursor = provider.query(resolveCallingPackage(), mUri, mProjection,
            Cursor cursor = provider.query(resolveCallingPackage(), null, mUri, mProjection,
                    ContentResolver.createSqlQueryBundle(mWhere, null, mSortOrder), null);
            if (cursor == null) {
                System.out.println("No result found.");
@@ -679,7 +679,7 @@ public class Content {

        @Override
        public void onExecute(IContentProvider provider) throws Exception {
            provider.update(resolveCallingPackage(), mUri, mContentValues, mWhere, null);
            provider.update(resolveCallingPackage(), null, mUri, mContentValues, mWhere, null);
        }
    }

+1 −1
Original line number Diff line number Diff line
@@ -67,7 +67,7 @@ public class ShellUiAutomatorBridge extends UiAutomatorBridge {
                    throw new IllegalStateException("Could not find provider: " + providerName);
                }
                provider = holder.provider;
                cursor = provider.query(null, Settings.Secure.CONTENT_URI,
                cursor = provider.query(null, null, Settings.Secure.CONTENT_URI,
                        new String[] {
                            Settings.Secure.VALUE
                        },
+148 −83

File changed.

Preview size limit exceeded, changes collapsed.

+22 −14
Original line number Diff line number Diff line
@@ -80,6 +80,7 @@ public class ContentProviderClient implements ContentInterface, AutoCloseable {
    private final IContentProvider mContentProvider;
    @UnsupportedAppUsage(maxTargetSdk = Build.VERSION_CODES.P, trackingBug = 115609023)
    private final String mPackageName;
    private final @Nullable String mFeatureId;
    private final String mAuthority;
    private final boolean mStable;

@@ -103,6 +104,7 @@ public class ContentProviderClient implements ContentInterface, AutoCloseable {
        mContentResolver = contentResolver;
        mContentProvider = contentProvider;
        mPackageName = contentResolver.mPackageName;
        mFeatureId = contentResolver.mFeatureId;

        mAuthority = authority;
        mStable = stable;
@@ -193,7 +195,7 @@ public class ContentProviderClient implements ContentInterface, AutoCloseable {
                cancellationSignal.setRemote(remoteCancellationSignal);
            }
            final Cursor cursor = mContentProvider.query(
                    mPackageName, uri, projection, queryArgs, remoteCancellationSignal);
                    mPackageName, mFeatureId, uri, projection, queryArgs, remoteCancellationSignal);
            if (cursor == null) {
                return null;
            }
@@ -253,7 +255,7 @@ public class ContentProviderClient implements ContentInterface, AutoCloseable {

        beforeRemote();
        try {
            return mContentProvider.canonicalize(mPackageName, url);
            return mContentProvider.canonicalize(mPackageName, mFeatureId, url);
        } catch (DeadObjectException e) {
            if (!mStable) {
                mContentResolver.unstableProviderDied(mContentProvider);
@@ -271,7 +273,7 @@ public class ContentProviderClient implements ContentInterface, AutoCloseable {

        beforeRemote();
        try {
            return mContentProvider.uncanonicalize(mPackageName, url);
            return mContentProvider.uncanonicalize(mPackageName, mFeatureId, url);
        } catch (DeadObjectException e) {
            if (!mStable) {
                mContentResolver.unstableProviderDied(mContentProvider);
@@ -296,7 +298,8 @@ public class ContentProviderClient implements ContentInterface, AutoCloseable {
                remoteCancellationSignal = mContentProvider.createCancellationSignal();
                cancellationSignal.setRemote(remoteCancellationSignal);
            }
            return mContentProvider.refresh(mPackageName, url, args, remoteCancellationSignal);
            return mContentProvider.refresh(mPackageName, mFeatureId, url, args,
                    remoteCancellationSignal);
        } catch (DeadObjectException e) {
            if (!mStable) {
                mContentResolver.unstableProviderDied(mContentProvider);
@@ -315,7 +318,8 @@ public class ContentProviderClient implements ContentInterface, AutoCloseable {

        beforeRemote();
        try {
            return mContentProvider.checkUriPermission(mPackageName, uri, uid, modeFlags);
            return mContentProvider.checkUriPermission(mPackageName, mFeatureId, uri, uid,
                    modeFlags);
        } catch (DeadObjectException e) {
            if (!mStable) {
                mContentResolver.unstableProviderDied(mContentProvider);
@@ -334,7 +338,7 @@ public class ContentProviderClient implements ContentInterface, AutoCloseable {

        beforeRemote();
        try {
            return mContentProvider.insert(mPackageName, url, initialValues);
            return mContentProvider.insert(mPackageName, mFeatureId, url, initialValues);
        } catch (DeadObjectException e) {
            if (!mStable) {
                mContentResolver.unstableProviderDied(mContentProvider);
@@ -354,7 +358,7 @@ public class ContentProviderClient implements ContentInterface, AutoCloseable {

        beforeRemote();
        try {
            return mContentProvider.bulkInsert(mPackageName, url, initialValues);
            return mContentProvider.bulkInsert(mPackageName, mFeatureId, url, initialValues);
        } catch (DeadObjectException e) {
            if (!mStable) {
                mContentResolver.unstableProviderDied(mContentProvider);
@@ -373,7 +377,8 @@ public class ContentProviderClient implements ContentInterface, AutoCloseable {

        beforeRemote();
        try {
            return mContentProvider.delete(mPackageName, url, selection, selectionArgs);
            return mContentProvider.delete(mPackageName, mFeatureId, url, selection,
                    selectionArgs);
        } catch (DeadObjectException e) {
            if (!mStable) {
                mContentResolver.unstableProviderDied(mContentProvider);
@@ -392,7 +397,8 @@ public class ContentProviderClient implements ContentInterface, AutoCloseable {

        beforeRemote();
        try {
            return mContentProvider.update(mPackageName, url, values, selection, selectionArgs);
            return mContentProvider.update(mPackageName, mFeatureId, url, values, selection,
                    selectionArgs);
        } catch (DeadObjectException e) {
            if (!mStable) {
                mContentResolver.unstableProviderDied(mContentProvider);
@@ -436,7 +442,8 @@ public class ContentProviderClient implements ContentInterface, AutoCloseable {
                remoteSignal = mContentProvider.createCancellationSignal();
                signal.setRemote(remoteSignal);
            }
            return mContentProvider.openFile(mPackageName, url, mode, remoteSignal, null);
            return mContentProvider.openFile(mPackageName, mFeatureId, url, mode, remoteSignal,
                    null);
        } catch (DeadObjectException e) {
            if (!mStable) {
                mContentResolver.unstableProviderDied(mContentProvider);
@@ -480,7 +487,8 @@ public class ContentProviderClient implements ContentInterface, AutoCloseable {
                remoteSignal = mContentProvider.createCancellationSignal();
                signal.setRemote(remoteSignal);
            }
            return mContentProvider.openAssetFile(mPackageName, url, mode, remoteSignal);
            return mContentProvider.openAssetFile(mPackageName, mFeatureId, url, mode,
                    remoteSignal);
        } catch (DeadObjectException e) {
            if (!mStable) {
                mContentResolver.unstableProviderDied(mContentProvider);
@@ -521,7 +529,7 @@ public class ContentProviderClient implements ContentInterface, AutoCloseable {
                signal.setRemote(remoteSignal);
            }
            return mContentProvider.openTypedAssetFile(
                    mPackageName, uri, mimeTypeFilter, opts, remoteSignal);
                    mPackageName, mFeatureId, uri, mimeTypeFilter, opts, remoteSignal);
        } catch (DeadObjectException e) {
            if (!mStable) {
                mContentResolver.unstableProviderDied(mContentProvider);
@@ -548,7 +556,7 @@ public class ContentProviderClient implements ContentInterface, AutoCloseable {

        beforeRemote();
        try {
            return mContentProvider.applyBatch(mPackageName, authority, operations);
            return mContentProvider.applyBatch(mPackageName, mFeatureId, authority, operations);
        } catch (DeadObjectException e) {
            if (!mStable) {
                mContentResolver.unstableProviderDied(mContentProvider);
@@ -574,7 +582,7 @@ public class ContentProviderClient implements ContentInterface, AutoCloseable {

        beforeRemote();
        try {
            return mContentProvider.call(mPackageName, authority, method, arg, extras);
            return mContentProvider.call(mPackageName, mFeatureId, authority, method, arg, extras);
        } catch (DeadObjectException e) {
            if (!mStable) {
                mContentResolver.unstableProviderDied(mContentProvider);
Loading