diff options
author | Eric Erfanian <erfanian@google.com> | 2017-03-27 12:31:48 -0700 |
---|---|---|
committer | Eric Erfanian <erfanian@google.com> | 2017-03-27 12:31:48 -0700 |
commit | 9779f967ebb9512e5b19090b071572c9c4f0f2a6 (patch) | |
tree | 55d3e81855905643abd7b3ce5576a58ee0e9d9e6 /java/com/android/dialer/common/concurrent/AsyncTaskExecutors.java | |
parent | 9050823ccf6f512e06ad65c8a741cb17cbc4a833 (diff) |
Update AOSP Dialer source from internal google3 repository at
cl/151342913.
Test: make, treehugger
This CL updates the AOSP Dialer source with all the changes that have
gone into the private google3 repository. This includes all the
changes from cl/151128062 (3/24/2017) to cl/151342913 (3/27/2017).
This goal of these drops is to keep the AOSP source in sync with the
internal google3 repository. Currently these sync are done by hand
with very minor modifications to the internal source code.
See the Android.mk file for list of modifications.
Our current goal is to do frequent drops (daily if possible) and
eventually switched to an automated process.
Change-Id: I8d4855628b62e9067e71f32ed40317617a1e3b02
Diffstat (limited to 'java/com/android/dialer/common/concurrent/AsyncTaskExecutors.java')
-rw-r--r-- | java/com/android/dialer/common/concurrent/AsyncTaskExecutors.java | 92 |
1 files changed, 92 insertions, 0 deletions
diff --git a/java/com/android/dialer/common/concurrent/AsyncTaskExecutors.java b/java/com/android/dialer/common/concurrent/AsyncTaskExecutors.java new file mode 100644 index 000000000..fd358328e --- /dev/null +++ b/java/com/android/dialer/common/concurrent/AsyncTaskExecutors.java @@ -0,0 +1,92 @@ +/* + * Copyright (C) 2011 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.android.dialer.common.concurrent; + +import android.os.AsyncTask; +import android.support.annotation.MainThread; +import com.android.dialer.common.Assert; +import java.util.concurrent.Executor; + +/** + * Factory methods for creating AsyncTaskExecutors. + * + * <p>All of the factory methods on this class check first to see if you have set a static {@link + * AsyncTaskExecutorFactory} set through the {@link #setFactoryForTest(AsyncTaskExecutorFactory)} + * method, and if so delegate to that instead, which is one way of injecting dependencies for + * testing classes whose construction cannot be controlled such as {@link android.app.Activity}. + */ +public final class AsyncTaskExecutors { + + /** + * A single instance of the {@link AsyncTaskExecutorFactory}, to which we delegate if it is + * non-null, for injecting when testing. + */ + private static AsyncTaskExecutorFactory mInjectedAsyncTaskExecutorFactory = null; + + /** + * Creates an AsyncTaskExecutor that submits tasks to run with {@link AsyncTask#SERIAL_EXECUTOR}. + */ + public static AsyncTaskExecutor createAsyncTaskExecutor() { + synchronized (AsyncTaskExecutors.class) { + if (mInjectedAsyncTaskExecutorFactory != null) { + return mInjectedAsyncTaskExecutorFactory.createAsyncTaskExeuctor(); + } + return new SimpleAsyncTaskExecutor(AsyncTask.SERIAL_EXECUTOR); + } + } + + /** + * Creates an AsyncTaskExecutor that submits tasks to run with {@link + * AsyncTask#THREAD_POOL_EXECUTOR}. + */ + public static AsyncTaskExecutor createThreadPoolExecutor() { + synchronized (AsyncTaskExecutors.class) { + if (mInjectedAsyncTaskExecutorFactory != null) { + return mInjectedAsyncTaskExecutorFactory.createAsyncTaskExeuctor(); + } + return new SimpleAsyncTaskExecutor(AsyncTask.THREAD_POOL_EXECUTOR); + } + } + + public static void setFactoryForTest(AsyncTaskExecutorFactory factory) { + synchronized (AsyncTaskExecutors.class) { + mInjectedAsyncTaskExecutorFactory = factory; + } + } + + /** Interface for creating AsyncTaskExecutor objects. */ + public interface AsyncTaskExecutorFactory { + + AsyncTaskExecutor createAsyncTaskExeuctor(); + } + + private static class SimpleAsyncTaskExecutor implements AsyncTaskExecutor { + + private final Executor mExecutor; + + public SimpleAsyncTaskExecutor(Executor executor) { + mExecutor = executor; + } + + @Override + @MainThread + public <T> AsyncTask<T, ?, ?> submit(Object identifer, AsyncTask<T, ?, ?> task, T... params) { + Assert.isMainThread(); + return task.executeOnExecutor(mExecutor, params); + } + } +} |