import
android.os.Bundle;
import
android.os.Handler;
import
android.support.constraint.ConstraintLayout;
import
android.support.design.widget.FloatingActionButton;
import
android.support.v7.app.AppCompatActivity;
import
android.util.Log;
import
android.view.View;
import
android.view.animation.Animation;
import
android.view.animation.AnimationUtils;
import
android.widget.TextView;
import
com.example.breath.R;
import
com.example.breath.utils.Constants;
import
com.example.breath.utils.SettingsUtils;
public
class
MainActivity
extends
AppCompatActivity
implements
SettingsDialog.SettingsChangeListener {
private
static
final
String TAG = MainActivity.
class
.getSimpleName();
private
ConstraintLayout contentLayout;
private
TextView statusText;
private
View outerCircleView, innerCircleView;
private
FloatingActionButton fab;
private
Animation animationInhaleText, animationExhaleText, animationInhaleInnerCircle, animationExhaleInnerCircle;
private
Handler handler =
new
Handler();
private
int
holdDuration =
0
;
@Override
protected
void
onCreate(Bundle savedInstanceState) {
super
.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
contentLayout = findViewById(R.id.lt_content);
statusText = findViewById(R.id.txt_status);
statusText.setText(Constants.INHALE);
outerCircleView = findViewById(R.id.view_circle_outer);
innerCircleView = findViewById(R.id.view_circle_inner);
setupBackgroundColor();
prepareAnimations();
statusText.startAnimation(animationInhaleText);
innerCircleView.startAnimation(animationInhaleInnerCircle);
}
private
void
setupBackgroundColor() {
int
backgroundResId = SettingsUtils.getBackgroundByPresetPosition(SettingsUtils.getSelectedPreset());
setOuterCircleBackground(R.color.colorPrimaryDark);
}
private
void
setOuterCircleBackground(
int
backgroundResId) {
outerCircleView.setBackgroundResource(backgroundResId);
}
private
void
setInhaleDuration(
int
duration) {
animationInhaleText.setDuration(duration);
animationInhaleInnerCircle.setDuration(duration);
}
private
void
setExhaleDuration(
int
duration) {
animationExhaleText.setDuration(duration);
animationExhaleInnerCircle.setDuration(duration);
}
private
void
prepareAnimations() {
int
inhaleDuration = SettingsUtils.getSelectedInhaleDuration();
int
exhaleDuration = SettingsUtils.getSelectedExhaleDuration();
holdDuration = SettingsUtils.getSelectedHoldDuration();
animationInhaleText = AnimationUtils.loadAnimation(
this
, R.anim.anim_text_inhale);
animationInhaleText.setFillAfter(
true
);
animationInhaleText.setAnimationListener(inhaleAnimationListener);
animationInhaleInnerCircle = AnimationUtils.loadAnimation(
this
, R.anim.anim_inner_circle_inhale);
animationInhaleInnerCircle.setFillAfter(
true
);
animationInhaleInnerCircle.setAnimationListener(inhaleAnimationListener);
setInhaleDuration(inhaleDuration);
animationExhaleText = AnimationUtils.loadAnimation(
this
, R.anim.anim_text_exhale);
animationExhaleText.setFillAfter(
true
);
animationExhaleText.setAnimationListener(exhaleAnimationListener);
animationExhaleInnerCircle = AnimationUtils.loadAnimation(
this
, R.anim.anim_inner_circle_exhale);
animationExhaleInnerCircle.setFillAfter(
true
);
animationExhaleInnerCircle.setAnimationListener(exhaleAnimationListener);
setExhaleDuration(exhaleDuration);
}
private
Animation.AnimationListener inhaleAnimationListener =
new
Animation.AnimationListener() {
@Override
public
void
onAnimationStart(Animation animation) {
}
@Override
public
void
onAnimationEnd(Animation animation) {
Log.d(TAG,
"inhale animation end"
);
statusText.setText(Constants.HOLD);
handler.postDelayed(
new
Runnable() {
@Override
public
void
run() {
statusText.setText(Constants.EXHALE);
statusText.startAnimation(animationExhaleText);
innerCircleView.startAnimation(animationExhaleInnerCircle);
}
}, holdDuration);
}
@Override
public
void
onAnimationRepeat(Animation animation) {
}
};
private
Animation.AnimationListener exhaleAnimationListener =
new
Animation.AnimationListener() {
@Override
public
void
onAnimationStart(Animation animation) {
}
@Override
public
void
onAnimationEnd(Animation animation) {
Log.d(TAG,
"exhale animation end"
);
statusText.setText(Constants.HOLD);
handler.postDelayed(
new
Runnable() {
@Override
public
void
run() {
statusText.setText(Constants.INHALE);
statusText.startAnimation(animationInhaleText);
innerCircleView.startAnimation(animationInhaleInnerCircle);
}
}, holdDuration);
}
@Override
public
void
onAnimationRepeat(Animation animation) {
}
};
@Override
public
void
onPresetChanged(
int
backgroundResId) {
setOuterCircleBackground(backgroundResId);
}
@Override
public
void
onInhaleValueChanged(
int
duration) {
setInhaleDuration(duration);
}
@Override
public
void
onExhaleValueChanged(
int
duration) {
setExhaleDuration(duration);
}
@Override
public
void
onHoldValueChanged(
int
duration) {
holdDuration = duration;
}
}