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