1 /* 2 * Copyright (C) 2013 The Android Open Source Project 3 * 4 * Licensed under the Apache License, Version 2.0 (the "License"); 5 * you may not use this file except in compliance with the License. 6 * You may obtain a copy of the License at 7 * 8 * http://www.apache.org/licenses/LICENSE-2.0 9 * 10 * Unless required by applicable law or agreed to in writing, software 11 * distributed under the License is distributed on an "AS IS" BASIS, 12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 * See the License for the specific language governing permissions and 14 * limitations under the License. 15 */ 16 17 package com.android.camera.data; 18 19 import android.net.Uri; 20 21 import com.android.camera.util.Size; 22 23 import java.util.Date; 24 25 /** 26 * Represents an immutable set of backing data. No object or value 27 * returned from this object should be mutable. 28 */ 29 public class FilmstripItemData { 30 // TODO Make these enum values. 31 public static final String MIME_TYPE_JPEG = "image/jpeg"; 32 public static final String MIME_TYPE_GIF = "image/gif"; 33 public static final String MIME_TYPE_PHOTOSPHERE = "application/vnd.google.panorama360+jpg"; 34 public static final String MIME_TYPE_MP4 = "video/mp4"; 35 36 private final long mContentId; 37 private final String mTitle; 38 private final String mMimeType; 39 private final Date mCreationDate; 40 private final Date mLastModifiedDate; 41 private final String mFilePath; 42 private final Uri mUri; 43 private final Size mDimensions; 44 private final long mSizeInBytes; 45 private final int mOrientation; 46 private final Location mLocation; 47 48 public FilmstripItemData( 49 long contentId, 50 String title, 51 String mimeType, 52 Date creationDate, 53 Date lastModifiedDate, 54 String filePath, 55 Uri uri, 56 Size dimensions, 57 long sizeInBytes, 58 int orientation, 59 Location location) { 60 mContentId = contentId; 61 mTitle = title; 62 mMimeType = mimeType; 63 mCreationDate = creationDate; 64 mLastModifiedDate = lastModifiedDate; 65 mFilePath = filePath; 66 mUri = uri; 67 mDimensions = dimensions; 68 mSizeInBytes = sizeInBytes; 69 mOrientation = orientation; 70 mLocation = location; 71 } 72 73 public long getContentId() { 74 return mContentId; 75 } 76 77 /** 78 * Gets the string title of this item. May be used for sorting. 79 */ 80 public String getTitle() { 81 return mTitle; 82 } 83 84 /** 85 * @return The mimetype of this data item, or null, if this item has no 86 * mimetype associated with it. 87 */ 88 public String getMimeType() { 89 return mMimeType; 90 } 91 92 /** 93 * Gets the date when this item was created. The returned date may be used 94 * for sorting. 95 */ 96 public Date getCreationDate() { 97 return mCreationDate; 98 } 99 100 /** 101 * Gets the date when this item was last modified. The returned date may 102 * be used for sorting. 103 */ 104 public Date getLastModifiedDate() { 105 return mLastModifiedDate; 106 } 107 108 /** 109 * Returns the path to the data on the storage. 110 */ 111 public String getFilePath() { 112 return mFilePath; 113 } 114 115 /** 116 * @return The URI of this data. Must be a unique one and not null. 117 */ 118 public Uri getUri() { 119 return mUri; 120 } 121 122 /** 123 * Dimensions of this item. 124 * 125 * @return physical width and height in pixels. 126 */ 127 /* package */ Size getDimensions() { 128 return mDimensions; 129 } 130 131 /** 132 * @return total number of bytes that represent this item. 133 */ 134 public long getSizeInBytes() { 135 return mSizeInBytes; 136 } 137 138 /** 139 * Returns the rotation of the image in degrees clockwise. The valid values 140 * are 0, 90, 180, and 270. 141 */ 142 /* package */ int getOrientation() { 143 return mOrientation; 144 } 145 146 public Location getLocation() { 147 return mLocation; 148 } 149 150 @Override 151 public String toString() { 152 StringBuilder sb = new StringBuilder(); 153 sb.append("FilmstripItemData {"); 154 sb.append("id:"); 155 sb.append(mContentId); 156 sb.append(",title:"); 157 sb.append(mTitle); 158 sb.append(",mimeType:"); 159 sb.append(mMimeType); 160 sb.append(",creationDate:"); 161 sb.append(mCreationDate); 162 sb.append(",lastModifiedDate:"); 163 sb.append(mLastModifiedDate); 164 sb.append(",filePath:"); 165 sb.append(mFilePath); 166 sb.append(",uri:"); 167 sb.append(mUri); 168 sb.append(",dimensions:"); 169 sb.append(mDimensions); 170 sb.append(",sizeInBytes:"); 171 sb.append(mSizeInBytes); 172 sb.append(",orientation:"); 173 sb.append(mOrientation); 174 sb.append(",location:"); 175 sb.append(mLocation); 176 sb.append("}"); 177 return sb.toString(); 178 } 179 180 public static class Builder { 181 public static final Date EMPTY = new Date(0); 182 public static final Size ZERO = new Size(0, 0); 183 184 private long mContentId = -1; 185 private String mTitle = ""; 186 private String mMimeType = ""; 187 private Date mCreationDate = EMPTY; 188 private Date mLastModifiedDate = EMPTY; 189 private String mFilePath = ""; 190 private final Uri mUri; 191 private Size mDimensions = ZERO; 192 private long mSizeInBytes = 0; 193 private int mOrientation = 0; 194 private Location mLocation = Location.UNKNOWN; 195 196 public Builder(Uri uri) { 197 mUri = uri; 198 } 199 200 public FilmstripItemData build() { 201 return new FilmstripItemData( 202 mContentId, 203 mTitle, 204 mMimeType, 205 mCreationDate, 206 mLastModifiedDate, 207 mFilePath, 208 mUri, 209 mDimensions, 210 mSizeInBytes, 211 mOrientation, 212 mLocation 213 ); 214 } 215 216 public static Builder from(FilmstripItemData data) { 217 Builder builder = new Builder(data.getUri()); 218 builder.mContentId = data.getContentId(); 219 builder.mTitle = data.getTitle(); 220 builder.mMimeType = data.getMimeType(); 221 builder.mCreationDate = data.getCreationDate(); 222 builder.mLastModifiedDate = data.getLastModifiedDate(); 223 builder.mFilePath = data.getFilePath(); 224 builder.mDimensions = data.getDimensions(); 225 builder.mSizeInBytes = data.getSizeInBytes(); 226 builder.mOrientation = data.getOrientation(); 227 builder.mLocation = data.getLocation(); 228 return builder; 229 } 230 231 public Builder withContentId(long contentId) { 232 mContentId = contentId; 233 return this; 234 } 235 236 public Builder withTitle(String title) { 237 mTitle = title; 238 return this; 239 } 240 241 public Builder withMimeType(String mimeType) { 242 mMimeType = mimeType; 243 return this; 244 } 245 246 public Builder withCreationDate(Date creationDate) { 247 mCreationDate = creationDate; 248 return this; 249 } 250 251 public Builder withLastModifiedDate(Date lastModifiedDate) { 252 mLastModifiedDate = lastModifiedDate; 253 return this; 254 } 255 256 public Builder withFilePath(String filePath) { 257 mFilePath = filePath; 258 return this; 259 } 260 261 public Builder withDimensions(Size dimensions) { 262 mDimensions = dimensions; 263 return this; 264 } 265 266 public Builder withSizeInBytes(long sizeInBytes) { 267 mSizeInBytes = sizeInBytes; 268 return this; 269 } 270 271 public Builder withOrientation(int orientation) { 272 mOrientation = orientation; 273 return this; 274 } 275 276 public Builder withLocation(Location location) { 277 mLocation = location; 278 return this; 279 } 280 } 281 } 282