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.database.Cursor;
20f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin
212b3ee0ea07246b859a5b75d8a6102a7cce7ec838Owen Linimport com.android.gallery3d.util.GalleryUtils;
222b3ee0ea07246b859a5b75d8a6102a7cce7ec838Owen Lin
23f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Linimport java.text.DateFormat;
24f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Linimport java.util.Date;
25f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin
26f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin//
27f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin// LocalMediaItem is an abstract class captures those common fields
28f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin// in LocalImage and LocalVideo.
29f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin//
30f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Linpublic abstract class LocalMediaItem extends MediaItem {
31f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin
32f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin    @SuppressWarnings("unused")
33f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin    private static final String TAG = "LocalMediaItem";
34f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin
35f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin    // database fields
36f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin    public int id;
37f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin    public String caption;
38f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin    public String mimeType;
39f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin    public long fileSize;
40f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin    public double latitude = INVALID_LATLNG;
41f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin    public double longitude = INVALID_LATLNG;
42f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin    public long dateTakenInMs;
43f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin    public long dateAddedInSec;
44f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin    public long dateModifiedInSec;
45f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin    public String filePath;
46f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin    public int bucketId;
47f5ce6aeba448f418c99736465f7a02dacd7715bbChih-Chung Chang    public int width;
48f5ce6aeba448f418c99736465f7a02dacd7715bbChih-Chung Chang    public int height;
49f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin
50f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin    public LocalMediaItem(Path path, long version) {
51f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin        super(path, version);
52f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin    }
53f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin
54f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin    @Override
55f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin    public long getDateInMs() {
56f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin        return dateTakenInMs;
57f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin    }
58f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin
59f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin    @Override
60f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin    public String getName() {
61f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin        return caption;
62f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin    }
63f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin
64f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin    @Override
65f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin    public void getLatLong(double[] latLong) {
66f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin        latLong[0] = latitude;
67f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin        latLong[1] = longitude;
68f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin    }
69f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin
70f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin    abstract protected boolean updateFromCursor(Cursor cursor);
71f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin
72f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin    public int getBucketId() {
73f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin        return bucketId;
74f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin    }
75f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin
76f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin    protected void updateContent(Cursor cursor) {
77f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin        if (updateFromCursor(cursor)) {
78f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin            mDataVersion = nextVersionNumber();
79f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin        }
80f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin    }
81f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin
82f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin    @Override
83f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin    public MediaDetails getDetails() {
84f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin        MediaDetails details = super.getDetails();
85f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin        details.addDetail(MediaDetails.INDEX_PATH, filePath);
86f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin        details.addDetail(MediaDetails.INDEX_TITLE, caption);
87f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin        DateFormat formater = DateFormat.getDateTimeInstance();
88133c49e9bda0b3dcc005a0dfc7ab999926c0ef7fEarl Ou        details.addDetail(MediaDetails.INDEX_DATETIME,
89133c49e9bda0b3dcc005a0dfc7ab999926c0ef7fEarl Ou                formater.format(new Date(dateModifiedInSec * 1000)));
90bc8808a30e524e943b28b484d974b52769694e37Owen Lin        details.addDetail(MediaDetails.INDEX_WIDTH, width);
91bc8808a30e524e943b28b484d974b52769694e37Owen Lin        details.addDetail(MediaDetails.INDEX_HEIGHT, height);
92f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin
93f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin        if (GalleryUtils.isValidLocation(latitude, longitude)) {
94f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin            details.addDetail(MediaDetails.INDEX_LOCATION, new double[] {latitude, longitude});
95f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin        }
96f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin        if (fileSize > 0) details.addDetail(MediaDetails.INDEX_SIZE, fileSize);
97f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin        return details;
98f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin    }
99f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin
100f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin    @Override
101f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin    public String getMimeType() {
102f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin        return mimeType;
103f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin    }
104f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin
1057817979db0c52ffeacb951625b1e821eba303285Ahbong Chang    @Override
106f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin    public long getSize() {
107f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin        return fileSize;
108f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin    }
109f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin}
110