Skip to content

Commit 66d4caa

Browse files
committed
Allow lazy header factories to return null values.
After this change, we can try to lazily retrieve values for headers even when retrieving those values may fail (due to network operations or I/O). Previously the factories would have had to return some value. ------------- Created by MOE: https://github.com/google/moe MOE_MIGRATED_REVID=107154151
1 parent 4f159aa commit 66d4caa

File tree

3 files changed

+72
-4
lines changed

3 files changed

+72
-4
lines changed

library/src/main/java/com/bumptech/glide/load/model/LazyHeaderFactory.java

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
11
package com.bumptech.glide.load.model;
22

3+
import android.support.annotation.Nullable;
4+
35
/**
46
* An interface for lazily creating headers that allows expensive to calculate headers (oauth for
57
* example) to be generated in the background during the first fetch.
@@ -8,6 +10,15 @@
810
*/
911
public interface LazyHeaderFactory {
1012

13+
/**
14+
* Returns an http header, or {@code null} if no header could be built.
15+
*
16+
* <p>Returning {@code null} or an empty String from this method will result in this particular
17+
* key/value being excluded from the headers provided in the request. If there are multiple
18+
* factories or values for a particular key, any non-null values will still be included for that
19+
* key.
20+
*/
21+
@Nullable
1122
String buildHeader();
1223

1324
}

library/src/main/java/com/bumptech/glide/load/model/LazyHeaders.java

Lines changed: 10 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -47,12 +47,18 @@ private Map<String, String> generateHeaders() {
4747
int size = factories.size();
4848
for (int i = 0; i < size; i++) {
4949
LazyHeaderFactory factory = factories.get(i);
50-
sb.append(factory.buildHeader());
51-
if (i != factories.size() - 1) {
52-
sb.append(',');
50+
String header = factory.buildHeader();
51+
if (!TextUtils.isEmpty(header)) {
52+
sb.append(header);
53+
if (i != factories.size() - 1) {
54+
sb.append(',');
55+
}
5356
}
5457
}
55-
combinedHeaders.put(entry.getKey(), sb.toString());
58+
String values = sb.toString();
59+
if (!TextUtils.isEmpty(values)) {
60+
combinedHeaders.put(entry.getKey(), sb.toString());
61+
}
5662
}
5763

5864
return combinedHeaders;

library/src/test/java/com/bumptech/glide/load/model/LazyHeadersTest.java

Lines changed: 51 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,8 @@
66

77
import com.google.common.testing.EqualsTester;
88

9+
import android.support.annotation.Nullable;
10+
911
import com.bumptech.glide.load.model.LazyHeaders.Builder;
1012

1113
import org.junit.After;
@@ -229,6 +231,55 @@ public void testRemovingAndAddingUserAgentHeaderReplacesDefaultThenAppends() {
229231
assertThat(headers.getHeaders()).containsEntry("User-Agent", "false,true");
230232
}
231233

234+
@Test
235+
public void testKeyNotIncludedWithFactoryThatReturnsNullValue() {
236+
Builder builder = new Builder();
237+
builder.setHeader("test", new LazyHeaderFactory() {
238+
@Nullable
239+
@Override
240+
public String buildHeader() {
241+
return null;
242+
}
243+
});
244+
LazyHeaders headers = builder.build();
245+
assertThat(headers.getHeaders()).doesNotContainKey("test");
246+
}
247+
248+
@Test
249+
public void testKeyNotIncludedWithFactoryThatReturnsEmptyValue() {
250+
Builder builder = new Builder();
251+
builder.setHeader("test", new LazyHeaderFactory() {
252+
@Nullable
253+
@Override
254+
public String buildHeader() {
255+
return "";
256+
}
257+
});
258+
LazyHeaders headers = builder.build();
259+
assertThat(headers.getHeaders()).doesNotContainKey("test");
260+
}
261+
262+
@Test
263+
public void testKeyIncludedWithOneFactoryThatReturnsNullAndOneFactoryThatDoesNotReturnNull() {
264+
Builder builder = new Builder();
265+
builder.addHeader("test", new LazyHeaderFactory() {
266+
@Nullable
267+
@Override
268+
public String buildHeader() {
269+
return null;
270+
}
271+
});
272+
builder.addHeader("test", new LazyHeaderFactory() {
273+
@Nullable
274+
@Override
275+
public String buildHeader() {
276+
return "value";
277+
}
278+
});
279+
LazyHeaders headers = builder.build();
280+
assertThat(headers.getHeaders()).containsEntry("test", "value");
281+
}
282+
232283
@Test
233284
public void testEquals() {
234285
LazyHeaderFactory firstLazyFactory = mock(LazyHeaderFactory.class);

0 commit comments

Comments
 (0)