133873d2b41a5cd2597b20a4e88eb8942944c0f23Tyler Schultzpackage com.xtremelabs.robolectric.shadows;
256a2a9db15f97a56b5eacef4645bc8ba8790ba6cChee Wong & Ryan Richard
3e3bf0c0e84dd3464de0a508f9c03512d23c11bd8Josh Lauer & Christian Williamsimport android.graphics.ColorFilter;
456a2a9db15f97a56b5eacef4645bc8ba8790ba6cChee Wong & Ryan Richardimport android.graphics.Paint;
593a1ab50e8a7374d3f500c45052ddad66726c923Joe Moore & Phil Goodwinimport android.graphics.Shader;
622c22c9aa4ca68c2deac6164edc1d82bc9645310Christian Williams & Phil Goodwinimport com.xtremelabs.robolectric.internal.Implementation;
722c22c9aa4ca68c2deac6164edc1d82bc9645310Christian Williams & Phil Goodwinimport com.xtremelabs.robolectric.internal.Implements;
8c3f77896cb2eb511d6aee0b27d010c4def7730a9Zoodlesimport com.xtremelabs.robolectric.internal.RealObject;
956a2a9db15f97a56b5eacef4645bc8ba8790ba6cChee Wong & Ryan Richard
1059d9df0f147b94712b36ad44939ebd2afa4cf1b7Phil Goodwin/**
1159d9df0f147b94712b36ad44939ebd2afa4cf1b7Phil Goodwin * Shadow of {@code Paint} that has some extra accessors so that tests can tell whether a {@code Paint} object was
1259d9df0f147b94712b36ad44939ebd2afa4cf1b7Phil Goodwin * created with the expected parameters.
1359d9df0f147b94712b36ad44939ebd2afa4cf1b7Phil Goodwin */
1456a2a9db15f97a56b5eacef4645bc8ba8790ba6cChee Wong & Ryan Richard@SuppressWarnings({"UnusedDeclaration"})
1556a2a9db15f97a56b5eacef4645bc8ba8790ba6cChee Wong & Ryan Richard@Implements(Paint.class)
16afe0a89d904a7fe2f5980b9deb26cc3240192459Christian Williamspublic class ShadowPaint {
1756a2a9db15f97a56b5eacef4645bc8ba8790ba6cChee Wong & Ryan Richard
1804d9597d16301009258c94d968d8b7839119ac89Christian Williams & Phil Goodwin    private int color;
1904d9597d16301009258c94d968d8b7839119ac89Christian Williams & Phil Goodwin    private Paint.Style style;
2004d9597d16301009258c94d968d8b7839119ac89Christian Williams & Phil Goodwin    private Paint.Cap cap;
2104d9597d16301009258c94d968d8b7839119ac89Christian Williams & Phil Goodwin    private Paint.Join join;
2204d9597d16301009258c94d968d8b7839119ac89Christian Williams & Phil Goodwin    private float width;
2304d9597d16301009258c94d968d8b7839119ac89Christian Williams & Phil Goodwin    private float shadowRadius;
2404d9597d16301009258c94d968d8b7839119ac89Christian Williams & Phil Goodwin    private float shadowDx;
2504d9597d16301009258c94d968d8b7839119ac89Christian Williams & Phil Goodwin    private float shadowDy;
2604d9597d16301009258c94d968d8b7839119ac89Christian Williams & Phil Goodwin    private int shadowColor;
2704d9597d16301009258c94d968d8b7839119ac89Christian Williams & Phil Goodwin    private Shader shader;
2893a1ab50e8a7374d3f500c45052ddad66726c923Joe Moore & Phil Goodwin    private int alpha;
29e3bf0c0e84dd3464de0a508f9c03512d23c11bd8Josh Lauer & Christian Williams    private ColorFilter filter;
30ca8b4e7c96507b66cb816a3383c93b02d79a7685Tyler Schultz    private boolean antiAlias;
31c3f77896cb2eb511d6aee0b27d010c4def7730a9Zoodles    private boolean dither;
32bb928a7e6299a55125322c83838e8f4384e5f1b7adriancowham    private int flags;
33c3f77896cb2eb511d6aee0b27d010c4def7730a9Zoodles
34c3f77896cb2eb511d6aee0b27d010c4def7730a9Zoodles    @RealObject Paint paint;
3593a1ab50e8a7374d3f500c45052ddad66726c923Joe Moore & Phil Goodwin
36bb928a7e6299a55125322c83838e8f4384e5f1b7adriancowham    public void __constructor__(int flags) {
37bb928a7e6299a55125322c83838e8f4384e5f1b7adriancowham    	this.flags = flags;
38bb928a7e6299a55125322c83838e8f4384e5f1b7adriancowham    	antiAlias = ( flags & Paint.ANTI_ALIAS_FLAG ) == Paint.ANTI_ALIAS_FLAG;
39bb928a7e6299a55125322c83838e8f4384e5f1b7adriancowham    }
40bb928a7e6299a55125322c83838e8f4384e5f1b7adriancowham
41bb928a7e6299a55125322c83838e8f4384e5f1b7adriancowham    @Implementation
42bb928a7e6299a55125322c83838e8f4384e5f1b7adriancowham    public int getFlags() {
43bb928a7e6299a55125322c83838e8f4384e5f1b7adriancowham    	return flags;
44bb928a7e6299a55125322c83838e8f4384e5f1b7adriancowham    }
45bb928a7e6299a55125322c83838e8f4384e5f1b7adriancowham
46de9feed5ddf1d91a3e76cbc71712c36a7652201eChristian Williams    @Implementation
4793a1ab50e8a7374d3f500c45052ddad66726c923Joe Moore & Phil Goodwin    public Shader setShader(Shader shader) {
4893a1ab50e8a7374d3f500c45052ddad66726c923Joe Moore & Phil Goodwin        this.shader = shader;
4993a1ab50e8a7374d3f500c45052ddad66726c923Joe Moore & Phil Goodwin        return shader;
5093a1ab50e8a7374d3f500c45052ddad66726c923Joe Moore & Phil Goodwin    }
5193a1ab50e8a7374d3f500c45052ddad66726c923Joe Moore & Phil Goodwin
52de9feed5ddf1d91a3e76cbc71712c36a7652201eChristian Williams    @Implementation
5393a1ab50e8a7374d3f500c45052ddad66726c923Joe Moore & Phil Goodwin    public int getAlpha() {
5493a1ab50e8a7374d3f500c45052ddad66726c923Joe Moore & Phil Goodwin        return alpha;
5593a1ab50e8a7374d3f500c45052ddad66726c923Joe Moore & Phil Goodwin    }
5693a1ab50e8a7374d3f500c45052ddad66726c923Joe Moore & Phil Goodwin
57de9feed5ddf1d91a3e76cbc71712c36a7652201eChristian Williams    @Implementation
5893a1ab50e8a7374d3f500c45052ddad66726c923Joe Moore & Phil Goodwin    public void setAlpha(int alpha) {
5993a1ab50e8a7374d3f500c45052ddad66726c923Joe Moore & Phil Goodwin        this.alpha = alpha;
6093a1ab50e8a7374d3f500c45052ddad66726c923Joe Moore & Phil Goodwin    }
6193a1ab50e8a7374d3f500c45052ddad66726c923Joe Moore & Phil Goodwin
6293a1ab50e8a7374d3f500c45052ddad66726c923Joe Moore & Phil Goodwin
63de9feed5ddf1d91a3e76cbc71712c36a7652201eChristian Williams    @Implementation
6493a1ab50e8a7374d3f500c45052ddad66726c923Joe Moore & Phil Goodwin    public Shader getShader() {
6593a1ab50e8a7374d3f500c45052ddad66726c923Joe Moore & Phil Goodwin        return shader;
6693a1ab50e8a7374d3f500c45052ddad66726c923Joe Moore & Phil Goodwin    }
6756a2a9db15f97a56b5eacef4645bc8ba8790ba6cChee Wong & Ryan Richard
68de9feed5ddf1d91a3e76cbc71712c36a7652201eChristian Williams    @Implementation
6956a2a9db15f97a56b5eacef4645bc8ba8790ba6cChee Wong & Ryan Richard    public void setColor(int color) {
7056a2a9db15f97a56b5eacef4645bc8ba8790ba6cChee Wong & Ryan Richard        this.color = color;
7156a2a9db15f97a56b5eacef4645bc8ba8790ba6cChee Wong & Ryan Richard    }
7256a2a9db15f97a56b5eacef4645bc8ba8790ba6cChee Wong & Ryan Richard
73de9feed5ddf1d91a3e76cbc71712c36a7652201eChristian Williams    @Implementation
7456a2a9db15f97a56b5eacef4645bc8ba8790ba6cChee Wong & Ryan Richard    public int getColor() {
7556a2a9db15f97a56b5eacef4645bc8ba8790ba6cChee Wong & Ryan Richard        return color;
7656a2a9db15f97a56b5eacef4645bc8ba8790ba6cChee Wong & Ryan Richard    }
7756a2a9db15f97a56b5eacef4645bc8ba8790ba6cChee Wong & Ryan Richard
78de9feed5ddf1d91a3e76cbc71712c36a7652201eChristian Williams    @Implementation
7956a2a9db15f97a56b5eacef4645bc8ba8790ba6cChee Wong & Ryan Richard    public void setStyle(Paint.Style style) {
8056a2a9db15f97a56b5eacef4645bc8ba8790ba6cChee Wong & Ryan Richard        this.style = style;
8156a2a9db15f97a56b5eacef4645bc8ba8790ba6cChee Wong & Ryan Richard    }
8256a2a9db15f97a56b5eacef4645bc8ba8790ba6cChee Wong & Ryan Richard
83de9feed5ddf1d91a3e76cbc71712c36a7652201eChristian Williams    @Implementation
8456a2a9db15f97a56b5eacef4645bc8ba8790ba6cChee Wong & Ryan Richard    public Paint.Style getStyle() {
8556a2a9db15f97a56b5eacef4645bc8ba8790ba6cChee Wong & Ryan Richard        return style;
8656a2a9db15f97a56b5eacef4645bc8ba8790ba6cChee Wong & Ryan Richard    }
8756a2a9db15f97a56b5eacef4645bc8ba8790ba6cChee Wong & Ryan Richard
88de9feed5ddf1d91a3e76cbc71712c36a7652201eChristian Williams    @Implementation
8956a2a9db15f97a56b5eacef4645bc8ba8790ba6cChee Wong & Ryan Richard    public void setStrokeCap(Paint.Cap cap) {
9056a2a9db15f97a56b5eacef4645bc8ba8790ba6cChee Wong & Ryan Richard        this.cap = cap;
9156a2a9db15f97a56b5eacef4645bc8ba8790ba6cChee Wong & Ryan Richard    }
9256a2a9db15f97a56b5eacef4645bc8ba8790ba6cChee Wong & Ryan Richard
93de9feed5ddf1d91a3e76cbc71712c36a7652201eChristian Williams    @Implementation
9456a2a9db15f97a56b5eacef4645bc8ba8790ba6cChee Wong & Ryan Richard    public Paint.Cap getStrokeCap() {
9556a2a9db15f97a56b5eacef4645bc8ba8790ba6cChee Wong & Ryan Richard        return cap;
9656a2a9db15f97a56b5eacef4645bc8ba8790ba6cChee Wong & Ryan Richard    }
9756a2a9db15f97a56b5eacef4645bc8ba8790ba6cChee Wong & Ryan Richard
98de9feed5ddf1d91a3e76cbc71712c36a7652201eChristian Williams    @Implementation
9956a2a9db15f97a56b5eacef4645bc8ba8790ba6cChee Wong & Ryan Richard    public void setStrokeJoin(Paint.Join join) {
10056a2a9db15f97a56b5eacef4645bc8ba8790ba6cChee Wong & Ryan Richard        this.join = join;
10156a2a9db15f97a56b5eacef4645bc8ba8790ba6cChee Wong & Ryan Richard    }
10256a2a9db15f97a56b5eacef4645bc8ba8790ba6cChee Wong & Ryan Richard
103de9feed5ddf1d91a3e76cbc71712c36a7652201eChristian Williams    @Implementation
10456a2a9db15f97a56b5eacef4645bc8ba8790ba6cChee Wong & Ryan Richard    public Paint.Join getStrokeJoin() {
10556a2a9db15f97a56b5eacef4645bc8ba8790ba6cChee Wong & Ryan Richard        return join;
10656a2a9db15f97a56b5eacef4645bc8ba8790ba6cChee Wong & Ryan Richard    }
10756a2a9db15f97a56b5eacef4645bc8ba8790ba6cChee Wong & Ryan Richard
108de9feed5ddf1d91a3e76cbc71712c36a7652201eChristian Williams    @Implementation
10956a2a9db15f97a56b5eacef4645bc8ba8790ba6cChee Wong & Ryan Richard    public void setStrokeWidth(float width) {
11056a2a9db15f97a56b5eacef4645bc8ba8790ba6cChee Wong & Ryan Richard        this.width = width;
11156a2a9db15f97a56b5eacef4645bc8ba8790ba6cChee Wong & Ryan Richard    }
11256a2a9db15f97a56b5eacef4645bc8ba8790ba6cChee Wong & Ryan Richard
113de9feed5ddf1d91a3e76cbc71712c36a7652201eChristian Williams    @Implementation
11456a2a9db15f97a56b5eacef4645bc8ba8790ba6cChee Wong & Ryan Richard    public float getStrokeWidth() {
11556a2a9db15f97a56b5eacef4645bc8ba8790ba6cChee Wong & Ryan Richard        return width;
11656a2a9db15f97a56b5eacef4645bc8ba8790ba6cChee Wong & Ryan Richard    }
11756a2a9db15f97a56b5eacef4645bc8ba8790ba6cChee Wong & Ryan Richard
118de9feed5ddf1d91a3e76cbc71712c36a7652201eChristian Williams    @Implementation
11932c37ca6a61b1cee08c99fc206f8907c69905e23Chee Wong & Ryan Richard    public void setShadowLayer(float radius, float dx, float dy, int color) {
12032c37ca6a61b1cee08c99fc206f8907c69905e23Chee Wong & Ryan Richard        shadowRadius = radius;
12132c37ca6a61b1cee08c99fc206f8907c69905e23Chee Wong & Ryan Richard        shadowDx = dx;
12232c37ca6a61b1cee08c99fc206f8907c69905e23Chee Wong & Ryan Richard        shadowDy = dy;
12332c37ca6a61b1cee08c99fc206f8907c69905e23Chee Wong & Ryan Richard        shadowColor = color;
12432c37ca6a61b1cee08c99fc206f8907c69905e23Chee Wong & Ryan Richard    }
12532c37ca6a61b1cee08c99fc206f8907c69905e23Chee Wong & Ryan Richard
12659d9df0f147b94712b36ad44939ebd2afa4cf1b7Phil Goodwin    /**
127de2143a1bef92c4ef270d3391b9201e8b8af7051Christian Williams     * Non-Android accessor.
12859d9df0f147b94712b36ad44939ebd2afa4cf1b7Phil Goodwin     *
12959d9df0f147b94712b36ad44939ebd2afa4cf1b7Phil Goodwin     * @return shadow radius (Paint related shadow, not Robolectric Shadow)
13059d9df0f147b94712b36ad44939ebd2afa4cf1b7Phil Goodwin     */
13132c37ca6a61b1cee08c99fc206f8907c69905e23Chee Wong & Ryan Richard    public float getShadowRadius() {
13232c37ca6a61b1cee08c99fc206f8907c69905e23Chee Wong & Ryan Richard        return shadowRadius;
13332c37ca6a61b1cee08c99fc206f8907c69905e23Chee Wong & Ryan Richard    }
13432c37ca6a61b1cee08c99fc206f8907c69905e23Chee Wong & Ryan Richard
13559d9df0f147b94712b36ad44939ebd2afa4cf1b7Phil Goodwin    /**
136de2143a1bef92c4ef270d3391b9201e8b8af7051Christian Williams     * Non-Android accessor.
13759d9df0f147b94712b36ad44939ebd2afa4cf1b7Phil Goodwin     *
13859d9df0f147b94712b36ad44939ebd2afa4cf1b7Phil Goodwin     * @return shadow Dx (Paint related shadow, not Robolectric Shadow)
13959d9df0f147b94712b36ad44939ebd2afa4cf1b7Phil Goodwin     */
14032c37ca6a61b1cee08c99fc206f8907c69905e23Chee Wong & Ryan Richard    public float getShadowDx() {
14132c37ca6a61b1cee08c99fc206f8907c69905e23Chee Wong & Ryan Richard        return shadowDx;
14232c37ca6a61b1cee08c99fc206f8907c69905e23Chee Wong & Ryan Richard    }
14332c37ca6a61b1cee08c99fc206f8907c69905e23Chee Wong & Ryan Richard
14459d9df0f147b94712b36ad44939ebd2afa4cf1b7Phil Goodwin    /**
145de2143a1bef92c4ef270d3391b9201e8b8af7051Christian Williams     * Non-Android accessor.
14659d9df0f147b94712b36ad44939ebd2afa4cf1b7Phil Goodwin     *
14759d9df0f147b94712b36ad44939ebd2afa4cf1b7Phil Goodwin     * @return shadow Dx (Paint related shadow, not Robolectric Shadow)
14859d9df0f147b94712b36ad44939ebd2afa4cf1b7Phil Goodwin     */
14932c37ca6a61b1cee08c99fc206f8907c69905e23Chee Wong & Ryan Richard    public float getShadowDy() {
15032c37ca6a61b1cee08c99fc206f8907c69905e23Chee Wong & Ryan Richard        return shadowDy;
15132c37ca6a61b1cee08c99fc206f8907c69905e23Chee Wong & Ryan Richard    }
15232c37ca6a61b1cee08c99fc206f8907c69905e23Chee Wong & Ryan Richard
15359d9df0f147b94712b36ad44939ebd2afa4cf1b7Phil Goodwin    /**
154de2143a1bef92c4ef270d3391b9201e8b8af7051Christian Williams     * Non-Android accessor.
15559d9df0f147b94712b36ad44939ebd2afa4cf1b7Phil Goodwin     *
15659d9df0f147b94712b36ad44939ebd2afa4cf1b7Phil Goodwin     * @return shadow color (Paint related shadow, not Robolectric Shadow)
15759d9df0f147b94712b36ad44939ebd2afa4cf1b7Phil Goodwin     */
15832c37ca6a61b1cee08c99fc206f8907c69905e23Chee Wong & Ryan Richard    public int getShadowColor() {
15932c37ca6a61b1cee08c99fc206f8907c69905e23Chee Wong & Ryan Richard        return shadowColor;
16032c37ca6a61b1cee08c99fc206f8907c69905e23Chee Wong & Ryan Richard    }
16104d9597d16301009258c94d968d8b7839119ac89Christian Williams & Phil Goodwin
16259d9df0f147b94712b36ad44939ebd2afa4cf1b7Phil Goodwin    /**
163de2143a1bef92c4ef270d3391b9201e8b8af7051Christian Williams     * Non-Android accessor.
16459d9df0f147b94712b36ad44939ebd2afa4cf1b7Phil Goodwin     *
16559d9df0f147b94712b36ad44939ebd2afa4cf1b7Phil Goodwin     * @return cap
16659d9df0f147b94712b36ad44939ebd2afa4cf1b7Phil Goodwin     */
16704d9597d16301009258c94d968d8b7839119ac89Christian Williams & Phil Goodwin    public Paint.Cap getCap() {
16804d9597d16301009258c94d968d8b7839119ac89Christian Williams & Phil Goodwin        return cap;
16904d9597d16301009258c94d968d8b7839119ac89Christian Williams & Phil Goodwin    }
17004d9597d16301009258c94d968d8b7839119ac89Christian Williams & Phil Goodwin
17159d9df0f147b94712b36ad44939ebd2afa4cf1b7Phil Goodwin    /**
172de2143a1bef92c4ef270d3391b9201e8b8af7051Christian Williams     * Non-Android accessor.
17359d9df0f147b94712b36ad44939ebd2afa4cf1b7Phil Goodwin     *
17459d9df0f147b94712b36ad44939ebd2afa4cf1b7Phil Goodwin     * @return join
17559d9df0f147b94712b36ad44939ebd2afa4cf1b7Phil Goodwin     */
17604d9597d16301009258c94d968d8b7839119ac89Christian Williams & Phil Goodwin    public Paint.Join getJoin() {
17704d9597d16301009258c94d968d8b7839119ac89Christian Williams & Phil Goodwin        return join;
17804d9597d16301009258c94d968d8b7839119ac89Christian Williams & Phil Goodwin    }
17904d9597d16301009258c94d968d8b7839119ac89Christian Williams & Phil Goodwin
18059d9df0f147b94712b36ad44939ebd2afa4cf1b7Phil Goodwin    /**
181de2143a1bef92c4ef270d3391b9201e8b8af7051Christian Williams     * Non-Android accessor.
18259d9df0f147b94712b36ad44939ebd2afa4cf1b7Phil Goodwin     *
18359d9df0f147b94712b36ad44939ebd2afa4cf1b7Phil Goodwin     * @return width
18459d9df0f147b94712b36ad44939ebd2afa4cf1b7Phil Goodwin     */
18504d9597d16301009258c94d968d8b7839119ac89Christian Williams & Phil Goodwin    public float getWidth() {
18604d9597d16301009258c94d968d8b7839119ac89Christian Williams & Phil Goodwin        return width;
18704d9597d16301009258c94d968d8b7839119ac89Christian Williams & Phil Goodwin    }
188e3bf0c0e84dd3464de0a508f9c03512d23c11bd8Josh Lauer & Christian Williams
189e3bf0c0e84dd3464de0a508f9c03512d23c11bd8Josh Lauer & Christian Williams    @Implementation
190e3bf0c0e84dd3464de0a508f9c03512d23c11bd8Josh Lauer & Christian Williams    public ColorFilter getColorFilter() {
191e3bf0c0e84dd3464de0a508f9c03512d23c11bd8Josh Lauer & Christian Williams        return filter;
192e3bf0c0e84dd3464de0a508f9c03512d23c11bd8Josh Lauer & Christian Williams    }
193e3bf0c0e84dd3464de0a508f9c03512d23c11bd8Josh Lauer & Christian Williams
194e3bf0c0e84dd3464de0a508f9c03512d23c11bd8Josh Lauer & Christian Williams    @Implementation
195e3bf0c0e84dd3464de0a508f9c03512d23c11bd8Josh Lauer & Christian Williams    public ColorFilter setColorFilter(ColorFilter filter) {
196e3bf0c0e84dd3464de0a508f9c03512d23c11bd8Josh Lauer & Christian Williams        this.filter = filter;
197e3bf0c0e84dd3464de0a508f9c03512d23c11bd8Josh Lauer & Christian Williams        return filter;
198e3bf0c0e84dd3464de0a508f9c03512d23c11bd8Josh Lauer & Christian Williams    }
199c3f77896cb2eb511d6aee0b27d010c4def7730a9Zoodles
200c3f77896cb2eb511d6aee0b27d010c4def7730a9Zoodles    @Implementation
201ca8b4e7c96507b66cb816a3383c93b02d79a7685Tyler Schultz    public void setAntiAlias(boolean antiAlias) {
202ca8b4e7c96507b66cb816a3383c93b02d79a7685Tyler Schultz    	this.antiAlias = antiAlias;
203c3f77896cb2eb511d6aee0b27d010c4def7730a9Zoodles    }
204c3f77896cb2eb511d6aee0b27d010c4def7730a9Zoodles
205c3f77896cb2eb511d6aee0b27d010c4def7730a9Zoodles    @Implementation
206c3f77896cb2eb511d6aee0b27d010c4def7730a9Zoodles    public void setDither(boolean dither) {
207c3f77896cb2eb511d6aee0b27d010c4def7730a9Zoodles    	this.dither = dither;
208c3f77896cb2eb511d6aee0b27d010c4def7730a9Zoodles    }
209c3f77896cb2eb511d6aee0b27d010c4def7730a9Zoodles
210c3f77896cb2eb511d6aee0b27d010c4def7730a9Zoodles    @Implementation
211c3f77896cb2eb511d6aee0b27d010c4def7730a9Zoodles    public final boolean isDither() {
212c3f77896cb2eb511d6aee0b27d010c4def7730a9Zoodles    	return dither;
213c3f77896cb2eb511d6aee0b27d010c4def7730a9Zoodles    }
214c3f77896cb2eb511d6aee0b27d010c4def7730a9Zoodles
215c3f77896cb2eb511d6aee0b27d010c4def7730a9Zoodles    @Implementation
216c3f77896cb2eb511d6aee0b27d010c4def7730a9Zoodles    public final boolean isAntiAlias() {
217ca8b4e7c96507b66cb816a3383c93b02d79a7685Tyler Schultz    	return antiAlias;
218c3f77896cb2eb511d6aee0b27d010c4def7730a9Zoodles    }
21956a2a9db15f97a56b5eacef4645bc8ba8790ba6cChee Wong & Ryan Richard}
220