/*
* Copyright (C) 2012 Simon Robinson
*
* This file is part of Com-Me.
*
* Com-Me is free software; you can redistribute it and/or modify it
* under the terms of the GNU Lesser General Public License as
* published by the Free Software Foundation; either version 3 of the
* License, or (at your option) any later version.
*
* Com-Me is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
* or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General
* Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with Com-Me.
* If not, see <http://www.gnu.org/licenses/>.
*/
package ac.robinson.mediatablet.provider;
import ac.robinson.mediatablet.MediaTablet;
import ac.robinson.util.BitmapUtilities.CacheTypeContainer;
import ac.robinson.util.ImageCacheUtilities;
import android.content.ContentResolver;
import android.content.res.Resources;
import android.database.Cursor;
import android.graphics.Bitmap;
import android.net.Uri;
public class MediaManager {
private static String[] mArguments1 = new String[1];
private static String mMediaInternalIdSelection;
static {
StringBuilder selection = new StringBuilder();
selection.append(MediaItem.INTERNAL_ID);
selection.append("=?");
mMediaInternalIdSelection = selection.toString();
}
public static void reloadMediaIcon(Resources resources, ContentResolver contentResolver, MediaItem media,
int visibility) {
// use the best type for photo/text/icon
CacheTypeContainer cacheTypeContainer = new CacheTypeContainer(MediaTablet.ICON_CACHE_TYPE);
Bitmap mediaIcon = media.loadIcon(resources, cacheTypeContainer, contentResolver,
visibility == MediaItem.MEDIA_PUBLIC ? media.getParentId() : null);
ImageCacheUtilities.addIconToCache(MediaTablet.DIRECTORY_THUMBS, media.getCacheId(visibility), mediaIcon,
cacheTypeContainer.type, MediaTablet.ICON_CACHE_QUALITY);
}
public static void reloadMediaIcon(Resources resources, ContentResolver contentResolver, String mediaId,
int visibility) {
reloadMediaIcon(resources, contentResolver, findMediaByInternalId(contentResolver, mediaId), visibility);
}
public static MediaItem addMedia(ContentResolver resolver, MediaItem media) {
return addMedia(null, resolver, media, false);
}
public static MediaItem addMedia(Resources resources, ContentResolver resolver, MediaItem media, boolean loadIcon) {
final Uri uri = resolver.insert(MediaItem.CONTENT_URI, media.getContentValues());
if (uri != null) {
if (loadIcon) {
reloadMediaIcon(resources, resolver, media, MediaItem.MEDIA_PRIVATE);
if (media.isPubliclyShared()) {
reloadMediaIcon(resources, resolver, media, MediaItem.MEDIA_PUBLIC);
}
}
return media;
}
return null;
}
/**
* Set deleted instead; do this onDestroy (but think carefully about deleting narrative components)
*/
@Deprecated
public static boolean deleteMedia(ContentResolver contentResolver, MediaItem media) {
final String[] arguments1 = mArguments1;
arguments1[0] = media.getInternalId();
int count = contentResolver.delete(MediaItem.CONTENT_URI, mMediaInternalIdSelection, arguments1);
// delete cached icons (public and private) and media file
return count > 0;
}
public static boolean updateMedia(ContentResolver contentResolver, MediaItem media) {
return updateMedia(null, contentResolver, media, false);
}
public static boolean updateMedia(Resources resources, ContentResolver contentResolver, MediaItem media,
boolean reloadIcon) {
if (reloadIcon) {
reloadMediaIcon(resources, contentResolver, media, MediaItem.MEDIA_PRIVATE);
if (media.isPubliclyShared()) {
reloadMediaIcon(resources, contentResolver, media, MediaItem.MEDIA_PUBLIC);
}
}
final String[] arguments1 = mArguments1;
arguments1[0] = media.getInternalId();
int count = contentResolver.update(MediaItem.CONTENT_URI, media.getContentValues(), mMediaInternalIdSelection,
arguments1);
return count == 1;
}
public static MediaItem findMediaByInternalId(ContentResolver contentResolver, String internalId) {
final String[] arguments1 = mArguments1;
arguments1[0] = internalId;
return findMedia(contentResolver, mMediaInternalIdSelection, arguments1);
}
private static MediaItem findMedia(ContentResolver contentResolver, String clause, String[] arguments) {
Cursor c = null;
try {
// could add sort order here, but we assume no duplicates...
c = contentResolver.query(MediaItem.CONTENT_URI, MediaItem.PROJECTION_ALL, clause, arguments, null);
if (c.getCount() > 0) {
if (c.moveToFirst()) {
final MediaItem media = MediaItem.fromCursor(c);
return media;
}
}
} finally {
if (c != null) {
c.close();
}
}
return null;
}
}