summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--apex/media/framework/api/system-current.txt2
-rw-r--r--apex/media/framework/java/android/media/MediaTranscodeManager.java33
2 files changed, 35 insertions, 0 deletions
diff --git a/apex/media/framework/api/system-current.txt b/apex/media/framework/api/system-current.txt
index ad681695ace5..8d83309f5be0 100644
--- a/apex/media/framework/api/system-current.txt
+++ b/apex/media/framework/api/system-current.txt
@@ -25,7 +25,9 @@ package android.media {
}
public static final class MediaTranscodeManager.TranscodingSession {
+ method public void addClientUid(int);
method public void cancel();
+ method @NonNull public java.util.List<java.lang.Integer> getClientUids();
method public int getErrorCode();
method @IntRange(from=0, to=100) public int getProgress();
method public int getResult();
diff --git a/apex/media/framework/java/android/media/MediaTranscodeManager.java b/apex/media/framework/java/android/media/MediaTranscodeManager.java
index 7f4685ee053a..fef48654eb59 100644
--- a/apex/media/framework/java/android/media/MediaTranscodeManager.java
+++ b/apex/media/framework/java/android/media/MediaTranscodeManager.java
@@ -1352,6 +1352,8 @@ public final class MediaTranscodeManager {
private @TranscodingSessionErrorCode int mErrorCode = ERROR_NONE;
@GuardedBy("mLock")
private boolean mHasRetried = false;
+ @GuardedBy("mLock")
+ private @NonNull List<Integer> mClientUidList = new ArrayList<>();
// The original request that associated with this session.
private final TranscodingRequest mRequest;
@@ -1370,6 +1372,7 @@ public final class MediaTranscodeManager {
mListenerExecutor = executor;
mListener = listener;
mRequest = request;
+ mClientUidList.add(request.getClientUid());
}
/**
@@ -1515,6 +1518,36 @@ public final class MediaTranscodeManager {
}
/**
+ * Adds a client uid that is also waiting for this transcoding session.
+ * <p>
+ * Only privilege caller with android.permission.WRITE_MEDIA_STORAGE could add the
+ * uid. Note that the permission check happens on the service side upon starting the
+ * transcoding. If the client does not have the permission, the transcoding will fail.
+ */
+ public void addClientUid(int uid) {
+ if (uid < 0) {
+ throw new IllegalArgumentException("Invalid Uid");
+ }
+ synchronized (mLock) {
+ if (!mClientUidList.contains(uid)) {
+ // see ag/14023202 for implementation
+ mClientUidList.add(uid);
+ }
+ }
+ }
+
+ /**
+ * Query all the client that waiting for this transcoding session
+ * @return a list containing all the client uids.
+ */
+ @NonNull
+ public List<Integer> getClientUids() {
+ synchronized (mLock) {
+ return mClientUidList;
+ }
+ }
+
+ /**
* Gets sessionId of the transcoding session.
* @return session id.
*/