Esempio n. 1
0
  protected void findImages(boolean internal, int howMany, LinkedList<ImageData> foundImages) {
    Uri uri =
        internal
            ? MediaStore.Images.Media.INTERNAL_CONTENT_URI
            : MediaStore.Images.Media.EXTERNAL_CONTENT_URI;
    String[] projection = {
      MediaStore.Images.Media.DATA,
      MediaStore.Images.Media.ORIENTATION,
      MediaStore.Images.Media.BUCKET_ID,
      MediaStore.Images.Media.BUCKET_DISPLAY_NAME
    };
    String selection = "";
    for (String id : getFoundAlbums()) {
      if (isInternalId(id) == internal && mSettings.isAlbumEnabled(id)) {
        String[] parts = id.split(":");
        if (parts.length > 1) {
          if (selection.length() > 0) {
            selection += " OR ";
          }
          selection += MediaStore.Images.Media.BUCKET_ID + " = '" + parts[1] + "'";
        }
      }
    }
    if (selection.isEmpty()) {
      return;
    }
    Cursor cursor = mResolver.query(uri, projection, selection, null, null);
    if (cursor != null) {
      int dataIndex = cursor.getColumnIndex(MediaStore.Images.Media.DATA);

      if (cursor.getCount() > howMany && mLastPosition == INVALID) {
        mLastPosition = pickRandomStart(cursor.getCount(), howMany);
      }
      cursor.moveToPosition(mLastPosition);

      if (dataIndex < 0) {
        log(TAG, "can't find the DATA column!");
      } else {
        while (foundImages.size() < howMany && cursor.moveToNext()) {
          ImageData data = unpackImageData(cursor, null);
          data.uri = uri;
          foundImages.offer(data);
          mLastPosition = cursor.getPosition();
        }
        if (cursor.isAfterLast()) {
          mLastPosition = -1;
        }
        if (cursor.isBeforeFirst()) {
          mLastPosition = INVALID;
        }
      }

      cursor.close();
    }
  }