From 42eb1711a119799d9b88a08640fa785bfcb3750c Mon Sep 17 00:00:00 2001 From: hkuang Date: Thu, 25 Mar 2021 14:21:21 -0700 Subject: transcoding: Add a new API for client to add UID for a session. This is needed for MediaProvider to append a UID to an existing transcoding session when there are multiple client waiting for the file to be transcoded. Bug: 171398942 Test: atest CtsMediaTranscodingTestCases:MediaTranscodeManagerTest Change-Id: I58e561f7afed16314349764195a65386d1d0b909 --- apex/media/framework/api/system-current.txt | 2 ++ .../java/android/media/MediaTranscodeManager.java | 33 ++++++++++++++++++++++ 2 files changed, 35 insertions(+) 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 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 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()); } /** @@ -1514,6 +1517,36 @@ public final class MediaTranscodeManager { } } + /** + * Adds a client uid that is also waiting for this transcoding session. + *

+ * 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 getClientUids() { + synchronized (mLock) { + return mClientUidList; + } + } + /** * Gets sessionId of the transcoding session. * @return session id. -- cgit v1.2.3-59-g8ed1b