124d6ec7beb37eb3a5449f1fa49b4adb123391d24nicolasroard/* 224d6ec7beb37eb3a5449f1fa49b4adb123391d24nicolasroard * Copyright (C) 2013 The Android Open Source Project 324d6ec7beb37eb3a5449f1fa49b4adb123391d24nicolasroard * 424d6ec7beb37eb3a5449f1fa49b4adb123391d24nicolasroard * Licensed under the Apache License, Version 2.0 (the "License"); 524d6ec7beb37eb3a5449f1fa49b4adb123391d24nicolasroard * you may not use this file except in compliance with the License. 624d6ec7beb37eb3a5449f1fa49b4adb123391d24nicolasroard * You may obtain a copy of the License at 724d6ec7beb37eb3a5449f1fa49b4adb123391d24nicolasroard * 824d6ec7beb37eb3a5449f1fa49b4adb123391d24nicolasroard * http://www.apache.org/licenses/LICENSE-2.0 924d6ec7beb37eb3a5449f1fa49b4adb123391d24nicolasroard * 1024d6ec7beb37eb3a5449f1fa49b4adb123391d24nicolasroard * Unless required by applicable law or agreed to in writing, software 1124d6ec7beb37eb3a5449f1fa49b4adb123391d24nicolasroard * distributed under the License is distributed on an "AS IS" BASIS, 1224d6ec7beb37eb3a5449f1fa49b4adb123391d24nicolasroard * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 1324d6ec7beb37eb3a5449f1fa49b4adb123391d24nicolasroard * See the License for the specific language governing permissions and 1424d6ec7beb37eb3a5449f1fa49b4adb123391d24nicolasroard * limitations under the License. 1524d6ec7beb37eb3a5449f1fa49b4adb123391d24nicolasroard */ 1624d6ec7beb37eb3a5449f1fa49b4adb123391d24nicolasroard 1724d6ec7beb37eb3a5449f1fa49b4adb123391d24nicolasroardpackage com.android.gallery3d.filtershow.pipeline; 1824d6ec7beb37eb3a5449f1fa49b4adb123391d24nicolasroard 1924d6ec7beb37eb3a5449f1fa49b4adb123391d24nicolasroardimport android.content.Context; 2024d6ec7beb37eb3a5449f1fa49b4adb123391d24nicolasroardimport android.os.Handler; 2124d6ec7beb37eb3a5449f1fa49b4adb123391d24nicolasroardimport android.os.Message; 2224d6ec7beb37eb3a5449f1fa49b4adb123391d24nicolasroard 2324d6ec7beb37eb3a5449f1fa49b4adb123391d24nicolasroardpublic abstract class ProcessingTask { 2424d6ec7beb37eb3a5449f1fa49b4adb123391d24nicolasroard private ProcessingTaskController mTaskController; 2524d6ec7beb37eb3a5449f1fa49b4adb123391d24nicolasroard private Handler mProcessingHandler; 2624d6ec7beb37eb3a5449f1fa49b4adb123391d24nicolasroard private Handler mResultHandler; 2724d6ec7beb37eb3a5449f1fa49b4adb123391d24nicolasroard private int mType; 28db5d060e8077f70d650e1ce56618f953114551e0nicolasroard private static final int DELAY = 300; 2924d6ec7beb37eb3a5449f1fa49b4adb123391d24nicolasroard 3024d6ec7beb37eb3a5449f1fa49b4adb123391d24nicolasroard static interface Request {} 3124d6ec7beb37eb3a5449f1fa49b4adb123391d24nicolasroard static interface Update {} 3224d6ec7beb37eb3a5449f1fa49b4adb123391d24nicolasroard static interface Result {} 3324d6ec7beb37eb3a5449f1fa49b4adb123391d24nicolasroard 34db5d060e8077f70d650e1ce56618f953114551e0nicolasroard public boolean postRequest(Request message) { 3524d6ec7beb37eb3a5449f1fa49b4adb123391d24nicolasroard Message msg = mProcessingHandler.obtainMessage(mType); 3624d6ec7beb37eb3a5449f1fa49b4adb123391d24nicolasroard msg.obj = message; 37db5d060e8077f70d650e1ce56618f953114551e0nicolasroard if (isPriorityTask()) { 38db5d060e8077f70d650e1ce56618f953114551e0nicolasroard if (mProcessingHandler.hasMessages(getType())) { 39db5d060e8077f70d650e1ce56618f953114551e0nicolasroard return false; 40db5d060e8077f70d650e1ce56618f953114551e0nicolasroard } 41db5d060e8077f70d650e1ce56618f953114551e0nicolasroard mProcessingHandler.sendMessageAtFrontOfQueue(msg); 42db5d060e8077f70d650e1ce56618f953114551e0nicolasroard } else if (isDelayedTask()) { 43db5d060e8077f70d650e1ce56618f953114551e0nicolasroard if (mProcessingHandler.hasMessages(getType())) { 44db5d060e8077f70d650e1ce56618f953114551e0nicolasroard mProcessingHandler.removeMessages(getType()); 45db5d060e8077f70d650e1ce56618f953114551e0nicolasroard } 46db5d060e8077f70d650e1ce56618f953114551e0nicolasroard mProcessingHandler.sendMessageDelayed(msg, DELAY); 47db5d060e8077f70d650e1ce56618f953114551e0nicolasroard } else { 48db5d060e8077f70d650e1ce56618f953114551e0nicolasroard mProcessingHandler.sendMessage(msg); 49db5d060e8077f70d650e1ce56618f953114551e0nicolasroard } 50db5d060e8077f70d650e1ce56618f953114551e0nicolasroard return true; 5124d6ec7beb37eb3a5449f1fa49b4adb123391d24nicolasroard } 5224d6ec7beb37eb3a5449f1fa49b4adb123391d24nicolasroard 5324d6ec7beb37eb3a5449f1fa49b4adb123391d24nicolasroard public void postUpdate(Update message) { 5424d6ec7beb37eb3a5449f1fa49b4adb123391d24nicolasroard Message msg = mResultHandler.obtainMessage(mType); 5524d6ec7beb37eb3a5449f1fa49b4adb123391d24nicolasroard msg.obj = message; 5624d6ec7beb37eb3a5449f1fa49b4adb123391d24nicolasroard msg.arg1 = ProcessingTaskController.UPDATE; 5724d6ec7beb37eb3a5449f1fa49b4adb123391d24nicolasroard mResultHandler.sendMessage(msg); 5824d6ec7beb37eb3a5449f1fa49b4adb123391d24nicolasroard } 5924d6ec7beb37eb3a5449f1fa49b4adb123391d24nicolasroard 6024d6ec7beb37eb3a5449f1fa49b4adb123391d24nicolasroard public void processRequest(Request message) { 6124d6ec7beb37eb3a5449f1fa49b4adb123391d24nicolasroard Object result = doInBackground(message); 6224d6ec7beb37eb3a5449f1fa49b4adb123391d24nicolasroard Message msg = mResultHandler.obtainMessage(mType); 6324d6ec7beb37eb3a5449f1fa49b4adb123391d24nicolasroard msg.obj = result; 6424d6ec7beb37eb3a5449f1fa49b4adb123391d24nicolasroard msg.arg1 = ProcessingTaskController.RESULT; 6524d6ec7beb37eb3a5449f1fa49b4adb123391d24nicolasroard mResultHandler.sendMessage(msg); 6624d6ec7beb37eb3a5449f1fa49b4adb123391d24nicolasroard } 6724d6ec7beb37eb3a5449f1fa49b4adb123391d24nicolasroard 6824d6ec7beb37eb3a5449f1fa49b4adb123391d24nicolasroard public void added(ProcessingTaskController taskController) { 6924d6ec7beb37eb3a5449f1fa49b4adb123391d24nicolasroard mTaskController = taskController; 7024d6ec7beb37eb3a5449f1fa49b4adb123391d24nicolasroard mResultHandler = taskController.getResultHandler(); 7124d6ec7beb37eb3a5449f1fa49b4adb123391d24nicolasroard mProcessingHandler = taskController.getProcessingHandler(); 7224d6ec7beb37eb3a5449f1fa49b4adb123391d24nicolasroard mType = taskController.getReservedType(); 7324d6ec7beb37eb3a5449f1fa49b4adb123391d24nicolasroard } 7424d6ec7beb37eb3a5449f1fa49b4adb123391d24nicolasroard 7524d6ec7beb37eb3a5449f1fa49b4adb123391d24nicolasroard public int getType() { 7624d6ec7beb37eb3a5449f1fa49b4adb123391d24nicolasroard return mType; 7724d6ec7beb37eb3a5449f1fa49b4adb123391d24nicolasroard } 7824d6ec7beb37eb3a5449f1fa49b4adb123391d24nicolasroard 7924d6ec7beb37eb3a5449f1fa49b4adb123391d24nicolasroard public Context getContext() { 8024d6ec7beb37eb3a5449f1fa49b4adb123391d24nicolasroard return mTaskController.getContext(); 8124d6ec7beb37eb3a5449f1fa49b4adb123391d24nicolasroard } 8224d6ec7beb37eb3a5449f1fa49b4adb123391d24nicolasroard 8324d6ec7beb37eb3a5449f1fa49b4adb123391d24nicolasroard public abstract Result doInBackground(Request message); 8424d6ec7beb37eb3a5449f1fa49b4adb123391d24nicolasroard public abstract void onResult(Result message); 8524d6ec7beb37eb3a5449f1fa49b4adb123391d24nicolasroard public void onUpdate(Update message) {} 86db5d060e8077f70d650e1ce56618f953114551e0nicolasroard public boolean isPriorityTask() { return false; } 87db5d060e8077f70d650e1ce56618f953114551e0nicolasroard public boolean isDelayedTask() { return false; } 8824d6ec7beb37eb3a5449f1fa49b4adb123391d24nicolasroard} 89