summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAngus Kong <shkong@google.com>2013-05-31 16:30:32 -0700
committerAngus Kong <shkong@google.com>2013-05-31 17:01:24 -0700
commit885367cc5add241f6cb9ac243381400b497d630e (patch)
tree707b96d4eaf57ad25a9687c07328df6a24fcc121
parent5334fa3036425acf843072f32af72565b5547cf3 (diff)
downloadandroid_packages_apps_Snap-885367cc5add241f6cb9ac243381400b497d630e.tar.gz
android_packages_apps_Snap-885367cc5add241f6cb9ac243381400b497d630e.tar.bz2
android_packages_apps_Snap-885367cc5add241f6cb9ac243381400b497d630e.zip
Add newly taken photos/videos to film strip.
Change-Id: I82d9e83d0a45f14036a194cf1ad5793b436357cd
-rw-r--r--src/com/android/camera/NewCameraActivity.java18
-rw-r--r--src/com/android/camera/NewPhotoModule.java2
-rw-r--r--src/com/android/camera/NewVideoModule.java5
-rw-r--r--src/com/android/camera/data/CameraDataAdapter.java40
4 files changed, 61 insertions, 4 deletions
diff --git a/src/com/android/camera/NewCameraActivity.java b/src/com/android/camera/NewCameraActivity.java
index 9751e3d24..3aee15053 100644
--- a/src/com/android/camera/NewCameraActivity.java
+++ b/src/com/android/camera/NewCameraActivity.java
@@ -18,6 +18,7 @@ package com.android.camera;
import android.app.Activity;
import android.content.ComponentName;
+import android.content.ContentResolver;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
@@ -25,6 +26,7 @@ import android.content.ServiceConnection;
import android.content.pm.ActivityInfo;
import android.content.res.Configuration;
import android.graphics.drawable.ColorDrawable;
+import android.net.Uri;
import android.os.Bundle;
import android.os.IBinder;
import android.provider.Settings;
@@ -60,6 +62,7 @@ public class NewCameraActivity extends Activity
// panorama. If the extra is not set, it is in the normal camera mode.
public static final String SECURE_CAMERA_EXTRA = "secure_camera";
+ private static final String TAG = "CAM_Activity";
private CameraDataAdapter mDataAdapter;
private int mCurrentModuleIndex;
private NewCameraModule mCurrentModule;
@@ -106,6 +109,21 @@ public class NewCameraActivity extends Activity
return mMediaSaveService;
}
+ public void notifyNewMedia(Uri uri) {
+ ContentResolver cr = getContentResolver();
+ String mimeType = cr.getType(uri);
+ if (mimeType.startsWith("video/")) {
+ sendBroadcast(new Intent(Util.ACTION_NEW_VIDEO, uri));
+ mDataAdapter.addNewVideo(cr, uri);
+ } else if (mimeType.startsWith("image/")) {
+ Util.broadcastNewPicture(this, uri);
+ mDataAdapter.addNewPhoto(cr, uri);
+ } else {
+ android.util.Log.w(TAG, "Unknown new media with MIME type:"
+ + mimeType + ", uri:" + uri);
+ }
+ }
+
private void bindMediaSaveService() {
Intent intent = new Intent(this, MediaSaveService.class);
startService(intent); // start service before binding it so the
diff --git a/src/com/android/camera/NewPhotoModule.java b/src/com/android/camera/NewPhotoModule.java
index e5d922a5a..90803a825 100644
--- a/src/com/android/camera/NewPhotoModule.java
+++ b/src/com/android/camera/NewPhotoModule.java
@@ -256,7 +256,7 @@ public class NewPhotoModule
if (uri != null) {
// TODO: Commenting out the line below for now. need to get it working
// mActivity.addSecureAlbumItemIfNeeded(false, uri);
- Util.broadcastNewPicture(mActivity, uri);
+ mActivity.notifyNewMedia(uri);
}
}
};
diff --git a/src/com/android/camera/NewVideoModule.java b/src/com/android/camera/NewVideoModule.java
index 54e3373e6..69c3a87ff 100644
--- a/src/com/android/camera/NewVideoModule.java
+++ b/src/com/android/camera/NewVideoModule.java
@@ -198,7 +198,7 @@ public class NewVideoModule implements NewCameraModule,
@Override
public void onMediaSaved(Uri uri) {
if (uri != null) {
- Util.broadcastNewPicture(mActivity, uri);
+ mActivity.notifyNewMedia(uri);
}
}
};
@@ -1366,8 +1366,7 @@ public class NewVideoModule implements NewCameraModule,
mContentResolver.update(mCurrentVideoUri, mCurrentVideoValues
, null, null);
- mActivity.sendBroadcast(new Intent(Util.ACTION_NEW_VIDEO,
- mCurrentVideoUri));
+ mActivity.notifyNewMedia(mCurrentVideoUri);
} catch (Exception e) {
// We failed to insert into the database. This can happen if
// the SD card is unmounted.
diff --git a/src/com/android/camera/data/CameraDataAdapter.java b/src/com/android/camera/data/CameraDataAdapter.java
index 1e5f1a8f0..6e2ff101b 100644
--- a/src/com/android/camera/data/CameraDataAdapter.java
+++ b/src/com/android/camera/data/CameraDataAdapter.java
@@ -20,6 +20,7 @@ import android.content.ContentResolver;
import android.content.Context;
import android.database.Cursor;
import android.graphics.drawable.Drawable;
+import android.net.Uri;
import android.os.AsyncTask;
import android.provider.MediaStore;
import android.provider.MediaStore.Images;
@@ -33,6 +34,7 @@ import com.android.camera.ui.FilmStripView.ImageData;
import java.util.ArrayList;
import java.util.Collections;
+import java.util.Comparator;
import java.util.List;
/**
@@ -124,6 +126,44 @@ public class CameraDataAdapter implements FilmStripView.DataAdapter {
mListener.onDataRemoved(dataID, d);
}
+ private void insertData(LocalData data) {
+ if (mImages == null) {
+ mImages = new ArrayList<LocalData>();
+ }
+
+ // Since this function is mostly for adding the newest data,
+ // a simple linear search should yield the best performance over a
+ // binary search.
+ int pos = 0;
+ Comparator<LocalData> comp = new LocalData.NewestFirstComparator();
+ for (; pos < mImages.size()
+ && comp.compare(data, mImages.get(pos)) > 0; pos++);
+ mImages.add(pos, data);
+ if (mListener != null) {
+ mListener.onDataInserted(pos, data);
+ }
+ }
+
+ public void addNewVideo(ContentResolver cr, Uri uri) {
+ Cursor c = cr.query(uri,
+ LocalData.Video.QUERY_PROJECTION,
+ MediaStore.Images.Media.DATA + " like ? ", CAMERA_PATH,
+ LocalData.Video.QUERY_ORDER);
+ if (c != null && c.moveToFirst()) {
+ insertData(LocalData.Video.buildFromCursor(c));
+ }
+ }
+
+ public void addNewPhoto(ContentResolver cr, Uri uri) {
+ Cursor c = cr.query(uri,
+ LocalData.Photo.QUERY_PROJECTION,
+ MediaStore.Images.Media.DATA + " like ? ", CAMERA_PATH,
+ LocalData.Photo.QUERY_ORDER);
+ if (c != null && c.moveToFirst()) {
+ insertData(LocalData.Photo.buildFromCursor(c));
+ }
+ }
+
private LocalData buildCameraImageData(int width, int height) {
LocalData d = new CameraPreviewData(width, height);
return d;