package it.angelic.soulissclient.fragments;
import android.app.Activity;
import android.graphics.Color;
import android.util.Log;
import android.widget.Button;
import it.angelic.soulissclient.Constants;
import it.angelic.soulissclient.model.typicals.SoulissTypical16AdvancedRGB;
import it.angelic.soulissclient.util.CCFAnimator;
/**
* Created by shine@angelic.it on 13/05/2017.
*/
public class PatternRunnerThread extends Thread {
private int color = 0;
private int colorFrom = 0;
private Activity context;
public int getSliderSpeed() {
return sliderSpeed;
}
public void setSliderSpeed(int sliderSpeed) {
this.sliderSpeed = sliderSpeed;
}
private int sliderSpeed = 0;
private int colorTo = 0;
public boolean isScatterMode() {
return scatterMode;
}
public void setScatterMode(boolean scatterMode) {
this.scatterMode = scatterMode;
}
public boolean isMulticastMode() {
return multicastMode;
}
public void setMulticastMode(boolean multicastMode) {
this.multicastMode = multicastMode;
}
boolean scatterMode = false;
boolean multicastMode = false;
boolean patternRunning = false;
private Button btFeedBackPatern;
private SoulissTypical16AdvancedRGB collected;
private CCFAnimator patternAnimator;
PatternRunnerThread() {
super();
}
PatternRunnerThread(Activity ctx, SoulissTypical16AdvancedRGB coll, Button feedback) {
super();
collected = coll;
patternAnimator = CCFAnimator.rgb(colorFrom, colorTo);
btFeedBackPatern = feedback;
context = ctx;
}
public int getColorFrom() {
return colorFrom;
}
public void setColorFrom(int colorFrom) {
this.colorFrom = colorFrom;
patternAnimator = CCFAnimator.rgb(colorFrom, colorTo);
}
public int getColorTo() {
return colorTo;
}
public void setColorTo(int colorTo) {
this.colorTo = colorTo;
patternAnimator = CCFAnimator.rgb(colorFrom, colorTo);
}
public boolean isPatternRunning() {
return patternRunning;
}
public void setPatternRunning(boolean patternRunning) {
this.patternRunning = patternRunning;
}
@Override
public void run() {
int iterCount = 0;
float cnt = 0f;
float step = 0.01f;
boolean goinUp = true;
while (patternRunning) {
iterCount++;
try {
if (scatterMode)
cnt = Constants.random.nextFloat();
//digital filter
if (cnt > 1.0f)
cnt = 1;
if (cnt < 0)
cnt = 0;
color = patternAnimator.getColor(cnt);
//varia il colore solo ogni tot
if (iterCount % (11 - sliderSpeed / 10) == 0) {
if (goinUp)
cnt += step;
else
cnt -= step;
collected.issueRGBCommand(Constants.Typicals.Souliss_T1n_Set,
Color.red(color), Color.green(color), Color.blue(color), multicastMode);
Log.d(Constants.TAG, "dialogColorChangedListener, pattern color asc: " + goinUp
+ " cnt=" + cnt);
if (btFeedBackPatern != null) {//could be detached
context.runOnUiThread(new Runnable() {
public void run() {
btFeedBackPatern
.setBackgroundColor(color);
}
});
}
if (cnt >= 1)
goinUp = false;
else if (cnt <= 0)
goinUp = true;
//slider max = 255
}
//do respiro almeno 50msec
Thread.sleep(150 - sliderSpeed);
} catch (InterruptedException e) {
Log.e(Constants.TAG, "Error Thread.sleep:");
}
}
}
}