17e7c54e34b096f6bee9cefe6ef043464a984e5ffSam Juddpackage com.bumptech.glide; 28a6067fbe2a670d2e893c79c9c0ec17817da6568Sam Judd 3e97358542be64b8f458d75d997ef585f6d9fce4cSam Juddimport android.app.Activity; 4e97358542be64b8f458d75d997ef585f6d9fce4cSam Juddimport android.app.Fragment; 5667fb8129df68fbab0c489b23b2ca9d392cd45a0Sam Juddimport android.content.Context; 6e97358542be64b8f458d75d997ef585f6d9fce4cSam Juddimport android.net.Uri; 7e97358542be64b8f458d75d997ef585f6d9fce4cSam Juddimport android.os.ParcelFileDescriptor; 8e97358542be64b8f458d75d997ef585f6d9fce4cSam Juddimport android.provider.MediaStore; 9e97358542be64b8f458d75d997ef585f6d9fce4cSam Juddimport android.support.v4.app.FragmentActivity; 10e97358542be64b8f458d75d997ef585f6d9fce4cSam Juddimport com.bumptech.glide.load.ResourceDecoder; 11e97358542be64b8f458d75d997ef585f6d9fce4cSam Juddimport com.bumptech.glide.load.ResourceEncoder; 12e97358542be64b8f458d75d997ef585f6d9fce4cSam Juddimport com.bumptech.glide.load.model.ModelLoader; 13e97358542be64b8f458d75d997ef585f6d9fce4cSam Juddimport com.bumptech.glide.load.model.ModelLoaderFactory; 14e97358542be64b8f458d75d997ef585f6d9fce4cSam Juddimport com.bumptech.glide.load.model.file_descriptor.FileDescriptorModelLoader; 15e97358542be64b8f458d75d997ef585f6d9fce4cSam Juddimport com.bumptech.glide.load.model.stream.MediaStoreStreamLoader; 16e97358542be64b8f458d75d997ef585f6d9fce4cSam Juddimport com.bumptech.glide.load.model.stream.StreamByteArrayLoader; 17e97358542be64b8f458d75d997ef585f6d9fce4cSam Juddimport com.bumptech.glide.load.model.stream.StreamFileLoader; 18e97358542be64b8f458d75d997ef585f6d9fce4cSam Juddimport com.bumptech.glide.load.model.stream.StreamModelLoader; 19e97358542be64b8f458d75d997ef585f6d9fce4cSam Juddimport com.bumptech.glide.load.model.stream.StreamResourceLoader; 20e97358542be64b8f458d75d997ef585f6d9fce4cSam Juddimport com.bumptech.glide.load.model.stream.StreamStringLoader; 21e97358542be64b8f458d75d997ef585f6d9fce4cSam Juddimport com.bumptech.glide.load.model.stream.StreamUriLoader; 227e7c54e34b096f6bee9cefe6ef043464a984e5ffSam Juddimport com.bumptech.glide.manager.ConnectivityMonitor; 237e7c54e34b096f6bee9cefe6ef043464a984e5ffSam Juddimport com.bumptech.glide.manager.ConnectivityMonitorFactory; 247e7c54e34b096f6bee9cefe6ef043464a984e5ffSam Juddimport com.bumptech.glide.manager.RequestTracker; 25e97358542be64b8f458d75d997ef585f6d9fce4cSam Juddimport com.bumptech.glide.volley.VolleyUrlLoader; 268a6067fbe2a670d2e893c79c9c0ec17817da6568Sam Judd 27e97358542be64b8f458d75d997ef585f6d9fce4cSam Juddimport java.io.File; 28e97358542be64b8f458d75d997ef585f6d9fce4cSam Juddimport java.io.InputStream; 29e97358542be64b8f458d75d997ef585f6d9fce4cSam Juddimport java.net.URL; 30e97358542be64b8f458d75d997ef585f6d9fce4cSam Juddimport java.util.UUID; 318a6067fbe2a670d2e893c79c9c0ec17817da6568Sam Judd 32e97358542be64b8f458d75d997ef585f6d9fce4cSam Judd/** 33e97358542be64b8f458d75d997ef585f6d9fce4cSam Judd * A class for managing and starting requests for Glide. Can use activity, fragment and connectivity lifecycle events to 34e97358542be64b8f458d75d997ef585f6d9fce4cSam Judd * intelligently stop, start, and restart requests. Retrieve either by instantiating a new object, or to take advantage 35e97358542be64b8f458d75d997ef585f6d9fce4cSam Judd * built in Activity and Fragment lifecycle handling, use the static Glide.load methods with your Fragment or Activity. 36e97358542be64b8f458d75d997ef585f6d9fce4cSam Judd * 37e97358542be64b8f458d75d997ef585f6d9fce4cSam Judd * @see Glide#with(Activity) 38e97358542be64b8f458d75d997ef585f6d9fce4cSam Judd * @see Glide#with(FragmentActivity) 39e97358542be64b8f458d75d997ef585f6d9fce4cSam Judd * @see Glide#with(Fragment) 40e97358542be64b8f458d75d997ef585f6d9fce4cSam Judd * @see Glide#with(android.support.v4.app.Fragment) 41e97358542be64b8f458d75d997ef585f6d9fce4cSam Judd * @see Glide#with(Context) 42e97358542be64b8f458d75d997ef585f6d9fce4cSam Judd */ 43e97358542be64b8f458d75d997ef585f6d9fce4cSam Juddpublic class RequestManager { 44667fb8129df68fbab0c489b23b2ca9d392cd45a0Sam Judd private final ConnectivityMonitor connectivityMonitor; 45e97358542be64b8f458d75d997ef585f6d9fce4cSam Judd private final Context context; 46667fb8129df68fbab0c489b23b2ca9d392cd45a0Sam Judd private final RequestTracker requestTracker; 47e97358542be64b8f458d75d997ef585f6d9fce4cSam Judd private final Glide glide; 48ad98053756e240354de03051733c0bf41bf8f25bSam Judd private final OptionsApplier optionsApplier; 49ad98053756e240354de03051733c0bf41bf8f25bSam Judd private DefaultOptions options; 508a6067fbe2a670d2e893c79c9c0ec17817da6568Sam Judd 517e7c54e34b096f6bee9cefe6ef043464a984e5ffSam Judd public RequestManager(Context context) { 52667fb8129df68fbab0c489b23b2ca9d392cd45a0Sam Judd this(context, new RequestTracker(), new ConnectivityMonitorFactory()); 53667fb8129df68fbab0c489b23b2ca9d392cd45a0Sam Judd } 54667fb8129df68fbab0c489b23b2ca9d392cd45a0Sam Judd 55667fb8129df68fbab0c489b23b2ca9d392cd45a0Sam Judd RequestManager(Context context, RequestTracker requestTracker, ConnectivityMonitorFactory factory) { 56e97358542be64b8f458d75d997ef585f6d9fce4cSam Judd this.context = context; 57667fb8129df68fbab0c489b23b2ca9d392cd45a0Sam Judd this.requestTracker = requestTracker; 58e97358542be64b8f458d75d997ef585f6d9fce4cSam Judd this.connectivityMonitor = factory.build(context, new RequestManagerConnectivityListener(requestTracker)); 59667fb8129df68fbab0c489b23b2ca9d392cd45a0Sam Judd connectivityMonitor.register(); 60e97358542be64b8f458d75d997ef585f6d9fce4cSam Judd this.glide = Glide.get(context); 61ad98053756e240354de03051733c0bf41bf8f25bSam Judd this.optionsApplier = new OptionsApplier(); 62ad98053756e240354de03051733c0bf41bf8f25bSam Judd } 63ad98053756e240354de03051733c0bf41bf8f25bSam Judd 64ad98053756e240354de03051733c0bf41bf8f25bSam Judd public interface DefaultOptions { 65ad98053756e240354de03051733c0bf41bf8f25bSam Judd public <T> void apply(T model, GenericRequestBuilder<T, ?, ?, ?> requestBuilder); 66ad98053756e240354de03051733c0bf41bf8f25bSam Judd } 67ad98053756e240354de03051733c0bf41bf8f25bSam Judd 68ad98053756e240354de03051733c0bf41bf8f25bSam Judd public void setDefaultOptions(DefaultOptions options) { 69ad98053756e240354de03051733c0bf41bf8f25bSam Judd this.options = options; 70ad98053756e240354de03051733c0bf41bf8f25bSam Judd } 71ad98053756e240354de03051733c0bf41bf8f25bSam Judd 72ad98053756e240354de03051733c0bf41bf8f25bSam Judd /** 73ad98053756e240354de03051733c0bf41bf8f25bSam Judd * Cancels any in progress loads, but does not clear resources of completed loads. 74ad98053756e240354de03051733c0bf41bf8f25bSam Judd */ 75ad98053756e240354de03051733c0bf41bf8f25bSam Judd public void pauseRequests() { 76ad98053756e240354de03051733c0bf41bf8f25bSam Judd requestTracker.pauseRequests(); 77ad98053756e240354de03051733c0bf41bf8f25bSam Judd } 78ad98053756e240354de03051733c0bf41bf8f25bSam Judd 79ad98053756e240354de03051733c0bf41bf8f25bSam Judd /** 80ad98053756e240354de03051733c0bf41bf8f25bSam Judd * Restarts any loads that have not yet completed. 81ad98053756e240354de03051733c0bf41bf8f25bSam Judd */ 82ad98053756e240354de03051733c0bf41bf8f25bSam Judd public void resumeRequests() { 83ad98053756e240354de03051733c0bf41bf8f25bSam Judd requestTracker.resumeRequests(); 84667fb8129df68fbab0c489b23b2ca9d392cd45a0Sam Judd } 85667fb8129df68fbab0c489b23b2ca9d392cd45a0Sam Judd 86e97358542be64b8f458d75d997ef585f6d9fce4cSam Judd /** 87e97358542be64b8f458d75d997ef585f6d9fce4cSam Judd * Lifecycle callback that registers for connectivity events (if the android.permission.ACCESS_NETWORK_STATE 88e97358542be64b8f458d75d997ef585f6d9fce4cSam Judd * permission is present) and restarts failed or paused requests. 89e97358542be64b8f458d75d997ef585f6d9fce4cSam Judd */ 907e7c54e34b096f6bee9cefe6ef043464a984e5ffSam Judd public void onStart() { 91667fb8129df68fbab0c489b23b2ca9d392cd45a0Sam Judd // onStart might not be called because this object may be created after the fragment/activity's onStart method. 92667fb8129df68fbab0c489b23b2ca9d392cd45a0Sam Judd connectivityMonitor.register(); 93667fb8129df68fbab0c489b23b2ca9d392cd45a0Sam Judd 94667fb8129df68fbab0c489b23b2ca9d392cd45a0Sam Judd requestTracker.resumeRequests(); 95667fb8129df68fbab0c489b23b2ca9d392cd45a0Sam Judd } 96667fb8129df68fbab0c489b23b2ca9d392cd45a0Sam Judd 97e97358542be64b8f458d75d997ef585f6d9fce4cSam Judd /** 98e97358542be64b8f458d75d997ef585f6d9fce4cSam Judd * Lifecycle callback that unregisters for connectivity events (if the android.permission.ACCESS_NETWORK_STATE 99e97358542be64b8f458d75d997ef585f6d9fce4cSam Judd * permission is present) and pauses in progress loads. 100e97358542be64b8f458d75d997ef585f6d9fce4cSam Judd */ 1017e7c54e34b096f6bee9cefe6ef043464a984e5ffSam Judd public void onStop() { 102667fb8129df68fbab0c489b23b2ca9d392cd45a0Sam Judd connectivityMonitor.unregister(); 103667fb8129df68fbab0c489b23b2ca9d392cd45a0Sam Judd requestTracker.pauseRequests(); 104667fb8129df68fbab0c489b23b2ca9d392cd45a0Sam Judd } 105667fb8129df68fbab0c489b23b2ca9d392cd45a0Sam Judd 106e97358542be64b8f458d75d997ef585f6d9fce4cSam Judd /** 107e97358542be64b8f458d75d997ef585f6d9fce4cSam Judd * Lifecycle callback that cancels all in progress requests and clears and recycles resources for all completed 108e97358542be64b8f458d75d997ef585f6d9fce4cSam Judd * requests. 109e97358542be64b8f458d75d997ef585f6d9fce4cSam Judd */ 1107e7c54e34b096f6bee9cefe6ef043464a984e5ffSam Judd public void onDestroy() { 111667fb8129df68fbab0c489b23b2ca9d392cd45a0Sam Judd requestTracker.clearRequests(); 112667fb8129df68fbab0c489b23b2ca9d392cd45a0Sam Judd } 113667fb8129df68fbab0c489b23b2ca9d392cd45a0Sam Judd 114e97358542be64b8f458d75d997ef585f6d9fce4cSam Judd /** 115e97358542be64b8f458d75d997ef585f6d9fce4cSam Judd * Use the given generic model loader to load the given generic data class. 116e97358542be64b8f458d75d997ef585f6d9fce4cSam Judd * <p> 117e97358542be64b8f458d75d997ef585f6d9fce4cSam Judd * Note that in most cases you will also need to specify an {@link ResourceDecoder} and an 118e97358542be64b8f458d75d997ef585f6d9fce4cSam Judd * {@link ResourceEncoder} for the load to complete successfully. 119e97358542be64b8f458d75d997ef585f6d9fce4cSam Judd * </p> 120e97358542be64b8f458d75d997ef585f6d9fce4cSam Judd * @param modelLoader The {@link ModelLoader} class to use to load the model. 121e97358542be64b8f458d75d997ef585f6d9fce4cSam Judd * @param dataClass The type of data the {@link ModelLoader} will load. 122e97358542be64b8f458d75d997ef585f6d9fce4cSam Judd * @param <A> The type of the model to be loaded. 123e97358542be64b8f458d75d997ef585f6d9fce4cSam Judd * @param <T> The type of the data to be loaded from the mode. 124e97358542be64b8f458d75d997ef585f6d9fce4cSam Judd * @return A {@link GenericModelRequest} to set options for the load and ultimately the target to load the model 125e97358542be64b8f458d75d997ef585f6d9fce4cSam Judd * into. 126e97358542be64b8f458d75d997ef585f6d9fce4cSam Judd */ 127e97358542be64b8f458d75d997ef585f6d9fce4cSam Judd public <A, T> GenericModelRequest<A, T> using(ModelLoader<A, T> modelLoader, Class<T> dataClass) { 128ad98053756e240354de03051733c0bf41bf8f25bSam Judd return new GenericModelRequest<A, T>(modelLoader, dataClass); 129e97358542be64b8f458d75d997ef585f6d9fce4cSam Judd } 130e97358542be64b8f458d75d997ef585f6d9fce4cSam Judd 131e97358542be64b8f458d75d997ef585f6d9fce4cSam Judd /** 132e97358542be64b8f458d75d997ef585f6d9fce4cSam Judd * Set the {@link ModelLoader} to use for for a new load where the model loader translates from a model to an 133e97358542be64b8f458d75d997ef585f6d9fce4cSam Judd * {@link InputStream} resource for loading images. 134e97358542be64b8f458d75d997ef585f6d9fce4cSam Judd * 135e97358542be64b8f458d75d997ef585f6d9fce4cSam Judd * @param modelLoader The model loader to use. 136e97358542be64b8f458d75d997ef585f6d9fce4cSam Judd * @param <T> The type of the model. 137e97358542be64b8f458d75d997ef585f6d9fce4cSam Judd * @return A new {@link ImageModelRequest}. 138e97358542be64b8f458d75d997ef585f6d9fce4cSam Judd */ 139e97358542be64b8f458d75d997ef585f6d9fce4cSam Judd public <T> ImageModelRequest<T> using(final StreamModelLoader<T> modelLoader) { 140ad98053756e240354de03051733c0bf41bf8f25bSam Judd return new ImageModelRequest<T>(modelLoader); 141e97358542be64b8f458d75d997ef585f6d9fce4cSam Judd } 142e97358542be64b8f458d75d997ef585f6d9fce4cSam Judd 143e97358542be64b8f458d75d997ef585f6d9fce4cSam Judd /** 144e97358542be64b8f458d75d997ef585f6d9fce4cSam Judd * A convenience method to use a {@link StreamByteArrayLoader} to decode an image from a byte array. 145e97358542be64b8f458d75d997ef585f6d9fce4cSam Judd * 146e97358542be64b8f458d75d997ef585f6d9fce4cSam Judd * @param modelLoader The byte array loader. 147e97358542be64b8f458d75d997ef585f6d9fce4cSam Judd * @return A new {@link ImageModelRequest}. 148e97358542be64b8f458d75d997ef585f6d9fce4cSam Judd */ 149e97358542be64b8f458d75d997ef585f6d9fce4cSam Judd public ImageModelRequest<byte[]> using(StreamByteArrayLoader modelLoader) { 150ad98053756e240354de03051733c0bf41bf8f25bSam Judd return new ImageModelRequest<byte[]>(modelLoader); 151e97358542be64b8f458d75d997ef585f6d9fce4cSam Judd } 152e97358542be64b8f458d75d997ef585f6d9fce4cSam Judd 153e97358542be64b8f458d75d997ef585f6d9fce4cSam Judd /** 154e97358542be64b8f458d75d997ef585f6d9fce4cSam Judd * Set the {@link ModelLoader} to use for a new load where the model loader translates from a model to an 155e97358542be64b8f458d75d997ef585f6d9fce4cSam Judd * {@link ParcelFileDescriptor} resource for loading video thumbnails. 156e97358542be64b8f458d75d997ef585f6d9fce4cSam Judd * 157e97358542be64b8f458d75d997ef585f6d9fce4cSam Judd * @param modelLoader The model loader to use. 158e97358542be64b8f458d75d997ef585f6d9fce4cSam Judd * @param <T> The type of the model. 159e97358542be64b8f458d75d997ef585f6d9fce4cSam Judd * @return A new {@link VideoModelRequest}. 160e97358542be64b8f458d75d997ef585f6d9fce4cSam Judd */ 161e97358542be64b8f458d75d997ef585f6d9fce4cSam Judd public <T> VideoModelRequest<T> using(final FileDescriptorModelLoader<T> modelLoader) { 162ad98053756e240354de03051733c0bf41bf8f25bSam Judd return new VideoModelRequest<T>(modelLoader); 163e97358542be64b8f458d75d997ef585f6d9fce4cSam Judd } 164e97358542be64b8f458d75d997ef585f6d9fce4cSam Judd 165e97358542be64b8f458d75d997ef585f6d9fce4cSam Judd /** 166e97358542be64b8f458d75d997ef585f6d9fce4cSam Judd * Use the {@link ModelLoaderFactory} currently registered for {@link String} to load the image represented by 167e97358542be64b8f458d75d997ef585f6d9fce4cSam Judd * the given {@link String}. Defaults to {@link StreamStringLoader.Factory} and {@link StreamStringLoader} to 168e97358542be64b8f458d75d997ef585f6d9fce4cSam Judd * load the given model. 169e97358542be64b8f458d75d997ef585f6d9fce4cSam Judd * 170e97358542be64b8f458d75d997ef585f6d9fce4cSam Judd * @see #using(StreamModelLoader) 171e97358542be64b8f458d75d997ef585f6d9fce4cSam Judd * 172e97358542be64b8f458d75d997ef585f6d9fce4cSam Judd * @param string The string representing the image. Must be either a path, or a uri handled by 173e97358542be64b8f458d75d997ef585f6d9fce4cSam Judd * {@link StreamUriLoader} 174e97358542be64b8f458d75d997ef585f6d9fce4cSam Judd * @return A {@link DrawableTypeRequest} to set options for the load and ultimately the target to load the model 175e97358542be64b8f458d75d997ef585f6d9fce4cSam Judd * into. 176e97358542be64b8f458d75d997ef585f6d9fce4cSam Judd */ 177e97358542be64b8f458d75d997ef585f6d9fce4cSam Judd public DrawableTypeRequest<String> load(String string) { 178e97358542be64b8f458d75d997ef585f6d9fce4cSam Judd return loadGeneric(string); 179e97358542be64b8f458d75d997ef585f6d9fce4cSam Judd } 180e97358542be64b8f458d75d997ef585f6d9fce4cSam Judd 181e97358542be64b8f458d75d997ef585f6d9fce4cSam Judd /** 182e97358542be64b8f458d75d997ef585f6d9fce4cSam Judd * Use the {@link ModelLoaderFactory} currently registered for {@link Uri} to load the image at the given uri. 183e97358542be64b8f458d75d997ef585f6d9fce4cSam Judd * Defaults to {@link StreamUriLoader.Factory} and {@link StreamUriLoader}. 184e97358542be64b8f458d75d997ef585f6d9fce4cSam Judd * 185e97358542be64b8f458d75d997ef585f6d9fce4cSam Judd * @see #using(StreamModelLoader) 186e97358542be64b8f458d75d997ef585f6d9fce4cSam Judd * 187e97358542be64b8f458d75d997ef585f6d9fce4cSam Judd * @param uri The uri representing the image. Must be a uri handled by {@link StreamUriLoader} 188e97358542be64b8f458d75d997ef585f6d9fce4cSam Judd * @return A {@link DrawableTypeRequest} to set options for the load and ultimately the target to load the model 189e97358542be64b8f458d75d997ef585f6d9fce4cSam Judd * into. 190e97358542be64b8f458d75d997ef585f6d9fce4cSam Judd */ 191e97358542be64b8f458d75d997ef585f6d9fce4cSam Judd public DrawableTypeRequest<Uri> load(Uri uri) { 192e97358542be64b8f458d75d997ef585f6d9fce4cSam Judd return loadGeneric(uri); 193e97358542be64b8f458d75d997ef585f6d9fce4cSam Judd } 194e97358542be64b8f458d75d997ef585f6d9fce4cSam Judd 195e97358542be64b8f458d75d997ef585f6d9fce4cSam Judd /** 196e97358542be64b8f458d75d997ef585f6d9fce4cSam Judd * Use {@link MediaStore.Images.Thumbnails} and {@link MediaStore.Video.Thumbnails} to retrieve pre-generated 197e97358542be64b8f458d75d997ef585f6d9fce4cSam Judd * thumbnails for the given uri. Falls back to the registered {@link ModelLoaderFactory} registered for {@link Uri}s 198e97358542be64b8f458d75d997ef585f6d9fce4cSam Judd * if the given uri is not a media store uri or if no pre-generated thumbnail exists for the given uri. In addition, 199e97358542be64b8f458d75d997ef585f6d9fce4cSam Judd * mixes the given mimeType, dateModified, and orientation into the cache key to detect and invalidate thumbnails 200e97358542be64b8f458d75d997ef585f6d9fce4cSam Judd * if content is changed locally. 201e97358542be64b8f458d75d997ef585f6d9fce4cSam Judd * 202e97358542be64b8f458d75d997ef585f6d9fce4cSam Judd * @param uri The uri representing the media. 203e97358542be64b8f458d75d997ef585f6d9fce4cSam Judd * @param mimeType The mime type of the media store media. Ok to default to empty string "". See 204e97358542be64b8f458d75d997ef585f6d9fce4cSam Judd * {@link MediaStore.Images.ImageColumns#MIME_TYPE} or {@link MediaStore.Video.VideoColumns#MIME_TYPE}. 205e97358542be64b8f458d75d997ef585f6d9fce4cSam Judd * @param dateModified The date modified time of the media store media. Ok to default to 0. See 206e97358542be64b8f458d75d997ef585f6d9fce4cSam Judd * {@link MediaStore.Images.ImageColumns#DATE_MODIFIED} or {@link MediaStore.Video.VideoColumns#DATE_MODIFIED}. 207e97358542be64b8f458d75d997ef585f6d9fce4cSam Judd * @param orientation The orientation of the media store media. Ok to default to 0. See 208e97358542be64b8f458d75d997ef585f6d9fce4cSam Judd * {@link MediaStore.Images.ImageColumns#ORIENTATION}. 209e97358542be64b8f458d75d997ef585f6d9fce4cSam Judd * @return A new {@link DrawableRequestBuilder} to set options for the load and ultimately the target to load the 210e97358542be64b8f458d75d997ef585f6d9fce4cSam Judd * uri into. 211e97358542be64b8f458d75d997ef585f6d9fce4cSam Judd */ 212e97358542be64b8f458d75d997ef585f6d9fce4cSam Judd public DrawableTypeRequest<Uri> loadFromMediaStore(Uri uri, String mimeType, long dateModified, int orientation) { 213e97358542be64b8f458d75d997ef585f6d9fce4cSam Judd ModelLoader<Uri, InputStream> genericStreamLoader = Glide.buildStreamModelLoader(uri, context); 214e97358542be64b8f458d75d997ef585f6d9fce4cSam Judd ModelLoader<Uri, InputStream> mediaStoreLoader = new MediaStoreStreamLoader(context, genericStreamLoader, 215e97358542be64b8f458d75d997ef585f6d9fce4cSam Judd mimeType, dateModified, orientation); 216e97358542be64b8f458d75d997ef585f6d9fce4cSam Judd ModelLoader<Uri, ParcelFileDescriptor> fileDescriptorModelLoader = Glide.buildFileDescriptorModelLoader(uri, 217e97358542be64b8f458d75d997ef585f6d9fce4cSam Judd context); 218ad98053756e240354de03051733c0bf41bf8f25bSam Judd return optionsApplier.apply(uri, new DrawableTypeRequest<Uri>(uri, mediaStoreLoader, fileDescriptorModelLoader, 219ad98053756e240354de03051733c0bf41bf8f25bSam Judd context, glide, requestTracker, optionsApplier)); 220e97358542be64b8f458d75d997ef585f6d9fce4cSam Judd } 221e97358542be64b8f458d75d997ef585f6d9fce4cSam Judd 222e97358542be64b8f458d75d997ef585f6d9fce4cSam Judd /** 223e97358542be64b8f458d75d997ef585f6d9fce4cSam Judd * Use the {@link ModelLoaderFactory} currently registered for {@link File} to load the image represented by the 224e97358542be64b8f458d75d997ef585f6d9fce4cSam Judd * given {@link File}. Defaults to {@link StreamFileLoader.Factory} and {@link StreamFileLoader} to load the 225e97358542be64b8f458d75d997ef585f6d9fce4cSam Judd * given model. 226e97358542be64b8f458d75d997ef585f6d9fce4cSam Judd * 227e97358542be64b8f458d75d997ef585f6d9fce4cSam Judd * @see #using(StreamModelLoader) 228e97358542be64b8f458d75d997ef585f6d9fce4cSam Judd * 229e97358542be64b8f458d75d997ef585f6d9fce4cSam Judd * @param file The File containing the image 230e97358542be64b8f458d75d997ef585f6d9fce4cSam Judd * @return A {@link DrawableTypeRequest} to set options for the load and ultimately the target to load the model 231e97358542be64b8f458d75d997ef585f6d9fce4cSam Judd * into. 232e97358542be64b8f458d75d997ef585f6d9fce4cSam Judd */ 233e97358542be64b8f458d75d997ef585f6d9fce4cSam Judd public DrawableTypeRequest<File> load(File file) { 234e97358542be64b8f458d75d997ef585f6d9fce4cSam Judd return loadGeneric(file); 235e97358542be64b8f458d75d997ef585f6d9fce4cSam Judd } 236e97358542be64b8f458d75d997ef585f6d9fce4cSam Judd 237e97358542be64b8f458d75d997ef585f6d9fce4cSam Judd /** 238e97358542be64b8f458d75d997ef585f6d9fce4cSam Judd * Use the {@link ModelLoaderFactory} currently registered for {@link Integer} to load the image represented by 239e97358542be64b8f458d75d997ef585f6d9fce4cSam Judd * the given {@link Integer} resource id. Defaults to {@link StreamResourceLoader.Factory} and 240e97358542be64b8f458d75d997ef585f6d9fce4cSam Judd * {@link StreamResourceLoader} to load the given model. 241e97358542be64b8f458d75d997ef585f6d9fce4cSam Judd * 242e97358542be64b8f458d75d997ef585f6d9fce4cSam Judd * @see #using(StreamModelLoader) 243e97358542be64b8f458d75d997ef585f6d9fce4cSam Judd * 244e97358542be64b8f458d75d997ef585f6d9fce4cSam Judd * @param resourceId the id of the resource containing the image 245e97358542be64b8f458d75d997ef585f6d9fce4cSam Judd * @return A {@link DrawableTypeRequest} to set options for the load and ultimately the target to load the model 246e97358542be64b8f458d75d997ef585f6d9fce4cSam Judd * into. 247e97358542be64b8f458d75d997ef585f6d9fce4cSam Judd */ 248e97358542be64b8f458d75d997ef585f6d9fce4cSam Judd public DrawableTypeRequest<Integer> load(Integer resourceId) { 249e97358542be64b8f458d75d997ef585f6d9fce4cSam Judd return loadGeneric(resourceId); 250e97358542be64b8f458d75d997ef585f6d9fce4cSam Judd } 251e97358542be64b8f458d75d997ef585f6d9fce4cSam Judd 252e97358542be64b8f458d75d997ef585f6d9fce4cSam Judd /** 253e97358542be64b8f458d75d997ef585f6d9fce4cSam Judd * Use the {@link ModelLoaderFactory} currently registered for the given model type to load the image 254e97358542be64b8f458d75d997ef585f6d9fce4cSam Judd * represented by the given model. 255e97358542be64b8f458d75d997ef585f6d9fce4cSam Judd * 256e97358542be64b8f458d75d997ef585f6d9fce4cSam Judd * @param model The model to load. 257e97358542be64b8f458d75d997ef585f6d9fce4cSam Judd * @param <T> The type of the model to load. 258e97358542be64b8f458d75d997ef585f6d9fce4cSam Judd * @return A {@link DrawableTypeRequest} to set options for the load and ultimately the target to load the image 259e97358542be64b8f458d75d997ef585f6d9fce4cSam Judd * into. 260e97358542be64b8f458d75d997ef585f6d9fce4cSam Judd */ 261e97358542be64b8f458d75d997ef585f6d9fce4cSam Judd @SuppressWarnings("unused") 262e97358542be64b8f458d75d997ef585f6d9fce4cSam Judd public <T> DrawableTypeRequest<T> loadFromImage(T model) { 263e97358542be64b8f458d75d997ef585f6d9fce4cSam Judd return loadGeneric(model); 264e97358542be64b8f458d75d997ef585f6d9fce4cSam Judd } 265e97358542be64b8f458d75d997ef585f6d9fce4cSam Judd 266e97358542be64b8f458d75d997ef585f6d9fce4cSam Judd /** 267e97358542be64b8f458d75d997ef585f6d9fce4cSam Judd * Use the {@link ModelLoaderFactory} currently registered for {@link URL} to load the image represented by the 268e97358542be64b8f458d75d997ef585f6d9fce4cSam Judd * given {@link URL}. Defaults to {@link VolleyUrlLoader.Factory} and {@link VolleyUrlLoader} to load the given 269e97358542be64b8f458d75d997ef585f6d9fce4cSam Judd * model. 270e97358542be64b8f458d75d997ef585f6d9fce4cSam Judd * 271e97358542be64b8f458d75d997ef585f6d9fce4cSam Judd * @see #using(StreamModelLoader) 272e97358542be64b8f458d75d997ef585f6d9fce4cSam Judd * 273e97358542be64b8f458d75d997ef585f6d9fce4cSam Judd * @param url The URL representing the image. 274e97358542be64b8f458d75d997ef585f6d9fce4cSam Judd * @return A {@link DrawableTypeRequest} to set options for the load and ultimately the target to load the model 275e97358542be64b8f458d75d997ef585f6d9fce4cSam Judd * into. 276e97358542be64b8f458d75d997ef585f6d9fce4cSam Judd */ 277e97358542be64b8f458d75d997ef585f6d9fce4cSam Judd public DrawableTypeRequest<URL> loadFromImage(URL url) { 278e97358542be64b8f458d75d997ef585f6d9fce4cSam Judd return loadGeneric(url); 279e97358542be64b8f458d75d997ef585f6d9fce4cSam Judd } 280e97358542be64b8f458d75d997ef585f6d9fce4cSam Judd 281e97358542be64b8f458d75d997ef585f6d9fce4cSam Judd /** 282e97358542be64b8f458d75d997ef585f6d9fce4cSam Judd * Use a new {@link StreamByteArrayLoader} to load an image from the given model. 283e97358542be64b8f458d75d997ef585f6d9fce4cSam Judd * 284e97358542be64b8f458d75d997ef585f6d9fce4cSam Judd * @see #loadFromImage(byte[]) 285e97358542be64b8f458d75d997ef585f6d9fce4cSam Judd * 286e97358542be64b8f458d75d997ef585f6d9fce4cSam Judd * @param model The data to load. 287e97358542be64b8f458d75d997ef585f6d9fce4cSam Judd * @param id A unique id that identifies the image represented by the model suitable for use as a cache key 288e97358542be64b8f458d75d997ef585f6d9fce4cSam Judd * (url, filepath etc). If there is no suitable id, use {@link #loadFromImage(byte[])} instaed. 289e97358542be64b8f458d75d997ef585f6d9fce4cSam Judd * @return A {@link DrawableTypeRequest} to set options for the load and ultimately the target to load the image 290e97358542be64b8f458d75d997ef585f6d9fce4cSam Judd * into. 291e97358542be64b8f458d75d997ef585f6d9fce4cSam Judd */ 292e97358542be64b8f458d75d997ef585f6d9fce4cSam Judd public DrawableTypeRequest<byte[]> loadFromImage(byte[] model, final String id) { 293e97358542be64b8f458d75d997ef585f6d9fce4cSam Judd final StreamByteArrayLoader loader = new StreamByteArrayLoader(id); 294ad98053756e240354de03051733c0bf41bf8f25bSam Judd return optionsApplier.apply(model, 295ad98053756e240354de03051733c0bf41bf8f25bSam Judd new DrawableTypeRequest<byte[]>(model, loader, null, context, glide, requestTracker, optionsApplier)); 296e97358542be64b8f458d75d997ef585f6d9fce4cSam Judd } 297e97358542be64b8f458d75d997ef585f6d9fce4cSam Judd 298e97358542be64b8f458d75d997ef585f6d9fce4cSam Judd /** 299e97358542be64b8f458d75d997ef585f6d9fce4cSam Judd * Use a new {@link StreamByteArrayLoader} to load an image from the given model. Suitable when there is no 300e97358542be64b8f458d75d997ef585f6d9fce4cSam Judd * simple id that represents the given data. 301e97358542be64b8f458d75d997ef585f6d9fce4cSam Judd * 302e97358542be64b8f458d75d997ef585f6d9fce4cSam Judd * @param model the data to load. 303e97358542be64b8f458d75d997ef585f6d9fce4cSam Judd * @return A {@link DrawableTypeRequest} to set options for the load and ultimately the target to load the image 304e97358542be64b8f458d75d997ef585f6d9fce4cSam Judd * into. 305e97358542be64b8f458d75d997ef585f6d9fce4cSam Judd */ 306e97358542be64b8f458d75d997ef585f6d9fce4cSam Judd public DrawableTypeRequest<byte[]> loadFromImage(byte[] model) { 307ad98053756e240354de03051733c0bf41bf8f25bSam Judd return loadFromImage(model, UUID.randomUUID() 308ad98053756e240354de03051733c0bf41bf8f25bSam Judd .toString()); 309e97358542be64b8f458d75d997ef585f6d9fce4cSam Judd } 310e97358542be64b8f458d75d997ef585f6d9fce4cSam Judd 311e97358542be64b8f458d75d997ef585f6d9fce4cSam Judd /** 312e97358542be64b8f458d75d997ef585f6d9fce4cSam Judd * Use the {@link ModelLoaderFactory} currently registered for the given model type for 313e97358542be64b8f458d75d997ef585f6d9fce4cSam Judd * {@link ParcelFileDescriptor}s to load a thumbnail for the video represented by the given model. 314e97358542be64b8f458d75d997ef585f6d9fce4cSam Judd * 315e97358542be64b8f458d75d997ef585f6d9fce4cSam Judd * @param model The model to load. 316e97358542be64b8f458d75d997ef585f6d9fce4cSam Judd * @param <T> The type of the model to load. 317e97358542be64b8f458d75d997ef585f6d9fce4cSam Judd * @return A {@link DrawableTypeRequest} to set options for the load and ultimately the target to load the image 318e97358542be64b8f458d75d997ef585f6d9fce4cSam Judd * into. 319e97358542be64b8f458d75d997ef585f6d9fce4cSam Judd */ 320e97358542be64b8f458d75d997ef585f6d9fce4cSam Judd @SuppressWarnings("unused") 321e97358542be64b8f458d75d997ef585f6d9fce4cSam Judd public <T> DrawableTypeRequest<T> loadFromVideo(T model) { 322e97358542be64b8f458d75d997ef585f6d9fce4cSam Judd return loadGeneric(model); 323e97358542be64b8f458d75d997ef585f6d9fce4cSam Judd } 324e97358542be64b8f458d75d997ef585f6d9fce4cSam Judd 325e97358542be64b8f458d75d997ef585f6d9fce4cSam Judd /** 326e97358542be64b8f458d75d997ef585f6d9fce4cSam Judd * Use the {@link ModelLoaderFactory}s currently registered for the given model type for 327e97358542be64b8f458d75d997ef585f6d9fce4cSam Judd * {@link InputStream}s and {@link ParcelFileDescriptor}s to load a thumbnail from either the image or the video 328e97358542be64b8f458d75d997ef585f6d9fce4cSam Judd * represented by the given model. 329e97358542be64b8f458d75d997ef585f6d9fce4cSam Judd * 330e97358542be64b8f458d75d997ef585f6d9fce4cSam Judd * @param model The model the load. 331e97358542be64b8f458d75d997ef585f6d9fce4cSam Judd * @param <T> The type of the model to load. 332e97358542be64b8f458d75d997ef585f6d9fce4cSam Judd * @return A {@link DrawableTypeRequest} to set options for the load and ultimately the target to load the image 333e97358542be64b8f458d75d997ef585f6d9fce4cSam Judd * into. 334e97358542be64b8f458d75d997ef585f6d9fce4cSam Judd */ 335e97358542be64b8f458d75d997ef585f6d9fce4cSam Judd public <T> DrawableTypeRequest<T> load(T model) { 336e97358542be64b8f458d75d997ef585f6d9fce4cSam Judd return loadGeneric(model); 337e97358542be64b8f458d75d997ef585f6d9fce4cSam Judd } 338e97358542be64b8f458d75d997ef585f6d9fce4cSam Judd 339e97358542be64b8f458d75d997ef585f6d9fce4cSam Judd private <T> DrawableTypeRequest<T> loadGeneric(T model) { 340e97358542be64b8f458d75d997ef585f6d9fce4cSam Judd ModelLoader<T, InputStream> streamModelLoader = Glide.buildStreamModelLoader(model, context); 341e97358542be64b8f458d75d997ef585f6d9fce4cSam Judd ModelLoader<T, ParcelFileDescriptor> fileDescriptorModelLoader = 342e97358542be64b8f458d75d997ef585f6d9fce4cSam Judd Glide.buildFileDescriptorModelLoader(model, context); 343ad98053756e240354de03051733c0bf41bf8f25bSam Judd if (model != null && streamModelLoader == null && fileDescriptorModelLoader == null) { 344ad98053756e240354de03051733c0bf41bf8f25bSam Judd throw new IllegalArgumentException("Unknown type " + model + ". You must provide a Model of a type for" 345ad98053756e240354de03051733c0bf41bf8f25bSam Judd + " which there is a registered ModelLoader, if you are using a custom model, you must first call" 346ad98053756e240354de03051733c0bf41bf8f25bSam Judd + " Glide#register with a ModelLoaderFactory for your custom model class"); 347ad98053756e240354de03051733c0bf41bf8f25bSam Judd } 348ad98053756e240354de03051733c0bf41bf8f25bSam Judd return optionsApplier.apply(model, new DrawableTypeRequest<T>(model, streamModelLoader, 349ad98053756e240354de03051733c0bf41bf8f25bSam Judd fileDescriptorModelLoader, context, glide, requestTracker, optionsApplier)); 350e97358542be64b8f458d75d997ef585f6d9fce4cSam Judd } 351e97358542be64b8f458d75d997ef585f6d9fce4cSam Judd 352e97358542be64b8f458d75d997ef585f6d9fce4cSam Judd /** 353e97358542be64b8f458d75d997ef585f6d9fce4cSam Judd * A helper class for building requests with custom {@link ModelLoader}s that translate models to 354e97358542be64b8f458d75d997ef585f6d9fce4cSam Judd * {@link ParcelFileDescriptor} resources for loading video thumbnails. 355e97358542be64b8f458d75d997ef585f6d9fce4cSam Judd * 356e97358542be64b8f458d75d997ef585f6d9fce4cSam Judd * @param <T> The type of the model. 357e97358542be64b8f458d75d997ef585f6d9fce4cSam Judd */ 358ad98053756e240354de03051733c0bf41bf8f25bSam Judd public class VideoModelRequest<T> { 359e97358542be64b8f458d75d997ef585f6d9fce4cSam Judd private final ModelLoader<T, ParcelFileDescriptor> loader; 360e97358542be64b8f458d75d997ef585f6d9fce4cSam Judd 361ad98053756e240354de03051733c0bf41bf8f25bSam Judd private VideoModelRequest(ModelLoader<T, ParcelFileDescriptor> loader) { 362e97358542be64b8f458d75d997ef585f6d9fce4cSam Judd this.loader = loader; 363e97358542be64b8f458d75d997ef585f6d9fce4cSam Judd } 364e97358542be64b8f458d75d997ef585f6d9fce4cSam Judd 365e97358542be64b8f458d75d997ef585f6d9fce4cSam Judd public BitmapTypeRequest<T> loadFromVideo(T model) { 366ad98053756e240354de03051733c0bf41bf8f25bSam Judd return optionsApplier.apply(model, new BitmapTypeRequest<T>(context, model, null, loader, glide, 367ad98053756e240354de03051733c0bf41bf8f25bSam Judd requestTracker, optionsApplier)); 368e97358542be64b8f458d75d997ef585f6d9fce4cSam Judd } 369e97358542be64b8f458d75d997ef585f6d9fce4cSam Judd } 370e97358542be64b8f458d75d997ef585f6d9fce4cSam Judd 371e97358542be64b8f458d75d997ef585f6d9fce4cSam Judd /** 372e97358542be64b8f458d75d997ef585f6d9fce4cSam Judd * A helper class for building requests with custom {@link ModelLoader}s that translate models to 373e97358542be64b8f458d75d997ef585f6d9fce4cSam Judd * {@link InputStream} resources for loading images. 374e97358542be64b8f458d75d997ef585f6d9fce4cSam Judd * 375e97358542be64b8f458d75d997ef585f6d9fce4cSam Judd * @param <T> The type of the model. 376e97358542be64b8f458d75d997ef585f6d9fce4cSam Judd */ 377ad98053756e240354de03051733c0bf41bf8f25bSam Judd public class ImageModelRequest<T> { 378e97358542be64b8f458d75d997ef585f6d9fce4cSam Judd private final ModelLoader<T, InputStream> loader; 379e97358542be64b8f458d75d997ef585f6d9fce4cSam Judd 380ad98053756e240354de03051733c0bf41bf8f25bSam Judd private ImageModelRequest(ModelLoader<T, InputStream> loader) { 381e97358542be64b8f458d75d997ef585f6d9fce4cSam Judd this.loader = loader; 382e97358542be64b8f458d75d997ef585f6d9fce4cSam Judd } 383e97358542be64b8f458d75d997ef585f6d9fce4cSam Judd 384e97358542be64b8f458d75d997ef585f6d9fce4cSam Judd public DrawableTypeRequest<T> load(T model) { 385ad98053756e240354de03051733c0bf41bf8f25bSam Judd return optionsApplier.apply(model, new DrawableTypeRequest<T>(model, loader, null, context, glide, 386ad98053756e240354de03051733c0bf41bf8f25bSam Judd requestTracker, optionsApplier)); 387e97358542be64b8f458d75d997ef585f6d9fce4cSam Judd } 388e97358542be64b8f458d75d997ef585f6d9fce4cSam Judd } 389e97358542be64b8f458d75d997ef585f6d9fce4cSam Judd 390ad98053756e240354de03051733c0bf41bf8f25bSam Judd class OptionsApplier { 391ad98053756e240354de03051733c0bf41bf8f25bSam Judd 392ad98053756e240354de03051733c0bf41bf8f25bSam Judd public <A, X extends GenericRequestBuilder<A, ?, ?, ?>> X apply(A model, X builder) { 393ad98053756e240354de03051733c0bf41bf8f25bSam Judd if (options != null) { 394ad98053756e240354de03051733c0bf41bf8f25bSam Judd options.apply(model, builder); 395ad98053756e240354de03051733c0bf41bf8f25bSam Judd } 396ad98053756e240354de03051733c0bf41bf8f25bSam Judd return builder; 397ad98053756e240354de03051733c0bf41bf8f25bSam Judd } 398ad98053756e240354de03051733c0bf41bf8f25bSam Judd 399ad98053756e240354de03051733c0bf41bf8f25bSam Judd } 400ad98053756e240354de03051733c0bf41bf8f25bSam Judd 401e97358542be64b8f458d75d997ef585f6d9fce4cSam Judd /** 402e97358542be64b8f458d75d997ef585f6d9fce4cSam Judd * A helper class for building requests with custom {@link ModelLoader}s that translate models to 403e97358542be64b8f458d75d997ef585f6d9fce4cSam Judd * {@link InputStream} resources for loading images. 404e97358542be64b8f458d75d997ef585f6d9fce4cSam Judd * 405e97358542be64b8f458d75d997ef585f6d9fce4cSam Judd * @param <T> The type of the model. 406e97358542be64b8f458d75d997ef585f6d9fce4cSam Judd */ 407ad98053756e240354de03051733c0bf41bf8f25bSam Judd public class GenericModelRequest<A, T> { 408e97358542be64b8f458d75d997ef585f6d9fce4cSam Judd private final ModelLoader<A, T> modelLoader; 409e97358542be64b8f458d75d997ef585f6d9fce4cSam Judd private final Class<T> dataClass; 410e97358542be64b8f458d75d997ef585f6d9fce4cSam Judd 411ad98053756e240354de03051733c0bf41bf8f25bSam Judd private GenericModelRequest(ModelLoader<A, T> modelLoader, Class<T> dataClass) { 412e97358542be64b8f458d75d997ef585f6d9fce4cSam Judd this.modelLoader = modelLoader; 413e97358542be64b8f458d75d997ef585f6d9fce4cSam Judd this.dataClass = dataClass; 414e97358542be64b8f458d75d997ef585f6d9fce4cSam Judd } 415e97358542be64b8f458d75d997ef585f6d9fce4cSam Judd 416ad98053756e240354de03051733c0bf41bf8f25bSam Judd public GenericTypeRequest load(A model) { 417ad98053756e240354de03051733c0bf41bf8f25bSam Judd return new GenericTypeRequest(model, modelLoader, dataClass); 418e97358542be64b8f458d75d997ef585f6d9fce4cSam Judd } 419e97358542be64b8f458d75d997ef585f6d9fce4cSam Judd 420ad98053756e240354de03051733c0bf41bf8f25bSam Judd public class GenericTypeRequest { 421e97358542be64b8f458d75d997ef585f6d9fce4cSam Judd private final A model; 422e97358542be64b8f458d75d997ef585f6d9fce4cSam Judd private final ModelLoader<A, T> modelLoader; 423e97358542be64b8f458d75d997ef585f6d9fce4cSam Judd private final Class<T> dataClass; 424e97358542be64b8f458d75d997ef585f6d9fce4cSam Judd 425ad98053756e240354de03051733c0bf41bf8f25bSam Judd private GenericTypeRequest(A model, ModelLoader<A, T> modelLoader, Class<T> dataClass) { 426e97358542be64b8f458d75d997ef585f6d9fce4cSam Judd this.model = model; 427e97358542be64b8f458d75d997ef585f6d9fce4cSam Judd this.modelLoader = modelLoader; 428e97358542be64b8f458d75d997ef585f6d9fce4cSam Judd this.dataClass = dataClass; 429e97358542be64b8f458d75d997ef585f6d9fce4cSam Judd } 430e97358542be64b8f458d75d997ef585f6d9fce4cSam Judd 431e97358542be64b8f458d75d997ef585f6d9fce4cSam Judd public <Z> GenericTranscodeRequest<A, T, Z> as(Class<Z> resourceClass) { 432ad98053756e240354de03051733c0bf41bf8f25bSam Judd return optionsApplier.apply(model, new GenericTranscodeRequest<A, T, Z>(context, glide, model, 433ad98053756e240354de03051733c0bf41bf8f25bSam Judd modelLoader, dataClass, resourceClass, requestTracker, optionsApplier)); 434e97358542be64b8f458d75d997ef585f6d9fce4cSam Judd } 435e97358542be64b8f458d75d997ef585f6d9fce4cSam Judd } 436e97358542be64b8f458d75d997ef585f6d9fce4cSam Judd } 437e97358542be64b8f458d75d997ef585f6d9fce4cSam Judd 438e97358542be64b8f458d75d997ef585f6d9fce4cSam Judd private static class RequestManagerConnectivityListener implements ConnectivityMonitor.ConnectivityListener { 439e97358542be64b8f458d75d997ef585f6d9fce4cSam Judd private RequestTracker requestTracker; 440e97358542be64b8f458d75d997ef585f6d9fce4cSam Judd 441e97358542be64b8f458d75d997ef585f6d9fce4cSam Judd public RequestManagerConnectivityListener(RequestTracker requestTracker) { 442e97358542be64b8f458d75d997ef585f6d9fce4cSam Judd this.requestTracker = requestTracker; 443e97358542be64b8f458d75d997ef585f6d9fce4cSam Judd } 444667fb8129df68fbab0c489b23b2ca9d392cd45a0Sam Judd 445667fb8129df68fbab0c489b23b2ca9d392cd45a0Sam Judd @Override 446667fb8129df68fbab0c489b23b2ca9d392cd45a0Sam Judd public void onConnectivityChanged(boolean isConnected) { 447667fb8129df68fbab0c489b23b2ca9d392cd45a0Sam Judd if (isConnected) { 448667fb8129df68fbab0c489b23b2ca9d392cd45a0Sam Judd requestTracker.restartRequests(); 449667fb8129df68fbab0c489b23b2ca9d392cd45a0Sam Judd } 450667fb8129df68fbab0c489b23b2ca9d392cd45a0Sam Judd } 451667fb8129df68fbab0c489b23b2ca9d392cd45a0Sam Judd } 4528a6067fbe2a670d2e893c79c9c0ec17817da6568Sam Judd} 453