Home | History | Annotate | Download | only in request
      1 package com.bumptech.glide.request;
      2 
      3 /**
      4  * A coordinator that coordinates two individual {@link Request}s that load a small thumbnail version of an image and
      5  * the full size version of the image at the same time.
      6  */
      7 public class ThumbnailRequestCoordinator implements RequestCoordinator, Request {
      8     private Request full;
      9     private Request thumb;
     10     private RequestCoordinator coordinator;
     11 
     12     public ThumbnailRequestCoordinator() {
     13         this(null);
     14     }
     15 
     16     public ThumbnailRequestCoordinator(RequestCoordinator coordinator) {
     17         this.coordinator = coordinator;
     18     }
     19 
     20     public void setRequests(Request full, Request thumb) {
     21         this.full = full;
     22         this.thumb = thumb;
     23     }
     24 
     25     /**
     26      *
     27      * Returns true if the request is either the request loading the fullsize image or if the request loading the
     28      * full size image has not yet completed.
     29      *
     30      * @param request {@inheritDoc}
     31      */
     32     @Override
     33     public boolean canSetImage(Request request) {
     34         return parentCanSetImage() && (request.equals(full) || !full.isResourceSet());
     35     }
     36 
     37     private boolean parentCanSetImage() {
     38         return coordinator == null || coordinator.canSetImage(this);
     39     }
     40 
     41     /**
     42      * Returns true if the request is the request loading the fullsize image and if neither the full nor the thumbnail
     43      * image have completed sucessfully.
     44      *
     45      * @param request {@inheritDoc}.
     46      */
     47     @Override
     48     public boolean canNotifyStatusChanged(Request request) {
     49         return parentCanNotifyStatusChanged() && request.equals(full) && !isAnyResourceSet();
     50     }
     51 
     52     private boolean parentCanNotifyStatusChanged() {
     53         return coordinator == null || coordinator.canNotifyStatusChanged(this);
     54     }
     55 
     56     @Override
     57     public boolean isAnyResourceSet() {
     58         return parentIsAnyResourceSet() || isResourceSet();
     59     }
     60 
     61     private boolean parentIsAnyResourceSet() {
     62         return coordinator != null && coordinator.isAnyResourceSet();
     63     }
     64 
     65     /**
     66      * Starts first the thumb request and then the full request.
     67      */
     68     @Override
     69     public void begin() {
     70         if (!thumb.isRunning()) {
     71             thumb.begin();
     72         }
     73         if (!full.isRunning()) {
     74             full.begin();
     75         }
     76     }
     77 
     78     @Override
     79     public void pause() {
     80         full.pause();
     81         thumb.pause();
     82     }
     83 
     84     /**
     85      * {@inheritDoc}
     86      */
     87     @Override
     88     public void clear() {
     89         thumb.clear();
     90         full.clear();
     91     }
     92 
     93     @Override
     94     public boolean isPaused() {
     95         return full.isPaused();
     96     }
     97 
     98     /**
     99      * Returns true if the full request is still running.
    100      */
    101     @Override
    102     public boolean isRunning() {
    103         return full.isRunning();
    104     }
    105 
    106     /**
    107      * Returns true if the full request is complete.
    108      */
    109     @Override
    110     public boolean isComplete() {
    111         return full.isComplete() || thumb.isComplete();
    112     }
    113 
    114     @Override
    115     public boolean isResourceSet() {
    116         return full.isResourceSet() || thumb.isResourceSet();
    117     }
    118 
    119     @Override
    120     public boolean isCancelled() {
    121         return full.isCancelled();
    122     }
    123 
    124     /**
    125      * Returns true if the full request has failed.
    126      */
    127     @Override
    128     public boolean isFailed() {
    129         return full.isFailed();
    130     }
    131 
    132     /**
    133      * {@inheritDoc}.
    134      */
    135     @Override
    136     public void recycle() {
    137         full.recycle();
    138         thumb.recycle();
    139     }
    140 }
    141