summaryrefslogtreecommitdiffstats
path: root/drm
diff options
context:
space:
mode:
authorJeff Sharkey <jsharkey@android.com>2014-01-30 15:01:22 -0800
committerJeff Sharkey <jsharkey@android.com>2014-02-06 09:47:38 -0800
commitebf8ad5d91b22eb4359c75711a5b70ddcce0723d (patch)
tree8e4664b788a5de2a64c2b8764da9727c3305b9ed /drm
parentb341a24b2adbb67cdc34ade0a19570ee37f0cb82 (diff)
downloadframeworks_base-ebf8ad5d91b22eb4359c75711a5b70ddcce0723d.zip
frameworks_base-ebf8ad5d91b22eb4359c75711a5b70ddcce0723d.tar.gz
frameworks_base-ebf8ad5d91b22eb4359c75711a5b70ddcce0723d.tar.bz2
Update DrmOutputStream to use raw FileDescriptor.
This allows DownloadManager to use FDs, paving the way for downloading directly to content:// Uris. Also return flag indicating if deleteOlderFiles() actually deleted anything. Update tests to verify. Bug: 5287571 Change-Id: I2579e5e2113f31b2860d7b021bd61c91b6310963
Diffstat (limited to 'drm')
-rw-r--r--drm/java/android/drm/DrmOutputStream.java33
1 files changed, 22 insertions, 11 deletions
diff --git a/drm/java/android/drm/DrmOutputStream.java b/drm/java/android/drm/DrmOutputStream.java
index 87677b8..22e7ac2 100644
--- a/drm/java/android/drm/DrmOutputStream.java
+++ b/drm/java/android/drm/DrmOutputStream.java
@@ -18,18 +18,23 @@ package android.drm;
import static android.drm.DrmConvertedStatus.STATUS_OK;
import static android.drm.DrmManagerClient.INVALID_SESSION;
+import static libcore.io.OsConstants.SEEK_SET;
+import android.os.ParcelFileDescriptor;
import android.util.Log;
+import libcore.io.ErrnoException;
+import libcore.io.IoBridge;
+import libcore.io.Libcore;
+import libcore.io.Streams;
+
+import java.io.FileDescriptor;
import java.io.FilterOutputStream;
import java.io.IOException;
import java.io.OutputStream;
-import java.io.RandomAccessFile;
import java.net.UnknownServiceException;
import java.util.Arrays;
-import libcore.io.Streams;
-
/**
* Stream that applies a {@link DrmManagerClient} transformation to data before
* writing to disk, similar to a {@link FilterOutputStream}.
@@ -40,17 +45,19 @@ public class DrmOutputStream extends OutputStream {
private static final String TAG = "DrmOutputStream";
private final DrmManagerClient mClient;
- private final RandomAccessFile mFile;
+ private final ParcelFileDescriptor mPfd;
+ private final FileDescriptor mFd;
private int mSessionId = INVALID_SESSION;
/**
- * @param file Opened with "rw" mode.
+ * @param pfd Opened with "rw" mode.
*/
- public DrmOutputStream(DrmManagerClient client, RandomAccessFile file, String mimeType)
+ public DrmOutputStream(DrmManagerClient client, ParcelFileDescriptor pfd, String mimeType)
throws IOException {
mClient = client;
- mFile = file;
+ mPfd = pfd;
+ mFd = pfd.getFileDescriptor();
mSessionId = mClient.openConvertSession(mimeType);
if (mSessionId == INVALID_SESSION) {
@@ -61,8 +68,12 @@ public class DrmOutputStream extends OutputStream {
public void finish() throws IOException {
final DrmConvertedStatus status = mClient.closeConvertSession(mSessionId);
if (status.statusCode == STATUS_OK) {
- mFile.seek(status.offset);
- mFile.write(status.convertedData);
+ try {
+ Libcore.os.lseek(mFd, status.offset, SEEK_SET);
+ } catch (ErrnoException e) {
+ e.rethrowAsIOException();
+ }
+ IoBridge.write(mFd, status.convertedData, 0, status.convertedData.length);
mSessionId = INVALID_SESSION;
} else {
throw new IOException("Unexpected DRM status: " + status.statusCode);
@@ -75,7 +86,7 @@ public class DrmOutputStream extends OutputStream {
Log.w(TAG, "Closing stream without finishing");
}
- mFile.close();
+ mPfd.close();
}
@Override
@@ -92,7 +103,7 @@ public class DrmOutputStream extends OutputStream {
final DrmConvertedStatus status = mClient.convertData(mSessionId, exactBuffer);
if (status.statusCode == STATUS_OK) {
- mFile.write(status.convertedData);
+ IoBridge.write(mFd, status.convertedData, 0, status.convertedData.length);
} else {
throw new IOException("Unexpected DRM status: " + status.statusCode);
}