diff options
| author | Ben Lin <linben@google.com> | 2016-11-10 13:50:54 -0800 |
|---|---|---|
| committer | Ben Lin <linben@google.com> | 2016-11-10 13:53:27 -0800 |
| commit | 1cf454fcb69f63cfb2c5576aab310679df502516 (patch) | |
| tree | 810843dd9bd64a498941897f2654bec2d14f1b19 /core/java/android/content/ContentProvider.java | |
| parent | 05675c80c11b5414ecee20afce727fe25698452d (diff) | |
Adding ContentProvider#refresh and ContentResolver#refresh.
Original CL is from ag/1568530.
Bug: 31647485
Change-Id: Ib45fc995a361b8c75cd3600f638910b18a263d51
Diffstat (limited to 'core/java/android/content/ContentProvider.java')
| -rw-r--r-- | core/java/android/content/ContentProvider.java | 46 |
1 files changed, 46 insertions, 0 deletions
diff --git a/core/java/android/content/ContentProvider.java b/core/java/android/content/ContentProvider.java index 1e6424e165c5..49b58536b3ed 100644 --- a/core/java/android/content/ContentProvider.java +++ b/core/java/android/content/ContentProvider.java @@ -42,6 +42,7 @@ import android.os.ICancellationSignal; import android.os.OperationCanceledException; import android.os.ParcelFileDescriptor; import android.os.Process; +import android.os.RemoteException; import android.os.UserHandle; import android.text.TextUtils; import android.util.Log; @@ -463,6 +464,23 @@ public abstract class ContentProvider implements ComponentCallbacks2 { } } + @Override + public boolean refresh(String callingPkg, Uri uri, Bundle args, + ICancellationSignal cancellationSignal) throws RemoteException { + validateIncomingUri(uri); + uri = getUriWithoutUserId(uri); + if (enforceReadPermission(callingPkg, uri, null) != AppOpsManager.MODE_ALLOWED) { + return false; + } + final String original = setCallingPackage(callingPkg); + try { + return ContentProvider.this.refresh(uri, args, + CancellationSignal.fromTransport(cancellationSignal)); + } finally { + setCallingPackage(original); + } + } + private void enforceFilePermission(String callingPkg, Uri uri, String mode, IBinder callerToken) throws FileNotFoundException, SecurityException { if (mode != null && mode.indexOf('w') != -1) { @@ -1093,6 +1111,34 @@ public abstract class ContentProvider implements ComponentCallbacks2 { } /** + * Implement this to support refresh of content identified by {@code uri}. By default, this + * method returns false; providers who wish to implement this should return true to signal the + * client that the provider has tried refreshing with its own implementation. + * <p> + * This allows clients to request an explicit refresh of content identified by {@code uri}. + * <p> + * Client code should only invoke this method when there is a strong indication (such as a user + * initiated pull to refresh gesture) that the content is stale. + * <p> + * Remember to send {@link ContentResolver#notifyChange(Uri, android.database.ContentObserver)} + * notifications when content changes. + * + * @param uri The Uri identifying the data to refresh. + * @param args Additional options from the client. The definitions of these are specific to the + * content provider being called. + * @param cancellationSignal A signal to cancel the operation in progress, or {@code null} if + * none. For example, if you called refresh on a particular uri, you should call + * {@link CancellationSignal#throwIfCanceled()} to check whether the client has + * canceled the refresh request. + * @return true if the provider actually tried refreshing. + * @hide + */ + public boolean refresh(Uri uri, @Nullable Bundle args, + @Nullable CancellationSignal cancellationSignal) { + return false; + } + + /** * @hide * Implementation when a caller has performed an insert on the content * provider, but that call has been rejected for the operation given |
