diff options
author | zachh <zachh@google.com> | 2017-07-20 10:38:56 -0700 |
---|---|---|
committer | Eric Erfanian <erfanian@google.com> | 2017-07-25 16:43:39 +0000 |
commit | ce2a8c9c6b423b802a509a4966bcb03a8d0364eb (patch) | |
tree | 211e7c40ae533ecaefa55ccc30ff0181d94d5160 /java | |
parent | 634e2ba297998fb44d5074e6c369eb0f840424d5 (diff) |
Converted a few straggling instances of FallibleAsyncTask to DialerExecutors.
This is an effort to eventually delete FallibleAsyncTask, since people still occasionally use it by accident.
There are still some instances of FallibleAsyncTask in p13n code which will be cleaned up in a later CL.
Test: existing
PiperOrigin-RevId: 162633637
Change-Id: I79b57dc6284952145f62f556799d15a31888bdea
Diffstat (limited to 'java')
-rw-r--r-- | java/com/android/dialer/callcomposer/camera/CameraManager.java | 22 | ||||
-rw-r--r-- | java/com/android/dialer/callcomposer/camera/ImagePersistWorker.java (renamed from java/com/android/dialer/callcomposer/camera/ImagePersistTask.java) | 61 | ||||
-rw-r--r-- | java/com/android/dialer/common/concurrent/FallibleAsyncTask.java | 2 | ||||
-rw-r--r-- | java/com/android/dialer/shortcuts/ShortcutRefresher.java | 31 |
4 files changed, 69 insertions, 47 deletions
diff --git a/java/com/android/dialer/callcomposer/camera/CameraManager.java b/java/com/android/dialer/callcomposer/camera/CameraManager.java index 783b57ec3..f79f6548c 100644 --- a/java/com/android/dialer/callcomposer/camera/CameraManager.java +++ b/java/com/android/dialer/callcomposer/camera/CameraManager.java @@ -35,6 +35,7 @@ import com.android.dialer.callcomposer.camera.camerafocus.FocusOverlayManager; import com.android.dialer.callcomposer.camera.camerafocus.RenderOverlay; import com.android.dialer.common.Assert; import com.android.dialer.common.LogUtil; +import com.android.dialer.common.concurrent.DialerExecutors; import java.io.IOException; import java.util.ArrayList; import java.util.Collections; @@ -457,9 +458,9 @@ public class CameraManager implements FocusOverlayManager.Listener { int height; if (mRotation == 90 || mRotation == 270) { // Is rotated, so swapping dimensions is desired - //noinspection SuspiciousNameCombination + // noinspection SuspiciousNameCombination width = size.height; - //noinspection SuspiciousNameCombination + // noinspection SuspiciousNameCombination height = size.width; } else { width = size.width; @@ -467,9 +468,20 @@ public class CameraManager implements FocusOverlayManager.Listener { } LogUtil.i( "CameraManager.onPictureTaken", "taken picture size: " + bytes.length + " bytes"); - new ImagePersistTask( - width, height, heightPercent, bytes, mCameraPreview.getContext(), callback) - .execute(); + DialerExecutors.createNonUiTaskBuilder( + new ImagePersistWorker( + width, height, heightPercent, bytes, mCameraPreview.getContext())) + .onSuccess( + (result) -> { + callback.onMediaReady( + result.getUri(), "image/jpeg", result.getWidth(), result.getHeight()); + }) + .onFailure( + (throwable) -> { + callback.onMediaFailed(new Exception("Persisting image failed", throwable)); + }) + .build() + .executeSerial(null); } }; diff --git a/java/com/android/dialer/callcomposer/camera/ImagePersistTask.java b/java/com/android/dialer/callcomposer/camera/ImagePersistWorker.java index 8620701fe..26b0bde00 100644 --- a/java/com/android/dialer/callcomposer/camera/ImagePersistTask.java +++ b/java/com/android/dialer/callcomposer/camera/ImagePersistWorker.java @@ -22,13 +22,16 @@ import android.graphics.Bitmap; import android.graphics.BitmapFactory; import android.net.Uri; import android.os.Build.VERSION_CODES; +import android.support.annotation.NonNull; import android.support.v4.content.FileProvider; +import com.android.dialer.callcomposer.camera.ImagePersistWorker.Result; import com.android.dialer.callcomposer.camera.exif.ExifInterface; import com.android.dialer.callcomposer.util.BitmapResizer; import com.android.dialer.common.Assert; -import com.android.dialer.common.concurrent.FallibleAsyncTask; +import com.android.dialer.common.concurrent.DialerExecutor.Worker; import com.android.dialer.constants.Constants; import com.android.dialer.util.DialerUtils; +import com.google.auto.value.AutoValue; import java.io.File; import java.io.FileOutputStream; import java.io.IOException; @@ -36,52 +39,70 @@ import java.io.OutputStream; /** Persisting image routine. */ @TargetApi(VERSION_CODES.M) -public class ImagePersistTask extends FallibleAsyncTask<Void, Void, Uri> { +public class ImagePersistWorker implements Worker<Void, Result> { private int mWidth; private int mHeight; private final float mHeightPercent; private final byte[] mBytes; private final Context mContext; - private final CameraManager.MediaCallback mCallback; - ImagePersistTask( + @AutoValue + abstract static class Result { + + public static Builder builder() { + return new AutoValue_ImagePersistWorker_Result.Builder(); + } + + @NonNull + abstract Uri getUri(); + + abstract int getWidth(); + + abstract int getHeight(); + + @AutoValue.Builder + abstract static class Builder { + abstract Builder setUri(@NonNull Uri uri); + + abstract Builder setWidth(int width); + + abstract Builder setHeight(int height); + + abstract Result build(); + } + } + + ImagePersistWorker( final int width, final int height, final float heightPercent, final byte[] bytes, - final Context context, - final CameraManager.MediaCallback callback) { + final Context context) { Assert.checkArgument(heightPercent >= 0 && heightPercent <= 1); Assert.isNotNull(bytes); Assert.isNotNull(context); - Assert.isNotNull(callback); mWidth = width; mHeight = height; mHeightPercent = heightPercent; mBytes = bytes; mContext = context; - mCallback = callback; } @Override - protected Uri doInBackgroundFallible(final Void... params) throws Exception { + public Result doInBackground(Void unused) throws Exception { File outputFile = DialerUtils.createShareableFile(mContext); try (OutputStream outputStream = new FileOutputStream(outputFile)) { writeClippedBitmap(outputStream); } - return FileProvider.getUriForFile( - mContext, Constants.get().getFileProviderAuthority(), outputFile); - } - - @Override - protected void onPostExecute(FallibleTaskResult<Uri> result) { - if (result.isFailure()) { - mCallback.onMediaFailed(new Exception("Persisting image failed", result.getThrowable())); - } else { - mCallback.onMediaReady(result.getResult(), "image/jpeg", mWidth, mHeight); - } + return Result.builder() + .setUri( + FileProvider.getUriForFile( + mContext, Constants.get().getFileProviderAuthority(), outputFile)) + .setWidth(mWidth) + .setHeight(mHeight) + .build(); } private void writeClippedBitmap(OutputStream outputStream) throws IOException { diff --git a/java/com/android/dialer/common/concurrent/FallibleAsyncTask.java b/java/com/android/dialer/common/concurrent/FallibleAsyncTask.java index 6d02fe67f..c7a7f36a6 100644 --- a/java/com/android/dialer/common/concurrent/FallibleAsyncTask.java +++ b/java/com/android/dialer/common/concurrent/FallibleAsyncTask.java @@ -30,7 +30,9 @@ import com.google.auto.value.AutoValue; * @param <ParamsT> the type of the parameters sent to the task upon execution * @param <ProgressT> the type of the progress units published during the background computation * @param <ResultT> the type of the result of the background computation + * @deprecated Please use {@link DialerExecutors}. */ +@Deprecated public abstract class FallibleAsyncTask<ParamsT, ProgressT, ResultT> extends AsyncTask<ParamsT, ProgressT, FallibleTaskResult<ResultT>> { diff --git a/java/com/android/dialer/shortcuts/ShortcutRefresher.java b/java/com/android/dialer/shortcuts/ShortcutRefresher.java index 120382dc5..496f3f02a 100644 --- a/java/com/android/dialer/shortcuts/ShortcutRefresher.java +++ b/java/com/android/dialer/shortcuts/ShortcutRefresher.java @@ -20,21 +20,17 @@ import android.content.Context; import android.os.Build; import android.support.annotation.MainThread; import android.support.annotation.NonNull; -import android.support.annotation.WorkerThread; import com.android.contacts.common.list.ContactEntry; import com.android.dialer.common.Assert; import com.android.dialer.common.LogUtil; -import com.android.dialer.common.concurrent.AsyncTaskExecutor; -import com.android.dialer.common.concurrent.AsyncTaskExecutors; -import com.android.dialer.common.concurrent.FallibleAsyncTask; +import com.android.dialer.common.concurrent.DialerExecutor.Worker; +import com.android.dialer.common.concurrent.DialerExecutors; import java.util.ArrayList; import java.util.List; /** Refreshes launcher shortcuts from UI components using provided list of contacts. */ public final class ShortcutRefresher { - private static final AsyncTaskExecutor EXECUTOR = AsyncTaskExecutors.createThreadPoolExecutor(); - /** Asynchronously updates launcher shortcuts using the provided list of contacts. */ @MainThread public static void refresh(@NonNull Context context, List<ContactEntry> contacts) { @@ -49,36 +45,27 @@ public final class ShortcutRefresher { return; } - //noinspection unchecked - EXECUTOR.submit(Task.ID, new Task(context), new ArrayList<>(contacts)); + DialerExecutors.createNonUiTaskBuilder(new RefreshWorker(context)) + .build() + .executeSerial(new ArrayList<>(contacts)); } - private static final class Task extends FallibleAsyncTask<List<ContactEntry>, Void, Void> { - private static final String ID = "ShortcutRefresher.Task"; - + private static final class RefreshWorker implements Worker<List<ContactEntry>, Void> { private final Context context; - Task(Context context) { + RefreshWorker(Context context) { this.context = context; } - /** - * @param params array containing exactly one element, the list of contacts from favorites - * tiles, ordered in tile order. - */ - @SafeVarargs @Override - @NonNull - @WorkerThread - protected final Void doInBackgroundFallible(List<ContactEntry>... params) { - Assert.isWorkerThread(); + public Void doInBackground(List<ContactEntry> contacts) { LogUtil.enterBlock("ShortcutRefresher.Task.doInBackground"); // Only dynamic shortcuts are maintained from UI components. Pinned shortcuts are maintained // by the job scheduler. This is because a pinned contact may not necessarily still be in the // favorites tiles, so refreshing it would require an additional database query. We don't want // to incur the cost of that extra database query every time the favorites tiles change. - new DynamicShortcuts(context, new IconFactory(context)).refresh(params[0]); // Blocking + new DynamicShortcuts(context, new IconFactory(context)).refresh(contacts); // Blocking return null; } |