1f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin/* 2f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin * Copyright (C) 2010 The Android Open Source Project 3f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin * 4f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin * Licensed under the Apache License, Version 2.0 (the "License"); 5f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin * you may not use this file except in compliance with the License. 6f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin * You may obtain a copy of the License at 7f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin * 8f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin * http://www.apache.org/licenses/LICENSE-2.0 9f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin * 10f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin * Unless required by applicable law or agreed to in writing, software 11f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin * distributed under the License is distributed on an "AS IS" BASIS, 12f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin * See the License for the specific language governing permissions and 14f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin * limitations under the License. 15f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin */ 16f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin 17f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Linpackage com.android.gallery3d.data; 18f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin 19f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Linimport android.net.Uri; 20f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin 212b3ee0ea07246b859a5b75d8a6102a7cce7ec838Owen Linimport com.android.gallery3d.data.MediaSet.ItemConsumer; 222b3ee0ea07246b859a5b75d8a6102a7cce7ec838Owen Lin 23f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Linimport java.util.ArrayList; 24f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin 25f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Linpublic abstract class MediaSource { 26f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin private static final String TAG = "MediaSource"; 27f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin private String mPrefix; 28f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin 29f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin protected MediaSource(String prefix) { 30f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin mPrefix = prefix; 31f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin } 32f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin 33f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin public String getPrefix() { 34f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin return mPrefix; 35f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin } 36f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin 3721a412c93c9b0401b039f4eb86d4950752e5bb84Owen Lin public Path findPathByUri(Uri uri, String type) { 38f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin return null; 39f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin } 40f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin 41f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin public abstract MediaObject createMediaObject(Path path); 42f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin 43f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin public void pause() { 44f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin } 45f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin 46f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin public void resume() { 47f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin } 48f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin 49f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin public Path getDefaultSetOf(Path item) { 50f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin return null; 51f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin } 52f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin 53f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin public long getTotalUsedCacheSize() { 54f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin return 0; 55f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin } 56f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin 57f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin public long getTotalTargetCacheSize() { 58f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin return 0; 59f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin } 60f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin 61f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin public static class PathId { 62f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin public PathId(Path path, int id) { 63f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin this.path = path; 64f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin this.id = id; 65f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin } 66f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin public Path path; 67f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin public int id; 68f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin } 69f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin 70f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin // Maps a list of Paths (all belong to this MediaSource) to MediaItems, 71f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin // and invoke consumer.consume() for each MediaItem with the given id. 72f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin // 73f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin // This default implementation uses getMediaObject for each Path. Subclasses 74f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin // may override this and provide more efficient implementation (like 75f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin // batching the database query). 76f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin public void mapMediaItems(ArrayList<PathId> list, ItemConsumer consumer) { 77f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin int n = list.size(); 78f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin for (int i = 0; i < n; i++) { 79f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin PathId pid = list.get(i); 80676d4762496eddae66930c6f8b0bae22a22b3ef6Owen Lin MediaObject obj; 81676d4762496eddae66930c6f8b0bae22a22b3ef6Owen Lin synchronized (DataManager.LOCK) { 82676d4762496eddae66930c6f8b0bae22a22b3ef6Owen Lin obj = pid.path.getObject(); 83676d4762496eddae66930c6f8b0bae22a22b3ef6Owen Lin if (obj == null) { 84676d4762496eddae66930c6f8b0bae22a22b3ef6Owen Lin try { 85676d4762496eddae66930c6f8b0bae22a22b3ef6Owen Lin obj = createMediaObject(pid.path); 86676d4762496eddae66930c6f8b0bae22a22b3ef6Owen Lin } catch (Throwable th) { 87676d4762496eddae66930c6f8b0bae22a22b3ef6Owen Lin Log.w(TAG, "cannot create media object: " + pid.path, th); 88676d4762496eddae66930c6f8b0bae22a22b3ef6Owen Lin } 89f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin } 90f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin } 91f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin if (obj != null) { 92f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin consumer.consume(pid.id, (MediaItem) obj); 93f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin } 94f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin } 95f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin } 96f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin} 97