1ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi/* 2ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * Copyright (C) 2010 The Android Open Source Project 3ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * 4ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * Licensed under the Apache License, Version 2.0 (the "License"); 5ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * you may not use this file except in compliance with the License. 6ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * You may obtain a copy of the License at 7ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * 8ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * http://www.apache.org/licenses/LICENSE-2.0 9ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * 10ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * Unless required by applicable law or agreed to in writing, software 11ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * distributed under the License is distributed on an "AS IS" BASIS, 12ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * See the License for the specific language governing permissions and 14ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * limitations under the License. 15ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi */ 16ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi 1781393d6dc5767f7784a00958095614a37bf1a91aGil Dobjanschipackage com.android.videoeditor.service; 18ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi 19ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschiimport java.util.ArrayList; 20ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschiimport java.util.List; 21ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi 22ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschiimport android.content.ComponentName; 23ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschiimport android.content.Context; 24ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschiimport android.content.Intent; 25ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschiimport android.os.Bundle; 26ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschiimport android.util.Log; 27ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi 28ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi/** 29ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * A pool of Intents 30ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi */ 31ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschiclass IntentPool { 32ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi // Logging 33ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi private static final String TAG = "IntentPool"; 34ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi 35ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi // Instance variables 36ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi private final List<Intent> mIntentPool; 37ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi 38ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi /** 39ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * Constructor 40ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * 41ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * @param initialSize The initial size of the pool 42ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi */ 43ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi public IntentPool(int initialSize) { 44ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi mIntentPool = new ArrayList<Intent>(initialSize); 45ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } 46ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi 47ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi /** 48ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * @return The Intent is retrieved from the pool or if the pool is empty 49ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * a new Intent is allocated 50ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi */ 51ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi public synchronized Intent get(Context context, Class<?> cls) { 52d7de985f8b36318a4ff49400753bf3bb5f9b9faeShih-chia Cheng final Intent intent = get(); 53ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi intent.setComponent(new ComponentName(context, cls)); 54ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi return intent; 55ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } 56ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi 57ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi /** 58ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * @return The Intent is retrieved from the pool or if the pool is empty 59ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * a new Intent is allocated 60ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi */ 61ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi public synchronized Intent get() { 62ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi if (mIntentPool.size() > 0) { 63ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi final Intent intent = mIntentPool.remove(0); 64ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi // Clear the content of the Intent 65ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi final Bundle extras = intent.getExtras(); 66ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi for (String keys : extras.keySet()) { 67ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi intent.removeExtra(keys); 68ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } 69ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi intent.setComponent(null); 70ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi return intent; 71ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } else { 72ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi if (Log.isLoggable(TAG, Log.DEBUG)) { 73ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi Log.d(TAG, "Pool enlarged"); 74ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } 75ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi return new Intent(); 76ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } 77ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } 78ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi 79ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi /** 80ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi * @param intent Return an Intent to the pool 81ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi */ 82ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi public synchronized void put(Intent intent) { 83ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi mIntentPool.add(intent); 84ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi } 85ace3cdb462fef9563a0470223c62a7e80e6d587aGil Dobjanschi} 86