From 5991a5b6a8647d30f871d316caa2405f4c974981 Mon Sep 17 00:00:00 2001 From: Stephen Michel Date: Fri, 27 Dec 2019 16:13:43 -0500 Subject: [PATCH] hold to dismiss, with temporary color, for #20 --- .../talalarmo/alarm/AlarmActivity.java | 55 ++++++++++++++++++- 1 file changed, 53 insertions(+), 2 deletions(-) diff --git a/src/main/java/trikita/talalarmo/alarm/AlarmActivity.java b/src/main/java/trikita/talalarmo/alarm/AlarmActivity.java index 820775a..458405f 100644 --- a/src/main/java/trikita/talalarmo/alarm/AlarmActivity.java +++ b/src/main/java/trikita/talalarmo/alarm/AlarmActivity.java @@ -1,14 +1,19 @@ package trikita.talalarmo.alarm; +import android.animation.Animator; +import android.animation.ArgbEvaluator; +import android.animation.ValueAnimator; import android.app.Activity; import android.content.Context; import android.os.Build; import android.os.Bundle; import android.os.PowerManager; +import android.view.MotionEvent; import android.view.Window; import android.view.WindowManager; import trikita.anvil.RenderableView; +import trikita.anvil.Anvil; import static trikita.anvil.DSL.*; import trikita.jedux.Action; @@ -19,6 +24,9 @@ public class AlarmActivity extends Activity { private PowerManager.WakeLock mWakeLock; + private ValueAnimator mAnimator; + private int bgColor; + private boolean canceled; @Override protected void onCreate(Bundle b) { @@ -37,6 +45,39 @@ protected void onCreate(Bundle b) { window.setStatusBarColor(Theme.get(App.getState().settings().theme()).primaryDarkColor); } + int colorFrom = Theme.get(App.getState().settings().theme()).backgroundColor; + int colorTo = 0xff3cf902; + bgColor = colorFrom; + mAnimator = ValueAnimator.ofObject(new ArgbEvaluator(), colorFrom, colorTo); + mAnimator.setDuration(3000); // millis + mAnimator.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() { + @Override + public void onAnimationUpdate(ValueAnimator animator) { + bgColor = (int) animator.getAnimatedValue(); + Anvil.render(); + } + }); + mAnimator.addListener(new Animator.AnimatorListener() { + @Override + public void onAnimationStart(Animator animator) { + canceled = false; + } + @Override + public void onAnimationCancel(Animator animator) { + canceled = true; + bgColor = colorFrom; + Anvil.render(); + } + @Override + public void onAnimationEnd(Animator animator) { + if (!canceled) { + stopAlarm(); + } + } + @Override + public void onAnimationRepeat(Animator animator) {} + }); + setContentView(new RenderableView(this) { public void view() { Theme.materialIcon(() -> { @@ -44,8 +85,18 @@ public void view() { text("\ue857"); // "alarm off" textColor(Theme.get(App.getState().settings().theme()).accentColor); textSize(dip(128)); - backgroundColor(Theme.get(App.getState().settings().theme()).backgroundColor); - onClick(v -> stopAlarm()); + backgroundColor(bgColor); + onTouch((v, e) -> { + if(e.getAction() == MotionEvent.ACTION_DOWN){ + mAnimator.start(); + return true; + } + if(e.getAction() == MotionEvent.ACTION_UP){ + mAnimator.cancel(); + return true; + } + return false; + }); }); } });