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 import android.os.AsyncTask; 21 22 import com.android.camera.filmstrip.FilmstripDataAdapter; 23 import com.android.camera.util.Callback; 24 import com.android.camera.widget.Preloader; 25 26 import java.util.List; 27 28 /** 29 * An interface which extends {@link com.android.camera.filmstrip.FilmstripDataAdapter} 30 * and defines operations on the data in the local camera folder. 31 */ 32 public interface LocalFilmstripDataAdapter extends FilmstripDataAdapter, 33 Preloader.ItemLoader<Integer, AsyncTask>, Preloader.ItemSource<Integer> { 34 35 public interface FilmstripItemListener { 36 /** 37 * Metadata of a {@link FilmstripItem} is loaded on 38 * demand. Once the metadata is loaded this listener is notified. 39 * 40 * @param indexes The indexes of the data whose metadata has been 41 * updated. 42 */ 43 public void onMetadataUpdated(List<Integer> indexes); 44 } 45 46 /** 47 * Request for loading any photos that may have been added to the 48 * media store since the last update. 49 */ 50 public void requestLoadNewPhotos(); 51 52 /** 53 * Request for loading the local data. 54 */ 55 public void requestLoad(Callback<Void> onDone); 56 57 /** 58 * Returns the specified {@link FilmstripItem}. 59 * 60 * @param index The ID of the {@link FilmstripItem} to get. 61 * @return The {@link FilmstripItem} to get. {@code null} if not available. 62 */ 63 public FilmstripItem getItemAt(int index); 64 65 /** 66 * Remove the data in the local camera folder. 67 * 68 * @param index of data to be deleted. 69 */ 70 public void removeAt(int index); 71 72 /** 73 * Adds new local data. The data is either inserted or updated, depending 74 * on the existence of the Uri. 75 * 76 * @param item The new data. 77 * @return Whether the data is newly inserted. 78 */ 79 public boolean addOrUpdate(FilmstripItem item); 80 81 /** 82 * Refresh the data by {@link Uri}. 83 * 84 * @param uri The {@link Uri} of the data to refresh. 85 */ 86 public void refresh(Uri uri); 87 88 /** 89 * Finds the {@link FilmstripItem} of the specified content Uri. 90 * 91 * @param uri The content Uri of the {@link FilmstripItem}. 92 * @return The index of the data. {@code -1} if not found. 93 */ 94 public int findByContentUri(Uri uri); 95 96 /** 97 * Clears all the data currently loaded. 98 */ 99 public void clear(); 100 101 /** 102 * Executes the deletion task. Delete the data waiting in the deletion 103 * queue. 104 * 105 * @return Whether the task has been executed 106 */ 107 public boolean executeDeletion(); 108 109 /** 110 * Undo a deletion. If there is any data waiting to be deleted in the queue, 111 * move it out of the deletion queue. 112 * 113 * @return Whether there are items in the queue. 114 */ 115 public boolean undoDeletion(); 116 117 /** 118 * Update the data in a specific position. 119 * 120 * @param index The position of the data to be updated. 121 * @param item The new data. 122 */ 123 public void updateItemAt(int index, FilmstripItem item); 124 125 /** Sets the listener for the LocalData change. */ 126 public void setLocalDataListener(FilmstripItemListener listener); 127 128 /** 129 * Updates the metadata in the background. The completion of the updating 130 * will be notified through 131 * {@link LocalFilmstripDataAdapter.FilmstripItemListener}. 132 * 133 * @param index The ID of the data to update the metadata for. 134 * @return An {@link android.os.AsyncTask} performing the background load 135 * that can be used to cancel the load if it's no longer needed. 136 */ 137 public AsyncTask updateMetadataAt(int index); 138 139 /** 140 * @return whether the metadata is already updated. 141 */ 142 public boolean isMetadataUpdatedAt(int index); 143 } 144