Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
沉迷打码的小凳子
glide
提交
26b25d87
G
glide
项目概览
沉迷打码的小凳子
/
glide
与 Fork 源项目一致
从无法访问的项目Fork
通知
3
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
G
glide
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
体验新版 GitCode,发现更多精彩内容 >>
提交
26b25d87
编写于
10月 03, 2014
作者:
S
Sam Judd
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
Don't assert when adding ViewTarget callback twice
Fixes #167
上级
f7b3e5d7
变更
2
隐藏空白更改
内联
并排
Showing
2 changed file
with
53 addition
and
9 deletion
+53
-9
library/src/androidTest/java/com/bumptech/glide/request/target/ViewTargetTest.java
...ava/com/bumptech/glide/request/target/ViewTargetTest.java
+43
-3
library/src/main/java/com/bumptech/glide/request/target/ViewTarget.java
...in/java/com/bumptech/glide/request/target/ViewTarget.java
+10
-6
未找到文件。
library/src/androidTest/java/com/bumptech/glide/request/target/ViewTargetTest.java
浏览文件 @
26b25d87
...
...
@@ -27,10 +27,10 @@ import java.util.concurrent.CopyOnWriteArrayList;
import
static
android
.
view
.
ViewGroup
.
LayoutParams
;
import
static
android
.
view
.
ViewTreeObserver
.
OnPreDrawListener
;
import
static
org
.
hamcrest
.
MatcherAssert
.
assertThat
;
import
static
org
.
hamcrest
.
Matchers
.
hasSize
;
import
static
org
.
junit
.
Assert
.
assertEquals
;
import
static
org
.
junit
.
Assert
.
assertNull
;
import
static
org
.
junit
.
Assert
.
assertThat
;
import
static
org
.
mockito
.
Matchers
.
anyInt
;
import
static
org
.
mockito
.
Matchers
.
eq
;
import
static
org
.
mockito
.
Mockito
.
inOrder
;
...
...
@@ -170,11 +170,51 @@ public class ViewTargetTest {
}
}
@Test
(
expected
=
IllegalArgumentException
.
class
)
public
void
test
ThrowsIfCallbackIsQueu
edTwice
()
{
@Test
public
void
test
DoesNotNotifyCallbackTwiceIfAdd
edTwice
()
{
SizeReadyCallback
cb
=
mock
(
SizeReadyCallback
.
class
);
target
.
getSize
(
cb
);
target
.
getSize
(
cb
);
view
.
setLayoutParams
(
new
LayoutParams
(
100
,
100
));
PreDrawShadowViewTreeObserver
shadowObserver
=
Robolectric
.
shadowOf_
(
view
.
getViewTreeObserver
());
shadowObserver
.
fireOnPreDrawListeners
();
verify
(
cb
,
times
(
1
)).
onSizeReady
(
anyInt
(),
anyInt
());
}
@Test
public
void
testDoesNotAddMultipleListenersIfMultipleCallbacksAreAdded
()
{
SizeReadyCallback
cb1
=
mock
(
SizeReadyCallback
.
class
);
SizeReadyCallback
cb2
=
mock
(
SizeReadyCallback
.
class
);
target
.
getSize
(
cb1
);
target
.
getSize
(
cb2
);
PreDrawShadowViewTreeObserver
shadowObserver
=
Robolectric
.
shadowOf_
(
view
.
getViewTreeObserver
());
assertThat
(
shadowObserver
.
getPreDrawListeners
(),
hasSize
(
1
));
}
@Test
public
void
testDoesAddSecondListenerIfFirstListenerIsRemovedBeforeSecondRequest
()
{
SizeReadyCallback
cb1
=
mock
(
SizeReadyCallback
.
class
);
target
.
getSize
(
cb1
);
view
.
setLayoutParams
(
new
LayoutParams
(
100
,
100
));
PreDrawShadowViewTreeObserver
shadowObserver
=
Robolectric
.
shadowOf_
(
view
.
getViewTreeObserver
());
shadowObserver
.
fireOnPreDrawListeners
();
assertThat
(
shadowObserver
.
getPreDrawListeners
(),
hasSize
(
0
));
SizeReadyCallback
cb2
=
mock
(
SizeReadyCallback
.
class
);
view
.
setLayoutParams
(
new
LayoutParams
(
LayoutParams
.
MATCH_PARENT
,
LayoutParams
.
MATCH_PARENT
));
target
.
getSize
(
cb2
);
view
.
setLayoutParams
(
new
LayoutParams
(
100
,
100
));
shadowObserver
.
fireOnPreDrawListeners
();
verify
(
cb2
).
onSizeReady
(
anyInt
(),
anyInt
());
}
@Test
...
...
library/src/main/java/com/bumptech/glide/request/target/ViewTarget.java
浏览文件 @
26b25d87
...
...
@@ -151,6 +151,7 @@ public abstract class ViewTarget<T extends View, Z> extends BaseTarget<Z> {
if
(
observer
.
isAlive
())
{
observer
.
removeOnPreDrawListener
(
layoutListener
);
}
layoutListener
=
null
;
}
}
...
...
@@ -172,13 +173,16 @@ public abstract class ViewTarget<T extends View, Z> extends BaseTarget<Z> {
}
cb
.
onSizeReady
(
width
,
height
);
}
else
{
if
(
cbs
.
contains
(
cb
))
{
throw
new
IllegalArgumentException
(
"Cannot add a callback twice"
);
// We want to notify callbacks in the order they were added and we only expect one or two callbacks to
// be added a time, so a List is a reasonable choice.
if
(!
cbs
.
contains
(
cb
))
{
cbs
.
add
(
cb
);
}
if
(
layoutListener
==
null
)
{
final
ViewTreeObserver
observer
=
view
.
getViewTreeObserver
();
layoutListener
=
new
SizeDeterminerLayoutListener
(
this
);
observer
.
addOnPreDrawListener
(
layoutListener
);
}
cbs
.
add
(
cb
);
final
ViewTreeObserver
observer
=
view
.
getViewTreeObserver
();
layoutListener
=
new
SizeDeterminerLayoutListener
(
this
);
observer
.
addOnPreDrawListener
(
layoutListener
);
}
}
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录