Merge "Revert "Make CameraDataAdapter background new data loading and post to listener"" into ub-camera-glacier
diff --git a/src/com/android/camera/CameraActivity.java b/src/com/android/camera/CameraActivity.java
index d05248a..5ead5c4 100644
--- a/src/com/android/camera/CameraActivity.java
+++ b/src/com/android/camera/CameraActivity.java
@@ -1462,7 +1462,7 @@
mPanoramaViewHelper = new PanoramaViewHelper(this);
mPanoramaViewHelper.onCreate();
// Set up the camera preview first so the preview shows up ASAP.
- mDataAdapter = new CameraDataAdapter(mAppContext, mMainHandler, R.color.photo_placeholder);
+ mDataAdapter = new CameraDataAdapter(mAppContext, R.color.photo_placeholder);
mDataAdapter.setLocalDataListener(mLocalDataListener);
mPreloader = new Preloader<Integer, AsyncTask>(FILMSTRIP_PRELOAD_AHEAD_ITEMS, mDataAdapter,
diff --git a/src/com/android/camera/data/CameraDataAdapter.java b/src/com/android/camera/data/CameraDataAdapter.java
index 19ae6f6..721b213 100644
--- a/src/com/android/camera/data/CameraDataAdapter.java
+++ b/src/com/android/camera/data/CameraDataAdapter.java
@@ -20,7 +20,6 @@
import android.content.Context;
import android.net.Uri;
import android.os.AsyncTask;
-import android.os.Handler;
import android.view.View;
import com.android.camera.Storage;
@@ -41,7 +40,6 @@
private static final int DEFAULT_DECODE_SIZE = 1600;
private final Context mContext;
- private final Handler mCallbackHandler;
private LocalDataList mImages;
@@ -55,9 +53,8 @@
private LocalData mLocalDataToDelete;
- public CameraDataAdapter(Context context, Handler callbackHandler, int placeholderResource) {
+ public CameraDataAdapter(Context context, int placeholderResource) {
mContext = context;
- mCallbackHandler = callbackHandler;
mImages = new LocalDataList();
mPlaceHolderResourceId = placeholderResource;
}
@@ -147,17 +144,10 @@
}
@Override
- public void setListener(final Listener listener) {
+ public void setListener(Listener listener) {
mListener = listener;
if (mImages.size() != 0) {
- mCallbackHandler.post(new Runnable() {
- @Override
- public void run() {
- if (listener != null) {
- listener.onDataLoaded();
- }
- }
- });
+ mListener.onDataLoaded();
}
}
@@ -170,8 +160,8 @@
}
@Override
- public void removeData(final int dataID) {
- final LocalData d = mImages.remove(dataID);
+ public void removeData(int dataID) {
+ LocalData d = mImages.remove(dataID);
if (d == null) {
return;
}
@@ -179,14 +169,7 @@
// Delete previously removed data first.
executeDeletion();
mLocalDataToDelete = d;
- mCallbackHandler.post(new Runnable() {
- @Override
- public void run() {
- if (mListener != null) {
- mListener.onDataRemoved(dataID, d);
- }
- }
- });
+ mListener.onDataRemoved(dataID, d);
}
@Override
@@ -248,19 +231,12 @@
return;
}
- final LocalData data = mImages.get(pos);
+ LocalData data = mImages.get(pos);
LocalData refreshedData = data.refresh(mContext);
// Refresh failed. Probably removed already.
- if (refreshedData == null) {
- mCallbackHandler.post(new Runnable() {
- @Override
- public void run() {
- if (mListener != null) {
- mListener.onDataRemoved(pos, data);
- }
- }
- });
+ if (refreshedData == null && mListener != null) {
+ mListener.onDataRemoved(pos, data);
return;
}
updateData(pos, refreshedData);
@@ -269,27 +245,22 @@
@Override
public void updateData(final int pos, LocalData data) {
mImages.set(pos, data);
- mCallbackHandler.post(new Runnable() {
- @Override
- public void run() {
- if (mListener != null) {
- mListener.onDataUpdated(new UpdateReporter() {
- @Override
- public boolean isDataRemoved(int dataID) {
- return false;
- }
-
- @Override
- public boolean isDataUpdated(int dataID) {
- return (dataID == pos);
- }
- });
+ if (mListener != null) {
+ mListener.onDataUpdated(new UpdateReporter() {
+ @Override
+ public boolean isDataRemoved(int dataID) {
+ return false;
}
- }
- });
+
+ @Override
+ public boolean isDataUpdated(int dataID) {
+ return (dataID == pos);
+ }
+ });
+ }
}
- private void insertData(final LocalData data) {
+ private void insertData(LocalData data) {
// Since this function is mostly for adding the newest data,
// a simple linear search should yield the best performance over a
// binary search.
@@ -300,15 +271,9 @@
;
}
mImages.add(pos, data);
- final int fpos = pos;
- mCallbackHandler.post(new Runnable() {
- @Override
- public void run() {
- if (mListener != null) {
- mListener.onDataInserted(fpos, data);
- }
- }
- });
+ if (mListener != null) {
+ mListener.onDataInserted(pos, data);
+ }
}
/** Update all the data */
@@ -317,14 +282,9 @@
return;
}
mImages = list;
- mCallbackHandler.post(new Runnable() {
- @Override
- public void run() {
- if (mListener != null) {
- mListener.onDataLoaded();
- }
- }
- });
+ if (mListener != null) {
+ mListener.onDataLoaded();
+ }
}
@Override
@@ -361,7 +321,7 @@
return getTotalNumber();
}
- private class LoadNewPhotosTask extends AsyncTask<ContentResolver, Void, Void> {
+ private class LoadNewPhotosTask extends AsyncTask<ContentResolver, Void, List<LocalData>> {
private final long mMinPhotoId;
@@ -372,29 +332,34 @@
/**
* Loads any new photos added to our storage directory since our last query.
* @param contentResolvers {@link android.content.ContentResolver} to load data.
+ * @return An {@link java.util.ArrayList} containing any new data.
*/
@Override
- protected Void doInBackground(ContentResolver... contentResolvers) {
+ protected List<LocalData> doInBackground(ContentResolver... contentResolvers) {
if (mMinPhotoId != LocalMediaData.QUERY_ALL_MEDIA_ID) {
final ContentResolver cr = contentResolvers[0];
- List<LocalData> newPhotoData = LocalMediaData.PhotoData.query(cr, LocalMediaData.PhotoData.CONTENT_URI,
+ return LocalMediaData.PhotoData.query(cr, LocalMediaData.PhotoData.CONTENT_URI,
mMinPhotoId);
- if (!newPhotoData.isEmpty()) {
- LocalData newestPhoto = newPhotoData.get(0);
- // We may overlap with another load task or a query task, in which case we want
- // to be sure we never decrement the oldest seen id.
- mLastPhotoId = Math.max(mLastPhotoId, newestPhoto.getContentId());
- }
- // We may add data that is already present, but if we do, it will be deduped in addData.
- // addData does not dedupe session items, so we ignore them here
- for (LocalData localData : newPhotoData) {
- Uri sessionUri = Storage.getSessionUriFromContentUri(localData.getUri());
- if (sessionUri == null) {
- addData(localData);
- }
+ }
+ return new ArrayList<LocalData>(0);
+ }
+
+ @Override
+ protected void onPostExecute(List<LocalData> newPhotoData) {
+ if (!newPhotoData.isEmpty()) {
+ LocalData newestPhoto = newPhotoData.get(0);
+ // We may overlap with another load task or a query task, in which case we want
+ // to be sure we never decrement the oldest seen id.
+ mLastPhotoId = Math.max(mLastPhotoId, newestPhoto.getContentId());
+ }
+ // We may add data that is already present, but if we do, it will be deduped in addData.
+ // addData does not dedupe session items, so we ignore them here
+ for (LocalData localData : newPhotoData) {
+ Uri sessionUri = Storage.getSessionUriFromContentUri(localData.getUri());
+ if (sessionUri == null) {
+ addData(localData);
}
}
- return null;
}
}