summaryrefslogtreecommitdiffstats
path: root/src/com/android/messaging/datamodel/media/FileImageRequest.java
diff options
context:
space:
mode:
Diffstat (limited to 'src/com/android/messaging/datamodel/media/FileImageRequest.java')
-rw-r--r--src/com/android/messaging/datamodel/media/FileImageRequest.java108
1 files changed, 0 insertions, 108 deletions
diff --git a/src/com/android/messaging/datamodel/media/FileImageRequest.java b/src/com/android/messaging/datamodel/media/FileImageRequest.java
deleted file mode 100644
index 31c053a..0000000
--- a/src/com/android/messaging/datamodel/media/FileImageRequest.java
+++ /dev/null
@@ -1,108 +0,0 @@
-/*
- * Copyright (C) 2015 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.messaging.datamodel.media;
-
-import android.content.Context;
-import android.graphics.Bitmap;
-import android.graphics.BitmapFactory;
-import android.media.ExifInterface;
-
-import com.android.messaging.datamodel.media.PoolableImageCache.ReusableImageResourcePool;
-import com.android.messaging.util.ImageUtils;
-import com.android.messaging.util.LogUtil;
-
-import java.io.IOException;
-
-/**
- * Serves file system based image requests. Since file paths can be expressed in Uri form, this
- * extends regular UriImageRequest but performs additional optimizations such as loading thumbnails
- * directly from Exif information.
- */
-public class FileImageRequest extends UriImageRequest {
- private final String mPath;
- private final boolean mCanUseThumbnail;
-
- public FileImageRequest(final Context context,
- final FileImageRequestDescriptor descriptor) {
- super(context, descriptor);
- mPath = descriptor.path;
- mCanUseThumbnail = descriptor.canUseThumbnail;
- }
-
- @Override
- protected Bitmap loadBitmapInternal()
- throws IOException {
- // Before using the FileInputStream, check if the Exif has a thumbnail that we can use.
- if (mCanUseThumbnail) {
- byte[] thumbnail = null;
- try {
- final ExifInterface exif = new ExifInterface(mPath);
- if (exif.hasThumbnail()) {
- thumbnail = exif.getThumbnail();
- }
- } catch (final IOException e) {
- // Nothing to do
- }
-
- if (thumbnail != null) {
- final BitmapFactory.Options options = PoolableImageCache.getBitmapOptionsForPool(
- false /* scaled */, 0 /* inputDensity */, 0 /* targetDensity */);
- // First, check dimensions of the bitmap.
- options.inJustDecodeBounds = true;
- BitmapFactory.decodeByteArray(thumbnail, 0, thumbnail.length, options);
-
- // Calculate inSampleSize
- options.inSampleSize = ImageUtils.get().calculateInSampleSize(options,
- mDescriptor.desiredWidth, mDescriptor.desiredHeight);
-
- options.inJustDecodeBounds = false;
-
- // Actually decode the bitmap, optionally using the bitmap pool.
- try {
- // Get the orientation. We should be able to get the orientation from
- // the thumbnail itself but at least on some phones, the thumbnail
- // doesn't have an orientation tag. So use the outer image's orientation
- // tag and hope for the best.
- mOrientation = ImageUtils.getOrientation(getInputStreamForResource());
- if (com.android.messaging.util.exif.ExifInterface.
- getOrientationParams(mOrientation).invertDimensions) {
- mDescriptor.updateSourceDimensions(options.outHeight, options.outWidth);
- } else {
- mDescriptor.updateSourceDimensions(options.outWidth, options.outHeight);
- }
- final ReusableImageResourcePool bitmapPool = getBitmapPool();
- if (bitmapPool == null) {
- return BitmapFactory.decodeByteArray(thumbnail, 0, thumbnail.length,
- options);
- } else {
- final int sampledWidth = options.outWidth / options.inSampleSize;
- final int sampledHeight = options.outHeight / options.inSampleSize;
- return bitmapPool.decodeByteArray(thumbnail, options, sampledWidth,
- sampledHeight);
- }
- } catch (IOException ex) {
- // If the thumbnail is broken due to IOException, this will
- // fall back to default bitmap loading.
- LogUtil.e(LogUtil.BUGLE_IMAGE_TAG, "FileImageRequest: failed to load " +
- "thumbnail from Exif", ex);
- }
- }
- }
-
- // Fall back to default InputStream-based loading if no thumbnails could be retrieved.
- return super.loadBitmapInternal();
- }
-}