Merge "APIs to measure and delete contributed files."
diff --git a/api/system-current.txt b/api/system-current.txt
index 9873c37..ebf21bc 100644
--- a/api/system-current.txt
+++ b/api/system-current.txt
@@ -4533,6 +4533,11 @@
field public static final int FLAG_REMOVABLE_USB = 524288; // 0x80000
}
+ public final class MediaStore {
+ method public static void deleteContributedMedia(android.content.Context, java.lang.String);
+ method public static long getContributedMediaSize(android.content.Context, java.lang.String);
+ }
+
public abstract class SearchIndexableData {
ctor public SearchIndexableData();
ctor public SearchIndexableData(android.content.Context);
diff --git a/api/test-current.txt b/api/test-current.txt
index b6a42ec..fd7fc43 100644
--- a/api/test-current.txt
+++ b/api/test-current.txt
@@ -983,6 +983,11 @@
field public static final android.net.Uri CORP_CONTENT_URI;
}
+ public final class MediaStore {
+ method public static void deleteContributedMedia(android.content.Context, java.lang.String);
+ method public static long getContributedMediaSize(android.content.Context, java.lang.String);
+ }
+
public final class Settings {
field public static final java.lang.String ACTION_ENTERPRISE_PRIVACY_SETTINGS = "android.settings.ENTERPRISE_PRIVACY_SETTINGS";
}
diff --git a/core/java/android/provider/MediaStore.java b/core/java/android/provider/MediaStore.java
index 0299e41..1451165 100644
--- a/core/java/android/provider/MediaStore.java
+++ b/core/java/android/provider/MediaStore.java
@@ -16,11 +16,15 @@
package android.provider;
+import android.annotation.BytesLong;
import android.annotation.IntRange;
import android.annotation.NonNull;
import android.annotation.Nullable;
+import android.annotation.RequiresPermission;
import android.annotation.SdkConstant;
import android.annotation.SdkConstant.SdkConstantType;
+import android.annotation.SystemApi;
+import android.annotation.TestApi;
import android.annotation.UnsupportedAppUsage;
import android.app.Activity;
import android.app.AppGlobals;
@@ -102,6 +106,11 @@
/** {@hide} */
public static final String GET_MEDIA_URI_CALL = "get_media_uri";
+ /** {@hide} */
+ public static final String GET_CONTRIBUTED_MEDIA_CALL = "get_contributed_media";
+ /** {@hide} */
+ public static final String DELETE_CONTRIBUTED_MEDIA_CALL = "delete_contributed_media";
+
/**
* This is for internal use by the media scanner only.
* Name of the (optional) Uri parameter that determines whether to skip deleting
@@ -2865,4 +2874,47 @@
throw e.rethrowAsRuntimeException();
}
}
+
+ /**
+ * Calculate size of media contributed by given package under the calling
+ * user. The meaning of "contributed" means it won't automatically be
+ * deleted when the app is uninstalled.
+ *
+ * @hide
+ */
+ @SystemApi
+ @TestApi
+ @RequiresPermission(android.Manifest.permission.CLEAR_APP_USER_DATA)
+ public static @BytesLong long getContributedMediaSize(Context context, String packageName) {
+ try (ContentProviderClient client = context.getContentResolver()
+ .acquireContentProviderClient(AUTHORITY)) {
+ final Bundle in = new Bundle();
+ in.putString(Intent.EXTRA_PACKAGE_NAME, packageName);
+ final Bundle out = client.call(GET_CONTRIBUTED_MEDIA_CALL, null, in);
+ return out.getLong(Intent.EXTRA_INDEX);
+ } catch (RemoteException e) {
+ throw e.rethrowAsRuntimeException();
+ }
+ }
+
+ /**
+ * Delete all media contributed by given package under the calling user. The
+ * meaning of "contributed" means it won't automatically be deleted when the
+ * app is uninstalled.
+ *
+ * @hide
+ */
+ @SystemApi
+ @TestApi
+ @RequiresPermission(android.Manifest.permission.CLEAR_APP_USER_DATA)
+ public static void deleteContributedMedia(Context context, String packageName) {
+ try (ContentProviderClient client = context.getContentResolver()
+ .acquireContentProviderClient(AUTHORITY)) {
+ final Bundle in = new Bundle();
+ in.putString(Intent.EXTRA_PACKAGE_NAME, packageName);
+ client.call(DELETE_CONTRIBUTED_MEDIA_CALL, null, in);
+ } catch (RemoteException e) {
+ throw e.rethrowAsRuntimeException();
+ }
+ }
}