/* * Created by Angel Leon (@gubatron), Alden Torres (aldenml) * Copyright (c) 2011, 2012, FrostWire(TM). All rights reserved. * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This program 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 General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see <http://www.gnu.org/licenses/>. */ package com.bt.download.android.core.providers; import android.database.Cursor; import android.net.Uri; import android.provider.MediaStore; import android.provider.MediaStore.Audio.AudioColumns; import android.provider.MediaStore.Images.ImageColumns; import android.provider.MediaStore.Video.VideoColumns; import com.bt.download.android.core.Constants; import com.bt.download.android.core.FileDescriptor; import com.bt.download.android.core.providers.UniversalStore.Applications.ApplicationsColumns; import com.bt.download.android.core.providers.UniversalStore.Documents.DocumentsColumns; /** * Help yourself with TableFetchers. * * Note: if you need to fetch files by file path(s) see Librarian.instance().getFiles(filepath,exactMatch) * * @author gubatron * @author aldenml * */ public final class TableFetchers { public final static TableFetcher AUDIO_TABLE_FETCHER = new AudioTableFetcher(); public final static TableFetcher PICTURES_TABLE_FETCHER = new PicturesTableFetcher(); public final static TableFetcher VIDEOS_TABLE_FETCHER = new VideosTableFetcher(); public final static TableFetcher DOCUMENTS_TABLE_FETCHER = new DocumentsTableFetcher(); public final static TableFetcher APPLICATIONS_TABLE_FETCHER = new ApplicationsTableFetcher(); public final static TableFetcher RINGTONES_TABLE_FETCHER = new RingtonesTableFetcher(); /** * Default Table Fetcher for Audio Files. * */ public final static class AudioTableFetcher implements TableFetcher { private int idCol; private int pathCol; private int mimeCol; private int artistCol; private int titleCol; private int albumCol; private int yearCol; private int sizeCol; private int dateAddedCol; private int dateModifiedCol; private int albumIdCol; public String[] getColumns() { return new String[] { AudioColumns._ID, AudioColumns.ARTIST, AudioColumns.TITLE, AudioColumns.ALBUM, AudioColumns.DATA, AudioColumns.YEAR, AudioColumns.MIME_TYPE, AudioColumns.SIZE, AudioColumns.DATE_ADDED, AudioColumns.DATE_MODIFIED, AudioColumns.ALBUM_ID }; } public String getSortByExpression() { return AudioColumns.DATE_ADDED + " DESC"; } public Uri getContentUri() { return MediaStore.Audio.Media.EXTERNAL_CONTENT_URI; } public void prepare(Cursor cur) { idCol = cur.getColumnIndex(AudioColumns._ID); pathCol = cur.getColumnIndex(AudioColumns.DATA); mimeCol = cur.getColumnIndex(AudioColumns.MIME_TYPE); artistCol = cur.getColumnIndex(AudioColumns.ARTIST); titleCol = cur.getColumnIndex(AudioColumns.TITLE); albumCol = cur.getColumnIndex(AudioColumns.ALBUM); yearCol = cur.getColumnIndex(AudioColumns.YEAR); sizeCol = cur.getColumnIndex(AudioColumns.SIZE); dateAddedCol = cur.getColumnIndex(AudioColumns.DATE_ADDED); dateModifiedCol = cur.getColumnIndex(AudioColumns.DATE_MODIFIED); albumIdCol = cur.getColumnIndex(AudioColumns.ALBUM_ID); } public FileDescriptor fetch(Cursor cur) { int id = cur.getInt(idCol); String path = cur.getString(pathCol); String mime = cur.getString(mimeCol); String artist = cur.getString(artistCol); String title = cur.getString(titleCol); String album = cur.getString(albumCol); String year = cur.getString(yearCol); int size = cur.getInt(sizeCol); long dateAdded = cur.getLong(dateAddedCol); long dateModified = cur.getLong(dateModifiedCol); long albumId = cur.getLong(albumIdCol); FileDescriptor fd = new FileDescriptor(Integer.valueOf(id), artist, title, album, year, path, Constants.FILE_TYPE_AUDIO, mime, size, dateAdded, dateModified, true); fd.albumId = albumId; return fd; } public byte getFileType() { return Constants.FILE_TYPE_AUDIO; } } public static class PicturesTableFetcher implements TableFetcher { private int idCol; private int titleCol; private int pathCol; private int mimeCol; private int sizeCol; private int dateAddedCol; private int dateModifiedCol; public FileDescriptor fetch(Cursor cur) { int id = cur.getInt(idCol); String path = cur.getString(pathCol); String mime = cur.getString(mimeCol); String title = cur.getString(titleCol); int size = cur.getInt(sizeCol); long dateAdded = cur.getLong(dateAddedCol); long dateModified = cur.getLong(dateModifiedCol); return new FileDescriptor(Integer.valueOf(id), null, title, null, null, path, Constants.FILE_TYPE_PICTURES, mime, size, dateAdded, dateModified, true); } public String[] getColumns() { return new String[] { ImageColumns._ID, ImageColumns.TITLE, ImageColumns.DATA, ImageColumns.MIME_TYPE, ImageColumns.MINI_THUMB_MAGIC, ImageColumns.SIZE , ImageColumns.DATE_ADDED, ImageColumns.DATE_MODIFIED }; } public Uri getContentUri() { return MediaStore.Images.Media.EXTERNAL_CONTENT_URI; } public byte getFileType() { return Constants.FILE_TYPE_PICTURES; } public String getSortByExpression() { return ImageColumns.DATE_ADDED + " DESC"; } public void prepare(Cursor cur) { idCol = cur.getColumnIndex(ImageColumns._ID); titleCol = cur.getColumnIndex(ImageColumns.TITLE); pathCol = cur.getColumnIndex(ImageColumns.DATA); mimeCol = cur.getColumnIndex(ImageColumns.MIME_TYPE); sizeCol = cur.getColumnIndex(ImageColumns.SIZE); dateAddedCol = cur.getColumnIndex(ImageColumns.DATE_ADDED); dateModifiedCol = cur.getColumnIndex(ImageColumns.DATE_MODIFIED); } } public static final class VideosTableFetcher implements TableFetcher { private int idCol; private int pathCol; private int mimeCol; private int artistCol; private int titleCol; private int albumCol; private int sizeCol; private int dateAddedCol; private int dateModifiedCol; public FileDescriptor fetch(Cursor cur) { int id = cur.getInt(idCol); String path = cur.getString(pathCol); String mime = cur.getString(mimeCol); String artist = cur.getString(artistCol); String title = cur.getString(titleCol); String album = cur.getString(albumCol); int size = cur.getInt(sizeCol); long dateAdded = cur.getLong(dateAddedCol); long dateModified = cur.getLong(dateModifiedCol); return new FileDescriptor(id, artist, title, album, null, path, Constants.FILE_TYPE_VIDEOS, mime, size, dateAdded, dateModified, true); } public String[] getColumns() { return new String[] { VideoColumns._ID, VideoColumns.ARTIST, VideoColumns.TITLE, VideoColumns.ALBUM, VideoColumns.DATA, VideoColumns.MIME_TYPE, VideoColumns.MINI_THUMB_MAGIC, VideoColumns.SIZE, VideoColumns.DATE_ADDED, VideoColumns.DATE_MODIFIED }; } public Uri getContentUri() { return MediaStore.Video.Media.EXTERNAL_CONTENT_URI; } public byte getFileType() { return Constants.FILE_TYPE_VIDEOS; } public String getSortByExpression() { return VideoColumns.DATE_ADDED + " DESC"; } public void prepare(Cursor cur) { idCol = cur.getColumnIndex(VideoColumns._ID); pathCol = cur.getColumnIndex(VideoColumns.DATA); mimeCol = cur.getColumnIndex(VideoColumns.MIME_TYPE); artistCol = cur.getColumnIndex(VideoColumns.ARTIST); titleCol = cur.getColumnIndex(VideoColumns.TITLE); albumCol = cur.getColumnIndex(VideoColumns.ALBUM); sizeCol = cur.getColumnIndex(VideoColumns.SIZE); dateAddedCol = cur.getColumnIndex(VideoColumns.DATE_ADDED); dateModifiedCol = cur.getColumnIndex(VideoColumns.DATE_MODIFIED); } } public static final class DocumentsTableFetcher implements TableFetcher { private int idCol; private int pathCol; private int mimeCol; private int titleCol; private int sizeCol; private int dateAddedCol; private int dateModifiedCol; public FileDescriptor fetch(Cursor cur) { int id = cur.getInt(idCol); String path = cur.getString(pathCol); String mime = cur.getString(mimeCol); String title = cur.getString(titleCol); int size = cur.getInt(sizeCol); long dateAdded = cur.getLong(dateAddedCol); long dateModified = cur.getLong(dateModifiedCol); return new FileDescriptor(Integer.valueOf(id), null, title, null, null, path, Constants.FILE_TYPE_DOCUMENTS, mime, size, dateAdded, dateModified, true); } public String[] getColumns() { return new String[] { DocumentsColumns._ID, DocumentsColumns.DATA, DocumentsColumns.SIZE, DocumentsColumns.TITLE, DocumentsColumns.MIME_TYPE, DocumentsColumns.DATE_ADDED, DocumentsColumns.DATE_MODIFIED }; } public Uri getContentUri() { return UniversalStore.Documents.Media.CONTENT_URI; } public byte getFileType() { return Constants.FILE_TYPE_DOCUMENTS; } public String getSortByExpression() { return DocumentsColumns.DATE_ADDED + " DESC"; } public void prepare(Cursor cur) { idCol = cur.getColumnIndex(DocumentsColumns._ID); pathCol = cur.getColumnIndex(DocumentsColumns.DATA); mimeCol = cur.getColumnIndex(DocumentsColumns.MIME_TYPE); titleCol = cur.getColumnIndex(DocumentsColumns.TITLE); sizeCol = cur.getColumnIndex(DocumentsColumns.SIZE); dateAddedCol = cur.getColumnIndex(DocumentsColumns.DATE_ADDED); dateModifiedCol = cur.getColumnIndex(DocumentsColumns.DATE_MODIFIED); } } public static final class ApplicationsTableFetcher implements TableFetcher { private int idCol; private int titleCol; private int verCol; private int pathCol; private int sizeCol; private int packageNameCol; private int dateAddedCol; private int dateModifiedCol; public FileDescriptor fetch(Cursor cur) { int id = Integer.valueOf(cur.getString(idCol)); String ver = cur.getString(verCol); String title = cur.getString(titleCol); String packageName = cur.getString(packageNameCol); String path = cur.getString(pathCol); int size = Integer.valueOf(cur.getString(sizeCol)); long dateAdded = cur.getLong(dateAddedCol); long dateModified = cur.getLong(dateModifiedCol); return new FileDescriptor(id, ver, title, packageName, null, path, Constants.FILE_TYPE_APPLICATIONS, Constants.MIME_TYPE_ANDROID_PACKAGE_ARCHIVE, size, dateAdded, dateModified, true); } public String[] getColumns() { return new String[] { ApplicationsColumns._ID, ApplicationsColumns.TITLE, ApplicationsColumns.VERSION, ApplicationsColumns.DATA, ApplicationsColumns.SIZE, ApplicationsColumns.PACKAGE_NAME , ApplicationsColumns.DATE_ADDED, ApplicationsColumns.DATE_MODIFIED }; } public Uri getContentUri() { return UniversalStore.Applications.Media.CONTENT_URI; } public byte getFileType() { return Constants.FILE_TYPE_APPLICATIONS; } public String getSortByExpression() { return ""; } public void prepare(Cursor cur) { idCol = cur.getColumnIndex(ApplicationsColumns._ID); titleCol = cur.getColumnIndex(ApplicationsColumns.TITLE); verCol = cur.getColumnIndex(ApplicationsColumns.VERSION); pathCol = cur.getColumnIndex(ApplicationsColumns.DATA); sizeCol = cur.getColumnIndex(ApplicationsColumns.SIZE); packageNameCol = cur.getColumnIndex(ApplicationsColumns.PACKAGE_NAME); dateAddedCol = cur.getColumnIndex(ApplicationsColumns.DATE_ADDED); dateModifiedCol = cur.getColumnIndex(ApplicationsColumns.DATE_MODIFIED); } } public static final class RingtonesTableFetcher implements TableFetcher { private int idCol; private int pathCol; private int mimeCol; private int artistCol; private int titleCol; private int albumCol; private int yearCol; private int sizeCol; private int dateAddedCol; private int dateModifiedCol; public FileDescriptor fetch(Cursor cur) { int id = cur.getInt(idCol); String path = cur.getString(pathCol); String mime = cur.getString(mimeCol); String artist = cur.getString(artistCol); String title = cur.getString(titleCol); String album = cur.getString(albumCol); String year = cur.getString(yearCol); int size = cur.getInt(sizeCol); long dateAdded = cur.getLong(dateAddedCol); long dateModified = cur.getLong(dateModifiedCol); return new FileDescriptor(Integer.valueOf(id), artist, title, album, year, path, Constants.FILE_TYPE_RINGTONES, mime, size, dateAdded, dateModified, true); } public String[] getColumns() { return new String[] { AudioColumns._ID, AudioColumns.ARTIST, AudioColumns.TITLE, AudioColumns.ALBUM, AudioColumns.DATA, AudioColumns.YEAR, AudioColumns.MIME_TYPE, AudioColumns.SIZE, AudioColumns.DATE_ADDED, AudioColumns.DATE_MODIFIED }; } public Uri getContentUri() { return MediaStore.Audio.Media.INTERNAL_CONTENT_URI; } public byte getFileType() { return Constants.FILE_TYPE_RINGTONES; } public String getSortByExpression() { return AudioColumns.DATE_ADDED + " DESC"; } public void prepare(Cursor cur) { idCol = cur.getColumnIndex(AudioColumns._ID); pathCol = cur.getColumnIndex(AudioColumns.DATA); mimeCol = cur.getColumnIndex(AudioColumns.MIME_TYPE); artistCol = cur.getColumnIndex(AudioColumns.ARTIST); titleCol = cur.getColumnIndex(AudioColumns.TITLE); albumCol = cur.getColumnIndex(AudioColumns.ALBUM); yearCol = cur.getColumnIndex(AudioColumns.YEAR); sizeCol = cur.getColumnIndex(AudioColumns.SIZE); dateAddedCol = cur.getColumnIndex(AudioColumns.DATE_ADDED); dateModifiedCol = cur.getColumnIndex(AudioColumns.DATE_MODIFIED); } } public static TableFetcher getFetcher(byte fileType) { switch (fileType) { case Constants.FILE_TYPE_AUDIO: return AUDIO_TABLE_FETCHER; case Constants.FILE_TYPE_PICTURES: return PICTURES_TABLE_FETCHER; case Constants.FILE_TYPE_VIDEOS: return VIDEOS_TABLE_FETCHER; case Constants.FILE_TYPE_DOCUMENTS: return DOCUMENTS_TABLE_FETCHER; case Constants.FILE_TYPE_APPLICATIONS: return APPLICATIONS_TABLE_FETCHER; case Constants.FILE_TYPE_RINGTONES: return RINGTONES_TABLE_FETCHER; default: return null; } } public static TableFetcher getFetcher(Uri uri) { String str = uri.toString(); if (str.startsWith(AUDIO_TABLE_FETCHER.getContentUri().toString())) { return AUDIO_TABLE_FETCHER; } else if (str.startsWith(PICTURES_TABLE_FETCHER.getContentUri().toString())) { return PICTURES_TABLE_FETCHER; } else if (str.startsWith(VIDEOS_TABLE_FETCHER.getContentUri().toString())) { return VIDEOS_TABLE_FETCHER; } else if (str.startsWith(DOCUMENTS_TABLE_FETCHER.getContentUri().toString())) { return DOCUMENTS_TABLE_FETCHER; } else if (str.startsWith(APPLICATIONS_TABLE_FETCHER.getContentUri().toString())) { return APPLICATIONS_TABLE_FETCHER; } else if (str.startsWith(RINGTONES_TABLE_FETCHER.getContentUri().toString())) { return RINGTONES_TABLE_FETCHER; } else { return DOCUMENTS_TABLE_FETCHER; } } }