1c6cdc41397bc3ad2c936069af6d448f242790513Chris Banes/*
2c6cdc41397bc3ad2c936069af6d448f242790513Chris Banes * Copyright (C) 2014 The Android Open Source Project
3c6cdc41397bc3ad2c936069af6d448f242790513Chris Banes *
4c6cdc41397bc3ad2c936069af6d448f242790513Chris Banes * Licensed under the Apache License, Version 2.0 (the "License");
5c6cdc41397bc3ad2c936069af6d448f242790513Chris Banes * you may not use this file except in compliance with the License.
6c6cdc41397bc3ad2c936069af6d448f242790513Chris Banes * You may obtain a copy of the License at
7c6cdc41397bc3ad2c936069af6d448f242790513Chris Banes *
8c6cdc41397bc3ad2c936069af6d448f242790513Chris Banes *      http://www.apache.org/licenses/LICENSE-2.0
9c6cdc41397bc3ad2c936069af6d448f242790513Chris Banes *
10c6cdc41397bc3ad2c936069af6d448f242790513Chris Banes * Unless required by applicable law or agreed to in writing, software
11c6cdc41397bc3ad2c936069af6d448f242790513Chris Banes * distributed under the License is distributed on an "AS IS" BASIS,
12c6cdc41397bc3ad2c936069af6d448f242790513Chris Banes * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13c6cdc41397bc3ad2c936069af6d448f242790513Chris Banes * See the License for the specific language governing permissions and
14c6cdc41397bc3ad2c936069af6d448f242790513Chris Banes * limitations under the License.
15c6cdc41397bc3ad2c936069af6d448f242790513Chris Banes */
16c6cdc41397bc3ad2c936069af6d448f242790513Chris Banes
17c6cdc41397bc3ad2c936069af6d448f242790513Chris Banespackage android.support.v4.os;
18c6cdc41397bc3ad2c936069af6d448f242790513Chris Banes
19c6cdc41397bc3ad2c936069af6d448f242790513Chris Banesimport android.os.AsyncTask;
20c6cdc41397bc3ad2c936069af6d448f242790513Chris Banesimport android.os.Build;
21c6cdc41397bc3ad2c936069af6d448f242790513Chris Banes
22c6cdc41397bc3ad2c936069af6d448f242790513Chris Banes/**
23c6cdc41397bc3ad2c936069af6d448f242790513Chris Banes * Helper for accessing features in {@link android.os.AsyncTask}
24c6cdc41397bc3ad2c936069af6d448f242790513Chris Banes * introduced after API level 4 in a backwards compatible fashion.
25c6cdc41397bc3ad2c936069af6d448f242790513Chris Banes */
26c6cdc41397bc3ad2c936069af6d448f242790513Chris Banespublic class AsyncTaskCompat {
27c6cdc41397bc3ad2c936069af6d448f242790513Chris Banes
28c6cdc41397bc3ad2c936069af6d448f242790513Chris Banes    /**
29c6cdc41397bc3ad2c936069af6d448f242790513Chris Banes     * Executes the task with the specified parameters, allowing multiple tasks to run in parallel
30c6cdc41397bc3ad2c936069af6d448f242790513Chris Banes     * on a pool of threads managed by {@link android.os.AsyncTask}.
31c6cdc41397bc3ad2c936069af6d448f242790513Chris Banes     *
32c6cdc41397bc3ad2c936069af6d448f242790513Chris Banes     * @param task The {@link android.os.AsyncTask} to execute.
33c6cdc41397bc3ad2c936069af6d448f242790513Chris Banes     * @param params The parameters of the task.
34c6cdc41397bc3ad2c936069af6d448f242790513Chris Banes     * @return the instance of AsyncTask.
35c6cdc41397bc3ad2c936069af6d448f242790513Chris Banes     */
36c6cdc41397bc3ad2c936069af6d448f242790513Chris Banes    public static <Params, Progress, Result> AsyncTask<Params, Progress, Result> executeParallel(
37c6cdc41397bc3ad2c936069af6d448f242790513Chris Banes            AsyncTask<Params, Progress, Result> task,
38c6cdc41397bc3ad2c936069af6d448f242790513Chris Banes            Params... params) {
39c6cdc41397bc3ad2c936069af6d448f242790513Chris Banes        if (task == null) {
40c6cdc41397bc3ad2c936069af6d448f242790513Chris Banes            throw new IllegalArgumentException("task can not be null");
41c6cdc41397bc3ad2c936069af6d448f242790513Chris Banes        }
42c6cdc41397bc3ad2c936069af6d448f242790513Chris Banes
43c6cdc41397bc3ad2c936069af6d448f242790513Chris Banes        if (Build.VERSION.SDK_INT >= 11) {
44c6cdc41397bc3ad2c936069af6d448f242790513Chris Banes            // From API 11 onwards, we need to manually select the THREAD_POOL_EXECUTOR
45c6cdc41397bc3ad2c936069af6d448f242790513Chris Banes            AsyncTaskCompatHoneycomb.executeParallel(task, params);
46c6cdc41397bc3ad2c936069af6d448f242790513Chris Banes        } else {
47c6cdc41397bc3ad2c936069af6d448f242790513Chris Banes            // Before API 11, all tasks were run in parallel
48c6cdc41397bc3ad2c936069af6d448f242790513Chris Banes            task.execute(params);
49c6cdc41397bc3ad2c936069af6d448f242790513Chris Banes        }
50c6cdc41397bc3ad2c936069af6d448f242790513Chris Banes
51c6cdc41397bc3ad2c936069af6d448f242790513Chris Banes        return task;
52c6cdc41397bc3ad2c936069af6d448f242790513Chris Banes    }
53c6cdc41397bc3ad2c936069af6d448f242790513Chris Banes
54c6cdc41397bc3ad2c936069af6d448f242790513Chris Banes}
55