diff options
author | Angus Kong <shkong@google.com> | 2013-06-03 14:55:34 -0700 |
---|---|---|
committer | Angus Kong <shkong@google.com> | 2013-06-04 11:44:38 -0700 |
commit | b40738a104ac056b9a220c1aec71d2df7446108a (patch) | |
tree | 83a69efa534a80b0ca4a6993f296928a68c9e7f2 /src/com/android | |
parent | 7f555884b919d006e4da2ba06a57d9807be711bb (diff) | |
download | android_packages_apps_Snap-b40738a104ac056b9a220c1aec71d2df7446108a.tar.gz android_packages_apps_Snap-b40738a104ac056b9a220c1aec71d2df7446108a.tar.bz2 android_packages_apps_Snap-b40738a104ac056b9a220c1aec71d2df7446108a.zip |
Play video from flim strip.
Change-Id: Iaedf42d7dabee53f75a20c57f9e6916864ea271f
Diffstat (limited to 'src/com/android')
-rw-r--r-- | src/com/android/camera/NewCameraActivity.java | 1 | ||||
-rw-r--r-- | src/com/android/camera/Util.java | 15 | ||||
-rw-r--r-- | src/com/android/camera/data/CameraDataAdapter.java | 6 | ||||
-rw-r--r-- | src/com/android/camera/data/LocalData.java | 66 | ||||
-rw-r--r-- | src/com/android/camera/ui/FilmStripView.java | 1 |
5 files changed, 63 insertions, 26 deletions
diff --git a/src/com/android/camera/NewCameraActivity.java b/src/com/android/camera/NewCameraActivity.java index 3313edea3..3e6d50a7a 100644 --- a/src/com/android/camera/NewCameraActivity.java +++ b/src/com/android/camera/NewCameraActivity.java @@ -243,6 +243,7 @@ public class NewCameraActivity extends Activity mDataAdapter.flush(); ImageView v = (ImageView) getLayoutInflater().inflate( R.layout.secure_album_placeholder, null); + // Put a lock placeholder as the last image by setting its date to 0. mDataAdapter.addLocalData( new LocalData.LocalViewData( v, diff --git a/src/com/android/camera/Util.java b/src/com/android/camera/Util.java index ed42de85a..6c3b3640b 100644 --- a/src/com/android/camera/Util.java +++ b/src/com/android/camera/Util.java @@ -51,8 +51,10 @@ import android.view.View; import android.view.WindowManager; import android.view.animation.AlphaAnimation; import android.view.animation.Animation; +import android.widget.Toast; import com.android.gallery3d.R; +import com.android.gallery3d.app.MovieActivity; import com.android.gallery3d.common.ApiHelper; import java.io.Closeable; @@ -774,4 +776,17 @@ public class Util { return result; } } + + public static void playVideo(Context context, Uri uri, String title) { + try { + Intent intent = new Intent(Intent.ACTION_VIEW) + .setDataAndType(uri, "video/*") + .putExtra(Intent.EXTRA_TITLE, title) + .putExtra(MovieActivity.KEY_TREAT_UP_AS_BACK, true); + context.startActivity(intent); + } catch (ActivityNotFoundException e) { + Toast.makeText(context, context.getString(R.string.video_err), + Toast.LENGTH_SHORT).show(); + } + } } diff --git a/src/com/android/camera/data/CameraDataAdapter.java b/src/com/android/camera/data/CameraDataAdapter.java index 32b3afecc..445046182 100644 --- a/src/com/android/camera/data/CameraDataAdapter.java +++ b/src/com/android/camera/data/CameraDataAdapter.java @@ -23,8 +23,6 @@ import android.graphics.drawable.Drawable; import android.net.Uri; import android.os.AsyncTask; import android.provider.MediaStore; -import android.provider.MediaStore.Images; -import android.provider.MediaStore.Video; import android.util.Log; import android.view.View; @@ -266,7 +264,7 @@ public class CameraDataAdapter implements FilmStripView.DataAdapter { List<LocalData> l = new ArrayList<LocalData>(); // Photos Cursor c = resolver[0].query( - Images.Media.EXTERNAL_CONTENT_URI, + LocalData.Photo.CONTENT_URI, LocalData.Photo.QUERY_PROJECTION, MediaStore.Images.Media.DATA + " like ? ", CAMERA_PATH, LocalData.Photo.QUERY_ORDER); @@ -291,7 +289,7 @@ public class CameraDataAdapter implements FilmStripView.DataAdapter { } c = resolver[0].query( - Video.Media.EXTERNAL_CONTENT_URI, + LocalData.Video.CONTENT_URI, LocalData.Video.QUERY_PROJECTION, MediaStore.Video.Media.DATA + " like ? ", CAMERA_PATH, LocalData.Video.QUERY_ORDER); diff --git a/src/com/android/camera/data/LocalData.java b/src/com/android/camera/data/LocalData.java index 9ebc9caa3..704e8edc9 100644 --- a/src/com/android/camera/data/LocalData.java +++ b/src/com/android/camera/data/LocalData.java @@ -24,14 +24,21 @@ import android.graphics.Matrix; import android.graphics.drawable.BitmapDrawable; import android.graphics.drawable.Drawable; import android.media.MediaMetadataRetriever; +import android.net.Uri; import android.os.AsyncTask; +import android.provider.MediaStore; import android.provider.MediaStore.Images.ImageColumns; import android.provider.MediaStore.Video; import android.provider.MediaStore.Video.VideoColumns; import android.util.Log; +import android.view.Gravity; import android.view.View; +import android.view.View.OnClickListener; +import android.view.ViewGroup; +import android.widget.FrameLayout; import android.widget.ImageView; +import com.android.camera.Util; import com.android.camera.ui.FilmStripView; import com.android.gallery3d.R; @@ -125,9 +132,8 @@ public abstract interface LocalData extends FilmStripView.ImageData { return false; } - protected ImageView getImageView(Context c, + protected View fillViewBackground(Context c, View v, int decodeWidth, int decodeHeight, Drawable placeHolder) { - ImageView v = new ImageView(c); v.setBackground(placeHolder); BitmapLoadTask task = getBitmapLoadTask(v, decodeWidth, decodeHeight); @@ -138,7 +144,7 @@ public abstract interface LocalData extends FilmStripView.ImageData { @Override public View getView(Context c, int decodeWidth, int decodeHeight, Drawable placeHolder) { - return getImageView(c, decodeWidth, decodeHeight, placeHolder); + return fillViewBackground(c, new ImageView(c), decodeWidth, decodeHeight, placeHolder); } @Override @@ -165,16 +171,16 @@ public abstract interface LocalData extends FilmStripView.ImageData { public abstract int getType(); protected abstract BitmapLoadTask getBitmapLoadTask( - ImageView v, int decodeWidth, int decodeHeight); + View v, int decodeWidth, int decodeHeight); /* * An AsyncTask class that loads the bitmap in the background thread. * Sub-classes should implement their own "protected Bitmap doInBackground(Void... )" */ protected abstract class BitmapLoadTask extends AsyncTask<Void, Void, Bitmap> { - protected ImageView mView; + protected View mView; - protected BitmapLoadTask(ImageView v) { + protected BitmapLoadTask(View v) { mView = v; } @@ -186,7 +192,7 @@ public abstract interface LocalData extends FilmStripView.ImageData { return; } BitmapDrawable d = new BitmapDrawable(bitmap); - d.setGravity(android.view.Gravity.FILL); + d.setGravity(Gravity.FILL); mView.setBackground(d); } } @@ -203,6 +209,8 @@ public abstract interface LocalData extends FilmStripView.ImageData { public static final int COL_WIDTH = 7; public static final int COL_HEIGHT = 8; + static final Uri CONTENT_URI = MediaStore.Images.Media.EXTERNAL_CONTENT_URI; + static final String QUERY_ORDER = ImageColumns.DATE_TAKEN + " DESC, " + ImageColumns._ID + " DESC"; static final String[] QUERY_PROJECTION = { @@ -217,7 +225,7 @@ public abstract interface LocalData extends FilmStripView.ImageData { ImageColumns.HEIGHT, // 8, int }; - private static final int mSupportedAction = + private static final int mSupportedActions = FilmStripView.ImageData.ACTION_DEMOTE | FilmStripView.ImageData.ACTION_PROMOTE; @@ -277,12 +285,12 @@ public abstract interface LocalData extends FilmStripView.ImageData { @Override public boolean isActionSupported(int action) { - return ((action & mSupportedAction) != 0); + return ((action & mSupportedActions) != 0); } @Override protected BitmapLoadTask getBitmapLoadTask( - ImageView v, int decodeWidth, int decodeHeight) { + View v, int decodeWidth, int decodeHeight) { return new PhotoBitmapLoadTask(v, decodeWidth, decodeHeight); } @@ -300,7 +308,7 @@ public abstract interface LocalData extends FilmStripView.ImageData { private int mDecodeWidth; private int mDecodeHeight; - public PhotoBitmapLoadTask(ImageView v, int decodeWidth, int decodeHeight) { + public PhotoBitmapLoadTask(View v, int decodeWidth, int decodeHeight) { super(v); mDecodeWidth = decodeWidth; mDecodeHeight = decodeHeight; @@ -345,10 +353,11 @@ public abstract interface LocalData extends FilmStripView.ImageData { public static final int COL_WIDTH = 6; public static final int COL_HEIGHT = 7; + static final Uri CONTENT_URI = MediaStore.Video.Media.EXTERNAL_CONTENT_URI; + private static final int mSupportedActions = FilmStripView.ImageData.ACTION_DEMOTE - | FilmStripView.ImageData.ACTION_PROMOTE - | FilmStripView.ImageData.ACTION_PLAY; + | FilmStripView.ImageData.ACTION_PROMOTE; static final String QUERY_ORDER = VideoColumns.DATE_TAKEN + " DESC, " + VideoColumns._ID + " DESC"; @@ -364,6 +373,8 @@ public abstract interface LocalData extends FilmStripView.ImageData { VideoColumns.RESOLUTION }; + private Uri mPlayUri; + static Video buildFromCursor(Cursor c) { Video d = new Video(); d.id = c.getLong(COL_ID); @@ -374,6 +385,8 @@ public abstract interface LocalData extends FilmStripView.ImageData { d.path = c.getString(COL_DATA); d.width = c.getInt(COL_WIDTH); d.height = c.getInt(COL_HEIGHT); + d.mPlayUri = CONTENT_URI.buildUpon() + .appendPath(String.valueOf(d.id)).build(); MediaMetadataRetriever retriever = new MediaMetadataRetriever(); retriever.setDataSource(d.path); String rotation = retriever.extractMetadata( @@ -410,23 +423,35 @@ public abstract interface LocalData extends FilmStripView.ImageData { } @Override - public View getView(Context c, + public View getView(final Context c, int decodeWidth, int decodeHeight, Drawable placeHolder) { - ImageView v = getImageView(c, decodeWidth, decodeHeight, placeHolder); - v.setImageResource(R.drawable.ic_control_play); - v.setScaleType(ImageView.ScaleType.CENTER); - return v; + FrameLayout f = new FrameLayout(c); + fillViewBackground(c, f, decodeWidth, decodeHeight, placeHolder); + ImageView icon = new ImageView(c); + icon.setImageResource(R.drawable.ic_control_play); + icon.setScaleType(ImageView.ScaleType.CENTER); + icon.setLayoutParams(new FrameLayout.LayoutParams( + ViewGroup.LayoutParams.WRAP_CONTENT, + ViewGroup.LayoutParams.WRAP_CONTENT, Gravity.CENTER)); + icon.setOnClickListener(new OnClickListener() { + @Override + public void onClick(View v) { + Util.playVideo(c, mPlayUri, title); + } + }); + f.addView(icon); + return f; } @Override protected BitmapLoadTask getBitmapLoadTask( - ImageView v, int decodeWidth, int decodeHeight) { + View v, int decodeWidth, int decodeHeight) { return new VideoBitmapLoadTask(v); } private final class VideoBitmapLoadTask extends BitmapLoadTask { - public VideoBitmapLoadTask(ImageView v) { + public VideoBitmapLoadTask(View v) { super(v); } @@ -507,7 +532,6 @@ public abstract interface LocalData extends FilmStripView.ImageData { @Override public boolean isActionSupported(int action) { - if (action == FilmStripView.ImageData.ACTION_PLAY) return true; return false; } diff --git a/src/com/android/camera/ui/FilmStripView.java b/src/com/android/camera/ui/FilmStripView.java index 4d1d6e05d..3bc14c6c3 100644 --- a/src/com/android/camera/ui/FilmStripView.java +++ b/src/com/android/camera/ui/FilmStripView.java @@ -86,7 +86,6 @@ public class FilmStripView extends ViewGroup { public static final int ACTION_NONE = 0; public static final int ACTION_PROMOTE = 1; public static final int ACTION_DEMOTE = (1 << 1); - public static final int ACTION_PLAY = (1 << 2); // SIZE_FULL means disgard the width or height when deciding the view size // of this ImageData, just use full screen size. |