diff options
Diffstat (limited to 'demokit/app/src/com/google/android/DemoKit/ColorLEDController.java')
-rw-r--r-- | demokit/app/src/com/google/android/DemoKit/ColorLEDController.java | 114 |
1 files changed, 114 insertions, 0 deletions
diff --git a/demokit/app/src/com/google/android/DemoKit/ColorLEDController.java b/demokit/app/src/com/google/android/DemoKit/ColorLEDController.java new file mode 100644 index 0000000..3bc6e24 --- /dev/null +++ b/demokit/app/src/com/google/android/DemoKit/ColorLEDController.java @@ -0,0 +1,114 @@ +package com.google.android.DemoKit; + +import com.google.android.DemoKit.Slider.SliderPositionListener; + +import android.content.res.Resources; +import android.graphics.drawable.Drawable; +import android.text.SpannableStringBuilder; +import android.text.style.RelativeSizeSpan; +import android.text.style.SubscriptSpan; +import android.view.View; +import android.view.View.OnClickListener; +import android.view.ViewGroup; +import android.widget.TextView; + +public class ColorLEDController { + private int mLEDNumber; + + private Drawable mGreen; + private Drawable mRed; + private Drawable mBlue; + private DemoKitActivity mActivity; + + class LedValueUpdater implements Slider.SliderPositionListener { + private TextView mTarget; + private final byte mCommandTarget; + + LedValueUpdater(TextView target, int colorIndex) { + mTarget = target; + mCommandTarget = (byte) ((mLEDNumber - 1) * 3 + colorIndex); + } + + public void onPositionChange(double value) { + int v = (int) (255 * value); + mTarget.setText(String.valueOf(v)); + if (mActivity != null) { + mActivity.sendCommand(DemoKitActivity.LED_SERVO_COMMAND, + mCommandTarget, (byte) v); + } + } + } + + class LabelClickListener implements OnClickListener { + final private double mValue; + private final Slider mSlider; + + public LabelClickListener(Slider slider, double value) { + mSlider = slider; + mValue = value; + } + + public void onClick(View v) { + mSlider.setPosition(mValue); + } + + } + + public ColorLEDController(DemoKitActivity activity, int number, + Resources res, boolean vertical) { + mActivity = activity; + mLEDNumber = number; + if (vertical) { + mRed = res.getDrawable(R.drawable.scrubber_vertical_red_holo_dark); + mGreen = res + .getDrawable(R.drawable.scrubber_vertical_green_holo_dark); + mBlue = res + .getDrawable(R.drawable.scrubber_vertical_blue_holo_dark); + } else { + mRed = res + .getDrawable(R.drawable.scrubber_horizontal_red_holo_dark); + mGreen = res + .getDrawable(R.drawable.scrubber_horizontal_green_holo_dark); + mBlue = res + .getDrawable(R.drawable.scrubber_horizontal_blue_holo_dark); + } + } + + public void attachToView(ViewGroup targetView) { + for (int i = 0; i < 3; ++i) { + ViewGroup g = (ViewGroup) targetView.getChildAt(i); + TextView label = (TextView) g.getChildAt(0); + Slider slider = (Slider) g.getChildAt(1); + TextView valueText = (TextView) g.getChildAt(2); + SliderPositionListener positionListener = new LedValueUpdater( + valueText, i); + slider.setPositionListener(positionListener); + LabelClickListener leftLabelListener = new LabelClickListener( + slider, 0); + label.setOnClickListener(leftLabelListener); + LabelClickListener rightLabelListener = new LabelClickListener( + slider, 1); + valueText.setOnClickListener(rightLabelListener); + valueText.setText("0"); + if (i == 0) { + String labelText = "Led"; + SpannableStringBuilder ssb = new SpannableStringBuilder( + labelText); + ssb.append(String.valueOf(mLEDNumber)); + int spanStart = labelText.length(); + int spanEnd = spanStart + 1; + ssb.setSpan(new SubscriptSpan(), spanStart, spanEnd, 0); + ssb.setSpan(new RelativeSizeSpan(0.7f), spanStart, spanEnd, 0); + label.setText(ssb); + slider.setSliderBackground(mRed); + } else { + label.setText(""); + if (i == 1) { + slider.setSliderBackground(mGreen); + } else { + slider.setSliderBackground(mBlue); + } + } + } + } +} |