ContentProviderGeneration
This library includes a very fast, easy way to use ContentProvider
! Using annotations, you can generate ContentProvider
with ease.
Getting Started
This feature is largely based off of schematic, while leveraging DBFlow's power.
Placeholder ContentProvider
In order to define a ContentProvider
, you must define it in a placeholder class:
or you can use the annotation in any class you wish. The recommended place would be in a @Database
placeholder class. This is to simplify some of the declarations and keep it all in one place. Any database this annotated class references must extend ContentProviderDatabase
Adding To Manifest
In other applications or your current's AndroidManifest.xml
add the generated $Provider class:
android:exported
: setting this to true, enables other applications to make use of it.
True is recommended for outside application access.
Note you must have at least one @TableEndpoint
for it to compile/pass error checking
Adding endpoints into the data
There are two ways of defining @TableEndpoint
:
1. Create an inner class within the @ContentProvider
annotation.
2. Or Add the annotation to a @Table
and specify the content provider class name (ex. TestContentProvider)
@TableEndpoint
: links up a query, insert, delete, and update to a specific table in the ContentProvider
local database.
Some recommendations:
1. (if inside a @ContentProvider
class) Name the inner class same as the table it's referencing
2. Create a const val ENDPOINT = "{tableName}"
field for reusability
3. Create buildUri()
method (see below) to aid in creating other ones.
To define one:
or via the table it belongs to
There are much more detailed usages of the @ContentUri
annotation. Those will be in a later section.
Connect Model operations to the newly created ContentProvider
There are two kinds of Model
that connect your application to a ContentProvider that was defined in your app, or another app. Extend these for convenience, however they are not required.
BaseProviderModel
: Overrides all Model
methods and performs them on the ContentProvider
BaseSyncableProviderModel
: same as above, except it will synchronize the data changes with the local app database as well!
Interacting with the Content Provider
You can use the ContentUtils
methods:
Recommended usage is extending BaseSyncableProviderModel
(for inter-app usage) so the local database contains the same data. Otherwise BaseProviderModel
works just as well.
Advanced Usage
Notify Methods
You can define @Notify
method to specify a custom interaction with the ContentProvider
and return a custom Uri[]
that notifies the contained ContentResolver
. These methods can have any valid parameter from the ContentProvider
methods.
Supported kinds include: 1. Update 2. Insert 3. Delete
Example
ContentUri Advanced
Path Segments
Path segments enable you to "filter" the uri query, update, insert, and deletion by a specific column and a value define by '#'.
To specify one, this is an example path
then match up the segments as:
And to put it all together:
Last updated