From 180a1c0af8b01ab05a2b851e92f2c821ed541531 Mon Sep 17 00:00:00 2001 From: Phillip Hsu Date: Wed, 27 Jul 2016 14:59:38 -0700 Subject: [PATCH] Implemented secondary buttons --- .../java/com/philliphsu/clock2/Timer.java | 5 ++-- .../clock2/timers/TimerController.java | 28 ++++++++++++++++++- .../clock2/timers/TimerViewHolder.java | 20 +++++++++++-- 3 files changed, 48 insertions(+), 5 deletions(-) diff --git a/app/src/main/java/com/philliphsu/clock2/Timer.java b/app/src/main/java/com/philliphsu/clock2/Timer.java index ab0fc10..b81c19d 100644 --- a/app/src/main/java/com/philliphsu/clock2/Timer.java +++ b/app/src/main/java/com/philliphsu/clock2/Timer.java @@ -98,8 +98,9 @@ public abstract class Timer { } public void addOneMinute() { - if (!isRunning()) - throw new IllegalStateException("Cannot extend a timer that is not running"); + // Allow extending even if paused. +// if (!isRunning()) +// throw new IllegalStateException("Cannot extend a timer that is not running"); if (expired()) { endTime = SystemClock.elapsedRealtime() + MINUTE; } else { diff --git a/app/src/main/java/com/philliphsu/clock2/timers/TimerController.java b/app/src/main/java/com/philliphsu/clock2/timers/TimerController.java index 519e0b1..72bb45d 100644 --- a/app/src/main/java/com/philliphsu/clock2/timers/TimerController.java +++ b/app/src/main/java/com/philliphsu/clock2/timers/TimerController.java @@ -1,6 +1,8 @@ package com.philliphsu.clock2.timers; import android.os.SystemClock; +import android.view.View; +import android.widget.ImageButton; import com.philliphsu.clock2.Timer; @@ -10,32 +12,45 @@ import com.philliphsu.clock2.Timer; public class TimerController { private final Timer mTimer; private final CountdownChronometer mChronometer; + private final ImageButton mAddOneMinute; + private final ImageButton mStartPause; + private final ImageButton mStop; - public TimerController(Timer timer, CountdownChronometer chronometer) { + public TimerController(Timer timer, CountdownChronometer chronometer, ImageButton addOneMinute, + ImageButton startPause, ImageButton stop) { mTimer = timer; mChronometer = chronometer; + mAddOneMinute = addOneMinute; + mStartPause = startPause; + mStop = stop; init(); } private void init() { mChronometer.setBase(SystemClock.elapsedRealtime() + mTimer.duration()); + updateStartPauseIcon(); + setSecondaryButtonsVisible(false); } public void start() { mTimer.start(); mChronometer.setBase(mTimer.endTime()); mChronometer.start(); + updateStartPauseIcon(); + setSecondaryButtonsVisible(true); } public void pause() { mTimer.pause(); mChronometer.stop(); + updateStartPauseIcon(); } public void resume() { mTimer.resume(); mChronometer.setBase(mTimer.endTime()); mChronometer.start(); + updateStartPauseIcon(); } public void stop() { @@ -48,4 +63,15 @@ public class TimerController { mTimer.addOneMinute(); mChronometer.setBase(mTimer.endTime()); } + + public void updateStartPauseIcon() { + // TODO: Pause and start icons, resp. +// mStartPause.setImageResource(mTimer.isRunning() ? 0 : 0); + } + + public void setSecondaryButtonsVisible(boolean visible) { + int visibility = visible ? View.VISIBLE : View.INVISIBLE; + mAddOneMinute.setVisibility(visibility); + mStop.setVisibility(visibility); + } } diff --git a/app/src/main/java/com/philliphsu/clock2/timers/TimerViewHolder.java b/app/src/main/java/com/philliphsu/clock2/timers/TimerViewHolder.java index 013a95a..6ea0059 100644 --- a/app/src/main/java/com/philliphsu/clock2/timers/TimerViewHolder.java +++ b/app/src/main/java/com/philliphsu/clock2/timers/TimerViewHolder.java @@ -37,9 +37,10 @@ public class TimerViewHolder extends BaseViewHolder { super.onBind(timer); bindLabel(timer.label()); // We can't create the controller until this VH binds, because - // the chronometer only exists after this point. - mController = new TimerController(timer, mChronometer); + // the widgets only exist after this point. + mController = new TimerController(timer, mChronometer, mAddOneMinute, mStartPause, mStop); bindChronometer(timer); + bindButtonControls(timer); } @OnClick(R.id.start_pause) @@ -56,6 +57,16 @@ public class TimerViewHolder extends BaseViewHolder { } } + @OnClick(R.id.add_one_minute) + void addOneMinute() { + mController.addOneMinute(); + } + + @OnClick(R.id.stop) + void stop() { + mController.stop(); + } + private void bindLabel(String label) { if (!label.isEmpty()) { mLabel.setText(label); @@ -94,4 +105,9 @@ public class TimerViewHolder extends BaseViewHolder { mChronometer.setDuration(timer.timeRemaining()); } } + + private void bindButtonControls(Timer timer) { + mController.updateStartPauseIcon(); + mController.setSecondaryButtonsVisible(timer.hasStarted()); + } }