package com.cooliris.cache;
import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.IOException;
import java.net.URISyntaxException;
import java.nio.ByteBuffer;
import java.nio.LongBuffer;
import java.text.DateFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.Locale;
import java.util.concurrent.atomic.AtomicReference;
import android.app.IntentService;
import android.content.ContentResolver;
import android.content.ContentValues;
import android.content.Context;
import android.content.Intent;
import android.database.Cursor;
import android.database.MergeCursor;
import android.graphics.Bitmap;
import android.graphics.Canvas;
import android.graphics.Paint;
import android.graphics.Rect;
import android.media.ExifInterface;
import android.net.Uri;
import android.os.Environment;
import android.os.Process;
import android.os.SystemClock;
import android.provider.MediaStore;
import android.provider.MediaStore.Images;
import android.provider.MediaStore.Video;
import android.util.Log;
import com.cooliris.media.DataSource;
import com.cooliris.media.DiskCache;
import com.cooliris.media.Gallery;
import com.cooliris.media.LocalDataSource;
import com.cooliris.media.LongSparseArray;
import com.cooliris.media.MediaFeed;
import com.cooliris.media.MediaItem;
import com.cooliris.media.MediaSet;
import com.cooliris.media.R;
import com.cooliris.media.Shared;
import com.cooliris.media.SortCursor;
import com.cooliris.media.UriTexture;
import com.cooliris.media.Utils;
public final class CacheService extends IntentService {
public static final String ACTION_CACHE = "com.cooliris.cache.action.CACHE";
public static final DiskCache sAlbumCache = new DiskCache("local-album-cache");
public static final DiskCache sMetaAlbumCache = new DiskCache("local-meta-cache");
public static final DiskCache sSkipThumbnailIds = new DiskCache("local-skip-cache");
private static final String TAG = "CacheService";
private static ImageList sList = null;
// Wait 2 seconds to start the thumbnailer so that the application can load
// without any overheads.
private static final int THUMBNAILER_WAIT_IN_MS = 2000;
private static final int DEFAULT_THUMBNAIL_WIDTH = 128;
private static final int DEFAULT_THUMBNAIL_HEIGHT = 96;
public static final String DEFAULT_IMAGE_SORT_ORDER = Images.ImageColumns.DATE_TAKEN + " ASC";
public static final String DEFAULT_VIDEO_SORT_ORDER = Video.VideoColumns.DATE_TAKEN + " ASC";
public static final String DEFAULT_BUCKET_SORT_ORDER = "upper(" + Images.ImageColumns.BUCKET_DISPLAY_NAME + ") ASC";
// Must preserve order between these indices and the order of the terms in
// BUCKET_PROJECTION_IMAGES, BUCKET_PROJECTION_VIDEOS.
// Not using SortedHashMap for efficieny reasons.
public static final int BUCKET_ID_INDEX = 0;
public static final int BUCKET_NAME_INDEX = 1;
public static final String[] BUCKET_PROJECTION_IMAGES = new String[] { Images.ImageColumns.BUCKET_ID,
Images.ImageColumns.BUCKET_DISPLAY_NAME };
public static final String[] BUCKET_PROJECTION_VIDEOS = new String[] { Video.VideoColumns.BUCKET_ID,
Video.VideoColumns.BUCKET_DISPLAY_NAME };
// Must preserve order between these indices and the order of the terms in
// THUMBNAIL_PROJECTION.
public static final int THUMBNAIL_ID_INDEX = 0;
public static final int THUMBNAIL_DATE_MODIFIED_INDEX = 1;
public static final int THUMBNAIL_DATA_INDEX = 2;
public static final int THUMBNAIL_ORIENTATION_INDEX = 2;
public static final String[] THUMBNAIL_PROJECTION = new String[] { Images.ImageColumns._ID, Images.ImageColumns.DATE_MODIFIED,
Images.ImageColumns.DATA, Images.ImageColumns.ORIENTATION };
public static final String[] SENSE_PROJECTION = new String[] { Images.ImageColumns.BUCKET_ID,
"MAX(" + Images.ImageColumns.DATE_ADDED + "), COUNT(*)" };
// Must preserve order between these indices and the order of the terms in
// INITIAL_PROJECTION_IMAGES and
// INITIAL_PROJECTION_VIDEOS.
public static final int MEDIA_ID_INDEX = 0;
public static final int MEDIA_CAPTION_INDEX = 1;
public static final int MEDIA_MIME_TYPE_INDEX = 2;
public static final int MEDIA_LATITUDE_INDEX = 3;
public static final int MEDIA_LONGITUDE_INDEX = 4;
public static final int MEDIA_DATE_TAKEN_INDEX = 5;
public static final int MEDIA_DATE_ADDED_INDEX = 6;
public static final int MEDIA_DATE_MODIFIED_INDEX = 7;
public static final int MEDIA_DATA_INDEX = 8;
public static final int MEDIA_ORIENTATION_OR_DURATION_INDEX = 9;
public static final int MEDIA_BUCKET_ID_INDEX = 10;
public static final String[] PROJECTION_IMAGES = new String[] { Images.ImageColumns._ID, Images.ImageColumns.TITLE,
Images.ImageColumns.MIME_TYPE, Images.ImageColumns.LATITUDE, Images.ImageColumns.LONGITUDE,
Images.ImageColumns.DATE_TAKEN, Images.ImageColumns.DATE_ADDED, Images.ImageColumns.DATE_MODIFIED,
Images.ImageColumns.DATA, Images.ImageColumns.ORIENTATION, Images.ImageColumns.BUCKET_ID };
private static final String[] PROJECTION_VIDEOS = new String[] { Video.VideoColumns._ID, Video.VideoColumns.TITLE,
Video.VideoColumns.MIME_TYPE, Video.VideoColumns.LATITUDE, Video.VideoColumns.LONGITUDE, Video.VideoColumns.DATE_TAKEN,
Video.VideoColumns.DATE_ADDED, Video.VideoColumns.DATE_MODIFIED, Video.VideoColumns.DATA, Video.VideoColumns.DURATION,
Video.VideoColumns.BUCKET_ID };
public static final String BASE_CONTENT_STRING_IMAGES = (Images.Media.EXTERNAL_CONTENT_URI).toString() + "/";
public static final String BASE_CONTENT_STRING_VIDEOS = (Video.Media.EXTERNAL_CONTENT_URI).toString() + "/";
private static final AtomicReference<Thread> CACHE_THREAD = new AtomicReference<Thread>();
private static final AtomicReference<Thread> THUMBNAIL_THREAD = new AtomicReference<Thread>();
// Special indices in the Albumcache.
private static final int ALBUM_CACHE_METADATA_INDEX = -1;
private static final int ALBUM_CACHE_DIRTY_INDEX = -2;
private static final int ALBUM_CACHE_INCOMPLETE_INDEX = -3;
private static final int ALBUM_CACHE_DIRTY_BUCKET_INDEX = -4;
private static final int ALBUM_CACHE_LOCALE_INDEX = -5;
private static final DateFormat mDateFormat = new SimpleDateFormat("yyyy:MM:dd HH:mm:ss");
private static final DateFormat mAltDateFormat = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss");
private static final byte[] sDummyData = new byte[] { 1 };
private static boolean QUEUE_DIRTY_SET;
private static boolean QUEUE_DIRTY_ALL;
private static boolean QUEUE_DIRTY_SENSE;
public interface Observer {
void onChange(long[] bucketIds);
}
public static final String getCachePath(final String subFolderName) {
return Environment.getExternalStorageDirectory() + "/Android/data/com.cooliris.media/cache/" + subFolderName;
}
public static final void startCache(final Context context, final boolean checkthumbnails) {
final Locale locale = getLocaleForAlbumCache();
final Locale defaultLocale = Locale.getDefault();
if (locale == null || !locale.equals(defaultLocale)) {
sAlbumCache.deleteAll();
putLocaleForAlbumCache(defaultLocale);
}
final Intent intent = new Intent(ACTION_CACHE, null, context, CacheService.class);
intent.putExtra("checkthumbnails", checkthumbnails);
context.startService(intent);
}
public static final boolean isCacheReady(final boolean onlyMediaSets) {
if (onlyMediaSets) {
return (sAlbumCache.get(ALBUM_CACHE_METADATA_INDEX, 0) != null && sAlbumCac
没有合适的资源?快使用搜索试试~ 我知道了~
资源推荐
资源详情
资源评论
收起资源包目录
android 系统相册源码 (669个子文件)
resources.ap_ 461KB
Gallery.apk 686KB
jarlist.cache 119B
GridLayer.class 37KB
CacheService.class 36KB
RenderView.class 24KB
HudLayer.class 21KB
GridDrawManager.class 19KB
GridInputProcessor.class 19KB
MediaFeed.class 17KB
TimeBar.class 15KB
PicasaContentProvider.class 15KB
Gallery.class 14KB
CropImage.class 14KB
EntrySchema.class 13KB
ReverseGeocoder.class 12KB
SingleDataSource.class 12KB
UriTexture.class 11KB
LocalDataSource.class 11KB
PicasaDataSource.class 11KB
MenuBar.class 10KB
PicasaApi.class 10KB
HighlightView.class 9KB
DiskCache.class 9KB
PopupMenu.class 9KB
GridQuad.class 9KB
ImageViewTouchBase.class 8KB
MovieViewControl.class 8KB
GDataClient.class 8KB
GridCameraManager.class 8KB
Util.class 8KB
ImageManager.class 8KB
GridCamera.class 8KB
TableContentProvider.class 7KB
PicasaService.class 7KB
StringTexture.class 7KB
MediaItemTexture.class 7KB
MediaClustering.class 7KB
DisplayItem.class 7KB
PathBarLayer.class 7KB
Slideshow.class 7KB
CropImageView.class 7KB
DetailMode.class 6KB
SortCursor.class 6KB
MediaBucketList.class 6KB
MediaSet.class 6KB
Photographs.class 6KB
Wallpaper.class 6KB
GridQuadFrame.class 6KB
BackgroundLayer.class 5KB
LongSparseArray.class 5KB
PhotoAppWidgetProvider$PhotoDatabaseHelper.class 5KB
GridDrawables.class 5KB
MatrixStack.class 5KB
GDataParser.class 5KB
CropImage$1.class 5KB
PhotoEntry.class 5KB
DisplayList.class 5KB
AdaptiveBackgroundTexture.class 5KB
Utils.class 5KB
R$drawable.class 5KB
GridQuadMesh.class 4KB
DisplaySlot.class 4KB
CanvasTexture.class 4KB
BitmapManager.class 4KB
ScaleGestureDetector.class 4KB
Gallery$1.class 4KB
ImageButton.class 4KB
MediaItem.class 4KB
LoadingLayer.class 4KB
MediaClustering$Cluster.class 4KB
IconTitleDrawable.class 4KB
AlbumEntry.class 4KB
PopupMenu$PopupTexture.class 3KB
PicasaContentProvider$1.class 3KB
CrossFadingTexture.class 3KB
ImageManager$AddImageCancelable.class 3KB
CanvasLayer.class 3KB
BootReceiver.class 3KB
SimpleStringTexture.class 3KB
MenuBar$Menu$Builder.class 3KB
PhotoAppWidgetConfigure.class 3KB
BaseCancelable.class 3KB
Deque.class 3KB
PicasaContentProvider$2.class 3KB
ConcatenatedDataSource.class 3KB
PicasaSyncAdapter.class 3KB
LongSparseArray$ArrayUtils.class 3KB
MediaFeed$1.class 3KB
R$string.class 3KB
MenuBar$Menu.class 3KB
ArrayUtils.class 3KB
PhotoAppWidgetProvider.class 3KB
HudLayer$19.class 3KB
HudLayer$14.class 3KB
PicasaContentProvider$SyncContext.class 3KB
PhotoAppWidgetBind.class 2KB
Layer.class 2KB
PathBarLayer$Component.class 2KB
LocationMediaFilter.class 2KB
共 669 条
- 1
- 2
- 3
- 4
- 5
- 6
- 7
资源评论
li5282912
- 粉丝: 0
- 资源: 2
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- C语言基础-C语言编程基础之Leetcode编程题解之第39题组合总和.zip
- C语言基础-C语言编程基础之Leetcode编程题解之第38题外观数列.zip
- C语言基础-C语言编程基础之Leetcode编程题解之第37题解数独.zip
- C语言基础-C语言编程基础之Leetcode编程题解之第36题有效的数独.zip
- C语言基础-C语言编程基础之Leetcode编程题解之第35题搜索插入位置.zip
- index.wxml
- C语言基础-C语言编程基础之Leetcode编程题解之第33题搜索旋转排序数组.zip
- 基于Python实现的手写数字识别系统源码.zip
- 从网页提取禁止转载的文字
- C语言基础-C语言编程基础之Leetcode编程题解之第32题最长有效括号.zip
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功