summaryrefslogtreecommitdiffstats
path: root/src/com/android/gallery3d/ui
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
commit4e2406e2e2ba5f4dd4b5d4e75f5b9b07a64ba77f (patch)
treeed77456341719af0a7ee38a59d113fc6d49b08ab /src/com/android/gallery3d/ui
parente623dcde5ea8c572602fcbb470c439600e74b610 (diff)
downloadandroid_packages_apps_Snap-4e2406e2e2ba5f4dd4b5d4e75f5b9b07a64ba77f.tar.gz
android_packages_apps_Snap-4e2406e2e2ba5f4dd4b5d4e75f5b9b07a64ba77f.tar.bz2
android_packages_apps_Snap-4e2406e2e2ba5f4dd4b5d4e75f5b9b07a64ba77f.zip
Decode screenshots when they show 0x0 dimensions
Bug: 7470758 Change-Id: If4012899e120ad68cdc8ca12bf6f8de8c5c96019
Diffstat (limited to 'src/com/android/gallery3d/ui')
-rw-r--r--src/com/android/gallery3d/ui/DetailsHelper.java12
-rw-r--r--src/com/android/gallery3d/ui/DialogDetailsView.java46
2 files changed, 57 insertions, 1 deletions
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