package com.tid.examples.observer;
import java.util.HashSet;
import java.util.Set;
import android.content.Context;
import android.database.Cursor;
import android.net.Uri;
import android.provider.MediaStore;
import android.util.Log;
import android.widget.Toast;
/**
* Usaremos esta clase como un web service fake que simula el repositorio con los datos del servidor
* Contiene una lista de los ids de los elementos para cada provider (Image, Audio, Video)
*
*/
public class FakeWebService {
private static final String TAG = "FakeWebService";
private Context mContext;
private static Set<Long> mImageList;
private static Set<Long> mAudioList;
private static Set<Long> mVideoList;
public FakeWebService(Context context){
mContext = context;
mImageList = new HashSet<Long>();
mAudioList = new HashSet<Long>();
mVideoList = new HashSet<Long>();
//Al construir el objeto, rellenamos las listas con los valores existentes
init(MediaObserver.IMAGES_CONTENT_URI, mImageList);
init(MediaObserver.AUDIO_CONTENT_URI, mAudioList);
init(MediaObserver.VIDEOS_CONTENT_URI, mVideoList);
}
/**
* Recoge los valores de los ids de un provider y rellena la lista
*
* @param uri
* @param list
*/
private void init(Uri uri, Set<Long> list){
Cursor c = mContext.getContentResolver().query(uri,
MediaObserver.ID_PROJECTION, null, null, null);
if (c.moveToFirst()){
do {
long id = c.getLong(c.getColumnIndex(MediaStore.MediaColumns._ID));
list.add(id);
} while (c.moveToNext());
}
if (c != null)
c.close();
Log.i(TAG, "Leidos " + list.size() + " elementos en " + uri);
}
public int getImagesCount(){
return mImageList.size();
}
public int getAudioCount(){
return mAudioList.size();
}
public int getVideoCount(){
return mVideoList.size();
}
public Set<Long> getImageIds(){
return mImageList;
}
public Set<Long> getAudioIds(){
return mAudioList;
}
public Set<Long> getVideoIds(){
return mVideoList;
}
public void addImages(Set<Long> newElements){
printNew(newElements);
//Fake: aqui tendria que tomar mas informacion del provider y subirla al repositorio
mImageList.addAll(newElements);
}
public void addAudios(Set<Long> newElements){
printNew(newElements);
//Fake: aqui tendria que tomar mas informacion del provider y subirla al repositorio
mAudioList.addAll(newElements);
}
public void addVideos(Set<Long> newElements){
printNew(newElements);
//Fake: aqui tendria que tomar mas informacion del provider y subirla al repositorio
mVideoList.addAll(newElements);
}
public void deleteImages(Set<Long> deletedElements){
printDelete(deletedElements);
//Fake: aqui tendria que eliminar info del repositorio
mImageList.removeAll(deletedElements);
}
public void deleteAudios(Set<Long> deletedElements){
printDelete(deletedElements);
//Fake: aqui tendria que eliminar info del repositorio
mAudioList.removeAll(deletedElements);
}
public void deleteVideos(Set<Long> deletedElements){
printDelete(deletedElements);
//Fake: aqui tendria que eliminar info del repositorio
mVideoList.removeAll(deletedElements);
}
private void printNew(Set<Long> list){
if (!list.isEmpty()){
StringBuilder sb = new StringBuilder();
for (long id: list){
sb.append(id + ", ");
}
Toast.makeText(mContext, "Added: " + sb.toString(), Toast.LENGTH_SHORT).show();
}
}
private void printDelete(Set<Long> list){
if (!list.isEmpty()){
StringBuilder sb = new StringBuilder();
for (long id: list){
sb.append(id + ", ");
}
Toast.makeText(mContext, "Deleted: " + sb.toString(), Toast.LENGTH_SHORT).show();
}
}
}