16614298e4d753bc3aebc49b5b7575c866eb5f432Sam Juddpackage com.bumptech.glide.manager; 26614298e4d753bc3aebc49b5b7575c866eb5f432Sam Judd 36614298e4d753bc3aebc49b5b7575c866eb5f432Sam Juddimport com.bumptech.glide.request.Request; 46614298e4d753bc3aebc49b5b7575c866eb5f432Sam Judd 56614298e4d753bc3aebc49b5b7575c866eb5f432Sam Juddimport java.util.Collections; 66614298e4d753bc3aebc49b5b7575c866eb5f432Sam Juddimport java.util.Set; 76614298e4d753bc3aebc49b5b7575c866eb5f432Sam Juddimport java.util.WeakHashMap; 86614298e4d753bc3aebc49b5b7575c866eb5f432Sam Judd 96614298e4d753bc3aebc49b5b7575c866eb5f432Sam Juddpublic class RequestTracker { 106614298e4d753bc3aebc49b5b7575c866eb5f432Sam Judd // Most requests will be for views and will therefore be held strongly (and safely) by the view via the tag. 116614298e4d753bc3aebc49b5b7575c866eb5f432Sam Judd // However, a user can always pass in a different type of target which may end up not being strongly referenced even 126614298e4d753bc3aebc49b5b7575c866eb5f432Sam Judd // though the user still would like the request to finish. Weak references are therefore only really functional in 136614298e4d753bc3aebc49b5b7575c866eb5f432Sam Judd // this context for view targets. Despite the side affects, WeakReferences are still essentially required. A user 146614298e4d753bc3aebc49b5b7575c866eb5f432Sam Judd // can always make repeated requests into targets other than views, or use an activity manager in a fragment pager 156614298e4d753bc3aebc49b5b7575c866eb5f432Sam Judd // where holding strong references would steadily leak bitmaps and/or views. 166614298e4d753bc3aebc49b5b7575c866eb5f432Sam Judd private final Set<Request> requests = Collections.newSetFromMap(new WeakHashMap<Request, Boolean>()); 176614298e4d753bc3aebc49b5b7575c866eb5f432Sam Judd 186614298e4d753bc3aebc49b5b7575c866eb5f432Sam Judd public void addRequest(Request request) { 196614298e4d753bc3aebc49b5b7575c866eb5f432Sam Judd requests.add(request); 206614298e4d753bc3aebc49b5b7575c866eb5f432Sam Judd } 216614298e4d753bc3aebc49b5b7575c866eb5f432Sam Judd 226614298e4d753bc3aebc49b5b7575c866eb5f432Sam Judd public void removeRequest(Request request) { 236614298e4d753bc3aebc49b5b7575c866eb5f432Sam Judd requests.remove(request); 246614298e4d753bc3aebc49b5b7575c866eb5f432Sam Judd } 256614298e4d753bc3aebc49b5b7575c866eb5f432Sam Judd 266614298e4d753bc3aebc49b5b7575c866eb5f432Sam Judd /** 276614298e4d753bc3aebc49b5b7575c866eb5f432Sam Judd * Stops any in progress requests. 286614298e4d753bc3aebc49b5b7575c866eb5f432Sam Judd */ 296614298e4d753bc3aebc49b5b7575c866eb5f432Sam Judd public void pauseRequests() { 306614298e4d753bc3aebc49b5b7575c866eb5f432Sam Judd for (Request request : requests) { 316614298e4d753bc3aebc49b5b7575c866eb5f432Sam Judd if (!request.isComplete() && !request.isFailed()) { 326614298e4d753bc3aebc49b5b7575c866eb5f432Sam Judd request.clear(); 336614298e4d753bc3aebc49b5b7575c866eb5f432Sam Judd } 346614298e4d753bc3aebc49b5b7575c866eb5f432Sam Judd } 356614298e4d753bc3aebc49b5b7575c866eb5f432Sam Judd } 366614298e4d753bc3aebc49b5b7575c866eb5f432Sam Judd 376614298e4d753bc3aebc49b5b7575c866eb5f432Sam Judd /** 386614298e4d753bc3aebc49b5b7575c866eb5f432Sam Judd * Starts any not yet completed or failed requests. 396614298e4d753bc3aebc49b5b7575c866eb5f432Sam Judd */ 406614298e4d753bc3aebc49b5b7575c866eb5f432Sam Judd public void resumeRequests() { 416614298e4d753bc3aebc49b5b7575c866eb5f432Sam Judd for (Request request : requests) { 426614298e4d753bc3aebc49b5b7575c866eb5f432Sam Judd if (!request.isComplete() && !request.isRunning()) { 436614298e4d753bc3aebc49b5b7575c866eb5f432Sam Judd request.run(); 446614298e4d753bc3aebc49b5b7575c866eb5f432Sam Judd } 456614298e4d753bc3aebc49b5b7575c866eb5f432Sam Judd } 466614298e4d753bc3aebc49b5b7575c866eb5f432Sam Judd } 476614298e4d753bc3aebc49b5b7575c866eb5f432Sam Judd 486614298e4d753bc3aebc49b5b7575c866eb5f432Sam Judd /** 496614298e4d753bc3aebc49b5b7575c866eb5f432Sam Judd * Cancels all requests and clears their resources. 506614298e4d753bc3aebc49b5b7575c866eb5f432Sam Judd */ 516614298e4d753bc3aebc49b5b7575c866eb5f432Sam Judd public void clearRequests() { 526614298e4d753bc3aebc49b5b7575c866eb5f432Sam Judd for (Request request : requests) { 536614298e4d753bc3aebc49b5b7575c866eb5f432Sam Judd request.clear(); 546614298e4d753bc3aebc49b5b7575c866eb5f432Sam Judd } 556614298e4d753bc3aebc49b5b7575c866eb5f432Sam Judd } 566614298e4d753bc3aebc49b5b7575c866eb5f432Sam Judd 576614298e4d753bc3aebc49b5b7575c866eb5f432Sam Judd /** 586614298e4d753bc3aebc49b5b7575c866eb5f432Sam Judd * Restarts failed requests and cancels and restarts in progress requests. 596614298e4d753bc3aebc49b5b7575c866eb5f432Sam Judd */ 606614298e4d753bc3aebc49b5b7575c866eb5f432Sam Judd public void restartRequests() { 616614298e4d753bc3aebc49b5b7575c866eb5f432Sam Judd for (Request request : requests) { 626614298e4d753bc3aebc49b5b7575c866eb5f432Sam Judd if (request.isFailed()) { 636614298e4d753bc3aebc49b5b7575c866eb5f432Sam Judd request.run(); 646614298e4d753bc3aebc49b5b7575c866eb5f432Sam Judd } else if (!request.isComplete()) { 656614298e4d753bc3aebc49b5b7575c866eb5f432Sam Judd request.clear(); 666614298e4d753bc3aebc49b5b7575c866eb5f432Sam Judd request.run(); 676614298e4d753bc3aebc49b5b7575c866eb5f432Sam Judd } 686614298e4d753bc3aebc49b5b7575c866eb5f432Sam Judd } 696614298e4d753bc3aebc49b5b7575c866eb5f432Sam Judd } 706614298e4d753bc3aebc49b5b7575c866eb5f432Sam Judd} 71