6
6
import android .os .Build ;
7
7
import android .os .Handler ;
8
8
import android .os .Looper ;
9
+ import android .support .annotation .NonNull ;
10
+ import android .support .annotation .VisibleForTesting ;
9
11
import android .widget .ImageView ;
10
12
import com .bumptech .glide .load .engine .Engine ;
11
13
import com .bumptech .glide .request .RequestOptions ;
12
14
import com .bumptech .glide .request .target .ImageViewTargetFactory ;
13
15
import com .bumptech .glide .request .target .Target ;
16
+ import java .util .Map ;
17
+ import java .util .Map .Entry ;
14
18
15
19
/**
16
20
* Global context for all loads in Glide containing and exposing the various registries and classes
17
21
* required to load resources.
18
22
*/
19
23
@ TargetApi (Build .VERSION_CODES .ICE_CREAM_SANDWICH )
20
24
public class GlideContext extends ContextWrapper {
25
+ @ VisibleForTesting
26
+ static final TransitionOptions <?, ?> DEFAULT_TRANSITION_OPTIONS =
27
+ new GenericTransitionOptions <Object >();
21
28
private final Handler mainHandler ;
22
29
private final Registry registry ;
23
30
private final ImageViewTargetFactory imageViewTargetFactory ;
24
31
private final RequestOptions defaultRequestOptions ;
32
+ private final Map <Class <?>, TransitionOptions <?, ?>> defaultTransitionOptions ;
25
33
private final Engine engine ;
26
34
private final int logLevel ;
27
35
28
36
public GlideContext (Context context , Registry registry ,
29
37
ImageViewTargetFactory imageViewTargetFactory , RequestOptions defaultRequestOptions ,
30
- Engine engine , int logLevel ) {
38
+ Map <Class <?>, TransitionOptions <?, ?>> defaultTransitionOptions , Engine engine ,
39
+ int logLevel ) {
31
40
super (context .getApplicationContext ());
32
41
this .registry = registry ;
33
42
this .imageViewTargetFactory = imageViewTargetFactory ;
34
43
this .defaultRequestOptions = defaultRequestOptions ;
44
+ this .defaultTransitionOptions = defaultTransitionOptions ;
35
45
this .engine = engine ;
36
46
this .logLevel = logLevel ;
37
47
@@ -42,6 +52,23 @@ public RequestOptions getDefaultRequestOptions() {
42
52
return defaultRequestOptions ;
43
53
}
44
54
55
+ @ SuppressWarnings ("unchecked" )
56
+ @ NonNull
57
+ public <T > TransitionOptions <?, T > getDefaultTransitionOptions (Class <T > transcodeClass ) {
58
+ TransitionOptions <?, ?> result = defaultTransitionOptions .get (transcodeClass );
59
+ if (result == null ) {
60
+ for (Entry <Class <?>, TransitionOptions <?, ?>> value : defaultTransitionOptions .entrySet ()) {
61
+ if (value .getKey ().isAssignableFrom (transcodeClass )) {
62
+ result = value .getValue ();
63
+ }
64
+ }
65
+ }
66
+ if (result == null ) {
67
+ result = DEFAULT_TRANSITION_OPTIONS ;
68
+ }
69
+ return (TransitionOptions <?, T >) result ;
70
+ }
71
+
45
72
public <X > Target <X > buildImageViewTarget (ImageView imageView , Class <X > transcodeClass ) {
46
73
return imageViewTargetFactory .buildTarget (imageView , transcodeClass );
47
74
}
0 commit comments