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.graphics.Bitmap; 20 import android.net.Uri; 21 import android.view.View; 22 23 import com.android.camera.debug.Log; 24 import com.android.camera.util.Size; 25 import com.google.common.base.Optional; 26 27 import javax.annotation.Nonnull; 28 29 /** 30 * An abstract interface that represents the Local filmstrip items. 31 */ 32 public interface FilmstripItem { 33 static final Log.Tag TAG = new Log.Tag("FilmstripItem"); 34 35 /** 36 * An action callback to be used for actions on the filmstrip items. 37 */ 38 public static interface VideoClickedCallback { 39 40 /** 41 * Plays the video with the given URI and title. 42 */ playVideo(Uri uri, String title)43 public void playVideo(Uri uri, String title); 44 } 45 46 /** 47 * Returns the backing data for this filmstrip item. 48 */ getData()49 public FilmstripItemData getData(); 50 51 /** 52 * Returns the UI attributes of this filmstrip item. 53 */ getAttributes()54 public FilmstripItemAttributes getAttributes(); 55 56 /** 57 * Returns the generic filmstrip item type. 58 */ getItemViewType()59 public FilmstripItemType getItemViewType(); 60 61 /** 62 * @return The media details (such as EXIF) for the data. {@code null} if not 63 * available for the data. 64 */ getMediaDetails()65 public Optional<MediaDetails> getMediaDetails(); 66 67 /** 68 * @return the metadata. 69 */ getMetadata()70 public Metadata getMetadata(); 71 72 /** 73 * Gives the data a hint when its view is going to be removed from the view 74 * hierarchy. {@code FilmStripView} should always call this function after its 75 * corresponding view is removed from the view hierarchy. 76 */ recycle(@onnull View view)77 public void recycle(@Nonnull View view); 78 79 /** 80 * Create or recycle an existing view (if provided) to render this item. 81 * 82 * @param adapter Data adapter for this data item. 83 */ getView(Optional<View> view, LocalFilmstripDataAdapter adapter, boolean isInProgress, VideoClickedCallback videoClickedCallback)84 public View getView(Optional<View> view, 85 LocalFilmstripDataAdapter adapter, boolean isInProgress, 86 VideoClickedCallback videoClickedCallback); 87 88 /** 89 * Configure the suggested width and height in pixels for this view to render at. 90 * 91 * @param widthPx Suggested width in pixels. 92 * @param heightPx Suggested height in pixels. 93 */ setSuggestedSize(int widthPx, int heightPx)94 public void setSuggestedSize(int widthPx, int heightPx); 95 96 /** 97 * Request to load a tiny preview image into the view as fast as possible. 98 * 99 * @param view View created by getView(); 100 */ renderTiny(@onnull View view)101 public void renderTiny(@Nonnull View view); 102 103 /** 104 * Request to load screen sized version of the image into the view. 105 * 106 * @param view View created by getView(); 107 */ renderThumbnail(@onnull View view)108 public void renderThumbnail(@Nonnull View view); 109 110 /** 111 * Request to load the highest possible resolution image supported. 112 * 113 * @param view View created by getView(); 114 */ renderFullRes(@onnull View view)115 public void renderFullRes(@Nonnull View view); 116 117 /** 118 * Removes the data from the storage if possible. 119 */ delete()120 public boolean delete(); 121 122 /** 123 * Refresh the data content. 124 * 125 * @return A new LocalData object if success, null otherwise. 126 */ refresh()127 public FilmstripItem refresh(); 128 129 /** 130 * @return a bitmap thumbnail for this item. 131 */ generateThumbnail(int boundingWidthPx, int boundingHeightPx)132 public Optional<Bitmap> generateThumbnail(int boundingWidthPx, int boundingHeightPx); 133 134 /** 135 * Dimensions of this item. 136 * 137 * @return physical width and height in pixels. 138 */ getDimensions()139 public Size getDimensions(); 140 141 /** 142 * Returns the rotation of the image in degrees clockwise. The valid values 143 * are 0, 90, 180, and 270. 144 */ getOrientation()145 public int getOrientation(); 146 } 147