summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDoris Liu <tianliu@google.com>2012-12-07 12:41:39 -0800
committerDoris Liu <tianliu@google.com>2012-12-07 13:33:13 -0800
commite879326d76734277469ca2f387f436fd0e922c87 (patch)
tree98f668217eabcd0dab5a2e7b5595d81657e7331e
parent8cc3b55d615b349b4fcdff0eeeefe6907d4950ff (diff)
downloadandroid_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.xml3
-rw-r--r--src/com/android/gallery3d/ui/DetailsHelper.java12
-rw-r--r--src/com/android/gallery3d/ui/DialogDetailsView.java46
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