diff options
author | Doris Liu <tianliu@google.com> | 2012-12-07 12:41:39 -0800 |
---|---|---|
committer | Doris Liu <tianliu@google.com> | 2012-12-07 13:33:13 -0800 |
commit | e879326d76734277469ca2f387f436fd0e922c87 (patch) | |
tree | 98f668217eabcd0dab5a2e7b5595d81657e7331e | |
parent | 8cc3b55d615b349b4fcdff0eeeefe6907d4950ff (diff) | |
download | android_packages_apps_Gallery2-e879326d76734277469ca2f387f436fd0e922c87.tar.gz android_packages_apps_Gallery2-e879326d76734277469ca2f387f436fd0e922c87.tar.bz2 android_packages_apps_Gallery2-e879326d76734277469ca2f387f436fd0e922c87.zip |
Decode screenshots when they show 0x0 dimensions
Bug: 7470758
Change-Id: If4012899e120ad68cdc8ca12bf6f8de8c5c96019
-rw-r--r-- | res/values/strings.xml | 3 | ||||
-rw-r--r-- | src/com/android/gallery3d/ui/DetailsHelper.java | 12 | ||||
-rw-r--r-- | src/com/android/gallery3d/ui/DialogDetailsView.java | 46 |
3 files changed, 60 insertions, 1 deletions
diff --git a/res/values/strings.xml b/res/values/strings.xml index 82b6a1ca0..3eb909513 100644 --- a/res/values/strings.xml +++ b/res/values/strings.xml @@ -334,6 +334,9 @@ <!-- String indicating camera flash is not used. [CHAR LIMIT=14] --> <string name="flash_off">No flash</string> + <!-- String indicating image width or height is unknown. [CHAR LIMIT=14] --> + <string name="unknown">Unknown</string> + <!-- String for the empty not filtered image [CHAR LIMIT=10] --> <string name="ffx_original">Original</string> <!-- String for brown-colored old-fashion looking filter (filtershow_fx_0000_vintage) [CHAR LIMIT=10] --> diff --git a/src/com/android/gallery3d/ui/DetailsHelper.java b/src/com/android/gallery3d/ui/DetailsHelper.java index 301601156..47296f655 100644 --- a/src/com/android/gallery3d/ui/DetailsHelper.java +++ b/src/com/android/gallery3d/ui/DetailsHelper.java @@ -16,6 +16,8 @@ package com.android.gallery3d.ui; import android.content.Context; +import android.graphics.Bitmap; +import android.graphics.BitmapFactory; import android.view.View.MeasureSpec; import com.android.gallery3d.R; @@ -44,6 +46,10 @@ public class DetailsHelper { public void hide(); } + public interface ResolutionResolvingListener { + public void onResolutionAvailable(int width, int height); + } + public DetailsHelper(AbstractGalleryActivity activity, GLView rootPane, DetailsSource source) { mContainer = new DialogDetailsView(activity, source); } @@ -75,6 +81,12 @@ public class DetailsHelper { return sAddressResolver.resolveAddress(latlng, listener); } + public static void resolveResolution(String path, ResolutionResolvingListener listener) { + Bitmap bitmap = BitmapFactory.decodeFile(path); + if (bitmap == null) return; + listener.onResolutionAvailable(bitmap.getWidth(), bitmap.getHeight()); + } + public static void pause() { if (sAddressResolver != null) sAddressResolver.cancel(); } diff --git a/src/com/android/gallery3d/ui/DialogDetailsView.java b/src/com/android/gallery3d/ui/DialogDetailsView.java index 8d96b821a..058c03654 100644 --- a/src/com/android/gallery3d/ui/DialogDetailsView.java +++ b/src/com/android/gallery3d/ui/DialogDetailsView.java @@ -37,6 +37,7 @@ import com.android.gallery3d.ui.DetailsAddressResolver.AddressResolvingListener; import com.android.gallery3d.ui.DetailsHelper.CloseListener; import com.android.gallery3d.ui.DetailsHelper.DetailsSource; import com.android.gallery3d.ui.DetailsHelper.DetailsViewContainer; +import com.android.gallery3d.ui.DetailsHelper.ResolutionResolvingListener; import java.util.ArrayList; import java.util.Map.Entry; @@ -111,9 +112,13 @@ public class DialogDetailsView implements DetailsViewContainer { }); } - private class DetailsAdapter extends BaseAdapter implements AddressResolvingListener { + + private class DetailsAdapter extends BaseAdapter + implements AddressResolvingListener, ResolutionResolvingListener { private final ArrayList<String> mItems; private int mLocationIndex; + private int mWidthIndex = -1; + private int mHeightIndex = -1; public DetailsAdapter(MediaDetails details) { Context context = mActivity.getAndroidContext(); @@ -123,6 +128,8 @@ public class DialogDetailsView implements DetailsViewContainer { } private void setDetails(Context context, MediaDetails details) { + boolean resolutionIsValid = true; + String path = null; for (Entry<Integer, Object> detail : details) { String value; switch (detail.getKey()) { @@ -170,6 +177,26 @@ public class DialogDetailsView implements DetailsViewContainer { } break; } + case MediaDetails.INDEX_WIDTH: + mWidthIndex = mItems.size(); + value = detail.getValue().toString(); + if (value.equalsIgnoreCase("0")) { + value = context.getString(R.string.unknown); + resolutionIsValid = false; + } + break; + case MediaDetails.INDEX_HEIGHT: { + mHeightIndex = mItems.size(); + value = detail.getValue().toString(); + if (value.equalsIgnoreCase("0")) { + value = context.getString(R.string.unknown); + resolutionIsValid = false; + } + break; + } + case MediaDetails.INDEX_PATH: + // Get the path and then fall through to the default case + path = detail.getValue().toString(); default: { Object valueObj = detail.getValue(); // This shouldn't happen, log its key to help us diagnose the problem. @@ -189,6 +216,9 @@ public class DialogDetailsView implements DetailsViewContainer { context, key), value); } mItems.add(value); + if (!resolutionIsValid) { + DetailsHelper.resolveResolution(path, this); + } } } @@ -235,6 +265,20 @@ public class DialogDetailsView implements DetailsViewContainer { mItems.set(mLocationIndex, address); notifyDataSetChanged(); } + + @Override + public void onResolutionAvailable(int width, int height) { + if (width == 0 || height == 0) return; + // Update the resolution with the new width and height + Context context = mActivity.getAndroidContext(); + String widthString = String.format("%s: %d", DetailsHelper.getDetailsName( + context, MediaDetails.INDEX_WIDTH), width); + String heightString = String.format("%s: %d", DetailsHelper.getDetailsName( + context, MediaDetails.INDEX_HEIGHT), height); + mItems.set(mWidthIndex, String.valueOf(widthString)); + mItems.set(mHeightIndex, String.valueOf(heightString)); + notifyDataSetChanged(); + } } @Override |