Merge "TranscodingApi: Update job status upon receiving callback."

This commit is contained in:
Hangyu Kuang
2020-08-11 19:48:56 +00:00
committed by Android (Google) Code Review
2 changed files with 38 additions and 5 deletions

View File

@@ -244,7 +244,7 @@ public final class MediaTranscodeManager {
}
// Updates the job progress.
job.setJobProgress(newProgress);
job.updateProgress(newProgress);
// Notifies client the progress update.
if (job.mProgressUpdateExecutor != null && job.mProgressUpdateListener != null) {
@@ -254,6 +254,21 @@ public final class MediaTranscodeManager {
}
}
private void updateStatus(int jobId, int status) {
synchronized (mPendingTranscodingJobs) {
final TranscodingJob job = mPendingTranscodingJobs.get(jobId);
if (job == null) {
// This should not happen in reality.
Log.e(TAG, "Job " + jobId + " is not in PendingJobs");
return;
}
// Updates the job status.
job.updateStatus(status);
}
}
// Just forwards all the events to the event handler.
private ITranscodingClientCallback mTranscodingClientCallback =
new ITranscodingClientCallback.Stub() {
@@ -285,17 +300,17 @@ public final class MediaTranscodeManager {
@Override
public void onTranscodingStarted(int jobId) throws RemoteException {
updateStatus(jobId, TranscodingJob.STATUS_RUNNING);
}
@Override
public void onTranscodingPaused(int jobId) throws RemoteException {
updateStatus(jobId, TranscodingJob.STATUS_PAUSED);
}
@Override
public void onTranscodingResumed(int jobId) throws RemoteException {
updateStatus(jobId, TranscodingJob.STATUS_RUNNING);
}
@Override
@@ -683,11 +698,14 @@ public final class MediaTranscodeManager {
public static final int STATUS_RUNNING = 2;
/** The job is finished. */
public static final int STATUS_FINISHED = 3;
/** The job is paused. */
public static final int STATUS_PAUSED = 4;
@IntDef(prefix = { "STATUS_" }, value = {
STATUS_PENDING,
STATUS_RUNNING,
STATUS_FINISHED,
STATUS_PAUSED,
})
@Retention(RetentionPolicy.SOURCE)
public @interface Status {}
@@ -843,9 +861,13 @@ public final class MediaTranscodeManager {
return mResult;
}
private synchronized void setJobProgress(int newProgress) {
private synchronized void updateProgress(int newProgress) {
mProgress = newProgress;
}
private synchronized void updateStatus(int newStatus) {
mStatus = newStatus;
}
}
/**

View File

@@ -33,6 +33,7 @@ import java.io.File;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.util.concurrent.CountDownLatch;
import java.util.concurrent.Executor;
import java.util.concurrent.Executors;
import java.util.concurrent.Semaphore;
@@ -238,6 +239,7 @@ public class MediaTranscodeManagerTest
Log.d(TAG, "Starting: testMediaTranscodeManager");
Semaphore transcodeCompleteSemaphore = new Semaphore(0);
final CountDownLatch statusLatch = new CountDownLatch(1);
// Create a file Uri: file:///data/user/0/com.android.mediatranscodingtest/cache/temp.mp4
// The full path of this file is:
@@ -276,12 +278,21 @@ public class MediaTranscodeManagerTest
public void onProgressUpdate(int newProgress) {
assertTrue("Invalid proress update", newProgress > mPreviousProgress);
assertTrue("Invalid proress update", newProgress <= 100);
if (newProgress > 0) {
statusLatch.countDown();
}
mPreviousProgress = newProgress;
progressUpdateCount.getAndIncrement();
Log.i(TAG, "Get progress update " + newProgress);
}
});
try {
statusLatch.await();
// The transcoding should not be finished yet as the clip is long.
assertTrue("Invalid status", job.getStatus() == TranscodingJob.STATUS_RUNNING);
} catch (InterruptedException e) { }
Log.d(TAG, "testMediaTranscodeManager - Waiting for transcode to cancel.");
boolean finishedOnTime = transcodeCompleteSemaphore.tryAcquire(
TRANSCODE_TIMEOUT_SECONDS, TimeUnit.SECONDS);