Ejemplo n.º 1
0
  private Bitmap prepare(final Bitmap map) {
    int dstW = request.getRequiredWidth(), dstH = request.getRequiredHeight();
    if (dstW <= 0 || dstH <= 0 || request.isSkipScaleBeforeMemCache()) {
      if (imagesManager.debug) {
        Log.d(
            TAG,
            "Skip scaling for "
                + request.getKey()
                + " skip flag: "
                + request.isSkipScaleBeforeMemCache());
      }
      return map;
    }

    final int w = map.getWidth(), h = map.getHeight();

    if (w <= dstW && h <= dstH) {
      return map;
    }

    final double ratio = (double) w / h;
    if (w > h) {
      dstH = (int) (dstW / ratio);
    } else {
      dstW = (int) (dstH * ratio);
    }

    if (dstW <= 0 || dstH <= 0) {
      return map;
    }

    final Bitmap scaled = Bitmap.createScaledBitmap(map, dstW, dstH, true);
    scaled.setDensity(imagesManager.getResources().getDisplayMetrics().densityDpi);
    return scaled;
  }
Ejemplo n.º 2
0
 // main thread
 private void setToConsumer(final ImageConsumer consumer, final ImageResult result) {
   if (consumer.currentLoader == this) {
     imagesManager.setResultImage(consumer, result, true);
   } else {
     if (imagesManager.debug) {
       Log.d(TAG, "Skip set for " + consumer);
     }
   }
 }
Ejemplo n.º 3
0
 private void memCacheImage(final ImageResult result) {
   if (result.getType() != ImageSourceType.MEMORY) {
     Bitmap input = result.getBitmap();
     Bitmap resultBitmap = prepare(input);
     if (resultBitmap != input) {
       result.setBitmap(resultBitmap);
       input.recycle();
     }
     imagesManager.memCacheImage(request.url, resultBitmap);
   }
 }
Ejemplo n.º 4
0
  @Override
  public Void call() {
    if (imagesManager.debug) {
      Log.d(TAG, "Start image task");
    }
    try {

      if (!imagesManager.waitForPause()) {
        // interrupted
        cancel();
        return null;
      }

      final ImageResult result = request.readImage();
      if (result == null) {
        throw new IllegalStateException("Image is not returned!");
      }
      safeImageSet(result);

      finish();

    } catch (final MalformedURLException e) {

      Log.e(TAG, "Bad URL: " + request.url + ". Loading canceled.", e);
      error(e);

    } catch (final IOException e) {

      if (imagesManager.debug) {
        Log.e(TAG, "IO error for " + request.url + ": " + e.getMessage());
      }
      error(e);

    } catch (final Exception e) {

      Log.e(TAG, "Cannot load image " + request.url, e);
      error(e);

    } finally {

      final boolean removed = imagesManager.currentLoads.remove(request.getKey(), this);
      if (imagesManager.debug) {
        Log.d(TAG, "Current loaders count: " + imagesManager.currentLoads.size());
        if (!removed) {
          Log.w(TAG, "Incorrect loader in currents for " + request.getKey());
        }
      }
    }
    return null;
  }
Ejemplo n.º 5
0
  // main thread
  public boolean addTarget(final ImageConsumer imageHolder) {
    if (future.isCancelled()) {
      return false;
    } // we should start a new task

    imageHolder.onStart(this, request.url);

    synchronized (targets) {
      if (result != null) {
        imagesManager.setResultImage(imageHolder, result, false);
        imageHolder.onFinish(request.url, result);
      } else if (error != null) {
        imageHolder.onError(request.url, error);
      } else {
        imageHolder.currentLoader = this;
        targets.add(imageHolder);
      }
    }

    return true;
  }