18ee16b8a323ffa20e6fb1270d498ec445f64defcPaul Rohde/*
28ee16b8a323ffa20e6fb1270d498ec445f64defcPaul Rohde * Copyright (C) 2013 The Android Open Source Project
38ee16b8a323ffa20e6fb1270d498ec445f64defcPaul Rohde *
48ee16b8a323ffa20e6fb1270d498ec445f64defcPaul Rohde * Licensed under the Apache License, Version 2.0 (the "License");
58ee16b8a323ffa20e6fb1270d498ec445f64defcPaul Rohde * you may not use this file except in compliance with the License.
68ee16b8a323ffa20e6fb1270d498ec445f64defcPaul Rohde * You may obtain a copy of the License at
78ee16b8a323ffa20e6fb1270d498ec445f64defcPaul Rohde *
88ee16b8a323ffa20e6fb1270d498ec445f64defcPaul Rohde *      http://www.apache.org/licenses/LICENSE-2.0
98ee16b8a323ffa20e6fb1270d498ec445f64defcPaul Rohde *
108ee16b8a323ffa20e6fb1270d498ec445f64defcPaul Rohde * Unless required by applicable law or agreed to in writing, software
118ee16b8a323ffa20e6fb1270d498ec445f64defcPaul Rohde * distributed under the License is distributed on an "AS IS" BASIS,
128ee16b8a323ffa20e6fb1270d498ec445f64defcPaul Rohde * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
138ee16b8a323ffa20e6fb1270d498ec445f64defcPaul Rohde * See the License for the specific language governing permissions and
148ee16b8a323ffa20e6fb1270d498ec445f64defcPaul Rohde * limitations under the License.
158ee16b8a323ffa20e6fb1270d498ec445f64defcPaul Rohde */
168ee16b8a323ffa20e6fb1270d498ec445f64defcPaul Rohde
178ee16b8a323ffa20e6fb1270d498ec445f64defcPaul Rohdepackage com.android.camera.data;
188ee16b8a323ffa20e6fb1270d498ec445f64defcPaul Rohde
198ee16b8a323ffa20e6fb1270d498ec445f64defcPaul Rohdeimport android.net.Uri;
208ee16b8a323ffa20e6fb1270d498ec445f64defcPaul Rohde
218ee16b8a323ffa20e6fb1270d498ec445f64defcPaul Rohdeimport com.android.camera.util.Size;
228ee16b8a323ffa20e6fb1270d498ec445f64defcPaul Rohde
238ee16b8a323ffa20e6fb1270d498ec445f64defcPaul Rohdeimport java.util.Date;
248ee16b8a323ffa20e6fb1270d498ec445f64defcPaul Rohde
258ee16b8a323ffa20e6fb1270d498ec445f64defcPaul Rohde/**
268ee16b8a323ffa20e6fb1270d498ec445f64defcPaul Rohde * Represents an immutable set of backing data. No object or value
278ee16b8a323ffa20e6fb1270d498ec445f64defcPaul Rohde * returned from this object should be mutable.
288ee16b8a323ffa20e6fb1270d498ec445f64defcPaul Rohde */
298ee16b8a323ffa20e6fb1270d498ec445f64defcPaul Rohdepublic class FilmstripItemData {
308ee16b8a323ffa20e6fb1270d498ec445f64defcPaul Rohde    // TODO Make these enum values.
318ee16b8a323ffa20e6fb1270d498ec445f64defcPaul Rohde    public static final String MIME_TYPE_JPEG = "image/jpeg";
328ee16b8a323ffa20e6fb1270d498ec445f64defcPaul Rohde    public static final String MIME_TYPE_GIF = "image/gif";
338ee16b8a323ffa20e6fb1270d498ec445f64defcPaul Rohde    public static final String MIME_TYPE_PHOTOSPHERE = "application/vnd.google.panorama360+jpg";
348ee16b8a323ffa20e6fb1270d498ec445f64defcPaul Rohde    public static final String MIME_TYPE_MP4 = "video/mp4";
358ee16b8a323ffa20e6fb1270d498ec445f64defcPaul Rohde
368ee16b8a323ffa20e6fb1270d498ec445f64defcPaul Rohde    private final long mContentId;
378ee16b8a323ffa20e6fb1270d498ec445f64defcPaul Rohde    private final String mTitle;
388ee16b8a323ffa20e6fb1270d498ec445f64defcPaul Rohde    private final String mMimeType;
398ee16b8a323ffa20e6fb1270d498ec445f64defcPaul Rohde    private final Date mCreationDate;
408ee16b8a323ffa20e6fb1270d498ec445f64defcPaul Rohde    private final Date mLastModifiedDate;
418ee16b8a323ffa20e6fb1270d498ec445f64defcPaul Rohde    private final String mFilePath;
428ee16b8a323ffa20e6fb1270d498ec445f64defcPaul Rohde    private final Uri mUri;
438ee16b8a323ffa20e6fb1270d498ec445f64defcPaul Rohde    private final Size mDimensions;
448ee16b8a323ffa20e6fb1270d498ec445f64defcPaul Rohde    private final long mSizeInBytes;
458ee16b8a323ffa20e6fb1270d498ec445f64defcPaul Rohde    private final int mOrientation;
468ee16b8a323ffa20e6fb1270d498ec445f64defcPaul Rohde    private final Location mLocation;
478ee16b8a323ffa20e6fb1270d498ec445f64defcPaul Rohde
488ee16b8a323ffa20e6fb1270d498ec445f64defcPaul Rohde    public FilmstripItemData(
498ee16b8a323ffa20e6fb1270d498ec445f64defcPaul Rohde          long contentId,
508ee16b8a323ffa20e6fb1270d498ec445f64defcPaul Rohde          String title,
518ee16b8a323ffa20e6fb1270d498ec445f64defcPaul Rohde          String mimeType,
528ee16b8a323ffa20e6fb1270d498ec445f64defcPaul Rohde          Date creationDate,
538ee16b8a323ffa20e6fb1270d498ec445f64defcPaul Rohde          Date lastModifiedDate,
548ee16b8a323ffa20e6fb1270d498ec445f64defcPaul Rohde          String filePath,
558ee16b8a323ffa20e6fb1270d498ec445f64defcPaul Rohde          Uri uri,
568ee16b8a323ffa20e6fb1270d498ec445f64defcPaul Rohde          Size dimensions,
578ee16b8a323ffa20e6fb1270d498ec445f64defcPaul Rohde          long sizeInBytes,
588ee16b8a323ffa20e6fb1270d498ec445f64defcPaul Rohde          int orientation,
598ee16b8a323ffa20e6fb1270d498ec445f64defcPaul Rohde          Location location) {
608ee16b8a323ffa20e6fb1270d498ec445f64defcPaul Rohde        mContentId = contentId;
618ee16b8a323ffa20e6fb1270d498ec445f64defcPaul Rohde        mTitle = title;
628ee16b8a323ffa20e6fb1270d498ec445f64defcPaul Rohde        mMimeType = mimeType;
638ee16b8a323ffa20e6fb1270d498ec445f64defcPaul Rohde        mCreationDate = creationDate;
648ee16b8a323ffa20e6fb1270d498ec445f64defcPaul Rohde        mLastModifiedDate = lastModifiedDate;
658ee16b8a323ffa20e6fb1270d498ec445f64defcPaul Rohde        mFilePath = filePath;
668ee16b8a323ffa20e6fb1270d498ec445f64defcPaul Rohde        mUri = uri;
678ee16b8a323ffa20e6fb1270d498ec445f64defcPaul Rohde        mDimensions = dimensions;
688ee16b8a323ffa20e6fb1270d498ec445f64defcPaul Rohde        mSizeInBytes = sizeInBytes;
698ee16b8a323ffa20e6fb1270d498ec445f64defcPaul Rohde        mOrientation = orientation;
708ee16b8a323ffa20e6fb1270d498ec445f64defcPaul Rohde        mLocation = location;
718ee16b8a323ffa20e6fb1270d498ec445f64defcPaul Rohde    }
728ee16b8a323ffa20e6fb1270d498ec445f64defcPaul Rohde
738ee16b8a323ffa20e6fb1270d498ec445f64defcPaul Rohde    public long getContentId() {
748ee16b8a323ffa20e6fb1270d498ec445f64defcPaul Rohde        return mContentId;
758ee16b8a323ffa20e6fb1270d498ec445f64defcPaul Rohde    }
768ee16b8a323ffa20e6fb1270d498ec445f64defcPaul Rohde
778ee16b8a323ffa20e6fb1270d498ec445f64defcPaul Rohde    /**
788ee16b8a323ffa20e6fb1270d498ec445f64defcPaul Rohde     * Gets the string title of this item. May be used for sorting.
798ee16b8a323ffa20e6fb1270d498ec445f64defcPaul Rohde     */
808ee16b8a323ffa20e6fb1270d498ec445f64defcPaul Rohde    public String getTitle() {
818ee16b8a323ffa20e6fb1270d498ec445f64defcPaul Rohde        return mTitle;
828ee16b8a323ffa20e6fb1270d498ec445f64defcPaul Rohde    }
838ee16b8a323ffa20e6fb1270d498ec445f64defcPaul Rohde
848ee16b8a323ffa20e6fb1270d498ec445f64defcPaul Rohde    /**
858ee16b8a323ffa20e6fb1270d498ec445f64defcPaul Rohde     * @return The mimetype of this data item, or null, if this item has no
868ee16b8a323ffa20e6fb1270d498ec445f64defcPaul Rohde     *         mimetype associated with it.
878ee16b8a323ffa20e6fb1270d498ec445f64defcPaul Rohde     */
888ee16b8a323ffa20e6fb1270d498ec445f64defcPaul Rohde    public String getMimeType() {
898ee16b8a323ffa20e6fb1270d498ec445f64defcPaul Rohde        return mMimeType;
908ee16b8a323ffa20e6fb1270d498ec445f64defcPaul Rohde    }
918ee16b8a323ffa20e6fb1270d498ec445f64defcPaul Rohde
928ee16b8a323ffa20e6fb1270d498ec445f64defcPaul Rohde    /**
938ee16b8a323ffa20e6fb1270d498ec445f64defcPaul Rohde     * Gets the date when this item was created. The returned date may be used
948ee16b8a323ffa20e6fb1270d498ec445f64defcPaul Rohde     * for sorting.
958ee16b8a323ffa20e6fb1270d498ec445f64defcPaul Rohde     */
968ee16b8a323ffa20e6fb1270d498ec445f64defcPaul Rohde    public Date getCreationDate() {
978ee16b8a323ffa20e6fb1270d498ec445f64defcPaul Rohde        return mCreationDate;
988ee16b8a323ffa20e6fb1270d498ec445f64defcPaul Rohde    }
998ee16b8a323ffa20e6fb1270d498ec445f64defcPaul Rohde
1008ee16b8a323ffa20e6fb1270d498ec445f64defcPaul Rohde    /**
1018ee16b8a323ffa20e6fb1270d498ec445f64defcPaul Rohde     * Gets the date when this item was last modified. The returned date may
1028ee16b8a323ffa20e6fb1270d498ec445f64defcPaul Rohde     * be used for sorting.
1038ee16b8a323ffa20e6fb1270d498ec445f64defcPaul Rohde     */
1048ee16b8a323ffa20e6fb1270d498ec445f64defcPaul Rohde    public Date getLastModifiedDate() {
1058ee16b8a323ffa20e6fb1270d498ec445f64defcPaul Rohde        return mLastModifiedDate;
1068ee16b8a323ffa20e6fb1270d498ec445f64defcPaul Rohde    }
1078ee16b8a323ffa20e6fb1270d498ec445f64defcPaul Rohde
1088ee16b8a323ffa20e6fb1270d498ec445f64defcPaul Rohde    /**
1098ee16b8a323ffa20e6fb1270d498ec445f64defcPaul Rohde     * Returns the path to the data on the storage.
1108ee16b8a323ffa20e6fb1270d498ec445f64defcPaul Rohde     */
1118ee16b8a323ffa20e6fb1270d498ec445f64defcPaul Rohde    public String getFilePath() {
1128ee16b8a323ffa20e6fb1270d498ec445f64defcPaul Rohde        return mFilePath;
1138ee16b8a323ffa20e6fb1270d498ec445f64defcPaul Rohde    }
1148ee16b8a323ffa20e6fb1270d498ec445f64defcPaul Rohde
1158ee16b8a323ffa20e6fb1270d498ec445f64defcPaul Rohde    /**
1168ee16b8a323ffa20e6fb1270d498ec445f64defcPaul Rohde     * @return The URI of this data. Must be a unique one and not null.
1178ee16b8a323ffa20e6fb1270d498ec445f64defcPaul Rohde     */
1188ee16b8a323ffa20e6fb1270d498ec445f64defcPaul Rohde    public Uri getUri() {
1198ee16b8a323ffa20e6fb1270d498ec445f64defcPaul Rohde        return mUri;
1208ee16b8a323ffa20e6fb1270d498ec445f64defcPaul Rohde    }
1218ee16b8a323ffa20e6fb1270d498ec445f64defcPaul Rohde
1228ee16b8a323ffa20e6fb1270d498ec445f64defcPaul Rohde    /**
1238ee16b8a323ffa20e6fb1270d498ec445f64defcPaul Rohde     * Dimensions of this item.
1248ee16b8a323ffa20e6fb1270d498ec445f64defcPaul Rohde     *
1258ee16b8a323ffa20e6fb1270d498ec445f64defcPaul Rohde     * @return physical width and height in pixels.
1268ee16b8a323ffa20e6fb1270d498ec445f64defcPaul Rohde     */
12751cafa0a35546a42c573357aa7a031a79cf9ba1bAlan Newberger    /* package */ Size getDimensions() {
1288ee16b8a323ffa20e6fb1270d498ec445f64defcPaul Rohde        return mDimensions;
1298ee16b8a323ffa20e6fb1270d498ec445f64defcPaul Rohde    }
1308ee16b8a323ffa20e6fb1270d498ec445f64defcPaul Rohde
1318ee16b8a323ffa20e6fb1270d498ec445f64defcPaul Rohde    /**
1328ee16b8a323ffa20e6fb1270d498ec445f64defcPaul Rohde     * @return total number of bytes that represent this item.
1338ee16b8a323ffa20e6fb1270d498ec445f64defcPaul Rohde     */
1348ee16b8a323ffa20e6fb1270d498ec445f64defcPaul Rohde    public long getSizeInBytes() {
1358ee16b8a323ffa20e6fb1270d498ec445f64defcPaul Rohde        return mSizeInBytes;
1368ee16b8a323ffa20e6fb1270d498ec445f64defcPaul Rohde    }
1378ee16b8a323ffa20e6fb1270d498ec445f64defcPaul Rohde
1388ee16b8a323ffa20e6fb1270d498ec445f64defcPaul Rohde    /**
1398ee16b8a323ffa20e6fb1270d498ec445f64defcPaul Rohde     * Returns the rotation of the image in degrees clockwise. The valid values
1408ee16b8a323ffa20e6fb1270d498ec445f64defcPaul Rohde     * are 0, 90, 180, and 270.
1418ee16b8a323ffa20e6fb1270d498ec445f64defcPaul Rohde     */
14251cafa0a35546a42c573357aa7a031a79cf9ba1bAlan Newberger    /* package */ int getOrientation() {
1438ee16b8a323ffa20e6fb1270d498ec445f64defcPaul Rohde        return mOrientation;
1448ee16b8a323ffa20e6fb1270d498ec445f64defcPaul Rohde    }
1458ee16b8a323ffa20e6fb1270d498ec445f64defcPaul Rohde
1468ee16b8a323ffa20e6fb1270d498ec445f64defcPaul Rohde    public Location getLocation() {
1478ee16b8a323ffa20e6fb1270d498ec445f64defcPaul Rohde        return mLocation;
1488ee16b8a323ffa20e6fb1270d498ec445f64defcPaul Rohde    }
1498ee16b8a323ffa20e6fb1270d498ec445f64defcPaul Rohde
1508ee16b8a323ffa20e6fb1270d498ec445f64defcPaul Rohde    @Override
1518ee16b8a323ffa20e6fb1270d498ec445f64defcPaul Rohde    public String toString() {
1528ee16b8a323ffa20e6fb1270d498ec445f64defcPaul Rohde        StringBuilder sb = new StringBuilder();
1538ee16b8a323ffa20e6fb1270d498ec445f64defcPaul Rohde        sb.append("FilmstripItemData {");
1548ee16b8a323ffa20e6fb1270d498ec445f64defcPaul Rohde        sb.append("id:");
1558ee16b8a323ffa20e6fb1270d498ec445f64defcPaul Rohde        sb.append(mContentId);
1568ee16b8a323ffa20e6fb1270d498ec445f64defcPaul Rohde        sb.append(",title:");
1578ee16b8a323ffa20e6fb1270d498ec445f64defcPaul Rohde        sb.append(mTitle);
1588ee16b8a323ffa20e6fb1270d498ec445f64defcPaul Rohde        sb.append(",mimeType:");
1598ee16b8a323ffa20e6fb1270d498ec445f64defcPaul Rohde        sb.append(mMimeType);
1608ee16b8a323ffa20e6fb1270d498ec445f64defcPaul Rohde        sb.append(",creationDate:");
1618ee16b8a323ffa20e6fb1270d498ec445f64defcPaul Rohde        sb.append(mCreationDate);
1628ee16b8a323ffa20e6fb1270d498ec445f64defcPaul Rohde        sb.append(",lastModifiedDate:");
1638ee16b8a323ffa20e6fb1270d498ec445f64defcPaul Rohde        sb.append(mLastModifiedDate);
1648ee16b8a323ffa20e6fb1270d498ec445f64defcPaul Rohde        sb.append(",filePath:");
1658ee16b8a323ffa20e6fb1270d498ec445f64defcPaul Rohde        sb.append(mFilePath);
1668ee16b8a323ffa20e6fb1270d498ec445f64defcPaul Rohde        sb.append(",uri:");
1678ee16b8a323ffa20e6fb1270d498ec445f64defcPaul Rohde        sb.append(mUri);
1688ee16b8a323ffa20e6fb1270d498ec445f64defcPaul Rohde        sb.append(",dimensions:");
1698ee16b8a323ffa20e6fb1270d498ec445f64defcPaul Rohde        sb.append(mDimensions);
1708ee16b8a323ffa20e6fb1270d498ec445f64defcPaul Rohde        sb.append(",sizeInBytes:");
1718ee16b8a323ffa20e6fb1270d498ec445f64defcPaul Rohde        sb.append(mSizeInBytes);
1728ee16b8a323ffa20e6fb1270d498ec445f64defcPaul Rohde        sb.append(",orientation:");
1738ee16b8a323ffa20e6fb1270d498ec445f64defcPaul Rohde        sb.append(mOrientation);
1748ee16b8a323ffa20e6fb1270d498ec445f64defcPaul Rohde        sb.append(",location:");
1758ee16b8a323ffa20e6fb1270d498ec445f64defcPaul Rohde        sb.append(mLocation);
1768ee16b8a323ffa20e6fb1270d498ec445f64defcPaul Rohde        sb.append("}");
1778ee16b8a323ffa20e6fb1270d498ec445f64defcPaul Rohde        return sb.toString();
1788ee16b8a323ffa20e6fb1270d498ec445f64defcPaul Rohde    }
1798ee16b8a323ffa20e6fb1270d498ec445f64defcPaul Rohde
1808ee16b8a323ffa20e6fb1270d498ec445f64defcPaul Rohde    public static class Builder {
1818ee16b8a323ffa20e6fb1270d498ec445f64defcPaul Rohde        public static final Date EMPTY = new Date(0);
1828ee16b8a323ffa20e6fb1270d498ec445f64defcPaul Rohde        public static final Size ZERO = new Size(0, 0);
1838ee16b8a323ffa20e6fb1270d498ec445f64defcPaul Rohde
1848ee16b8a323ffa20e6fb1270d498ec445f64defcPaul Rohde        private long mContentId = -1;
1858ee16b8a323ffa20e6fb1270d498ec445f64defcPaul Rohde        private String mTitle = "";
1868ee16b8a323ffa20e6fb1270d498ec445f64defcPaul Rohde        private String mMimeType = "";
1878ee16b8a323ffa20e6fb1270d498ec445f64defcPaul Rohde        private Date mCreationDate = EMPTY;
1888ee16b8a323ffa20e6fb1270d498ec445f64defcPaul Rohde        private Date mLastModifiedDate = EMPTY;
1898ee16b8a323ffa20e6fb1270d498ec445f64defcPaul Rohde        private String mFilePath = "";
1908ee16b8a323ffa20e6fb1270d498ec445f64defcPaul Rohde        private final Uri mUri;
1918ee16b8a323ffa20e6fb1270d498ec445f64defcPaul Rohde        private Size mDimensions = ZERO;
1928ee16b8a323ffa20e6fb1270d498ec445f64defcPaul Rohde        private long mSizeInBytes = 0;
1938ee16b8a323ffa20e6fb1270d498ec445f64defcPaul Rohde        private int mOrientation = 0;
1948ee16b8a323ffa20e6fb1270d498ec445f64defcPaul Rohde        private Location mLocation = Location.UNKNOWN;
1958ee16b8a323ffa20e6fb1270d498ec445f64defcPaul Rohde
1968ee16b8a323ffa20e6fb1270d498ec445f64defcPaul Rohde        public Builder(Uri uri) {
1978ee16b8a323ffa20e6fb1270d498ec445f64defcPaul Rohde            mUri = uri;
1988ee16b8a323ffa20e6fb1270d498ec445f64defcPaul Rohde        }
1998ee16b8a323ffa20e6fb1270d498ec445f64defcPaul Rohde
2008ee16b8a323ffa20e6fb1270d498ec445f64defcPaul Rohde        public FilmstripItemData build() {
2018ee16b8a323ffa20e6fb1270d498ec445f64defcPaul Rohde            return new FilmstripItemData(
2028ee16b8a323ffa20e6fb1270d498ec445f64defcPaul Rohde                  mContentId,
2038ee16b8a323ffa20e6fb1270d498ec445f64defcPaul Rohde                  mTitle,
2048ee16b8a323ffa20e6fb1270d498ec445f64defcPaul Rohde                  mMimeType,
2058ee16b8a323ffa20e6fb1270d498ec445f64defcPaul Rohde                  mCreationDate,
2068ee16b8a323ffa20e6fb1270d498ec445f64defcPaul Rohde                  mLastModifiedDate,
2078ee16b8a323ffa20e6fb1270d498ec445f64defcPaul Rohde                  mFilePath,
2088ee16b8a323ffa20e6fb1270d498ec445f64defcPaul Rohde                  mUri,
2098ee16b8a323ffa20e6fb1270d498ec445f64defcPaul Rohde                  mDimensions,
2108ee16b8a323ffa20e6fb1270d498ec445f64defcPaul Rohde                  mSizeInBytes,
2118ee16b8a323ffa20e6fb1270d498ec445f64defcPaul Rohde                  mOrientation,
2128ee16b8a323ffa20e6fb1270d498ec445f64defcPaul Rohde                  mLocation
2138ee16b8a323ffa20e6fb1270d498ec445f64defcPaul Rohde            );
2148ee16b8a323ffa20e6fb1270d498ec445f64defcPaul Rohde        }
2158ee16b8a323ffa20e6fb1270d498ec445f64defcPaul Rohde
2168ee16b8a323ffa20e6fb1270d498ec445f64defcPaul Rohde        public static Builder from(FilmstripItemData data) {
2178ee16b8a323ffa20e6fb1270d498ec445f64defcPaul Rohde            Builder builder = new Builder(data.getUri());
2188ee16b8a323ffa20e6fb1270d498ec445f64defcPaul Rohde            builder.mContentId = data.getContentId();
2198ee16b8a323ffa20e6fb1270d498ec445f64defcPaul Rohde            builder.mTitle = data.getTitle();
2208ee16b8a323ffa20e6fb1270d498ec445f64defcPaul Rohde            builder.mMimeType = data.getMimeType();
2218ee16b8a323ffa20e6fb1270d498ec445f64defcPaul Rohde            builder.mCreationDate = data.getCreationDate();
2228ee16b8a323ffa20e6fb1270d498ec445f64defcPaul Rohde            builder.mLastModifiedDate = data.getLastModifiedDate();
2238ee16b8a323ffa20e6fb1270d498ec445f64defcPaul Rohde            builder.mFilePath = data.getFilePath();
2248ee16b8a323ffa20e6fb1270d498ec445f64defcPaul Rohde            builder.mDimensions = data.getDimensions();
2258ee16b8a323ffa20e6fb1270d498ec445f64defcPaul Rohde            builder.mSizeInBytes = data.getSizeInBytes();
2268ee16b8a323ffa20e6fb1270d498ec445f64defcPaul Rohde            builder.mOrientation = data.getOrientation();
2278ee16b8a323ffa20e6fb1270d498ec445f64defcPaul Rohde            builder.mLocation = data.getLocation();
2288ee16b8a323ffa20e6fb1270d498ec445f64defcPaul Rohde            return builder;
2298ee16b8a323ffa20e6fb1270d498ec445f64defcPaul Rohde        }
2308ee16b8a323ffa20e6fb1270d498ec445f64defcPaul Rohde
2318ee16b8a323ffa20e6fb1270d498ec445f64defcPaul Rohde        public Builder withContentId(long contentId) {
2328ee16b8a323ffa20e6fb1270d498ec445f64defcPaul Rohde            mContentId = contentId;
2338ee16b8a323ffa20e6fb1270d498ec445f64defcPaul Rohde            return this;
2348ee16b8a323ffa20e6fb1270d498ec445f64defcPaul Rohde        }
2358ee16b8a323ffa20e6fb1270d498ec445f64defcPaul Rohde
2368ee16b8a323ffa20e6fb1270d498ec445f64defcPaul Rohde        public Builder withTitle(String title) {
2378ee16b8a323ffa20e6fb1270d498ec445f64defcPaul Rohde            mTitle = title;
2388ee16b8a323ffa20e6fb1270d498ec445f64defcPaul Rohde            return this;
2398ee16b8a323ffa20e6fb1270d498ec445f64defcPaul Rohde        }
2408ee16b8a323ffa20e6fb1270d498ec445f64defcPaul Rohde
2418ee16b8a323ffa20e6fb1270d498ec445f64defcPaul Rohde        public Builder withMimeType(String mimeType) {
2428ee16b8a323ffa20e6fb1270d498ec445f64defcPaul Rohde            mMimeType = mimeType;
2438ee16b8a323ffa20e6fb1270d498ec445f64defcPaul Rohde            return this;
2448ee16b8a323ffa20e6fb1270d498ec445f64defcPaul Rohde        }
2458ee16b8a323ffa20e6fb1270d498ec445f64defcPaul Rohde
2468ee16b8a323ffa20e6fb1270d498ec445f64defcPaul Rohde        public Builder withCreationDate(Date creationDate) {
2478ee16b8a323ffa20e6fb1270d498ec445f64defcPaul Rohde            mCreationDate = creationDate;
2488ee16b8a323ffa20e6fb1270d498ec445f64defcPaul Rohde            return this;
2498ee16b8a323ffa20e6fb1270d498ec445f64defcPaul Rohde        }
2508ee16b8a323ffa20e6fb1270d498ec445f64defcPaul Rohde
2518ee16b8a323ffa20e6fb1270d498ec445f64defcPaul Rohde        public Builder withLastModifiedDate(Date lastModifiedDate) {
2528ee16b8a323ffa20e6fb1270d498ec445f64defcPaul Rohde            mLastModifiedDate = lastModifiedDate;
2538ee16b8a323ffa20e6fb1270d498ec445f64defcPaul Rohde            return this;
2548ee16b8a323ffa20e6fb1270d498ec445f64defcPaul Rohde        }
2558ee16b8a323ffa20e6fb1270d498ec445f64defcPaul Rohde
2568ee16b8a323ffa20e6fb1270d498ec445f64defcPaul Rohde        public Builder withFilePath(String filePath) {
2578ee16b8a323ffa20e6fb1270d498ec445f64defcPaul Rohde            mFilePath = filePath;
2588ee16b8a323ffa20e6fb1270d498ec445f64defcPaul Rohde            return this;
2598ee16b8a323ffa20e6fb1270d498ec445f64defcPaul Rohde        }
2608ee16b8a323ffa20e6fb1270d498ec445f64defcPaul Rohde
2618ee16b8a323ffa20e6fb1270d498ec445f64defcPaul Rohde        public Builder withDimensions(Size dimensions) {
2628ee16b8a323ffa20e6fb1270d498ec445f64defcPaul Rohde            mDimensions = dimensions;
2638ee16b8a323ffa20e6fb1270d498ec445f64defcPaul Rohde            return this;
2648ee16b8a323ffa20e6fb1270d498ec445f64defcPaul Rohde        }
2658ee16b8a323ffa20e6fb1270d498ec445f64defcPaul Rohde
2668ee16b8a323ffa20e6fb1270d498ec445f64defcPaul Rohde        public Builder withSizeInBytes(long sizeInBytes) {
2678ee16b8a323ffa20e6fb1270d498ec445f64defcPaul Rohde            mSizeInBytes = sizeInBytes;
2688ee16b8a323ffa20e6fb1270d498ec445f64defcPaul Rohde            return this;
2698ee16b8a323ffa20e6fb1270d498ec445f64defcPaul Rohde        }
2708ee16b8a323ffa20e6fb1270d498ec445f64defcPaul Rohde
2718ee16b8a323ffa20e6fb1270d498ec445f64defcPaul Rohde        public Builder withOrientation(int orientation) {
2728ee16b8a323ffa20e6fb1270d498ec445f64defcPaul Rohde            mOrientation = orientation;
2738ee16b8a323ffa20e6fb1270d498ec445f64defcPaul Rohde            return this;
2748ee16b8a323ffa20e6fb1270d498ec445f64defcPaul Rohde        }
2758ee16b8a323ffa20e6fb1270d498ec445f64defcPaul Rohde
2768ee16b8a323ffa20e6fb1270d498ec445f64defcPaul Rohde        public Builder withLocation(Location location) {
2778ee16b8a323ffa20e6fb1270d498ec445f64defcPaul Rohde            mLocation = location;
2788ee16b8a323ffa20e6fb1270d498ec445f64defcPaul Rohde            return this;
2798ee16b8a323ffa20e6fb1270d498ec445f64defcPaul Rohde        }
2808ee16b8a323ffa20e6fb1270d498ec445f64defcPaul Rohde    }
2818ee16b8a323ffa20e6fb1270d498ec445f64defcPaul Rohde}
282