aboutsummaryrefslogtreecommitdiff
path: root/library/src/main/java/com/bumptech/glide/manager/LifecycleRequestManager.java
diff options
context:
space:
mode:
Diffstat (limited to 'library/src/main/java/com/bumptech/glide/manager/LifecycleRequestManager.java')
-rw-r--r--library/src/main/java/com/bumptech/glide/manager/LifecycleRequestManager.java29
1 files changed, 28 insertions, 1 deletions
diff --git a/library/src/main/java/com/bumptech/glide/manager/LifecycleRequestManager.java b/library/src/main/java/com/bumptech/glide/manager/LifecycleRequestManager.java
index 4871d215..fd5efb7d 100644
--- a/library/src/main/java/com/bumptech/glide/manager/LifecycleRequestManager.java
+++ b/library/src/main/java/com/bumptech/glide/manager/LifecycleRequestManager.java
@@ -1,12 +1,13 @@
package com.bumptech.glide.manager;
+import android.content.Context;
import com.bumptech.glide.request.Request;
import java.util.Collections;
import java.util.Set;
import java.util.WeakHashMap;
-public class LifecycleRequestManager implements RequestManager {
+class LifecycleRequestManager implements RequestManager, ConnectivityMonitor.ConnectivityListener {
// Most requests will be for views and will therefore be held strongly (and safely) by the view via the tag.
// However, a user can always pass in a different type of target which may end up not being strongly referenced even
// though the user still would like the request to finish. Weak references are therefore only really functional in
@@ -14,6 +15,16 @@ public class LifecycleRequestManager implements RequestManager {
// can always make repeated requests into targets other than views, or use an activity manager in a fragment pager
// where holding strong references would steadily leak bitmaps and/or views.
private final Set<Request> requests = Collections.newSetFromMap(new WeakHashMap<Request, Boolean>());
+ private final ConnectivityMonitor connectivityMonitor;
+
+ LifecycleRequestManager(Context context) {
+ this(context, new ConnectivityMonitorFactory());
+ }
+
+ LifecycleRequestManager(Context context, ConnectivityMonitorFactory factory) {
+ this.connectivityMonitor = factory.build(context, this);
+ connectivityMonitor.register();
+ }
@Override
public void addRequest(Request request) {
@@ -26,6 +37,9 @@ public class LifecycleRequestManager implements RequestManager {
}
public void onStart() {
+ // onStart might not be called because this object may be created after the fragment/activity's onStart method.
+ connectivityMonitor.register();
+
for (Request request : requests) {
if (!request.isComplete() && !request.isRunning()) {
request.run();
@@ -35,6 +49,7 @@ public class LifecycleRequestManager implements RequestManager {
}
public void onStop() {
+ connectivityMonitor.unregister();
for (Request request : requests) {
if (!request.isComplete() && !request.isFailed()) {
request.clear();
@@ -47,4 +62,16 @@ public class LifecycleRequestManager implements RequestManager {
request.clear();
}
}
+
+ @Override
+ public void onConnectivityChanged(boolean isConnected) {
+ for (Request request : requests) {
+ if (request.isFailed()) {
+ request.run();
+ } else if (!request.isComplete()) {
+ request.clear();
+ request.run();
+ }
+ }
+ }
}