diff options
Diffstat (limited to 'src/com/android/gallery3d')
4 files changed, 46 insertions, 24 deletions
diff --git a/src/com/android/gallery3d/filtershow/FilterShowActivity.java b/src/com/android/gallery3d/filtershow/FilterShowActivity.java index 1cef27170..fbe09b999 100644 --- a/src/com/android/gallery3d/filtershow/FilterShowActivity.java +++ b/src/com/android/gallery3d/filtershow/FilterShowActivity.java @@ -31,6 +31,7 @@ import android.graphics.drawable.Drawable; import android.net.Uri; import android.os.AsyncTask; import android.os.Bundle; +import android.os.Handler; import android.support.v4.app.Fragment; import android.support.v4.app.FragmentActivity; import android.support.v4.app.FragmentTransaction; @@ -41,6 +42,7 @@ import android.view.Menu; import android.view.MenuItem; import android.view.View; import android.view.View.OnClickListener; +import android.view.ViewPropertyAnimator; import android.view.WindowManager; import android.widget.AdapterView; import android.widget.AdapterView.OnItemClickListener; @@ -209,7 +211,10 @@ public class FilterShowActivity extends FragmentActivity implements OnItemClickL View container = mainPanel.getView().findViewById(R.id.category_panel_container); View bottom = mainPanel.getView().findViewById(R.id.bottom_panel); int panelHeight = container.getHeight() + bottom.getHeight(); - mainPanel.getView().animate().translationY(panelHeight).withEndAction(showEditor).start(); + ViewPropertyAnimator anim = mainPanel.getView().animate(); + anim.translationY(panelHeight).start(); + final Handler handler = new Handler(); + handler.postDelayed(showEditor, anim.getDuration()); } else { showEditor.run(); } diff --git a/src/com/android/gallery3d/filtershow/crop/CropLoader.java b/src/com/android/gallery3d/filtershow/crop/CropLoader.java index fc461f5d0..53a9ebc14 100644 --- a/src/com/android/gallery3d/filtershow/crop/CropLoader.java +++ b/src/com/android/gallery3d/filtershow/crop/CropLoader.java @@ -30,6 +30,7 @@ import android.provider.MediaStore; import android.provider.MediaStore.Images; import android.provider.MediaStore.Images.ImageColumns; import android.util.Log; +import android.webkit.MimeTypeMap; import com.android.gallery3d.common.Utils; import com.android.gallery3d.exif.ExifInterface; @@ -64,39 +65,45 @@ public abstract class CropLoader { if (uri == null || context == null) { throw new IllegalArgumentException("bad argument to getScaledBitmap"); } - if (ContentResolver.SCHEME_FILE.equals(uri.getScheme())) { - String mimeType = context.getContentResolver().getType(uri); - if (mimeType != JPEG_MIME_TYPE) { - return 0; - } - String path = uri.getPath(); - int orientation = 0; - ExifInterface exif = new ExifInterface(); - try { - exif.readExif(path); - orientation = ExifInterface.getRotationForOrientationValue( - exif.getTagIntValue(ExifInterface.TAG_ORIENTATION).shortValue()); - } catch (IOException e) { - Log.w(LOGTAG, "Failed to read EXIF orientation", e); - } - return orientation; - } + + // First try to find orientation data in Gallery's ContentProvider. Cursor cursor = null; try { cursor = context.getContentResolver().query(uri, new String[] { MediaStore.Images.ImageColumns.ORIENTATION }, null, null, null); - if (cursor.moveToNext()) { + if (cursor != null && cursor.moveToNext()) { int ori = cursor.getInt(0); return (ori < 0) ? 0 : ori; } } catch (SQLiteException e) { - return 0; + // Do nothing } catch (IllegalArgumentException e) { - return 0; + // Do nothing } finally { Utils.closeSilently(cursor); } + + // Fall back to checking EXIF tags in file. + if (ContentResolver.SCHEME_FILE.equals(uri.getScheme())) { + String mimeType = getMimeType(uri); + if (!JPEG_MIME_TYPE.equals(mimeType)) { + return 0; + } + String path = uri.getPath(); + int orientation = 0; + ExifInterface exif = new ExifInterface(); + try { + exif.readExif(path); + Integer tagval = exif.getTagIntValue(ExifInterface.TAG_ORIENTATION); + if (tagval != null) { + orientation = ExifInterface.getRotationForOrientationValue(tagval.shortValue()); + } + } catch (IOException e) { + Log.w(LOGTAG, "Failed to read EXIF orientation", e); + } + return orientation; + } return 0; } @@ -252,6 +259,15 @@ public abstract class CropLoader { return dir[0]; } + private static String getMimeType(Uri src) { + String postfix = MimeTypeMap.getFileExtensionFromUrl(src.toString()); + String ret = null; + if (postfix != null) { + ret = MimeTypeMap.getSingleton().getMimeTypeFromExtension(postfix); + } + return ret; + } + public static Uri insertContent(Context context, Uri sourceUri, File file, String saveFileName, long time) { time /= 1000; diff --git a/src/com/android/gallery3d/filtershow/filters/FilterRepresentation.java b/src/com/android/gallery3d/filtershow/filters/FilterRepresentation.java index 701fabba7..c95a15a99 100644 --- a/src/com/android/gallery3d/filtershow/filters/FilterRepresentation.java +++ b/src/com/android/gallery3d/filtershow/filters/FilterRepresentation.java @@ -24,7 +24,7 @@ public class FilterRepresentation implements Cloneable { private static final boolean DEBUG = false; private String mName; private int mPriority = TYPE_NORMAL; - private Class mFilterClass; + private Class<?> mFilterClass; private boolean mSupportsPartialRendering = false; private int mTextId = 0; private int mEditorId = BasicEditor.ID; @@ -157,11 +157,11 @@ public class FilterRepresentation implements Cloneable { return false; } - public Class getFilterClass() { + public Class<?> getFilterClass() { return mFilterClass; } - public void setFilterClass(Class filterClass) { + public void setFilterClass(Class<?> filterClass) { mFilterClass = filterClass; } diff --git a/src/com/android/gallery3d/filtershow/state/StateView.java b/src/com/android/gallery3d/filtershow/state/StateView.java index 9353a430a..73d57846a 100644 --- a/src/com/android/gallery3d/filtershow/state/StateView.java +++ b/src/com/android/gallery3d/filtershow/state/StateView.java @@ -78,6 +78,7 @@ public class StateView extends View { mTextColor = res.getColor(R.color.filtershow_stateview_text); mSelectedBackgroundColor = res.getColor(R.color.filtershow_stateview_selected_background); mSelectedTextColor = res.getColor(R.color.filtershow_stateview_selected_text); + mTextSize = res.getDimensionPixelSize(R.dimen.state_panel_text_size); } public String getText() { |