/** * */ package com.AmishRobot.LedController; import android.app.Activity; import android.os.Bundle; import android.util.Log; import android.view.View; import android.view.View.OnClickListener; import android.widget.Button; import android.widget.CheckBox; import android.widget.SeekBar; import android.widget.SeekBar.OnSeekBarChangeListener; import android.widget.TextView; /** * @author Mike Kane * This file is part of LED-Shirt-w-Android-Control. * * Copyright (C) 2011 Michael Kane * https://github.com/thisIsMikeKane/LED-Shirt-w-Android-Control#led-shirt-w-android-control * * LED-Shirt-w-Android-Control is free software: you can redistribute it * and/or modify it under the terms of the GNU General Public License as * published by the Free Software Foundation, either version 3 of the * License, or (at your option) any later version. * * LED-Shirt-w-Android-Control is distributed in the hope that it will * be useful, but WITHOUT ANY WARRANTY; without even the implied warranty * of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with LED-Shirt-w-Android-Control. * If not, see <http://www.gnu.org/licenses/>. */ public class ANI_RAINBOW_Activity extends Activity { // Debugging private static final String TAG = "ANI_RAINBOW_Activity"; private static final boolean D = true; /* Identity of parent activity */ private LEDControllerActivity PA; /* View elements */ private Button mSetButton; private SeekBar mRateSeekBar; private SeekBar mBrightnessSeekBar; private CheckBox mRunningCheckBox; private SeekBar mSpeedSeekBar; private TextView mSpeedTextView; /* Rainbow parameters */ private int rate = 75; private int brightness = 255; private int speed = 18; private int isRunning = 0; /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); if (D) Log.e(TAG, "+ ON CREATE +"); /* Identify parent activity to use its BT Stack */ PA = (LEDControllerActivity) this.getParent(); /* Setup view */ setContentView(R.layout.tab_rain); // Initialize the speed layout mSpeedTextView = (TextView) findViewById(R.id.tab_rb_txt_speed); // Initialize rate seek bar with listener mRateSeekBar = (SeekBar) findViewById(R.id.tab_rb_seek_rate); mRateSeekBar.setOnSeekBarChangeListener(new OnSeekBarChangeListener() { private int isChanged = 0; private int value = 0; @Override public void onStopTrackingTouch(SeekBar seekBar) { if(isChanged==1) { rate = Math.max(0, Math.min(value+1, 255) ); // setRainbow(); } } @Override public void onStartTrackingTouch(SeekBar seekBar) { isChanged = 0; } @Override public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) { isChanged = 1; value = progress; } }); // Initialize brightness seek bar with listener mBrightnessSeekBar = (SeekBar) findViewById(R.id.tab_rb_seek_brightness); mBrightnessSeekBar.setOnSeekBarChangeListener(new OnSeekBarChangeListener() { private int isChanged = 0; private int value = 0; @Override public void onStopTrackingTouch(SeekBar seekBar) { if(isChanged==1) { brightness = Math.max(0, Math.min(value, 255) ); // setRainbow(); } } @Override public void onStartTrackingTouch(SeekBar seekBar) { isChanged = 0; } @Override public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) { isChanged = 1; value = progress; } }); // Initialize running check box with listener mRunningCheckBox = (CheckBox) findViewById(R.id.tab_rb_check_running); mRunningCheckBox.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { // Perform action on clicks, depending on whether it's now checked if (((CheckBox) v).isChecked()) { // Make speed seek visible mSpeedTextView.setVisibility(View.VISIBLE); mSpeedSeekBar.setVisibility(View.VISIBLE); isRunning = 1; } else { // Make speed seek invisible mSpeedTextView.setVisibility(View.INVISIBLE); mSpeedSeekBar.setVisibility(View.INVISIBLE); isRunning = 0; } } }); // Initialize running speed seek with listener mSpeedSeekBar = (SeekBar) findViewById(R.id.tab_rb_seek_speed); mSpeedSeekBar.setOnSeekBarChangeListener(new OnSeekBarChangeListener() { private int isChanged = 0; private int value = 0; @Override public void onStopTrackingTouch(SeekBar seekBar) { if(isChanged==1) { speed = Math.max(0, Math.min(value, 255) ); // setRainbow(); } } @Override public void onStartTrackingTouch(SeekBar seekBar) { isChanged = 0; } @Override public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) { isChanged = 1; value = progress; } }); // Initialize the Set button with a listener for click events mSetButton = (Button) findViewById(R.id.tab_rb_but_set); mSetButton.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { setRainbow(); } }); // Hide running options on create mSpeedTextView.setVisibility(View.INVISIBLE); // Hide on create mSpeedSeekBar.setVisibility(View.INVISIBLE); } /** Called when the activity is brought to the front */ @Override public void onResume() { super.onResume(); if (D) Log.e(TAG, "+ ON RESUME +"); if(isRunning == 1) { mSpeedTextView.setVisibility(View.VISIBLE); mSpeedSeekBar.setVisibility(View.VISIBLE); } else { mSpeedTextView.setVisibility(View.INVISIBLE); mSpeedSeekBar.setVisibility(View.INVISIBLE); } } /** Function to set LEDs as a rainbow */ private void setRainbow() { if(isRunning == 1) { byte msg[] = new byte[4]; msg[0] = LEDControllerActivity.ANI_RAIN_CHASE; msg[1] = (byte) (rate & 0xFF); msg[2] = (byte) (brightness & 0xFF); msg[3] = (byte) (speed & 0xFF); PA.sendMessage(msg, 4); } else { byte msg[] = new byte[3]; msg[0] = LEDControllerActivity.ANI_RAINBOW; msg[1] = (byte) ( rate & 0xFF ); msg[2] = (byte) ( brightness & 0xFF ); PA.sendMessage(msg, 3); } } }