/* * Copyright (C) 2013 jonas.oreland@gmail.com * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see <http://www.gnu.org/licenses/>. */ package org.runnerup.workout; import android.annotation.TargetApi; import android.os.Build; import java.util.ArrayList; import java.util.HashMap; import java.util.List; @TargetApi(Build.VERSION_CODES.FROYO) public class RepeatStep extends Step { int repeatCount = 1; public ArrayList<Step> getSteps() { return steps; } final ArrayList<Step> steps = new ArrayList<Step>(); int currentStep = 0; int currentRepeat = 0; public RepeatStep() { this.intensity = Intensity.REPEAT; this.durationType = null; this.targetType = null; } @Override public Dimension getDurationType() { return null; } @Override public void onInit(Workout w) { currentStep = 0; currentRepeat = 0; for (Step s : steps) { s.onInit(w); } } @Override public void onBind(Workout w, HashMap<String, Object> bindValues) { for (Step s : steps) { s.onBind(w, bindValues); } } @Override public String toString() { return "currentStep: " + currentStep + "(" + steps.size() + ") currentRepeat: " + currentRepeat + "(" + repeatCount + ")"; } @Override public void onEnd(Workout w) { for (Step s : steps) { s.onEnd(w); } } @Override public void onRepeat(int current, int count) { super.onRepeat(current, count); currentStep = 0; currentRepeat = 0; for (Step s : steps) { s.onRepeat(0, repeatCount); } } @Override public void onStart(Scope what, Workout s) { steps.get(currentStep).onStart(what, s); } @Override public void onStop(Workout s) { steps.get(currentStep).onStop(s); } @Override public void onPause(Workout s) { steps.get(currentStep).onPause(s); } @Override public boolean onTick(Workout w) { if (steps.get(currentStep).onTick(w)) { return true; } return false; } @Override public boolean onNextStep(Workout w) { if (steps.get(currentStep).onNextStep(w)) { currentStep++; if (currentStep == steps.size()) { currentStep = 0; currentRepeat++; if (currentRepeat == repeatCount) { return true; } for (Step s : steps) { s.onRepeat(currentRepeat, repeatCount); } } } return false; } @Override public void onResume(Workout s) { steps.get(currentStep).onResume(s); } @Override public void onComplete(Scope scope, Workout s) { steps.get(currentStep).onComplete(scope, s); } @Override public double getDistance(Workout w, Scope s) { return steps.get(currentStep).getDistance(w, s); } @Override public double getTime(Workout w, Scope s) { return steps.get(currentStep).getTime(w, s); } @Override public double getSpeed(Workout w, Scope s) { return steps.get(currentStep).getSpeed(w, s); } @Override public double getHeartbeats(Workout w, Scope s) { return steps.get(currentStep).getHeartbeats(w, s); } @Override public double getDuration(Dimension dimension) { return steps.get(currentStep).getDuration(dimension); } @Override public int getRepeatCount() { return repeatCount; } @Override public void setRepeatCount(int val) { repeatCount = val; } @Override public int getCurrentRepeat() { return currentRepeat; } @Override public Step getCurrentStep() { if (currentStep < steps.size()) return steps.get(currentStep).getCurrentStep(); return null; } @Override public boolean isLastStep() { if (currentStep + 1 < steps.size()) return false; if (currentRepeat < repeatCount) return false; return steps.get(currentStep).isLastStep(); } @Override public void getSteps(Step parent, int level, List<Workout.StepListEntry> list) { list.add(new Workout.StepListEntry(list.size(), this, level, parent)); for (Step s2 : steps) { s2.getSteps(this, level + 1, list); } } }