OSDN Git Service

More logs for gallery crash error, remove a potential cause
authorBobby Georgescu <georgescu@google.com>
Sun, 30 Sep 2012 21:09:30 +0000 (14:09 -0700)
committerAndroid (Google) Code Review <android-gerrit@google.com>
Mon, 1 Oct 2012 18:17:54 +0000 (11:17 -0700)
Bug: 7216012
Made sure that FilterDeleteSet doesn't ever return stale
item counts, added extra logging in LocalMergeAlbum for
NoSuchElementException so that we can have more info to
diagnose this crash if it happens in the future.

Change-Id: Ic988522fda4a16bb483db6ad34bc7f81ee098b03

src/com/android/gallery3d/data/FilterDeleteSet.java
src/com/android/gallery3d/data/LocalMergeAlbum.java

index fc44d48..c76412f 100644 (file)
@@ -63,13 +63,11 @@ public class FilterDeleteSet extends MediaSet implements ContentListener {
 
     // Deletions currently in effect, ordered by index
     private ArrayList<Deletion> mCurrent = new ArrayList<Deletion>();
-    private int mMediaItemCount;
 
     public FilterDeleteSet(Path path, MediaSet baseSet) {
         super(path, INVALID_DATA_VERSION);
         mBaseSet = baseSet;
         mBaseSet.addContentListener(this);
-        mMediaItemCount = mBaseSet.getMediaItemCount() - mCurrent.size();
     }
 
     @Override
@@ -84,7 +82,7 @@ public class FilterDeleteSet extends MediaSet implements ContentListener {
 
     @Override
     public int getMediaItemCount() {
-        return mMediaItemCount;
+        return mBaseSet.getMediaItemCount() - mCurrent.size();
     }
 
     // Gets the MediaItems whose (post-deletion) index are in the range [start,
@@ -221,7 +219,6 @@ public class FilterDeleteSet extends MediaSet implements ContentListener {
             mCurrent = result;
         }
 
-        mMediaItemCount = mBaseSet.getMediaItemCount() - mCurrent.size();
         mDataVersion = nextVersionNumber();
         return mDataVersion;
     }
index cbb7492..14c1c6e 100644 (file)
@@ -24,6 +24,7 @@ import com.android.gallery3d.common.ApiHelper;
 import java.lang.ref.SoftReference;
 import java.util.ArrayList;
 import java.util.Comparator;
+import java.util.NoSuchElementException;
 import java.util.SortedMap;
 import java.util.TreeMap;
 
@@ -122,7 +123,17 @@ public class LocalMergeAlbum extends MediaSet implements ContentListener {
 
         // First find the nearest mark position <= start.
         SortedMap<Integer, int[]> head = mIndex.headMap(start + 1);
-        int markPos = head.lastKey();
+        int markPos;
+        try {
+            markPos = head.lastKey();
+        } catch (NoSuchElementException e) {
+            Log.e(TAG, "getMediaItem("+start+","+count+") failed");
+            Log.e(TAG, "mSources: ");
+            for (MediaSet set : mSources) {
+                Log.e(TAG, "\t"+set.getPath());
+            }
+            throw e;
+        }
         int[] subPos = head.get(markPos).clone();
         MediaItem[] slot = new MediaItem[mSources.length];