aboutsummaryrefslogtreecommitdiff
path: root/library/src/main/java/com/bumptech/glide/manager
diff options
context:
space:
mode:
authorSam Judd <judds@google.com>2014-08-03 14:01:34 -0700
committerSam Judd <judds@google.com>2014-08-03 14:46:26 -0700
commit82c18a181dc6f7867c76b1b8c469c6be88b85177 (patch)
tree12d2bba8a4f78755be5816a8828b1feec7c0f816 /library/src/main/java/com/bumptech/glide/manager
parentec059e312ca7560ef3856f79827994cb906ded7c (diff)
downloadglide-82c18a181dc6f7867c76b1b8c469c6be88b85177.tar.gz
Add lifecycle + listeners
Diffstat (limited to 'library/src/main/java/com/bumptech/glide/manager')
-rw-r--r--library/src/main/java/com/bumptech/glide/manager/ConnectivityMonitor.java12
-rw-r--r--library/src/main/java/com/bumptech/glide/manager/DefaultConnectivityMonitor.java21
-rw-r--r--library/src/main/java/com/bumptech/glide/manager/Lifecycle.java64
-rw-r--r--library/src/main/java/com/bumptech/glide/manager/LifecycleListener.java23
-rw-r--r--library/src/main/java/com/bumptech/glide/manager/NullConnectivityMonitor.java9
-rw-r--r--library/src/main/java/com/bumptech/glide/manager/RequestManagerFragment.java28
-rw-r--r--library/src/main/java/com/bumptech/glide/manager/RequestManagerRetriever.java6
-rw-r--r--library/src/main/java/com/bumptech/glide/manager/SupportRequestManagerFragment.java28
8 files changed, 153 insertions, 38 deletions
diff --git a/library/src/main/java/com/bumptech/glide/manager/ConnectivityMonitor.java b/library/src/main/java/com/bumptech/glide/manager/ConnectivityMonitor.java
index a30c0cc0..3e219850 100644
--- a/library/src/main/java/com/bumptech/glide/manager/ConnectivityMonitor.java
+++ b/library/src/main/java/com/bumptech/glide/manager/ConnectivityMonitor.java
@@ -3,7 +3,7 @@ package com.bumptech.glide.manager;
/**
* An interface for monitoring network connectivity events.
*/
-public interface ConnectivityMonitor {
+public interface ConnectivityMonitor extends LifecycleListener {
/**
* An interface for listening to network connectivity events picked up by the monitor.
@@ -16,14 +16,4 @@ public interface ConnectivityMonitor {
*/
public void onConnectivityChanged(boolean isConnected);
}
-
- /**
- * Indicates the monitor should register itself to listen to connectivity events.
- */
- public void register();
-
- /**
- * Indicates the monitor should unregister itself and stop listening to connectivity events.
- */
- public void unregister();
}
diff --git a/library/src/main/java/com/bumptech/glide/manager/DefaultConnectivityMonitor.java b/library/src/main/java/com/bumptech/glide/manager/DefaultConnectivityMonitor.java
index 8d993f17..aa194c4c 100644
--- a/library/src/main/java/com/bumptech/glide/manager/DefaultConnectivityMonitor.java
+++ b/library/src/main/java/com/bumptech/glide/manager/DefaultConnectivityMonitor.java
@@ -30,8 +30,7 @@ class DefaultConnectivityMonitor implements ConnectivityMonitor {
this.listener = listener;
}
- @Override
- public void register() {
+ private void register() {
if (isRegistered) {
return;
}
@@ -41,8 +40,7 @@ class DefaultConnectivityMonitor implements ConnectivityMonitor {
isRegistered = true;
}
- @Override
- public void unregister() {
+ private void unregister() {
if (!isRegistered) {
return;
}
@@ -57,4 +55,19 @@ class DefaultConnectivityMonitor implements ConnectivityMonitor {
NetworkInfo networkInfo = connectivityManager.getActiveNetworkInfo();
return networkInfo != null && networkInfo.isConnected();
}
+
+ @Override
+ public void onStart() {
+ register();
+ }
+
+ @Override
+ public void onStop() {
+ unregister();
+ }
+
+ @Override
+ public void onDestroy() {
+ // Do nothing.
+ }
}
diff --git a/library/src/main/java/com/bumptech/glide/manager/Lifecycle.java b/library/src/main/java/com/bumptech/glide/manager/Lifecycle.java
new file mode 100644
index 00000000..cc2bd8c4
--- /dev/null
+++ b/library/src/main/java/com/bumptech/glide/manager/Lifecycle.java
@@ -0,0 +1,64 @@
+package com.bumptech.glide.manager;
+
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.List;
+
+/**
+ * A class for tracking and notifying listeners of {@link android.app.Fragment} and {@link android.app.Activity}
+ * lifecycle events.
+ */
+public class Lifecycle {
+ private final List<LifecycleListener> lifecycleListeners =
+ Collections.synchronizedList(new ArrayList<LifecycleListener>());
+ private boolean isStarted;
+ private boolean isDestroyed;
+
+ /**
+ * Adds the given listener to the list of listeners to be notified on each lifecycle event.
+ *
+ * <p>
+ * The latest lifecycle event will be called on the given listener synchronously in this method. If the
+ * activity or fragment is stopped, {@link LifecycleListener#onStop()}} will be called, and same for onStart and
+ * onDestroy.
+ * </p>
+ *
+ * <p>
+ * Note - {@link com.bumptech.glide.manager.LifecycleListener}s that are added more than once will have their
+ * lifecycle methods called more than once. It is the caller's responsibility to avoid adding listeners
+ * multiple times.
+ * </p>
+ */
+ public void addListener(LifecycleListener listener) {
+ lifecycleListeners.add(listener);
+
+ if (isDestroyed) {
+ listener.onDestroy();
+ } else if (isStarted) {
+ listener.onStart();
+ } else {
+ listener.onStop();
+ }
+ }
+
+ void onStart() {
+ isStarted = true;
+ for (LifecycleListener lifecycleListener : lifecycleListeners) {
+ lifecycleListener.onStart();
+ }
+ }
+
+ void onStop() {
+ isStarted = false;
+ for (LifecycleListener lifecycleListener : lifecycleListeners) {
+ lifecycleListener.onStop();
+ }
+ }
+
+ void onDestroy() {
+ isDestroyed = true;
+ for (LifecycleListener lifecycleListener : lifecycleListeners) {
+ lifecycleListener.onDestroy();
+ }
+ }
+}
diff --git a/library/src/main/java/com/bumptech/glide/manager/LifecycleListener.java b/library/src/main/java/com/bumptech/glide/manager/LifecycleListener.java
new file mode 100644
index 00000000..38614c2e
--- /dev/null
+++ b/library/src/main/java/com/bumptech/glide/manager/LifecycleListener.java
@@ -0,0 +1,23 @@
+package com.bumptech.glide.manager;
+
+/**
+ * An interface for listener to {@link android.app.Fragment} and {@link android.app.Activity} lifecycle events.
+ */
+public interface LifecycleListener {
+
+ /**
+ * Callback for when {@link android.app.Fragment#onStart()}} or {@link android.app.Activity#onStart()} is called.
+ */
+ public void onStart();
+
+ /**
+ * Callback for when {@link android.app.Fragment#onStop()}} or {@link android.app.Activity#onStop()}} is called.
+ */
+ public void onStop();
+
+ /**
+ * Callback for when {@link android.app.Fragment#onDestroy()}} or {@link android.app.Activity#onDestroy()} is
+ * called.
+ */
+ public void onDestroy();
+}
diff --git a/library/src/main/java/com/bumptech/glide/manager/NullConnectivityMonitor.java b/library/src/main/java/com/bumptech/glide/manager/NullConnectivityMonitor.java
index 115ca52c..debb03fa 100644
--- a/library/src/main/java/com/bumptech/glide/manager/NullConnectivityMonitor.java
+++ b/library/src/main/java/com/bumptech/glide/manager/NullConnectivityMonitor.java
@@ -6,12 +6,17 @@ package com.bumptech.glide.manager;
class NullConnectivityMonitor implements ConnectivityMonitor {
@Override
- public void register() {
+ public void onStart() {
}
@Override
- public void unregister() {
+ public void onStop() {
+
+ }
+
+ @Override
+ public void onDestroy() {
}
}
diff --git a/library/src/main/java/com/bumptech/glide/manager/RequestManagerFragment.java b/library/src/main/java/com/bumptech/glide/manager/RequestManagerFragment.java
index 931b62bc..82e5789f 100644
--- a/library/src/main/java/com/bumptech/glide/manager/RequestManagerFragment.java
+++ b/library/src/main/java/com/bumptech/glide/manager/RequestManagerFragment.java
@@ -1,5 +1,6 @@
package com.bumptech.glide.manager;
+import android.annotation.SuppressLint;
import android.annotation.TargetApi;
import android.app.Fragment;
import com.bumptech.glide.RequestManager;
@@ -15,8 +16,19 @@ import com.bumptech.glide.RequestManager;
*/
@TargetApi(11)
public class RequestManagerFragment extends Fragment {
+ private final Lifecycle lifecycle;
private RequestManager requestManager;
+ public RequestManagerFragment() {
+ this(new Lifecycle());
+ }
+
+ // For testing only.
+ @SuppressLint("ValidFragment")
+ RequestManagerFragment(Lifecycle lifecycle) {
+ this.lifecycle = lifecycle;
+ }
+
/**
* Sets the current {@link com.bumptech.glide.RequestManager}.
*
@@ -26,6 +38,10 @@ public class RequestManagerFragment extends Fragment {
this.requestManager = requestManager;
}
+ public Lifecycle getLifecycle() {
+ return lifecycle;
+ }
+
/**
* Returns the current {@link com.bumptech.glide.RequestManager} or null if none exists.
*/
@@ -36,24 +52,18 @@ public class RequestManagerFragment extends Fragment {
@Override
public void onStart() {
super.onStart();
- if (requestManager != null) {
- requestManager.onStart();
- }
+ lifecycle.onStart();
}
@Override
public void onStop() {
super.onStop();
- if (requestManager != null) {
- requestManager.onStop();
- }
+ lifecycle.onStop();
}
@Override
public void onDestroy() {
super.onDestroy();
- if (requestManager != null) {
- requestManager.onDestroy();
- }
+ lifecycle.onDestroy();
}
}
diff --git a/library/src/main/java/com/bumptech/glide/manager/RequestManagerRetriever.java b/library/src/main/java/com/bumptech/glide/manager/RequestManagerRetriever.java
index 95e21868..4e3ee702 100644
--- a/library/src/main/java/com/bumptech/glide/manager/RequestManagerRetriever.java
+++ b/library/src/main/java/com/bumptech/glide/manager/RequestManagerRetriever.java
@@ -32,7 +32,7 @@ public class RequestManagerRetriever {
// Either a context or we're on a background thread.
if (applicationManager == null) {
- applicationManager = new RequestManager(context.getApplicationContext());
+ applicationManager = new RequestManager(context.getApplicationContext(), new Lifecycle());
}
return applicationManager;
}
@@ -112,7 +112,7 @@ public class RequestManagerRetriever {
}
RequestManager requestManager = current.getRequestManager();
if (requestManager == null) {
- requestManager = new RequestManager(context);
+ requestManager = new RequestManager(context, current.getLifecycle());
current.setRequestManager(requestManager);
}
return requestManager;
@@ -132,7 +132,7 @@ public class RequestManagerRetriever {
}
RequestManager requestManager = current.getRequestManager();
if (requestManager == null) {
- requestManager = new RequestManager(context);
+ requestManager = new RequestManager(context, current.getLifecycle());
current.setRequestManager(requestManager);
}
return requestManager;
diff --git a/library/src/main/java/com/bumptech/glide/manager/SupportRequestManagerFragment.java b/library/src/main/java/com/bumptech/glide/manager/SupportRequestManagerFragment.java
index 2fc46577..1d49b05f 100644
--- a/library/src/main/java/com/bumptech/glide/manager/SupportRequestManagerFragment.java
+++ b/library/src/main/java/com/bumptech/glide/manager/SupportRequestManagerFragment.java
@@ -1,5 +1,6 @@
package com.bumptech.glide.manager;
+import android.annotation.SuppressLint;
import android.support.v4.app.Fragment;
import com.bumptech.glide.RequestManager;
@@ -14,6 +15,17 @@ import com.bumptech.glide.RequestManager;
*/
public class SupportRequestManagerFragment extends Fragment {
private RequestManager requestManager;
+ private final Lifecycle lifecycle;
+
+ public SupportRequestManagerFragment() {
+ this(new Lifecycle());
+ }
+
+ // For testing only.
+ @SuppressLint("ValidFragment")
+ public SupportRequestManagerFragment(Lifecycle lifecycle) {
+ this.lifecycle = lifecycle;
+ }
/**
* Sets the current {@link com.bumptech.glide.RequestManager}.
@@ -24,6 +36,10 @@ public class SupportRequestManagerFragment extends Fragment {
this.requestManager = requestManager;
}
+ public Lifecycle getLifecycle() {
+ return lifecycle;
+ }
+
/**
* Returns the current {@link com.bumptech.glide.RequestManager} or null if none is set.
*/
@@ -34,24 +50,18 @@ public class SupportRequestManagerFragment extends Fragment {
@Override
public void onStart() {
super.onStart();
- if (requestManager != null) {
- requestManager.onStart();
- }
+ lifecycle.onStart();
}
@Override
public void onStop() {
super.onStop();
- if (requestManager != null) {
- requestManager.onStop();
- }
+ lifecycle.onStop();
}
@Override
public void onDestroy() {
super.onDestroy();
- if (requestManager != null) {
- requestManager.onDestroy();
- }
+ lifecycle.onDestroy();
}
}