blob: d433a264600e3ceddae538bfb5fbaa8be7af2d6d [file] [log] [blame]
/*
* Copyright (C) 2013 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.android.camera.data;
import android.net.Uri;
import android.os.AsyncTask;
import com.android.camera.filmstrip.FilmstripDataAdapter;
import com.android.camera.util.Callback;
import com.android.camera.widget.Preloader;
import java.util.List;
/**
* An interface which extends {@link com.android.camera.filmstrip.FilmstripDataAdapter}
* and defines operations on the data in the local camera folder.
*/
public interface LocalFilmstripDataAdapter extends FilmstripDataAdapter,
Preloader.ItemLoader<Integer, AsyncTask>, Preloader.ItemSource<Integer> {
public interface FilmstripItemListener {
/**
* Metadata of a {@link FilmstripItem} is loaded on
* demand. Once the metadata is loaded this listener is notified.
*
* @param indexes The indexes of the data whose metadata has been
* updated.
*/
public void onMetadataUpdated(List<Integer> indexes);
}
/**
* Request for loading any photos that may have been added to the
* media store since the last update.
*/
public void requestLoadNewPhotos();
/**
* Request for loading the local data.
*/
public void requestLoad(Callback<Void> onDone);
/**
* Returns the specified {@link FilmstripItem}.
*
* @param index The ID of the {@link FilmstripItem} to get.
* @return The {@link FilmstripItem} to get. {@code null} if not available.
*/
public FilmstripItem getItemAt(int index);
/**
* Remove the data in the local camera folder.
*
* @param index of data to be deleted.
*/
public void removeAt(int index);
/**
* Adds new local data. The data is either inserted or updated, depending
* on the existence of the Uri.
*
* @param item The new data.
* @return Whether the data is newly inserted.
*/
public boolean addOrUpdate(FilmstripItem item);
/**
* Refresh the data by {@link Uri}.
*
* @param uri The {@link Uri} of the data to refresh.
*/
public void refresh(Uri uri);
/**
* Finds the {@link FilmstripItem} of the specified content Uri.
*
* @param uri The content Uri of the {@link FilmstripItem}.
* @return The index of the data. {@code -1} if not found.
*/
public int findByContentUri(Uri uri);
/**
* Clears all the data currently loaded.
*/
public void clear();
/**
* Executes the deletion task. Delete the data waiting in the deletion
* queue.
*
* @return Whether the task has been executed
*/
public boolean executeDeletion();
/**
* Undo a deletion. If there is any data waiting to be deleted in the queue,
* move it out of the deletion queue.
*
* @return Whether there are items in the queue.
*/
public boolean undoDeletion();
/**
* Update the data in a specific position.
*
* @param index The position of the data to be updated.
* @param item The new data.
*/
public void updateItemAt(int index, FilmstripItem item);
/** Sets the listener for the LocalData change. */
public void setLocalDataListener(FilmstripItemListener listener);
/**
* Updates the metadata in the background. The completion of the updating
* will be notified through
* {@link LocalFilmstripDataAdapter.FilmstripItemListener}.
*
* @param index The ID of the data to update the metadata for.
* @return An {@link android.os.AsyncTask} performing the background load
* that can be used to cancel the load if it's no longer needed.
*/
public AsyncTask updateMetadataAt(int index);
/**
* @return whether the metadata is already updated.
*/
public boolean isMetadataUpdatedAt(int index);
}