@Override public void verifyResult() throws Exception { MediaSet sub = mAlbumSet.getSubMediaSet(1); // "second" assertEquals(2, mAlbumSet.getSubMediaSetCount()); OnContentDirtyLatch latch = new OnContentDirtyLatch(); sub.addContentListener(latch); assertTrue((sub.getSupportedOperations() & MediaSet.SUPPORT_DELETE) != 0); sub.delete(); mAlbumSet.fakeChange(); latch.isOnContentDirtyBeCalled(DEFAULT_TIMEOUT); mAlbumSet.reload(); assertEquals(1, mAlbumSet.getSubMediaSetCount()); }
@Override public long reload() { if (mClusterAlbumSet.reload() > mDataVersion) { mDataVersion = nextVersionNumber(); } return mDataVersion; }
public FilterTypeSet(Path path, DataManager dataManager, MediaSet baseSet, int mediaType) { super(path, INVALID_DATA_VERSION); mDataManager = dataManager; mBaseSet = baseSet; mMediaType = mediaType; mBaseSet.addContentListener(this); }
@Override public long reload() { if (mBaseSet.reload() > mDataVersion) { updateData(); mDataVersion = nextVersionNumber(); } return mDataVersion; }
@Override public void verifyResult() { assertEquals(0, mAlbumSet.getMediaItemCount()); assertEquals(1, mAlbumSet.getSubMediaSetCount()); assertEquals(1, mAlbumSet.getTotalMediaItemCount()); MediaSet sub = mAlbumSet.getSubMediaSet(0); assertEquals(1, sub.getMediaItemCount()); assertEquals(0, sub.getSubMediaSetCount()); LocalMediaItem item = (LocalMediaItem) sub.getMediaItem(0, 1).get(0); assertEquals(1, item.id); assertEquals("VID_20100811_051413", item.caption); assertEquals("video/mp4", item.mimeType); assertEquals(11.0, item.latitude); assertEquals(22.0, item.longitude); assertEquals(0xD000, item.dateTakenInMs); assertEquals(1281503663L, item.dateAddedInSec); assertEquals(1281503662L, item.dateModifiedInSec); assertEquals("/mnt/sdcard/DCIM/Camera/VID_20100811_051413.3gp", item.filePath); }
@Override public void verifyResult() { assertEquals(0, mAlbumSet.getMediaItemCount()); assertEquals(1, mAlbumSet.getSubMediaSetCount()); assertEquals(1, mAlbumSet.getTotalMediaItemCount()); MediaSet sub = mAlbumSet.getSubMediaSet(0); assertEquals(1, sub.getMediaItemCount()); assertEquals(0, sub.getSubMediaSetCount()); LocalMediaItem item = (LocalMediaItem) sub.getMediaItem(0, 1).get(0); assertEquals(1, item.id); assertEquals("IMG_0072", item.caption); assertEquals("image/jpeg", item.mimeType); assertEquals(12.0, item.latitude); assertEquals(34.0, item.longitude); assertEquals(0xD000, item.dateTakenInMs); assertEquals(1280395646L, item.dateAddedInSec); assertEquals(1275934796L, item.dateModifiedInSec); assertEquals("/mnt/sdcard/DCIM/100CANON/IMG_0072.JPG", item.filePath); }
@Override public void verifyResult() { MediaSet sub = mAlbumSet.getSubMediaSet(0); LocalMediaItem item = (LocalMediaItem) sub.getMediaItem(0, 1).get(0); assertEquals(1, sub.getMediaItemCount()); assertTrue((sub.getSupportedOperations() & MediaSet.SUPPORT_DELETE) != 0); sub.delete(); sub.reload(); assertEquals(0, sub.getMediaItemCount()); }
private void updateData() { // Albums mAlbums.clear(); String basePath = "/filter/mediatype/" + mMediaType; for (int i = 0, n = mBaseSet.getSubMediaSetCount(); i < n; i++) { MediaSet set = mBaseSet.getSubMediaSet(i); String filteredPath = basePath + "/{" + set.getPath().toString() + "}"; MediaSet filteredSet = mDataManager.getMediaSet(filteredPath); filteredSet.reload(); if (filteredSet.getMediaItemCount() > 0 || filteredSet.getSubMediaSetCount() > 0) { mAlbums.add(filteredSet); } } // Items mPaths.clear(); final int total = mBaseSet.getMediaItemCount(); final Path[] buf = new Path[total]; mBaseSet.enumerateMediaItems( new MediaSet.ItemConsumer() { public void consume(int index, MediaItem item) { if (item.getMediaType() == mMediaType) { if (index < 0 || index >= total) return; Path path = item.getPath(); buf[index] = path; } } }); for (int i = 0; i < total; i++) { if (buf[i] != null) { mPaths.add(buf[i]); } } }
@Override public void run(MediaSet baseSet) { final TreeMap<String, ArrayList<Path>> map = new TreeMap<String, ArrayList<Path>>(); final ArrayList<Path> untagged = new ArrayList<Path>(); baseSet.enumerateTotalMediaItems( new MediaSet.ItemConsumer() { public void consume(int index, MediaItem item) { Path path = item.getPath(); String[] tags = item.getTags(); if (tags == null || tags.length == 0) { untagged.add(path); return; } for (int j = 0; j < tags.length; j++) { String key = tags[j]; ArrayList<Path> list = map.get(key); if (list == null) { list = new ArrayList<Path>(); map.put(key, list); } list.add(path); } } }); int m = map.size(); mClusters = new ArrayList<ArrayList<Path>>(); mNames = new String[m + ((untagged.size() > 0) ? 1 : 0)]; int i = 0; for (Map.Entry<String, ArrayList<Path>> entry : map.entrySet()) { mNames[i++] = entry.getKey(); mClusters.add(entry.getValue()); } if (untagged.size() > 0) { mNames[i++] = mUntaggedString; mClusters.add(untagged); } }
@Override public void verifyResult() { assertEquals(0, mAlbumSet.getMediaItemCount()); assertEquals(2, mAlbumSet.getSubMediaSetCount()); assertEquals(3, mAlbumSet.getTotalMediaItemCount()); MediaSet first = mAlbumSet.getSubMediaSet(0); assertEquals(1, first.getMediaItemCount()); LocalMediaItem item = (LocalMediaItem) first.getMediaItem(0, 1).get(0); assertEquals(3, item.id); assertEquals(3000L, item.dateTakenInMs); MediaSet second = mAlbumSet.getSubMediaSet(1); assertEquals(2, second.getMediaItemCount()); item = (LocalMediaItem) second.getMediaItem(0, 1).get(0); assertEquals(2, item.id); assertEquals(2000L, item.dateTakenInMs); item = (LocalMediaItem) second.getMediaItem(1, 1).get(0); assertEquals(1, item.id); assertEquals(1000L, item.dateTakenInMs); }
@Override public void run(MediaSet baseSet) { final int total = baseSet.getTotalMediaItemCount(); final SmallItem[] buf = new SmallItem[total]; // Separate items to two sets: with or without lat-long. final double[] latLong = new double[2]; baseSet.enumerateTotalMediaItems( new MediaSet.ItemConsumer() { public void consume(int index, MediaItem item) { if (index < 0 || index >= total) return; SmallItem s = new SmallItem(); s.path = item.getPath(); item.getLatLong(latLong); s.lat = latLong[0]; s.lng = latLong[1]; buf[index] = s; } }); final ArrayList<SmallItem> withLatLong = new ArrayList<SmallItem>(); final ArrayList<SmallItem> withoutLatLong = new ArrayList<SmallItem>(); final ArrayList<Point> points = new ArrayList<Point>(); for (int i = 0; i < total; i++) { SmallItem s = buf[i]; if (s == null) continue; if (GalleryUtils.isValidLocation(s.lat, s.lng)) { withLatLong.add(s); points.add(new Point(s.lat, s.lng)); } else { withoutLatLong.add(s); } } ArrayList<ArrayList<SmallItem>> clusters = new ArrayList<ArrayList<SmallItem>>(); int m = withLatLong.size(); if (m > 0) { // cluster the items with lat-long Point[] pointsArray = new Point[m]; pointsArray = points.toArray(pointsArray); int[] bestK = new int[1]; int[] index = kMeans(pointsArray, bestK); for (int i = 0; i < bestK[0]; i++) { clusters.add(new ArrayList<SmallItem>()); } for (int i = 0; i < m; i++) { clusters.get(index[i]).add(withLatLong.get(i)); } } ReverseGeocoder geocoder = new ReverseGeocoder(mContext); mNames = new ArrayList<String>(); boolean hasUnresolvedAddress = false; mClusters = new ArrayList<ArrayList<SmallItem>>(); for (ArrayList<SmallItem> cluster : clusters) { String name = generateName(cluster, geocoder); if (name != null) { mNames.add(name); mClusters.add(cluster); } else { // move cluster-i to no location cluster withoutLatLong.addAll(cluster); hasUnresolvedAddress = true; } } if (withoutLatLong.size() > 0) { mNames.add(mNoLocationString); mClusters.add(withoutLatLong); } if (hasUnresolvedAddress) { mHandler.post( new Runnable() { public void run() { Toast.makeText(mContext, R.string.no_connectivity, Toast.LENGTH_LONG).show(); } }); } }
public ClusterAlbum(Path path, DataManager dataManager, MediaSet clusterAlbumSet) { super(path, nextVersionNumber()); mDataManager = dataManager; mClusterAlbumSet = clusterAlbumSet; mClusterAlbumSet.addContentListener(this); }
@Override public String getName() { return mBaseSet.getName(); }