133873d2b41a5cd2597b20a4e88eb8942944c0f23Tyler Schultzpackage com.xtremelabs.robolectric.shadows;
2ba8b98937b07e341237239fe68d04672b6d200c1Christian Williams & Tyler Schultz
3ba8b98937b07e341237239fe68d04672b6d200c1Christian Williams & Tyler Schultzimport android.widget.Checkable;
4af4af505fd719995f012037b77bf3f1bf35a1d1dIan Fisher & Phil Goodwinimport android.widget.CompoundButton;
522c22c9aa4ca68c2deac6164edc1d82bc9645310Christian Williams & Phil Goodwinimport com.xtremelabs.robolectric.internal.Implementation;
622c22c9aa4ca68c2deac6164edc1d82bc9645310Christian Williams & Phil Goodwinimport com.xtremelabs.robolectric.internal.Implements;
7ba8b98937b07e341237239fe68d04672b6d200c1Christian Williams & Tyler Schultz
8fa51ab3a5a2a5f25dfc223e8a37d0f8002d757bfPhil Goodwin/**
933040bdd7715a46bfcfe3cc5f894972ef65d31beChristian Williams * Shadows the {@code android.widget.CompoundButton} class.
10adfaceabbda4c8c51f24a0def8926075bd7306adChristian Williams * <p/>
11fa51ab3a5a2a5f25dfc223e8a37d0f8002d757bfPhil Goodwin * Keeps track of whether or not its "checked" state is set and deals with listeners in an appropriate way.
12fa51ab3a5a2a5f25dfc223e8a37d0f8002d757bfPhil Goodwin */
13ba8b98937b07e341237239fe68d04672b6d200c1Christian Williams & Tyler Schultz@SuppressWarnings({"UnusedDeclaration"})
149aa568c608ce14b85e91381739283926af69fb49Ryan Richard@Implements(CompoundButton.class)
15afe0a89d904a7fe2f5980b9deb26cc3240192459Christian Williamspublic class ShadowCompoundButton extends ShadowTextView implements Checkable {
16bd9537bd36434865d4d25ef332bd388d39a51e34Christian Williams & Phil Goodwin    private boolean checked;
17bd9537bd36434865d4d25ef332bd388d39a51e34Christian Williams & Phil Goodwin    private CompoundButton.OnCheckedChangeListener onCheckedChangeListener;
18ba8b98937b07e341237239fe68d04672b6d200c1Christian Williams & Tyler Schultz
193c5249864cabd318d8b3f551f2f4ab7af7434f8bChristian Williams    @Override public void applyAttributes() {
203c5249864cabd318d8b3f551f2f4ab7af7434f8bChristian Williams        super.applyAttributes();
21a2dd5bb88b4bfe0cbe77cfc3581ce42745509760Phil Goodwin & Tyler Schultz        setChecked(this.attributeSet.getAttributeBooleanValue("android", "checked", false));
22a2dd5bb88b4bfe0cbe77cfc3581ce42745509760Phil Goodwin & Tyler Schultz    }
23a2dd5bb88b4bfe0cbe77cfc3581ce42745509760Phil Goodwin & Tyler Schultz
24de9feed5ddf1d91a3e76cbc71712c36a7652201eChristian Williams    @Implementation
25ba8b98937b07e341237239fe68d04672b6d200c1Christian Williams & Tyler Schultz    @Override public void toggle() {
26bd9537bd36434865d4d25ef332bd388d39a51e34Christian Williams & Phil Goodwin        setChecked(!checked);
27ba8b98937b07e341237239fe68d04672b6d200c1Christian Williams & Tyler Schultz    }
28ba8b98937b07e341237239fe68d04672b6d200c1Christian Williams & Tyler Schultz
29de9feed5ddf1d91a3e76cbc71712c36a7652201eChristian Williams    @Implementation
30ba8b98937b07e341237239fe68d04672b6d200c1Christian Williams & Tyler Schultz    @Override public boolean performClick() {
31ba8b98937b07e341237239fe68d04672b6d200c1Christian Williams & Tyler Schultz        toggle();
32ba8b98937b07e341237239fe68d04672b6d200c1Christian Williams & Tyler Schultz        return super.performClick();
33ba8b98937b07e341237239fe68d04672b6d200c1Christian Williams & Tyler Schultz    }
34ba8b98937b07e341237239fe68d04672b6d200c1Christian Williams & Tyler Schultz
35de9feed5ddf1d91a3e76cbc71712c36a7652201eChristian Williams    @Implementation
36ba8b98937b07e341237239fe68d04672b6d200c1Christian Williams & Tyler Schultz    @Override public boolean isChecked() {
37bd9537bd36434865d4d25ef332bd388d39a51e34Christian Williams & Phil Goodwin        return checked;
38ba8b98937b07e341237239fe68d04672b6d200c1Christian Williams & Tyler Schultz    }
39ba8b98937b07e341237239fe68d04672b6d200c1Christian Williams & Tyler Schultz
40de9feed5ddf1d91a3e76cbc71712c36a7652201eChristian Williams    @Implementation
41ba8b98937b07e341237239fe68d04672b6d200c1Christian Williams & Tyler Schultz    @Override public void setChecked(boolean checked) {
42bd9537bd36434865d4d25ef332bd388d39a51e34Christian Williams & Phil Goodwin        if (this.checked != checked) {
43bd9537bd36434865d4d25ef332bd388d39a51e34Christian Williams & Phil Goodwin            this.checked = checked;
44bd9537bd36434865d4d25ef332bd388d39a51e34Christian Williams & Phil Goodwin            if (onCheckedChangeListener != null) {
45bd9537bd36434865d4d25ef332bd388d39a51e34Christian Williams & Phil Goodwin                onCheckedChangeListener.onCheckedChanged((CompoundButton) realView, this.checked);
46af4af505fd719995f012037b77bf3f1bf35a1d1dIan Fisher & Phil Goodwin            }
47ba8b98937b07e341237239fe68d04672b6d200c1Christian Williams & Tyler Schultz        }
48ba8b98937b07e341237239fe68d04672b6d200c1Christian Williams & Tyler Schultz    }
49af4af505fd719995f012037b77bf3f1bf35a1d1dIan Fisher & Phil Goodwin
50de9feed5ddf1d91a3e76cbc71712c36a7652201eChristian Williams    @Implementation
51af4af505fd719995f012037b77bf3f1bf35a1d1dIan Fisher & Phil Goodwin    public void setOnCheckedChangeListener(CompoundButton.OnCheckedChangeListener listener) {
52bd9537bd36434865d4d25ef332bd388d39a51e34Christian Williams & Phil Goodwin        onCheckedChangeListener = listener;
53af4af505fd719995f012037b77bf3f1bf35a1d1dIan Fisher & Phil Goodwin    }
54ea108dac4bdee2028b2f3fc10ced2a9fc97dcd1aWenhui Yao
55ea108dac4bdee2028b2f3fc10ced2a9fc97dcd1aWenhui Yao    public CompoundButton.OnCheckedChangeListener getOnCheckedChangeListener() {
56ea108dac4bdee2028b2f3fc10ced2a9fc97dcd1aWenhui Yao    	return onCheckedChangeListener;
57ea108dac4bdee2028b2f3fc10ced2a9fc97dcd1aWenhui Yao    }
58fa51ab3a5a2a5f25dfc223e8a37d0f8002d757bfPhil Goodwin}
59