summaryrefslogtreecommitdiffstats
path: root/src/com/android/gallery3d/provider/GalleryProvider.java
diff options
context:
space:
mode:
Diffstat (limited to 'src/com/android/gallery3d/provider/GalleryProvider.java')
-rw-r--r--src/com/android/gallery3d/provider/GalleryProvider.java228
1 files changed, 0 insertions, 228 deletions
diff --git a/src/com/android/gallery3d/provider/GalleryProvider.java b/src/com/android/gallery3d/provider/GalleryProvider.java
deleted file mode 100644
index d6c7ccd4d..000000000
--- a/src/com/android/gallery3d/provider/GalleryProvider.java
+++ /dev/null
@@ -1,228 +0,0 @@
-/*
- * Copyright (C) 2009 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.gallery3d.provider;
-
-import android.content.ContentProvider;
-import android.content.ContentValues;
-import android.content.Context;
-import android.database.Cursor;
-import android.database.MatrixCursor;
-import android.net.Uri;
-import android.os.AsyncTask;
-import android.os.Binder;
-import android.os.ParcelFileDescriptor;
-import android.provider.MediaStore.Images.ImageColumns;
-import android.util.Log;
-
-import com.android.gallery3d.app.GalleryApp;
-import com.android.gallery3d.common.AsyncTaskUtil;
-import com.android.gallery3d.common.Utils;
-import com.android.gallery3d.data.DataManager;
-import com.android.gallery3d.data.MediaItem;
-import com.android.gallery3d.data.MediaObject;
-import com.android.gallery3d.data.Path;
-import com.android.gallery3d.picasasource.PicasaSource;
-import com.android.gallery3d.util.GalleryUtils;
-
-import java.io.FileNotFoundException;
-import java.io.IOException;
-
-public class GalleryProvider extends ContentProvider {
- private static final String TAG = "GalleryProvider";
-
- public static final String AUTHORITY = "com.android.gallery3d.provider";
- public static final Uri BASE_URI = Uri.parse("content://" + AUTHORITY);
-
- public static interface PicasaColumns {
- public static final String USER_ACCOUNT = "user_account";
- public static final String PICASA_ID = "picasa_id";
- }
-
- private static final String[] SUPPORTED_PICASA_COLUMNS = {
- PicasaColumns.USER_ACCOUNT,
- PicasaColumns.PICASA_ID,
- ImageColumns.DISPLAY_NAME,
- ImageColumns.SIZE,
- ImageColumns.MIME_TYPE,
- ImageColumns.DATE_TAKEN,
- ImageColumns.LATITUDE,
- ImageColumns.LONGITUDE,
- ImageColumns.ORIENTATION};
-
- private DataManager mDataManager;
- private static Uri sBaseUri;
-
- public static String getAuthority(Context context) {
- return context.getPackageName() + ".provider";
- }
-
- public static Uri getUriFor(Context context, Path path) {
- if (sBaseUri == null) {
- sBaseUri = Uri.parse("content://" + context.getPackageName() + ".provider");
- }
- return sBaseUri.buildUpon()
- .appendEncodedPath(path.toString().substring(1)) // ignore the leading '/'
- .build();
- }
-
- @Override
- public int delete(Uri uri, String selection, String[] selectionArgs) {
- throw new UnsupportedOperationException();
- }
-
- // TODO: consider concurrent access
- @Override
- public String getType(Uri uri) {
- long token = Binder.clearCallingIdentity();
- try {
- Path path = Path.fromString(uri.getPath());
- MediaItem item = (MediaItem) mDataManager.getMediaObject(path);
- return item != null ? item.getMimeType() : null;
- } finally {
- Binder.restoreCallingIdentity(token);
- }
- }
-
- @Override
- public Uri insert(Uri uri, ContentValues values) {
- throw new UnsupportedOperationException();
- }
-
- @Override
- public boolean onCreate() {
- GalleryApp app = (GalleryApp) getContext().getApplicationContext();
- mDataManager = app.getDataManager();
- return true;
- }
-
- // TODO: consider concurrent access
- @Override
- public Cursor query(Uri uri, String[] projection,
- String selection, String[] selectionArgs, String sortOrder) {
- long token = Binder.clearCallingIdentity();
- try {
- Path path = Path.fromString(uri.getPath());
- MediaObject object = mDataManager.getMediaObject(path);
- if (object == null) {
- Log.w(TAG, "cannot find: " + uri);
- return null;
- }
- if (PicasaSource.isPicasaImage(object)) {
- return queryPicasaItem(object,
- projection, selection, selectionArgs, sortOrder);
- } else {
- return null;
- }
- } finally {
- Binder.restoreCallingIdentity(token);
- }
- }
-
- private Cursor queryPicasaItem(MediaObject image, String[] projection,
- String selection, String[] selectionArgs, String sortOrder) {
- if (projection == null) projection = SUPPORTED_PICASA_COLUMNS;
- Object[] columnValues = new Object[projection.length];
- double latitude = PicasaSource.getLatitude(image);
- double longitude = PicasaSource.getLongitude(image);
- boolean isValidLatlong = GalleryUtils.isValidLocation(latitude, longitude);
-
- for (int i = 0, n = projection.length; i < n; ++i) {
- String column = projection[i];
- if (PicasaColumns.USER_ACCOUNT.equals(column)) {
- columnValues[i] = PicasaSource.getUserAccount(getContext(), image);
- } else if (PicasaColumns.PICASA_ID.equals(column)) {
- columnValues[i] = PicasaSource.getPicasaId(image);
- } else if (ImageColumns.DISPLAY_NAME.equals(column)) {
- columnValues[i] = PicasaSource.getImageTitle(image);
- } else if (ImageColumns.SIZE.equals(column)){
- columnValues[i] = PicasaSource.getImageSize(image);
- } else if (ImageColumns.MIME_TYPE.equals(column)) {
- columnValues[i] = PicasaSource.getContentType(image);
- } else if (ImageColumns.DATE_TAKEN.equals(column)) {
- columnValues[i] = PicasaSource.getDateTaken(image);
- } else if (ImageColumns.LATITUDE.equals(column)) {
- columnValues[i] = isValidLatlong ? latitude : null;
- } else if (ImageColumns.LONGITUDE.equals(column)) {
- columnValues[i] = isValidLatlong ? longitude : null;
- } else if (ImageColumns.ORIENTATION.equals(column)) {
- columnValues[i] = PicasaSource.getRotation(image);
- } else {
- Log.w(TAG, "unsupported column: " + column);
- }
- }
- MatrixCursor cursor = new MatrixCursor(projection);
- cursor.addRow(columnValues);
- return cursor;
- }
-
- @Override
- public ParcelFileDescriptor openFile(Uri uri, String mode)
- throws FileNotFoundException {
- long token = Binder.clearCallingIdentity();
- try {
- if (mode.contains("w")) {
- throw new FileNotFoundException("cannot open file for write");
- }
- Path path = Path.fromString(uri.getPath());
- MediaObject object = mDataManager.getMediaObject(path);
- if (object == null) {
- throw new FileNotFoundException(uri.toString());
- }
- if (PicasaSource.isPicasaImage(object)) {
- return PicasaSource.openFile(getContext(), object, mode);
- } else {
- throw new FileNotFoundException("unspported type: " + object);
- }
- } finally {
- Binder.restoreCallingIdentity(token);
- }
- }
-
- @Override
- public int update(Uri uri, ContentValues values, String selection, String[] selectionArgs) {
- throw new UnsupportedOperationException();
- }
-
- private static interface PipeDataWriter<T> {
- void writeDataToPipe(ParcelFileDescriptor output, T args);
- }
-
- // Modified from ContentProvider.openPipeHelper. We are target at API LEVEL 10.
- // But openPipeHelper is available in API LEVEL 11.
- private static <T> ParcelFileDescriptor openPipeHelper(
- final T args, final PipeDataWriter<T> func) throws FileNotFoundException {
- try {
- final ParcelFileDescriptor[] pipe = ParcelFileDescriptor.createPipe();
- AsyncTask<Object, Object, Object> task = new AsyncTask<Object, Object, Object>() {
- @Override
- protected Object doInBackground(Object... params) {
- try {
- func.writeDataToPipe(pipe[1], args);
- return null;
- } finally {
- Utils.closeSilently(pipe[1]);
- }
- }
- };
- AsyncTaskUtil.executeInParallel(task, (Object[]) null);
- return pipe[0];
- } catch (IOException e) {
- throw new FileNotFoundException("failure making pipe");
- }
- }
-
-}