1b63ed7adbf146a2b7c7c4422c01a5e0ef6bb10caRob Tsukpackage com.google.android.DemoKit; 2b63ed7adbf146a2b7c7c4422c01a5e0ef6bb10caRob Tsuk 3b63ed7adbf146a2b7c7c4422c01a5e0ef6bb10caRob Tsukimport android.content.res.Resources; 4b63ed7adbf146a2b7c7c4422c01a5e0ef6bb10caRob Tsukimport android.graphics.drawable.Drawable; 5b63ed7adbf146a2b7c7c4422c01a5e0ef6bb10caRob Tsukimport android.text.SpannableStringBuilder; 6b63ed7adbf146a2b7c7c4422c01a5e0ef6bb10caRob Tsukimport android.text.style.RelativeSizeSpan; 7b63ed7adbf146a2b7c7c4422c01a5e0ef6bb10caRob Tsukimport android.text.style.SubscriptSpan; 8b63ed7adbf146a2b7c7c4422c01a5e0ef6bb10caRob Tsukimport android.view.ViewGroup; 9b63ed7adbf146a2b7c7c4422c01a5e0ef6bb10caRob Tsukimport android.widget.CompoundButton; 10b63ed7adbf146a2b7c7c4422c01a5e0ef6bb10caRob Tsukimport android.widget.CompoundButton.OnCheckedChangeListener; 11b63ed7adbf146a2b7c7c4422c01a5e0ef6bb10caRob Tsukimport android.widget.TextView; 12b63ed7adbf146a2b7c7c4422c01a5e0ef6bb10caRob Tsukimport android.widget.ToggleButton; 13b63ed7adbf146a2b7c7c4422c01a5e0ef6bb10caRob Tsuk 14b63ed7adbf146a2b7c7c4422c01a5e0ef6bb10caRob Tsukpublic class RelayController implements OnCheckedChangeListener { 15b63ed7adbf146a2b7c7c4422c01a5e0ef6bb10caRob Tsuk private final int mRelayNumber; 16b63ed7adbf146a2b7c7c4422c01a5e0ef6bb10caRob Tsuk private final byte mCommandTarget; 17b63ed7adbf146a2b7c7c4422c01a5e0ef6bb10caRob Tsuk private DemoKitActivity mActivity; 18b63ed7adbf146a2b7c7c4422c01a5e0ef6bb10caRob Tsuk private TextView mLabel; 19b63ed7adbf146a2b7c7c4422c01a5e0ef6bb10caRob Tsuk private ToggleButton mButton; 20b63ed7adbf146a2b7c7c4422c01a5e0ef6bb10caRob Tsuk private Drawable mOffBackground; 21b63ed7adbf146a2b7c7c4422c01a5e0ef6bb10caRob Tsuk private Drawable mOnBackground; 22b63ed7adbf146a2b7c7c4422c01a5e0ef6bb10caRob Tsuk 23b63ed7adbf146a2b7c7c4422c01a5e0ef6bb10caRob Tsuk public RelayController(DemoKitActivity activity, int relayNumber, 24b63ed7adbf146a2b7c7c4422c01a5e0ef6bb10caRob Tsuk Resources res) { 25b63ed7adbf146a2b7c7c4422c01a5e0ef6bb10caRob Tsuk mActivity = activity; 26b63ed7adbf146a2b7c7c4422c01a5e0ef6bb10caRob Tsuk mRelayNumber = relayNumber; 27b63ed7adbf146a2b7c7c4422c01a5e0ef6bb10caRob Tsuk mCommandTarget = (byte) (relayNumber - 1); 28b63ed7adbf146a2b7c7c4422c01a5e0ef6bb10caRob Tsuk mOffBackground = res 29b63ed7adbf146a2b7c7c4422c01a5e0ef6bb10caRob Tsuk .getDrawable(R.drawable.toggle_button_off_holo_dark); 30b63ed7adbf146a2b7c7c4422c01a5e0ef6bb10caRob Tsuk mOnBackground = res.getDrawable(R.drawable.toggle_button_on_holo_dark); 31b63ed7adbf146a2b7c7c4422c01a5e0ef6bb10caRob Tsuk } 32b63ed7adbf146a2b7c7c4422c01a5e0ef6bb10caRob Tsuk 33b63ed7adbf146a2b7c7c4422c01a5e0ef6bb10caRob Tsuk public void attachToView(ViewGroup targetView) { 34b63ed7adbf146a2b7c7c4422c01a5e0ef6bb10caRob Tsuk mLabel = (TextView) targetView.getChildAt(0); 35b63ed7adbf146a2b7c7c4422c01a5e0ef6bb10caRob Tsuk SpannableStringBuilder ssb = new SpannableStringBuilder("Relay"); 36b63ed7adbf146a2b7c7c4422c01a5e0ef6bb10caRob Tsuk ssb.append(String.valueOf(mRelayNumber)); 37b63ed7adbf146a2b7c7c4422c01a5e0ef6bb10caRob Tsuk ssb.setSpan(new SubscriptSpan(), 5, 6, 0); 38b63ed7adbf146a2b7c7c4422c01a5e0ef6bb10caRob Tsuk ssb.setSpan(new RelativeSizeSpan(0.7f), 5, 6, 0); 39b63ed7adbf146a2b7c7c4422c01a5e0ef6bb10caRob Tsuk mLabel.setText(ssb); 40b63ed7adbf146a2b7c7c4422c01a5e0ef6bb10caRob Tsuk mButton = (ToggleButton) targetView.getChildAt(1); 41b63ed7adbf146a2b7c7c4422c01a5e0ef6bb10caRob Tsuk mButton.setOnCheckedChangeListener(this); 42b63ed7adbf146a2b7c7c4422c01a5e0ef6bb10caRob Tsuk } 43b63ed7adbf146a2b7c7c4422c01a5e0ef6bb10caRob Tsuk 44b63ed7adbf146a2b7c7c4422c01a5e0ef6bb10caRob Tsuk public void onCheckedChanged(CompoundButton arg0, boolean isChecked) { 45b63ed7adbf146a2b7c7c4422c01a5e0ef6bb10caRob Tsuk if (isChecked) { 46b63ed7adbf146a2b7c7c4422c01a5e0ef6bb10caRob Tsuk mButton.setBackgroundDrawable(mOnBackground); 47b63ed7adbf146a2b7c7c4422c01a5e0ef6bb10caRob Tsuk } else { 48b63ed7adbf146a2b7c7c4422c01a5e0ef6bb10caRob Tsuk mButton.setBackgroundDrawable(mOffBackground); 49b63ed7adbf146a2b7c7c4422c01a5e0ef6bb10caRob Tsuk } 50b63ed7adbf146a2b7c7c4422c01a5e0ef6bb10caRob Tsuk if (mActivity != null) { 51b63ed7adbf146a2b7c7c4422c01a5e0ef6bb10caRob Tsuk mActivity.sendCommand(DemoKitActivity.RELAY_COMMAND, 52b63ed7adbf146a2b7c7c4422c01a5e0ef6bb10caRob Tsuk mCommandTarget, isChecked ? 1 : 0); 53b63ed7adbf146a2b7c7c4422c01a5e0ef6bb10caRob Tsuk } 54b63ed7adbf146a2b7c7c4422c01a5e0ef6bb10caRob Tsuk } 55b63ed7adbf146a2b7c7c4422c01a5e0ef6bb10caRob Tsuk 56b63ed7adbf146a2b7c7c4422c01a5e0ef6bb10caRob Tsuk} 57