예제 #1
0
  private void processImageResponse(
      ImageResponse response, String graphObjectId, ImageView imageView) {
    pendingRequests.remove(graphObjectId);
    if (response.getError() != null) {
      callOnErrorListener(response.getError());
    }

    if (imageView == null) {
      // This was a pre-fetch request.
      if (response.getBitmap() != null) {
        // Is the cache too big?
        if (prefetchedPictureCache.size() >= MAX_PREFETCHED_PICTURES) {
          // Find the oldest one and remove it.
          String oldestId = prefetchedProfilePictureIds.remove(0);
          prefetchedPictureCache.remove(oldestId);
        }
        prefetchedPictureCache.put(graphObjectId, response);
      }
    } else if (graphObjectId.equals(imageView.getTag())) {
      Exception error = response.getError();
      Bitmap bitmap = response.getBitmap();
      if (error == null && bitmap != null) {
        imageView.setImageBitmap(bitmap);
        imageView.setTag(response.getRequest().getImageUri());
      }
    }
  }
예제 #2
0
  protected void populateGraphObjectView(View view, T graphObject) {
    String id = getIdOfGraphObject(graphObject);
    view.setTag(id);

    CharSequence title = getTitleOfGraphObject(graphObject);
    TextView titleView = (TextView) view.findViewById(R.id.com_facebook_picker_title);
    if (titleView != null) {
      titleView.setText(title, TextView.BufferType.SPANNABLE);
    }

    CharSequence subtitle = getSubTitleOfGraphObject(graphObject);
    TextView subtitleView = (TextView) view.findViewById(R.id.picker_subtitle);
    if (subtitleView != null) {
      if (subtitle != null) {
        subtitleView.setText(subtitle, TextView.BufferType.SPANNABLE);
        subtitleView.setVisibility(View.VISIBLE);
      } else {
        subtitleView.setVisibility(View.GONE);
      }
    }

    if (getShowCheckbox()) {
      CheckBox checkBox = (CheckBox) view.findViewById(R.id.com_facebook_picker_checkbox);
      updateCheckboxState(checkBox, isGraphObjectSelected(id));
    }

    if (getShowPicture()) {
      URI pictureURI = getPictureUriOfGraphObject(graphObject);

      if (pictureURI != null) {
        ImageView profilePic = (ImageView) view.findViewById(R.id.com_facebook_picker_image);

        // See if we have already pre-fetched this; if not, download it.
        if (prefetchedPictureCache.containsKey(id)) {
          ImageResponse response = prefetchedPictureCache.get(id);
          profilePic.setImageBitmap(response.getBitmap());
          profilePic.setTag(response.getRequest().getImageUri());
        } else {
          downloadProfilePicture(id, pictureURI, profilePic);
        }
      }
    }
  }
예제 #3
0
  private void downloadProfilePicture(
      final String profileId, URI pictureURI, final ImageView imageView) {
    if (pictureURI == null) {
      return;
    }

    // If we don't have an imageView, we are pre-fetching this image to store in-memory because we
    // think the user might scroll to its corresponding list row. If we do have an imageView, we
    // only want to queue a download if the view's tag isn't already set to the URL (which would
    // mean
    // it's already got the correct picture).
    boolean prefetching = imageView == null;
    if (prefetching || !pictureURI.equals(imageView.getTag())) {
      if (!prefetching) {
        // Setting the tag to the profile ID indicates that we're currently downloading the
        // picture for this profile; we'll set it to the actual picture URL when complete.
        imageView.setTag(profileId);
        imageView.setImageResource(getDefaultPicture());
      }

      ImageRequest.Builder builder =
          new ImageRequest.Builder(context.getApplicationContext(), pictureURI)
              .setCallerTag(this)
              .setCallback(
                  new ImageRequest.Callback() {
                    @Override
                    public void onCompleted(ImageResponse response) {
                      processImageResponse(response, profileId, imageView);
                    }
                  });

      ImageRequest newRequest = builder.build();
      pendingRequests.put(profileId, newRequest);

      ImageDownloader.downloadAsync(newRequest);
    }
  }