summaryrefslogtreecommitdiff
path: root/core/java/android/content/ContentProviderClient.java
Commit message (Collapse)AuthorAgeFilesLines
* Change close guard logged messagesIoannis Ilkos2021-12-211-2/+2
| | | | | | | | | Unless we are looking at stack traces (e.g. from strict mode) it's not possible to identify which type of object is not being closed (most methods are 'close' or 'release). Change the logged text to clarify. Change-Id: Ib90eac716f43c2c2caf8d8c6fb64a7bd90562da9 Test: manual
* Runtime permission attribution improvementsSvet Ganov2021-03-291-17/+17
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | When an app is proxying access to runtime permission protected data it needs to check whether the calling app has a permission to the data it is about to proxy which leaves a trace in app ops that the requesting app perofmed a data access. However, then the app doing the work needs to get the protected data itself from the OS which access gets attributed only to itself. As a result there are two data accesses in app ops where only the first one is a proxy one that app A got access to Foo through app B - that is the one we want to show in the permission tracking UIs - and one for the data access - that is the one we would want to blame on the calling app, and in fact, these two accesses should be one - that app A accessed Foo though B. This limitation requires fragile one off workarounds where both accesses use the same attribution tag and sys UI has hardcoded rules to dedupe. Since this is not documented we cannot expect that the ecosystem would reliably do this workaround in apps that that the workaround in the OS would be respected by every OEM. This change adds a mechaism to resolve this issue. It allows for an app to create an attribution context for another app and then any private data access thorugh this context would result in a single app op blame that A accessed Foo though B, i.e. we no longer have double accounting. Also this can be nested through apps, e.g. app A asks app B which asks app C for contacts. In this case app B creates an attribution context for app A and calls into app C which creates an attribution context for app B. When app C gets contacts the entire attribution chain would get a porper, single blame: that C accessed the data, that B got the data from C, and that A got the data form B. Furthermore, this mechanism ensures that apps cannot forget to check permissions for the caller before proxying private data. In our example B and C don't need to check the permisisons for A and B, respectively, since the permisisons for the entire attribution chain are checked before data delivery. Attribution chains are not forgeable preventing a bad actor to create an arbitrary one - each attribution is created by the app it refers to and points to a chain of attributions created by their corresponding apps. This change also fixes a bug where all content provider accesses were double counted in app ops due to double noting. While at this it also fixes that apps can now access their own last ops. There was a bug where one could not pass null getting the attributed ops from a historical package ops while this is a valid use case since if there is no attribution everything is mapped to the null tag. There were some app op APIs not being piped thorough the app ops delegate and by extension through the app ops policy. Also now that we have nice way to express the permission chain in a call we no longer need the special casing in activity manager to handle content provider accesses through the OS. Fixed a bug where we don't properly handle the android.os.shell calls with an invlaid tag which was failing while the shell can do any tag. Finally, to ensure the mechanims is validated and works end-to-end we are adding support for a voice recognizer to blame the client app for the mic access. The recognition service can create a blaming context when opening the mic and if the mic is open, which would do all permission checks, we would not do so again. Since changes to PermissionChercker for handling attribution sources were made the CL also hooks up renounced permissoins in the request permission flow and in the permission checks. bug:158792096 bug:180647319 Test:atest CtsPermissionsTestCases atest CtsPermissions2TestCases atest CtsPermissions3TestCases atest CtsPermissions4TestCases atest CtsPermissions5TestCases atest CtsAppOpsTestCases atest CtsAppOps2TestCases Change-Id: Ib04585515d3dc3956966005ae9d94955b2f3ee08
* Remove @TestApi from @SystemApi symbolsAnton Hansson2020-10-201-2/+0
| | | | | | | | | | | | | I ran these commands: cd frameworks/base grep -rl '@TestApi' --include '*.java' | xargs perl -i -p0e \ 's/\@SystemApi[\s\n]+(\@\w+[\s\n]+)?\@TestApi/\@SystemApi\1/gs' grep -rl '@TestApi' --include '*.java' | xargs perl -i -p0e \ 's/\@TestApi[\s\n]+(\@\w+[\s\n]+)?\@SystemApi/\1\@SystemApi/gs' Bug: 171179806 Test: m checkapi Change-Id: I772790b783b0a8730b8bf680c9e569a886b8d789
* Rename featureId -> attributionTagPhilip P. Moltmann2020-03-111-17/+21
| | | | | | | | | | | | | | | | | In the core functionality this changes everything including aidl's and field names: - Context - ContentProvider - AppOps* - Package parsing For the rest, this is a shallow change to only change to the changed APIs. This keeps the change small-ish Exempt-From-Owner-Approval: Rename Fixes: 148792795 Test: TH Change-Id: I2a2245fe76e09e62cb13d5785d2efb4a304ba54a
* Replace com.android.internal.util.Preconditions.checkNotNull withDaulet Zhanguzin2019-12-301-23/+23
| | | | | | | | | java.util.Objects.requireNonNull Bug: 126528330 Test: Treehugger Change-Id: Iaa2abbefc532965e257a68502ec60aadbe465ed2
* Use new UnsupportedAppUsage annotation.Artur Satayev2019-12-181-1/+1
| | | | | | | | Existing annotations in libcore/ and frameworks/ will deleted after the migration. This also means that any java library that compiles @UnsupportedAppUsage requires a direct dependency on "unsupportedappusage" java_library. Bug: 145132366 Test: m && diff unsupportedappusage_index.csv Change-Id: I6ab53570aca580fbee1fcc927871caa09780f58f
* Extend insert/update/delete to provide extras.Jeff Sharkey2019-11-151-10/+25
| | | | | | | | | | | | | | | | | | | A few releases ago we added ContentResolver.QUERY_ARG_* constants to query() as a new best-practice that will help wean us off raw SQL arguments. (For example, a provider could add their own custom arguments like QUERY_ARG_INCLUDE_PENDING to cause the query to reveal pending items that would otherwise be hidden.) This change expands update() and delete() to accept those arguments. This change also expand insert() to accept extras too, as part of preparing to support an upcoming MediaProvider feature that will let apps place new media "adjacent" to an existing media item. (Sending that adjacent item through extras is cleaner than trying to send it through escaped query parameters.) Bug: 131643582 Test: atest CtsContentTestCases Change-Id: I436296155b9b5f371b4cbe661feaf42070285fcc
* Note with featureId from ContentProviderPhilip P. Moltmann2019-10-291-14/+22
| | | | | | | | | | | | | | | | | | 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
* Detailed ContentProvider permissions checks.Jeff Sharkey2019-07-121-0/+19
| | | | | | | | | | | | | | | | | | The new MediaProvider design has an internal dynamic security model based on the value stored in OWNER_PACKAGE_NAME, so the OS always needs to consult the provider when resolving Uri permission grants. Blocking calls from the system process like this are typically discouraged, but this is the best we can do with the limited time left, and there is existing precident with getType(). For now, use "forceUriPermissions" as a proxy for determining when we need to consult the provider directly. Bug: 115619667 Test: atest --test-mapping packages/providers/MediaProvider Test: atest android.appsecurity.cts.ExternalStorageHostTest Change-Id: I1d54feeec93fbb4cf5ff55240ef4eae3a35ed068
* Respond to various API council feedback.Jeff Sharkey2019-02-191-4/+3
| | | | | | | | | | | | Handle many simple, smaller changes in a single CL. Hide CPC.closeQuietly(), now that it implements AutoCloseable. Add more details to CR.set/getCache() docs. Add many @Nullable/@NonNull annotations. Bug: 124507578, 124447751, 124302519, 123697622 Bug: 123661322, 122887179, 122528742, 122527812, 116224797 Test: manual Change-Id: Icee556a6ed76bbdf4c8e42b59d69d5580d461b95
* Offer API to detect ContentProvider ANRs.Jeff Sharkey2018-12-081-2/+18
| | | | | | | | | | | | | | If a system component calls to a remote provider, and that provider hangs, we end up burning that Binder thread until the remote process is killed for some unrelated reason. This change adds an API to detect these hangs, and kill the remote process after a specific timeout, but only when the caller holds a permission that lets them kill other apps. Bug: 117635768 Test: atest android.content.cts.ContentResolverTest Change-Id: I81b0d993d9d585cdeb5e2559c68052ba6cbbced9
* Extract common methods into ContentInterface.Jeff Sharkey2018-12-081-8/+52
| | | | | | | | | | | | | | | | | | | | | | Existing APIs that accept a ContentResolver are too restrictive when the caller has their own ContentProviderClient already bound and configured, so we're in the market for a solution to open those existing APIs to accept a wider range of inputs. The solution we've come up with is to introduce a super-interface which contains the common ContentProvider APIs, and then make ContentProvider, ContentResolver, and ContentProviderClient all implement that interface for consistency. After this change lands, we can then safely relax existing APIs to accept this new ContentInterface, offering a clean path to solving the problem outlined above. Bug: 117635768 Test: atest android.content.cts Test: atest android.provider.cts Change-Id: Ic5ae08107f7dd3dd23dcaec2df40c16543e0d86e Exempted-From-Owner-Approval: keep tests working
* Move some members to the "Q blacklist".Mathew Inwood2018-09-141-1/+2
| | | | | | | | | | | | | | Based on some analysis, these fields/methods are likely false positives. Set maxTargetSdk=P so that any apps using them are required to migrate off them in future. See the bug for more details. Exempted-From-Owner-Approval: Automatic changes to the codebase affecting only @UnsupportedAppUsage annotations, themselves added without requiring owners approval earlier. Bug: 115609023 Test: m Change-Id: I719b5c94e5b1f4fa562dd5d655953422958ad37e
* Add @UnsupportedAppUsage annotationsMathew Inwood2018-08-151-0/+3
| | | | | | | | | | | | | | | | | | | | | | For packages: android.content.res android.content.pm.split android.content.pm.permission android.content.pm.dex android.content.pm android.content.om android.content This is an automatically generated CL. See go/UnsupportedAppUsage for more details. Exempted-From-Owner-Approval: Mechanical changes to the codebase which have been approved by Android API council and announced on android-eng@ Bug: 110868826 Test: m Change-Id: Ia79256a3d04e16dd78331a61af0dcddc5fc1599b
* Utility methods useful for working with files.Jeff Sharkey2018-07-111-6/+11
| | | | | | | | Part of getting DocumentsUI ready for building against public API. Test: builds Bug: 110959821 Change-Id: I7cc0acd5ac3bcc89790cb49f34291ae523e44019
* Allow blocking calls when protected against ANRs.Jeff Sharkey2017-11-091-0/+13
| | | | | | | | | | | | | | ContentProviderClient has a nice setDetectNotResponding() method that detects hanging calls to remote providers, and it can trigger an ANR to kill the app and release the blocked thread. We typically don't want to perform blocking calls from the system server, but we're okay allowing them on CPCs that are using setDetectNotResponding() to watch for hung clients. Test: builds, boots Bug: 69128093 Change-Id: I223aaf1d0cef0f8dee28f800d9e3c101d7449952
* Properly guard access to CloseGuard in finalizers.Narayan Kamath2017-04-031-2/+8
| | | | | | | | | | | | | | | | | | | | | | | CloseGuard instances are allocated in constructors and usually assigned to final fields. This implies they're non-null in finalizers except in the case where the constructor throws. We add a null check to make sure we can continue cleaning up other state in the finalizer (if applicable). Also, this change decouples closeguard warnings in constructors from other state based logic. This because the logic there is usually duplicated with the call to close(). NOTE: This change is not a "complete" fix. Many of these finalizers are broken in the case where <init> throws. The only objective of this change is to make such errors more obvious. Note that some of these classes don't have CTS tests. Test: make, CtsMediaTestCases. Bug: 35609098 Change-Id: I24d9e0215f80e44914dba8ab99b6312fd6ed1fc0
* Unihiding REFRESH_SUPPORTED and ContentProviderClient#refresh.Ben Lin2016-12-211-1/+1
| | | | | Test: Only unhiding previously hidden methods. Change-Id: Id1731b64b86760d3249855d685d8cb83721596fc
* Replace ContentProvider SQL args w/ Bundle & Constants.Steve McKay2016-12-091-4/+13
| | | | | | Test: cts-tradefed run cts-dev -m CtsContentTestCases Bug: 30927484 Change-Id: Idb9dbc2b80896e9f8474a0db71353b7a3810d597
* Treat everyone the same, redux.Jeff Sharkey2016-11-161-7/+1
| | | | | | Test: builds Bug: 29746499 Change-Id: Id2a9aacf0db40cdd053d203897e792662c6d3cd0
* Adding ContentProvider#refresh and ContentResolver#refresh.Ben Lin2016-11-101-0/+24
| | | | | | | Original CL is from ag/1568530. Bug: 31647485 Change-Id: Ib45fc995a361b8c75cd3600f638910b18a263d51
* Revert "Treat everyone the same."Jeff Sharkey2016-07-111-1/+7
| | | | | | | This reverts commit 7678aeddd9ca894d5acddef6f900d9d43af009ce. Bug: 30051184, 29746499 Change-Id: Ibd8bc2771d67c4db61c82dcc8a569eb8adfef8de
* Treat everyone the same.Jeff Sharkey2016-06-291-7/+1
| | | | | Bug: 29746499 Change-Id: I8344e42c5c55e5414bcc223e4caa857dc06de750
* Remove com.google.android.syncadapters.contacts from exception listMakoto Onuki2016-02-051-2/+1
| | | | | | | Bug 26902400 Bug 26481405 Change-Id: I3b4d0217ee033f727074f68ebe6a1c1461509d04
* Temporary patch to work around broken casting.Jeff Sharkey2016-01-101-1/+2
| | | | | Bug: 26481405 Change-Id: If91ecfbfda94a2cb694098d456126f87311e1d05
* Null cursors don't need to be wrapped.Jeff Sharkey2016-01-071-0/+4
| | | | Change-Id: I59b604a60a066c2d808a796658757af952ef913c
* GmsCore is casting to a concrete subclass, sigh.Jeff Sharkey2016-01-071-1/+6
| | | | | | | | | Since this technically wasn't an API change, there isn't a good reason to protect with target API. So change the behavior based on the caller for now. Bug: 26438049 Change-Id: I65aa1fc9af1f935544f8e191444440af4f98f26f
* Discourage use of "_data" column.Jeff Sharkey2016-01-061-29/+77
| | | | | | | | | | | | | | | | | | Moving forward, all client file access really needs to be going through explicit APIs like openFileDescriptor(), since that allows the provider to better protect its underlying files. This change also changes several classes to use the AutoClosable pattern, which enables try-with-resources usage. Older release() methods are deprecated in favor of close(). Uniformly apply CloseGuard across several classes, using AtomicBoolean to avoid double-freeing, and fix several resource leaks and bugs related to MediaScanner allocation. Switch MediaScanner and friends to use public API instead of raw AIDL calls. Bug: 22958127 Change-Id: Id722379f72c9e4b80d8b72550d7ce90e5e2bc786
* Annotate ContentProviderClient arguments.Jeff Sharkey2015-06-121-29/+74
| | | | | | | Explicitly mark if they're @Nullable or @NonNull. Bug: 21560515 Change-Id: Id0a208a38c5a9ea19dddbe60c65d285645d08bb0
* Fix issue with call backs from media process.Dianne Hackborn2014-11-191-1/+1
| | | | | | | | | | | | | | | | | | | | All but a few lines of this is for issue #16013164, which allowed apps to do some operations as the media uid by having it call back to them to open a file. The problem here is with the tempory identity stuff in the activity manager, allowing us to make the open call as the original caller... ideally we should figure out a way to just get rid of all of that, but the solution here is actually easier (even though it doesn't look it) -- we now hand a token over to the openFile() call that it can use when doing permission checks to say "yes I would like the check to be against whoever is responsible for the open". This allows us to do the uid remapping for only this one specific set of permission checks, and nothing else. Also fix issue #17487348: Isolated services can access system services they shouldn't be able to. Don't send any system service IBinder objects down for the first initialization of an isolated process. Change-Id: I3c70e16e0899d7eef0bae458e83958b41ed2b75e
* Detect wedged ContentProviders, treat as ANR.Jeff Sharkey2013-10-011-43/+133
| | | | | | | | | | | | | All ContentProvider calls are currently blocking, making it hard for an app to recover when a remote provider is wedged. This change adds hidden support to ContentProviderClient to timeout remote calls, treating them as ANRs. This behavior is disabled by default. Update DocumentsUI to use a 20 second timeout whenever interacting with a storage provider. Bug: 10993301, 10819461, 10852518 Change-Id: I10fa3c425c6a7225fff9cb7a0a07659028230cd3
* Create unique files, root ordering, UI bugs.Jeff Sharkey2013-09-211-0/+13
| | | | | | | | | | | | | | | | | | | | | | When a file already exists on disk, try adding a counter suffix to make a unique name. Move services near top of roots list, just below recents. Remove "Documents" root. Increase number of recents allowed from single provider, and add more logging to diagnose wedged loaders. When launching GET_CONTENT apps, wait for successful result before relaying result; canceled requests now return to DocumentsUI. Add CloseGuard to ContentProviderClients, since leaked instances can keep the remote process alive. Fix UI bug around trailing breadcrumbs. Fix bug that dropped Recents from roots list. Add up action to Settings activity. Give our activity a default icon while waiting for async roots to load. Bug: 10818683, 10819461, 10819461, 10819196, 10860199 Change-Id: I7b9e26b1cf8353dd3175458b23da2b4bda6c5831
* Handle pipe thumbnails, acquire unstable refs.Jeff Sharkey2013-09-111-0/+4
| | | | | | | | | Support decoding thumbnails delivered over pipes by wrapping in a buffered stream. Also switch to using unstable provider references to avoid crashing DocumentsUI. Bug: 10516148, 10510851 Change-Id: I85f6eeaca70c97742bf79656d1d0c6da381fdd47
* Disabled states, more UX work, bug fixes.Jeff Sharkey2013-09-091-1/+4
| | | | | | | | | | | | | | | | | | | Fix drawable state to correctly show dimmed disabled state. Update disabled state for all children to grey out text. Block multi-selection of documents not matching MIME filter. Load thumbnails in parallel. Show thumbnails in list mode based on MIME type to match spec. Give each footer a unique view type to avoid recycler crashes. Show breadcrumb icons in recent create paths. Fix timestamp bug when querying/updating recent paths. Make ContentProviderClient.closeQuietly() really be quiet. Bug: 10668364, 10510022, 10668701, 10534224, 10667726 Change-Id: I3c705412fb211519f15ad41a273a7533b878e9e5
* Work on issue #10130785: Restore silence and vibrate settings...Dianne Hackborn2013-09-061-0/+24
| | | | | | | | | ...in settings > sound Add a new ContentProvider API to canonicalize URIs, so they can be transported across backup/restore. Change-Id: Ie5af3662f6822a32310e49c7f1e1ff084986c56e
* Stronger DocumentsProvider contract.Jeff Sharkey2013-08-281-0/+7
| | | | | | | | | | | | | | | | | | | Using a contract class requires that a provider implement it exactly with little help. This change introduces a DocumentsProvider abstract class that provides a client-side implementation of the contract that greatly reduces developer burden, and improves correctness. This also moves to first-class DocumentRoot objects, and moves calls with complex side effects to be ContentProvider.call() invocations, offering more granular permission control over Uri operations that shouldn't be available through Uri grants. This new design also relaxes the requirement that root information be burned into every Uri. Migrate ExternalDocumentsProvider and DocumentsUI to adopt new API. Bug: 10497206 Change-Id: I6f2b3f519bfd62a9d693223ea5628a971ce2e743
* Add CancellationSignal support to file operations.Jeff Sharkey2013-08-231-12/+51
| | | | | | | | | | | | | | | | | | | | Since ContentProvider file operations can end up doing substantial network I/O before returning the file, allow clients to cancel their file requests with CancellationSignal. Ideally this would only be needed for openFile(), but ContentResolver heavily relies on openAssetFile() and openTypedAssetFile() for common cases. Also improve documentation to mention reliable ParcelFileDescriptors and encourage developers to move away from "rw" combination modes, since they restrict provider flexibility. Mention more about places where pipes or socket pairs could be returned. Improve DocumentsContract documentation. Bug: 10329944 Change-Id: I49b2825ea433eb051624c4da3b77612fe3ffc99c
* More work on App Ops service.Dianne Hackborn2013-01-161-11/+13
| | | | | | | | | | | | | | | | | | | | | | | | | Implemented reading and writing state to retain information across boots, API to retrieve state from it, improved location manager interaction to monitor both coarse and fine access and only note operations when location data is being delivered back to app (not when it is just registering to get the data at some time in the future). Also implement tracking of read/write ops on contacts and the call log. This involved tweaking the content provider protocol to pass over the name of the calling package, and some infrastructure in the ContentProvider transport to note incoming calls with the app ops service. The contacts provider and call log provider turn this on for themselves. This also implements some of the mechanics of being able to ignore incoming provider calls... all that is left are some new APIs for the real content provider implementation to be involved with providing the correct behavior for query() (return an empty cursor with the right columns) and insert() (need to figure out what URI to return). Change-Id: I36ebbcd63dee58264a480f3d3786891ca7cbdb4c
* More mult-user API work.Dianne Hackborn2012-08-071-0/+13
| | | | | | | | | | | - You can now use android:singleUser with receivers and providers. - New API to send ordered broadcasts as a user. - New Process.myUserHandle() API. For now I am trying out "user handle" as the name for the numbers representing users. Change-Id: I754c713ab172494bb4251bc7a37a17324a2e235e
* Fix (mostly) issue #5109947: Race condition between retrieving a...Dianne Hackborn2012-05-291-17/+116
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | ...content provider and updating its oom adj This introduces the concept of an "unstable" reference on a content provider. When holding such a reference (and no normal stable ref), the content provider dying will not cause the client process to be killed. This is used in ContentResolver.query(), .openAssetFileDescriptor(), and .openTypedAssetFileDescriptor() to first access the provider with an unstable reference, and if at the point of calling into the provider we find it is dead then acquiring a new stable reference and doing the operation again. Thus if the provider process dies at any point until we get the result back, our own process will not be killed and we can safely retry the operation. Arguably there is still the potential for a race -- if somehow the provider is killed way late by the OOM killer after the query or open has returned -- but this should now be *extremely* unlikely. We also continue to have the issue with the other calls, but these are much less critical, and the same model can't be used there (we wouldn't want to execute two insert operations for example). The implementation of this required some significant changes to the underlying plumbing of content providers, now keeping track of the two different reference counts, and managing them appropriately. To facilitate this, the activity manager now has a formal connection object for a client reference on a content provider, which hands to the application when opening the provider. These changes have allowed a lot of the code to be cleaned up and subtle issues closed. For example, when a process is crashing, we now have a much better idea of the state of content provider clients (olding a stable ref, unstable ref, or waiting for it to launch), so that we can correctly handle each of these. The client side code is also a fair amount cleaner, though in the future there is more than should be done. In particular, the two ProviderClientRecord and ProviderRefCount classes should be combined into one, part of which is exposed to the ContentResolver internal API as a reference on a content provider with methods for updating reference counts and such. Some day we'll do that. Change-Id: I87b10d1b67573ab899e09ca428f1b556fd669c8c
* Add infrastructure for accessing "unstable" content providers.Dianne Hackborn2012-05-091-2/+9
| | | | | | | We have an API and some stuff that purports to this, but no real implementation yet. Change-Id: I93555440014a50fdf79fa3f65318d90fb82265b4
* Move CancellationSignal to android.os package.Jeff Brown2012-05-071-0/+2
| | | | | Bug: 6427830 Change-Id: I39451bb1e1d4a8d976ed1c671234f0c8c61658dd
* Rename CancellationSignal using preferred spelling.Jeff Brown2012-02-021-6/+6
| | | | | Bug: 5943637 Change-Id: I12a339f285f4db58e79acb5fd8ec2fc1acda5265
* Implement a cancelation mechanism for queries.Jeff Brown2012-01-271-1/+14
| | | | | | | | | | | | | Added new API to enable cancelation of SQLite and content provider queries by means of a CancelationSignal object. The application creates a CancelationSignal object and passes it as an argument to the query. The cancelation signal can then be used to cancel the query while it is executing. If the cancelation signal is raised before the query is executed, then it is immediately terminated. Change-Id: If2c76e9a7e56ea5e98768b6d4f225f0a1ca61c61
* Add new ContentProvider for doing conversions to data streams.Dianne Hackborn2010-08-081-9/+34
| | | | | | | | | | | | | | | | | | | | | | | | | | | | This introduces basic infrastructure that should allow content providers holding complex data to perform on-demand conversion of their data to streams of various types. It is achieved through two new content provider APIs, one to interrogate the possible stream MIME types the provider can return, and the other to request a stream of data in a particular MIME type. Because implementations of this will often need to do on-demand data conversion, there is also a utility intoduced in ContentProvider for subclasses to easily run a function to write data into a pipe that is read by the client. This feature is mostly intended for cut and paste and drag and drop, as the complex data interchange allowing the source and destination to negotiate data types and copy (possible large) data between them. However because it is fundamental facility of ContentProvider, it can be used in other places, such as for more advanced GET_CONTENT data exchanges. An example implementation of this would be in ContactsProvider, which can now provider a data stream when a client opens certain pieces of it data, to return data as flat text, a vcard, or other format. Change-Id: I58627ea4ed359aa7cf2c66274adb18306c209cb2
* am 328c0e79: - removed the concept of Entity from the ContentProvider APIs - ↵Fred Quintana2009-12-101-10/+1
| | | | | | | | | removed the parcelling ability from Entity and EntityIterator and made them public - added an EntityIterator abstract implementation that allow easy wrapping of a Cursor - changed the VCard c Merge commit '328c0e7986aa6bb7752ec6de3da9c999920bb55f' into eclair-mr2-plus-aosp * commit '328c0e7986aa6bb7752ec6de3da9c999920bb55f': - removed the concept of Entity from the ContentProvider APIs
* - hide Entity and all its referencesFred Quintana2009-10-061-11/+4
| | | | | | | - remove updateEntity and insertEntity, since they are not used - add the RawContacts.Entity class, which is used in lieu of the android.content.Entity
* - create a new generic ISyncAdapter implementation, SyncAdapterNewFred Quintana2009-06-011-1/+2
| | | | | | - change the applyBatch to take an ArrayList rather than an [] - change Entity to be a final flass that contains ContentValues - remove the ability to update/insert Entities by a ContentProviderOperation
* add ipc support to batchingFred Quintana2009-05-221-10/+6
|
* content provider entitiesFred Quintana2009-05-131-8/+50
|