/* * Copyright (C) 2009 The Android Open Source Project * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package com.cooliris.media; import java.util.Date; 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 Date mLocaltime; 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 boolean mFlagForDelete; 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; } }