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 21f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Linpublic abstract class MediaObject { 22f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin @SuppressWarnings("unused") 23f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin private static final String TAG = "MediaObject"; 24f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin public static final long INVALID_DATA_VERSION = -1; 25f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin 26f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin // These are the bits returned from getSupportedOperations(): 27f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin public static final int SUPPORT_DELETE = 1 << 0; 28f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin public static final int SUPPORT_ROTATE = 1 << 1; 29f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin public static final int SUPPORT_SHARE = 1 << 2; 30f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin public static final int SUPPORT_CROP = 1 << 3; 31f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin public static final int SUPPORT_SHOW_ON_MAP = 1 << 4; 32f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin public static final int SUPPORT_SETAS = 1 << 5; 33f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin public static final int SUPPORT_FULL_IMAGE = 1 << 6; 34f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin public static final int SUPPORT_PLAY = 1 << 7; 35f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin public static final int SUPPORT_CACHE = 1 << 8; 36f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin public static final int SUPPORT_EDIT = 1 << 9; 37f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin public static final int SUPPORT_INFO = 1 << 10; 38d3aac52ffb88ced53413d5eef29c641dd6982267Bobby Georgescu public static final int SUPPORT_TRIM = 1 << 11; 39d3aac52ffb88ced53413d5eef29c641dd6982267Bobby Georgescu public static final int SUPPORT_UNLOCK = 1 << 12; 40d3aac52ffb88ced53413d5eef29c641dd6982267Bobby Georgescu public static final int SUPPORT_BACK = 1 << 13; 41d3aac52ffb88ced53413d5eef29c641dd6982267Bobby Georgescu public static final int SUPPORT_ACTION = 1 << 14; 42d3aac52ffb88ced53413d5eef29c641dd6982267Bobby Georgescu public static final int SUPPORT_CAMERA_SHORTCUT = 1 << 15; 43d3aac52ffb88ced53413d5eef29c641dd6982267Bobby Georgescu public static final int SUPPORT_MUTE = 1 << 16; 44e56abc7049e35f705161086fe51d0ecdbf451b8bJohn Hoford public static final int SUPPORT_PRINT = 1 << 17; 45f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin public static final int SUPPORT_ALL = 0xffffffff; 46f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin 47f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin // These are the bits returned from getMediaType(): 48f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin public static final int MEDIA_TYPE_UNKNOWN = 1; 49f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin public static final int MEDIA_TYPE_IMAGE = 2; 50f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin public static final int MEDIA_TYPE_VIDEO = 4; 51f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin public static final int MEDIA_TYPE_ALL = MEDIA_TYPE_IMAGE | MEDIA_TYPE_VIDEO; 52f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin 53d134e18e3c2d9614099d3b74e1a6a12159a1e81aRay Chen public static final String MEDIA_TYPE_IMAGE_STRING = "image"; 54d134e18e3c2d9614099d3b74e1a6a12159a1e81aRay Chen public static final String MEDIA_TYPE_VIDEO_STRING = "video"; 55d134e18e3c2d9614099d3b74e1a6a12159a1e81aRay Chen public static final String MEDIA_TYPE_ALL_STRING = "all"; 56d134e18e3c2d9614099d3b74e1a6a12159a1e81aRay Chen 57f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin // These are flags for cache() and return values for getCacheFlag(): 58f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin public static final int CACHE_FLAG_NO = 0; 59f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin public static final int CACHE_FLAG_SCREENNAIL = 1; 60f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin public static final int CACHE_FLAG_FULL = 2; 61f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin 62f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin // These are return values for getCacheStatus(): 63f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin public static final int CACHE_STATUS_NOT_CACHED = 0; 64f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin public static final int CACHE_STATUS_CACHING = 1; 65f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin public static final int CACHE_STATUS_CACHED_SCREENNAIL = 2; 66f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin public static final int CACHE_STATUS_CACHED_FULL = 3; 67f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin 68f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin private static long sVersionSerial = 0; 69f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin 70f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin protected long mDataVersion; 71f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin 72f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin protected final Path mPath; 73f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin 744b4dbd225685502f4249c2bf25bf74f7ce526645George Mount public interface PanoramaSupportCallback { 754b4dbd225685502f4249c2bf25bf74f7ce526645George Mount void panoramaInfoAvailable(MediaObject mediaObject, boolean isPanorama, 764b4dbd225685502f4249c2bf25bf74f7ce526645George Mount boolean isPanorama360); 77825afb1b3e7d15b5c258d664ee008dc68da1c407Mangesh Ghiware } 78825afb1b3e7d15b5c258d664ee008dc68da1c407Mangesh Ghiware 79f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin public MediaObject(Path path, long version) { 80f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin path.setObject(this); 81f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin mPath = path; 82f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin mDataVersion = version; 83f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin } 84f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin 85f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin public Path getPath() { 86f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin return mPath; 87f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin } 88f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin 89f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin public int getSupportedOperations() { 90f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin return 0; 91f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin } 92f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin 934b4dbd225685502f4249c2bf25bf74f7ce526645George Mount public void getPanoramaSupport(PanoramaSupportCallback callback) { 944b4dbd225685502f4249c2bf25bf74f7ce526645George Mount callback.panoramaInfoAvailable(this, false, false); 95825afb1b3e7d15b5c258d664ee008dc68da1c407Mangesh Ghiware } 96825afb1b3e7d15b5c258d664ee008dc68da1c407Mangesh Ghiware 974b4dbd225685502f4249c2bf25bf74f7ce526645George Mount public void clearCachedPanoramaSupport() { 98825afb1b3e7d15b5c258d664ee008dc68da1c407Mangesh Ghiware } 99825afb1b3e7d15b5c258d664ee008dc68da1c407Mangesh Ghiware 100f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin public void delete() { 101f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin throw new UnsupportedOperationException(); 102f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin } 103f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin 104f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin public void rotate(int degrees) { 105f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin throw new UnsupportedOperationException(); 106f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin } 107f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin 108f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin public Uri getContentUri() { 109eb8561c88dd966486001b0405f94aed43d8bfa52Doris Liu String className = getClass().getName(); 110a9144c8942f68d4a68de63103f590d0f55a95dd4Doris Liu Log.e(TAG, "Class " + className + "should implement getContentUri."); 111a9144c8942f68d4a68de63103f590d0f55a95dd4Doris Liu Log.e(TAG, "The object was created from path: " + getPath()); 112a9144c8942f68d4a68de63103f590d0f55a95dd4Doris Liu throw new UnsupportedOperationException(); 113f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin } 114f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin 115f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin public Uri getPlayUri() { 116f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin throw new UnsupportedOperationException(); 117f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin } 118f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin 119f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin public int getMediaType() { 120f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin return MEDIA_TYPE_UNKNOWN; 121f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin } 122f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin 123f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin public MediaDetails getDetails() { 124f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin MediaDetails details = new MediaDetails(); 125f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin return details; 126f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin } 127f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin 128f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin public long getDataVersion() { 129f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin return mDataVersion; 130f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin } 131f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin 132f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin public int getCacheFlag() { 133f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin return CACHE_FLAG_NO; 134f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin } 135f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin 136f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin public int getCacheStatus() { 137f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin throw new UnsupportedOperationException(); 138f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin } 139f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin 140f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin public long getCacheSize() { 141f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin throw new UnsupportedOperationException(); 142f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin } 143f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin 144f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin public void cache(int flag) { 145f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin throw new UnsupportedOperationException(); 146f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin } 147f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin 148f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin public static synchronized long nextVersionNumber() { 149f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin return ++MediaObject.sVersionSerial; 150f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin } 151d134e18e3c2d9614099d3b74e1a6a12159a1e81aRay Chen 152d134e18e3c2d9614099d3b74e1a6a12159a1e81aRay Chen public static int getTypeFromString(String s) { 153d134e18e3c2d9614099d3b74e1a6a12159a1e81aRay Chen if (MEDIA_TYPE_ALL_STRING.equals(s)) return MediaObject.MEDIA_TYPE_ALL; 154d134e18e3c2d9614099d3b74e1a6a12159a1e81aRay Chen if (MEDIA_TYPE_IMAGE_STRING.equals(s)) return MediaObject.MEDIA_TYPE_IMAGE; 155d134e18e3c2d9614099d3b74e1a6a12159a1e81aRay Chen if (MEDIA_TYPE_VIDEO_STRING.equals(s)) return MediaObject.MEDIA_TYPE_VIDEO; 156d134e18e3c2d9614099d3b74e1a6a12159a1e81aRay Chen throw new IllegalArgumentException(s); 157d134e18e3c2d9614099d3b74e1a6a12159a1e81aRay Chen } 158d134e18e3c2d9614099d3b74e1a6a12159a1e81aRay Chen 159d134e18e3c2d9614099d3b74e1a6a12159a1e81aRay Chen public static String getTypeString(int type) { 160d134e18e3c2d9614099d3b74e1a6a12159a1e81aRay Chen switch (type) { 161d134e18e3c2d9614099d3b74e1a6a12159a1e81aRay Chen case MEDIA_TYPE_IMAGE: return MEDIA_TYPE_IMAGE_STRING; 162d134e18e3c2d9614099d3b74e1a6a12159a1e81aRay Chen case MEDIA_TYPE_VIDEO: return MEDIA_TYPE_VIDEO_STRING; 163d134e18e3c2d9614099d3b74e1a6a12159a1e81aRay Chen case MEDIA_TYPE_ALL: return MEDIA_TYPE_ALL_STRING; 164d134e18e3c2d9614099d3b74e1a6a12159a1e81aRay Chen } 165d134e18e3c2d9614099d3b74e1a6a12159a1e81aRay Chen throw new IllegalArgumentException(); 166d134e18e3c2d9614099d3b74e1a6a12159a1e81aRay Chen } 167f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin} 168