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