Пример #1
0
 @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;
 }
Пример #5
0
 @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);
 }
Пример #6
0
 @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);
 }
Пример #7
0
 @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);
    }
  }
Пример #10
0
    @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();
 }