13947c741df8f8b0658430c22536b244dd26b793cSam Juddpackage com.bumptech.glide.manager; 23947c741df8f8b0658430c22536b244dd26b793cSam Judd 33947c741df8f8b0658430c22536b244dd26b793cSam Juddimport java.util.Collections; 43947c741df8f8b0658430c22536b244dd26b793cSam Juddimport java.util.Set; 53947c741df8f8b0658430c22536b244dd26b793cSam Juddimport java.util.WeakHashMap; 63947c741df8f8b0658430c22536b244dd26b793cSam Judd 73947c741df8f8b0658430c22536b244dd26b793cSam Judd/** 83947c741df8f8b0658430c22536b244dd26b793cSam Judd * A {@link com.bumptech.glide.manager.Lifecycle} implementation for tracking and notifying listeners of 93947c741df8f8b0658430c22536b244dd26b793cSam Judd * {@link android.app.Fragment} and {@link android.app.Activity} lifecycle events. 103947c741df8f8b0658430c22536b244dd26b793cSam Judd */ 113947c741df8f8b0658430c22536b244dd26b793cSam Juddclass ActivityFragmentLifecycle implements Lifecycle { 123947c741df8f8b0658430c22536b244dd26b793cSam Judd private final Set<LifecycleListener> lifecycleListeners = 133947c741df8f8b0658430c22536b244dd26b793cSam Judd Collections.synchronizedSet(Collections.newSetFromMap(new WeakHashMap<LifecycleListener, Boolean>())); 143947c741df8f8b0658430c22536b244dd26b793cSam Judd private boolean isStarted; 153947c741df8f8b0658430c22536b244dd26b793cSam Judd private boolean isDestroyed; 163947c741df8f8b0658430c22536b244dd26b793cSam Judd 173947c741df8f8b0658430c22536b244dd26b793cSam Judd /** 183947c741df8f8b0658430c22536b244dd26b793cSam Judd * Adds the given listener to the list of listeners to be notified on each lifecycle event. 193947c741df8f8b0658430c22536b244dd26b793cSam Judd * 203947c741df8f8b0658430c22536b244dd26b793cSam Judd * <p> 213947c741df8f8b0658430c22536b244dd26b793cSam Judd * The latest lifecycle event will be called on the given listener synchronously in this method. If the 223947c741df8f8b0658430c22536b244dd26b793cSam Judd * activity or fragment is stopped, {@link LifecycleListener#onStop()}} will be called, and same for onStart and 233947c741df8f8b0658430c22536b244dd26b793cSam Judd * onDestroy. 243947c741df8f8b0658430c22536b244dd26b793cSam Judd * </p> 253947c741df8f8b0658430c22536b244dd26b793cSam Judd * 263947c741df8f8b0658430c22536b244dd26b793cSam Judd * <p> 273947c741df8f8b0658430c22536b244dd26b793cSam Judd * Note - {@link com.bumptech.glide.manager.LifecycleListener}s that are added more than once will have their 283947c741df8f8b0658430c22536b244dd26b793cSam Judd * lifecycle methods called more than once. It is the caller's responsibility to avoid adding listeners 293947c741df8f8b0658430c22536b244dd26b793cSam Judd * multiple times. 303947c741df8f8b0658430c22536b244dd26b793cSam Judd * </p> 313947c741df8f8b0658430c22536b244dd26b793cSam Judd */ 323947c741df8f8b0658430c22536b244dd26b793cSam Judd @Override 333947c741df8f8b0658430c22536b244dd26b793cSam Judd public void addListener(LifecycleListener listener) { 343947c741df8f8b0658430c22536b244dd26b793cSam Judd lifecycleListeners.add(listener); 353947c741df8f8b0658430c22536b244dd26b793cSam Judd 363947c741df8f8b0658430c22536b244dd26b793cSam Judd if (isDestroyed) { 373947c741df8f8b0658430c22536b244dd26b793cSam Judd listener.onDestroy(); 383947c741df8f8b0658430c22536b244dd26b793cSam Judd } else if (isStarted) { 393947c741df8f8b0658430c22536b244dd26b793cSam Judd listener.onStart(); 403947c741df8f8b0658430c22536b244dd26b793cSam Judd } else { 413947c741df8f8b0658430c22536b244dd26b793cSam Judd listener.onStop(); 423947c741df8f8b0658430c22536b244dd26b793cSam Judd } 433947c741df8f8b0658430c22536b244dd26b793cSam Judd } 443947c741df8f8b0658430c22536b244dd26b793cSam Judd 453947c741df8f8b0658430c22536b244dd26b793cSam Judd void onStart() { 463947c741df8f8b0658430c22536b244dd26b793cSam Judd isStarted = true; 473947c741df8f8b0658430c22536b244dd26b793cSam Judd for (LifecycleListener lifecycleListener : lifecycleListeners) { 483947c741df8f8b0658430c22536b244dd26b793cSam Judd lifecycleListener.onStart(); 493947c741df8f8b0658430c22536b244dd26b793cSam Judd } 503947c741df8f8b0658430c22536b244dd26b793cSam Judd } 513947c741df8f8b0658430c22536b244dd26b793cSam Judd 523947c741df8f8b0658430c22536b244dd26b793cSam Judd void onStop() { 533947c741df8f8b0658430c22536b244dd26b793cSam Judd isStarted = false; 543947c741df8f8b0658430c22536b244dd26b793cSam Judd for (LifecycleListener lifecycleListener : lifecycleListeners) { 553947c741df8f8b0658430c22536b244dd26b793cSam Judd lifecycleListener.onStop(); 563947c741df8f8b0658430c22536b244dd26b793cSam Judd } 573947c741df8f8b0658430c22536b244dd26b793cSam Judd } 583947c741df8f8b0658430c22536b244dd26b793cSam Judd 593947c741df8f8b0658430c22536b244dd26b793cSam Judd void onDestroy() { 603947c741df8f8b0658430c22536b244dd26b793cSam Judd isDestroyed = true; 613947c741df8f8b0658430c22536b244dd26b793cSam Judd for (LifecycleListener lifecycleListener : lifecycleListeners) { 623947c741df8f8b0658430c22536b244dd26b793cSam Judd lifecycleListener.onDestroy(); 633947c741df8f8b0658430c22536b244dd26b793cSam Judd } 643947c741df8f8b0658430c22536b244dd26b793cSam Judd } 653947c741df8f8b0658430c22536b244dd26b793cSam Judd} 66