OSDN Git Service

android-2.1_r1 snapshot
[android-x86/packages-apps-Gallery2.git] / src / com / cooliris / media / MediaItem.java
diff --git a/src/com/cooliris/media/MediaItem.java b/src/com/cooliris/media/MediaItem.java
new file mode 100644 (file)
index 0000000..d9b2734
--- /dev/null
@@ -0,0 +1,140 @@
+package com.cooliris.media;
+
+public final class MediaItem {
+    public static final int MEDIA_TYPE_IMAGE = 0;
+    public static final int MEDIA_TYPE_VIDEO = 1;
+    // Approximately the year 1975 in milliseconds and seconds. Serves as a min
+    // cutoff for bad times.
+    public static final long MIN_VALID_DATE_IN_MS = 157680000000L;
+    public static final long MIN_VALID_DATE_IN_SEC = 157680000L;
+    // Approximately the year 2035 in milliseconds ans seconds. Serves as a max
+    // cutoff for bad time.
+    public static final long MAX_VALID_DATE_IN_MS = 2049840000000L;
+    public static final long MAX_VALID_DATE_IN_SEC = 2049840000L;
+
+    // mId is not a unique identifier of the item mId is initialized to -1 in
+    // some cases.
+    public static final String ID = new String("id");
+    public long mId;
+
+    public String mGuid;
+    public String mCaption;
+    public String mEditUri;
+    public String mContentUri;
+    public String mThumbnailUri;
+    public String mScreennailUri;
+    public String mMicroThumbnailUri;
+    public String mWeblink;
+    public String mMimeType;
+    private String mDisplayMimeType;
+    private int mMediaType = -1;
+    public String mRole;
+    public String mDescription;
+
+    // Location-based properties of the item.
+    public double mLatitude;
+    public double mLongitude;
+    public String mReverseGeocodedLocation;
+
+    public long mDateTakenInMs = 0;
+    public boolean mTriedRetrievingExifDateTaken = false;
+    public long mDateModifiedInSec = 0;
+    public long mDateAddedInSec = 0;
+    public int mDurationInSec;
+
+    public int mPrimingState = 0;
+    public static final int NOT_PRIMED = 0;
+    public static final int STARTED_PRIMING = 1;
+    public static final int PRIMED = 2;
+
+    public int mClusteringState = 0;
+    public static final int NOT_CLUSTERED = 0;
+    public static final int CLUSTERED = 1;
+
+    public float mRotation;
+
+    public long mThumbnailId;
+    public int mThumbnailFocusX;
+    public int mThumbnailFocusY;
+
+    public String mFilePath;
+
+    public MediaSet mParentMediaSet;
+
+    public MediaItem() {
+        mCaption = "";
+    }
+
+    public boolean isWellFormed() {
+        return true;
+    }
+
+    @Override
+    public String toString() {
+        return mCaption;
+    }
+
+    public boolean isLatLongValid() {
+        return (mLatitude != 0.0 || mLongitude != 0.0);
+    }
+
+    // Serves as a sanity check cutoff for bad exif information.
+    public boolean isDateTakenValid() {
+        return (mDateTakenInMs > MIN_VALID_DATE_IN_MS && mDateTakenInMs < MAX_VALID_DATE_IN_MS);
+    }
+
+    public boolean isDateModifiedValid() {
+        return (mDateModifiedInSec > MIN_VALID_DATE_IN_SEC && mDateModifiedInSec < MAX_VALID_DATE_IN_SEC);
+    }
+
+    public boolean isDateAddedValid() {
+        return (mDateAddedInSec > MIN_VALID_DATE_IN_SEC && mDateAddedInSec < MAX_VALID_DATE_IN_SEC);
+    }
+
+    public boolean isPicassaItem() {
+        return (mParentMediaSet != null && mParentMediaSet.isPicassaAlbum());
+    }
+
+    private static final String VIDEO = "video/";
+
+    public int getMediaType() {
+        if (mMediaType == -1) {
+            // Default to image if mMimetype is null or not video.
+            mMediaType = (mMimeType != null && mMimeType.startsWith(VIDEO)) ? MediaItem.MEDIA_TYPE_VIDEO
+                    : MediaItem.MEDIA_TYPE_IMAGE;
+        }
+        return mMediaType;
+    }
+
+    public void setMediaType(int mediaType) {
+        mMediaType = mediaType;
+    }
+
+    public String getDisplayMimeType() {
+        if (mDisplayMimeType == null && mMimeType != null) {
+            int slashPos = mMimeType.indexOf('/');
+            if (slashPos != -1 && slashPos + 1 < mMimeType.length()) {
+                mDisplayMimeType = mMimeType.substring(slashPos + 1).toUpperCase();
+            } else {
+                mDisplayMimeType = mMimeType.toUpperCase();
+            }
+        }
+        return (mDisplayMimeType == null) ? "" : mDisplayMimeType;
+    }
+
+    public void setDisplayMimeType(final String displayMimeType) {
+        mDisplayMimeType = displayMimeType;
+    }
+
+    public String getReverseGeocodedLocation(ReverseGeocoder reverseGeocoder) {
+        if (mReverseGeocodedLocation != null) {
+            return mReverseGeocodedLocation;
+        }
+        if (reverseGeocoder == null || !isLatLongValid()) {
+            return null;
+        }
+        // Get the 2 most granular details available.
+        mReverseGeocodedLocation = reverseGeocoder.getReverseGeocodedLocation(mLatitude, mLongitude, 2);
+        return mReverseGeocodedLocation;
+    }
+}