diff --git a/app/src/main/java/edu/luc/etl/cs313/android/simplestopwatch/android/StopwatchAdapter.java b/app/src/main/java/edu/luc/etl/cs313/android/simplestopwatch/android/StopwatchAdapter.java index 571b47e..126822e 100644 --- a/app/src/main/java/edu/luc/etl/cs313/android/simplestopwatch/android/StopwatchAdapter.java +++ b/app/src/main/java/edu/luc/etl/cs313/android/simplestopwatch/android/StopwatchAdapter.java @@ -88,8 +88,4 @@ public void onStateUpdate(final int stateId) { public void onStartStop(final View view) { model.onStartStop(); } - - public void onLapReset(final View view) { - model.onLapReset(); - } } diff --git a/app/src/main/java/edu/luc/etl/cs313/android/simplestopwatch/common/Constants.java b/app/src/main/java/edu/luc/etl/cs313/android/simplestopwatch/common/Constants.java index f4d71eb..032f67b 100644 --- a/app/src/main/java/edu/luc/etl/cs313/android/simplestopwatch/common/Constants.java +++ b/app/src/main/java/edu/luc/etl/cs313/android/simplestopwatch/common/Constants.java @@ -8,7 +8,7 @@ public enum Constants { ; public static final int SEC_PER_TICK = 1; - public static final int SEC_PER_MIN = 60; - public static final int SEC_PER_HOUR = 3600; + // Constant Max Value 99 + public static final int MAX_TIME == 99; } \ No newline at end of file diff --git a/app/src/main/java/edu/luc/etl/cs313/android/simplestopwatch/common/StopwatchUIListener.java b/app/src/main/java/edu/luc/etl/cs313/android/simplestopwatch/common/StopwatchUIListener.java index 00b9319..7fd0d2e 100644 --- a/app/src/main/java/edu/luc/etl/cs313/android/simplestopwatch/common/StopwatchUIListener.java +++ b/app/src/main/java/edu/luc/etl/cs313/android/simplestopwatch/common/StopwatchUIListener.java @@ -7,5 +7,4 @@ */ public interface StopwatchUIListener { void onStartStop(); - void onLapReset(); } diff --git a/app/src/main/java/edu/luc/etl/cs313/android/simplestopwatch/model/ConcreteStopwatchModelFacade.java b/app/src/main/java/edu/luc/etl/cs313/android/simplestopwatch/model/ConcreteStopwatchModelFacade.java index cca5dc9..6fd2664 100644 --- a/app/src/main/java/edu/luc/etl/cs313/android/simplestopwatch/model/ConcreteStopwatchModelFacade.java +++ b/app/src/main/java/edu/luc/etl/cs313/android/simplestopwatch/model/ConcreteStopwatchModelFacade.java @@ -43,9 +43,4 @@ public void onStartStop() { stateMachine.onStartStop(); } - @Override - public void onLapReset() { - stateMachine.onLapReset(); - } - } diff --git a/app/src/main/java/edu/luc/etl/cs313/android/simplestopwatch/model/state/AlarmState.java b/app/src/main/java/edu/luc/etl/cs313/android/simplestopwatch/model/state/AlarmState.java new file mode 100644 index 0000000..1ca96c3 --- /dev/null +++ b/app/src/main/java/edu/luc/etl/cs313/android/simplestopwatch/model/state/AlarmState.java @@ -0,0 +1,24 @@ +package edu.luc.etl.cs313.android.simplestopwatch.model.state; + +import edu.luc.etl.cs313.android.simplestopwatch.R; + +class AlarmState implements StopwatchState { + + public AlarmState(final StopwatchSMStateView sm) { + this.sm = sm; + } + + private final StopwatchSMStateView sm; + + + // Listener for Alarm action? + + + @Override + public void onStartStop() { + sm.actionStop(); + sm.toStoppedState(); + + } + +} \ No newline at end of file diff --git a/app/src/main/java/edu/luc/etl/cs313/android/simplestopwatch/model/state/DefaultStopwatchStateMachine.java b/app/src/main/java/edu/luc/etl/cs313/android/simplestopwatch/model/state/DefaultStopwatchStateMachine.java index 9981bfa..0efd618 100644 --- a/app/src/main/java/edu/luc/etl/cs313/android/simplestopwatch/model/state/DefaultStopwatchStateMachine.java +++ b/app/src/main/java/edu/luc/etl/cs313/android/simplestopwatch/model/state/DefaultStopwatchStateMachine.java @@ -41,30 +41,31 @@ public void setModelListener(final StopwatchModelListener listener) { // these must be synchronized because events can come from the // UI thread or the timer thread @Override public synchronized void onStartStop() { state.onStartStop(); } - @Override public synchronized void onLapReset() { state.onLapReset(); } @Override public synchronized void onTick() { state.onTick(); } @Override public void updateUIRuntime() { listener.onTimeUpdate(timeModel.getRuntime()); } - @Override public void updateUILaptime() { listener.onTimeUpdate(timeModel.getLaptime()); } + // known states private final StopwatchState STOPPED = new StoppedState(this); private final StopwatchState RUNNING = new RunningState(this); - private final StopwatchState LAP_RUNNING = new LapRunningState(this); - private final StopwatchState LAP_STOPPED = new LapStoppedState(this); + //private final StopwatchState ALARMING = new AlarmState(this); // transitions @Override public void toRunningState() { setState(RUNNING); } @Override public void toStoppedState() { setState(STOPPED); } - @Override public void toLapRunningState() { setState(LAP_RUNNING); } - @Override public void toLapStoppedState() { setState(LAP_STOPPED); } + //@Override public void toAlarmState() { /* setState(ALARMING);*/ } // actions @Override public void actionInit() { toStoppedState(); actionReset(); } @Override public void actionReset() { timeModel.resetRuntime(); actionUpdateView(); } + @Override public void actionStart() { clockModel.start(); } @Override public void actionStop() { clockModel.stop(); } - @Override public void actionLap() { timeModel.setLaptime(); } @Override public void actionInc() { timeModel.incRuntime(); actionUpdateView(); } + // Timer Countdown Action + @Override public void actionDec() { timeModel.decRuntime(); actionUpdateView(); } + // Alarm Action + //@Override public void actionAlarm() { /* listener.onAlarm(); */ } @Override public void actionUpdateView() { state.updateView(); } } diff --git a/app/src/main/java/edu/luc/etl/cs313/android/simplestopwatch/model/state/LapRunningState.java b/app/src/main/java/edu/luc/etl/cs313/android/simplestopwatch/model/state/LapRunningState.java deleted file mode 100644 index ca5f49d..0000000 --- a/app/src/main/java/edu/luc/etl/cs313/android/simplestopwatch/model/state/LapRunningState.java +++ /dev/null @@ -1,40 +0,0 @@ -package edu.luc.etl.cs313.android.simplestopwatch.model.state; - -import edu.luc.etl.cs313.android.simplestopwatch.R; - -class LapRunningState implements StopwatchState { - - public LapRunningState(final StopwatchSMStateView sm) { - this.sm = sm; - } - - private final StopwatchSMStateView sm; - - @Override - public void onStartStop() { - sm.actionStop(); - sm.toLapStoppedState(); - } - - @Override - public void onLapReset() { - sm.toRunningState(); - sm.actionUpdateView(); - } - - @Override - public void onTick() { - sm.actionInc(); - sm.toLapRunningState(); - } - - @Override - public void updateView() { - sm.updateUILaptime(); - } - - @Override - public int getId() { - return R.string.LAP_RUNNING; - } -} diff --git a/app/src/main/java/edu/luc/etl/cs313/android/simplestopwatch/model/state/LapStoppedState.java b/app/src/main/java/edu/luc/etl/cs313/android/simplestopwatch/model/state/LapStoppedState.java deleted file mode 100644 index f695aef..0000000 --- a/app/src/main/java/edu/luc/etl/cs313/android/simplestopwatch/model/state/LapStoppedState.java +++ /dev/null @@ -1,39 +0,0 @@ -package edu.luc.etl.cs313.android.simplestopwatch.model.state; - -import edu.luc.etl.cs313.android.simplestopwatch.R; - -class LapStoppedState implements StopwatchState { - - public LapStoppedState(final StopwatchSMStateView sm) { - this.sm = sm; - } - - private final StopwatchSMStateView sm; - - @Override - public void onStartStop() { - sm.actionStart(); - sm.toLapRunningState(); - } - - @Override - public void onLapReset() { - sm.toStoppedState(); - sm.actionUpdateView(); - } - - @Override - public void onTick() { - throw new UnsupportedOperationException("onTick"); - } - - @Override - public void updateView() { - sm.updateUILaptime(); - } - - @Override - public int getId() { - return R.string.LAP_STOPPED; - } -} diff --git a/app/src/main/java/edu/luc/etl/cs313/android/simplestopwatch/model/state/RunningState.java b/app/src/main/java/edu/luc/etl/cs313/android/simplestopwatch/model/state/RunningState.java index 4fe248a..23e2c6e 100644 --- a/app/src/main/java/edu/luc/etl/cs313/android/simplestopwatch/model/state/RunningState.java +++ b/app/src/main/java/edu/luc/etl/cs313/android/simplestopwatch/model/state/RunningState.java @@ -13,19 +13,19 @@ public RunningState(final StopwatchSMStateView sm) { @Override public void onStartStop() { sm.actionStop(); + // Reset Time and go to Stopped State + sm.actionReset(); sm.toStoppedState(); } - @Override - public void onLapReset() { - sm.actionLap(); - sm.toLapRunningState(); - } - @Override public void onTick() { - sm.actionInc(); - sm.toRunningState(); + sm.actionDec(); + // If time reaches 0, go to Alarm State + if (sm.getRuntime() == 0) { + sm.actionStop(); + sm.toAlarmState(); + } } @Override diff --git a/app/src/main/java/edu/luc/etl/cs313/android/simplestopwatch/model/state/StoppedState.java b/app/src/main/java/edu/luc/etl/cs313/android/simplestopwatch/model/state/StoppedState.java index feb920d..73619f5 100644 --- a/app/src/main/java/edu/luc/etl/cs313/android/simplestopwatch/model/state/StoppedState.java +++ b/app/src/main/java/edu/luc/etl/cs313/android/simplestopwatch/model/state/StoppedState.java @@ -12,19 +12,13 @@ public StoppedState(final StopwatchSMStateView sm) { @Override public void onStartStop() { - sm.actionStart(); - sm.toRunningState(); - } - - @Override - public void onLapReset() { - sm.actionReset(); - sm.toStoppedState(); + // Change Start/Stop button to Increment + sm.actionInc(); } @Override public void onTick() { - throw new UnsupportedOperationException("onTick"); + // Need to implement 3s countdown to alarm } @Override diff --git a/app/src/main/java/edu/luc/etl/cs313/android/simplestopwatch/model/state/StopwatchSMStateView.java b/app/src/main/java/edu/luc/etl/cs313/android/simplestopwatch/model/state/StopwatchSMStateView.java index 4a88c97..c419313 100644 --- a/app/src/main/java/edu/luc/etl/cs313/android/simplestopwatch/model/state/StopwatchSMStateView.java +++ b/app/src/main/java/edu/luc/etl/cs313/android/simplestopwatch/model/state/StopwatchSMStateView.java @@ -11,19 +11,24 @@ interface StopwatchSMStateView { // transitions void toRunningState(); void toStoppedState(); - void toLapRunningState(); - void toLapStoppedState(); + //void toAlarmState(); // actions void actionInit(); void actionReset(); void actionStart(); void actionStop(); - void actionLap(); + // Idle Increment Action + //void resetIdleTick(); + //void incIdleTick(); void actionInc(); + // Timer Countdown Action + void actionDec(); void actionUpdateView(); + // Alarm Action + //void actionAlarm(); // state-dependent UI updates void updateUIRuntime(); - void updateUILaptime(); + } diff --git a/app/src/main/java/edu/luc/etl/cs313/android/simplestopwatch/model/time/DefaultTimeModel.java b/app/src/main/java/edu/luc/etl/cs313/android/simplestopwatch/model/time/DefaultTimeModel.java index 73bdda3..1335698 100644 --- a/app/src/main/java/edu/luc/etl/cs313/android/simplestopwatch/model/time/DefaultTimeModel.java +++ b/app/src/main/java/edu/luc/etl/cs313/android/simplestopwatch/model/time/DefaultTimeModel.java @@ -9,8 +9,6 @@ public class DefaultTimeModel implements TimeModel { private int runningTime = 0; - private int lapTime = -1; - @Override public void resetRuntime() { runningTime = 0; @@ -18,21 +16,20 @@ public void resetRuntime() { @Override public void incRuntime() { - runningTime = (runningTime + SEC_PER_TICK) % SEC_PER_HOUR; - } - - @Override - public int getRuntime() { - return runningTime; + if (runningTime < 99) { + runningTime = (runningTime + SEC_PER_TICK); + } } @Override - public void setLaptime() { - lapTime = runningTime; + public void decRuntime() { + if (runningTime > 0) { + runningTime = (runningTime - SEC_PER_TICK); + } } @Override - public int getLaptime() { - return lapTime; + public int getRuntime() { + return runningTime; } } \ No newline at end of file diff --git a/app/src/main/java/edu/luc/etl/cs313/android/simplestopwatch/model/time/TimeModel.java b/app/src/main/java/edu/luc/etl/cs313/android/simplestopwatch/model/time/TimeModel.java index 5e5fa75..a5b2299 100644 --- a/app/src/main/java/edu/luc/etl/cs313/android/simplestopwatch/model/time/TimeModel.java +++ b/app/src/main/java/edu/luc/etl/cs313/android/simplestopwatch/model/time/TimeModel.java @@ -9,7 +9,7 @@ public interface TimeModel { void resetRuntime(); void incRuntime(); + // New Decrement Runtime Method + void decRuntime(); int getRuntime(); - void setLaptime(); - int getLaptime(); } diff --git a/doc/ExtendedState-Diagram.pdf b/doc/ExtendedState-Diagram.pdf new file mode 100644 index 0000000..0966683 Binary files /dev/null and b/doc/ExtendedState-Diagram.pdf differ