From 6033c7cf983a347c35574769b2e33a21e428783c Mon Sep 17 00:00:00 2001 From: Mike Miller Date: Sun, 22 Jun 2014 17:57:06 -0700 Subject: A few improvements --- .gitignore | 4 - .idea/compiler.xml | 46 +-- .idea/copyright/profiles_settings.xml | 6 +- .idea/encodings.xml | 10 +- .idea/gradle.xml | 36 +- .idea/libraries/appcompat_v7_19_0_1.xml | 10 - .idea/libraries/support_v13_19_0_1.xml | 11 - .idea/libraries/support_v4_19_0_1.xml | 11 - .idea/misc.xml | 125 ++++++- .idea/modules.xml | 20 +- .idea/scopes/scope_settings.xml | 8 +- .idea/vcs.xml | 15 +- GymLog.iml | 27 +- GymLog/.gitignore | 1 - GymLog/GymLog-GymLog.iml | 61 ++-- GymLog/build.gradle | 2 +- GymLog/src/main/AndroidManifest.xml | 42 +-- .../main/java/com/mikemiller/gymlog/Activity.java | 149 +++++--- .../com/mikemiller/gymlog/ActivityFragment.java | 386 +++++++++++---------- .../com/mikemiller/gymlog/DoubleTapDetector.java | 58 ++-- .../java/com/mikemiller/gymlog/MainActivity.java | 98 +++++- .../mikemiller/gymlog/SimpleCounterFragment.java | 244 ++++++------- GymLog/src/main/res/layout/fragment_activity.xml | 60 ++-- .../main/res/layout/fragment_simple_counter.xml | 66 ++-- GymLog/src/main/res/values/strings.xml | 16 +- build.gradle | 2 +- gradle/wrapper/gradle-wrapper.properties | 4 +- gradlew.bat | 180 +++++----- settings.gradle | 2 +- 29 files changed, 962 insertions(+), 738 deletions(-) delete mode 100644 .gitignore delete mode 100644 .idea/libraries/appcompat_v7_19_0_1.xml delete mode 100644 .idea/libraries/support_v13_19_0_1.xml delete mode 100644 .idea/libraries/support_v4_19_0_1.xml delete mode 100644 GymLog/.gitignore diff --git a/.gitignore b/.gitignore deleted file mode 100644 index d6bfc95..0000000 --- a/.gitignore +++ /dev/null @@ -1,4 +0,0 @@ -.gradle -/local.properties -/.idea/workspace.xml -.DS_Store diff --git a/.idea/compiler.xml b/.idea/compiler.xml index 217af47..28bb10a 100644 --- a/.idea/compiler.xml +++ b/.idea/compiler.xml @@ -1,23 +1,23 @@ - - - - - - + + + + + + diff --git a/.idea/copyright/profiles_settings.xml b/.idea/copyright/profiles_settings.xml index 3572571..c7d1c5a 100644 --- a/.idea/copyright/profiles_settings.xml +++ b/.idea/copyright/profiles_settings.xml @@ -1,5 +1,3 @@ - - - - + + \ No newline at end of file diff --git a/.idea/encodings.xml b/.idea/encodings.xml index e206d70..7c62b52 100644 --- a/.idea/encodings.xml +++ b/.idea/encodings.xml @@ -1,5 +1,5 @@ - - - - - + + + + + diff --git a/.idea/gradle.xml b/.idea/gradle.xml index 68414fe..91294a1 100644 --- a/.idea/gradle.xml +++ b/.idea/gradle.xml @@ -1,18 +1,18 @@ - - - - - - - + + + + + + + diff --git a/.idea/libraries/appcompat_v7_19_0_1.xml b/.idea/libraries/appcompat_v7_19_0_1.xml deleted file mode 100644 index caf0395..0000000 --- a/.idea/libraries/appcompat_v7_19_0_1.xml +++ /dev/null @@ -1,10 +0,0 @@ - - - - - - - - - - \ No newline at end of file diff --git a/.idea/libraries/support_v13_19_0_1.xml b/.idea/libraries/support_v13_19_0_1.xml deleted file mode 100644 index b427b1e..0000000 --- a/.idea/libraries/support_v13_19_0_1.xml +++ /dev/null @@ -1,11 +0,0 @@ - - - - - - - - - - - \ No newline at end of file diff --git a/.idea/libraries/support_v4_19_0_1.xml b/.idea/libraries/support_v4_19_0_1.xml deleted file mode 100644 index f26603b..0000000 --- a/.idea/libraries/support_v4_19_0_1.xml +++ /dev/null @@ -1,11 +0,0 @@ - - - - - - - - - - - \ No newline at end of file diff --git a/.idea/misc.xml b/.idea/misc.xml index 66ef826..12f86e2 100644 --- a/.idea/misc.xml +++ b/.idea/misc.xml @@ -1,10 +1,115 @@ - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + localhost + 5050 + + + + diff --git a/.idea/modules.xml b/.idea/modules.xml index f7c2684..0435951 100644 --- a/.idea/modules.xml +++ b/.idea/modules.xml @@ -1,10 +1,10 @@ - - - - - - - - - - + + + + + + + + + + diff --git a/.idea/scopes/scope_settings.xml b/.idea/scopes/scope_settings.xml index 922003b..0d5175c 100644 --- a/.idea/scopes/scope_settings.xml +++ b/.idea/scopes/scope_settings.xml @@ -1,5 +1,5 @@ - - - + + + \ No newline at end of file diff --git a/.idea/vcs.xml b/.idea/vcs.xml index def6a6a..aee72b4 100644 --- a/.idea/vcs.xml +++ b/.idea/vcs.xml @@ -1,7 +1,8 @@ - - - - - - - + + + + + + + + diff --git a/GymLog.iml b/GymLog.iml index c87302f..f42959d 100644 --- a/GymLog.iml +++ b/GymLog.iml @@ -1,15 +1,12 @@ - - - - - - - - - - - - - - - + + + + + + + + + + + + diff --git a/GymLog/.gitignore b/GymLog/.gitignore deleted file mode 100644 index 796b96d..0000000 --- a/GymLog/.gitignore +++ /dev/null @@ -1 +0,0 @@ -/build diff --git a/GymLog/GymLog-GymLog.iml b/GymLog/GymLog-GymLog.iml index 794d129..d2d19c7 100644 --- a/GymLog/GymLog-GymLog.iml +++ b/GymLog/GymLog-GymLog.iml @@ -22,57 +22,64 @@ - + - - - - - - - - - - + + + + + + + + + + + + - - + + - - - - - - - - - + + + + + + + - + + + + + + + + + - - - - + + + diff --git a/GymLog/build.gradle b/GymLog/build.gradle index 68421ae..7ff9931 100644 --- a/GymLog/build.gradle +++ b/GymLog/build.gradle @@ -2,7 +2,7 @@ apply plugin: 'android' android { compileSdkVersion 19 - buildToolsVersion "19.0.3" + buildToolsVersion "19.1.0" defaultConfig { minSdkVersion 14 diff --git a/GymLog/src/main/AndroidManifest.xml b/GymLog/src/main/AndroidManifest.xml index 417ce01..d587282 100644 --- a/GymLog/src/main/AndroidManifest.xml +++ b/GymLog/src/main/AndroidManifest.xml @@ -1,21 +1,21 @@ - - - - - - - - - - - - - - + + + + + + + + + + + + + + diff --git a/GymLog/src/main/java/com/mikemiller/gymlog/Activity.java b/GymLog/src/main/java/com/mikemiller/gymlog/Activity.java index bce8419..85ebf43 100644 --- a/GymLog/src/main/java/com/mikemiller/gymlog/Activity.java +++ b/GymLog/src/main/java/com/mikemiller/gymlog/Activity.java @@ -1,46 +1,103 @@ -package com.mikemiller.gymlog; - -import java.io.Serializable; - -/** - * Created by Mike on 3/29/14. COPYRIGHT OLIO. - */ -public class Activity implements Serializable { - private String mName; - private int mSets; - private int mRepsLow; - private int mRepsHigh; - private int mWeightDecrement_percent; - private int mRepIncrement; - - public Activity (String name, int sets, int repsLow, int repsHigh, int weightDecrement_percent, int repIncrement) { - mName = name; - mSets = sets; - mRepsLow = repsLow; - mRepsHigh = repsHigh; - mWeightDecrement_percent = weightDecrement_percent; - mRepIncrement = repIncrement; - } - - public String getName() { return mName; } - public int getSets() { return mSets; } - public int getRepsLow() { return mRepsLow; } - public int getRepsHigh() { return mRepsHigh; } - public int getWeightForSet(int set, int setOneWeight) { - double val = (int)(setOneWeight - (set - 1) * setOneWeight * (mWeightDecrement_percent / 100.0)); - return (int) (5*(Math.round(val/5))); // Round to the nearest 5 lbs - } - public int getRepIncrement() { return mRepIncrement; } - - public String getSummary(int setOneWeight, int currentReps) { - String summary = ""; - String reps = getRepsLow() + (getRepsLow() == getRepsHigh() ? "" : " - " + getRepsHigh()); - summary += reps + " reps ("+ currentReps + ")\n\n"; - for (int i = 1; i <= getSets(); i++) { - summary += i + ": " + getWeightForSet(i, setOneWeight); - if (i > 1 && getRepIncrement() > 0) summary += " (+" + getRepIncrement() + " rep)"; - if (i < getSets()) summary += "\n"; - } - return summary; - } -} +package com.mikemiller.gymlog; + +import java.io.Serializable; +import java.text.DecimalFormat; +import java.util.ArrayList; + +/** + * Created by Mike on 3/29/14. COPYRIGHT OLIO. + */ +public class Activity implements Serializable { + private String mName; + private int mSets; + private int mRepsLow; + private int mRepsHigh; + private int mWeightDecrement_percent; + private int mRepIncrement; + + public Activity (String name, int sets, int repsLow, int repsHigh, int weightDecrement_percent, int repIncrement) { + mName = name; + mSets = sets; + mRepsLow = repsLow; + mRepsHigh = repsHigh; + mWeightDecrement_percent = weightDecrement_percent; + mRepIncrement = repIncrement; + } + + public String getName() { return mName; } + public String getSharedPreferencesName() { return "activity_data_" + mName; } + public int getSets() { return mSets; } + public int getRepsLow() { return mRepsLow; } + public int getRepsHigh() { return mRepsHigh; } + public int getWeightForSet(int set, int setOneWeight) { + double val = (int)(setOneWeight - (set - 1) * setOneWeight * (mWeightDecrement_percent / 100.0)); + return (int) (5*(Math.round(val/5))); // Round to the nearest 5 lbs + } + public int getRepIncrement() { return mRepIncrement; } + + public String getSummary(int setOneWeight, int currentReps, int lastWeight, int lastReps) { + String summary = ""; + String reps = getRepsLow() + (getRepsLow() == getRepsHigh() ? "" : "-" + getRepsHigh()); + summary += reps + " reps ("+ lastWeight + "x" + lastReps + ")\n\n"; + ArrayList sideWeightPerSet = getSideWeightPerSet(45, setOneWeight, getSets()); + for (int i = 1; i <= getSets(); i++) { + summary += i + ": " + getWeightForSet(i, setOneWeight) + "x" + (currentReps + (i-1) * getRepIncrement()) + " (" + sideWeightPerSet.get(i-1) + ")"; + if (i < getSets()) summary += "\n"; + } + return summary; + } + + static double[] sAvailableWeights = new double[]{45, 35, 25, 10, 5, 2.5}; + + private ArrayList getSideWeightPerSet(int barWeight, int setOneWeight, int sets) { + ArrayList weightPerSide = new ArrayList(); + + DecimalFormat format = new DecimalFormat(); + format.setDecimalSeparatorAlwaysShown(false); + + ArrayList lastWeights = new ArrayList(); + + for(int i = sets; i >= 1; i--) { + int weight = getWeightForSet(i, setOneWeight); + double sideTotal = (weight - barWeight) / 2.0; + ArrayList subWeights = getSubWeights(sideTotal, lastWeights); + String weightPerSideForThisSet = ""; + for(Double subWeight : subWeights) { + weightPerSideForThisSet = weightPerSideForThisSet + format.format(subWeight) + " "; + } + if (weightPerSideForThisSet.length() > 0) { + weightPerSideForThisSet = weightPerSideForThisSet.substring(0, weightPerSideForThisSet.length() - 1); + } + weightPerSide.add(0, weightPerSideForThisSet); + lastWeights = subWeights; + } + + return weightPerSide; + } + + private ArrayList getSubWeights(double total, ArrayList lastWeights) { + ArrayList subWeights = new ArrayList(); + + // We allow removing the last weight and replacing it with a larger weight. This method is meant to be called in ascending total weight order (i.e. backwards from the inverted pyramid training, so start with the final, lightest rep). + if (lastWeights.size() > 0) { + lastWeights.remove(lastWeights.size() - 1); + } + for (double weight : lastWeights) { + total -= weight; + subWeights.add(weight); + } + + int i = 0; + while (i < sAvailableWeights.length) { + double weight = sAvailableWeights[i]; + if (weight <= total) { + subWeights.add(weight); + total -= weight; + } else { + i++; + } + } + + return subWeights; + } +} diff --git a/GymLog/src/main/java/com/mikemiller/gymlog/ActivityFragment.java b/GymLog/src/main/java/com/mikemiller/gymlog/ActivityFragment.java index a4986ea..25dd30a 100644 --- a/GymLog/src/main/java/com/mikemiller/gymlog/ActivityFragment.java +++ b/GymLog/src/main/java/com/mikemiller/gymlog/ActivityFragment.java @@ -1,179 +1,209 @@ -package com.mikemiller.gymlog; - -import android.app.Fragment; -import android.content.Context; -import android.content.SharedPreferences; -import android.os.Bundle; -import android.view.GestureDetector; -import android.view.LayoutInflater; -import android.view.MotionEvent; -import android.view.View; -import android.view.ViewGroup; -import android.widget.Button; -import android.widget.TextView; - -public class ActivityFragment extends Fragment { - - private Activity mActivity; - private int mWeight = 0; - private int mReps = 0; - - @Override - public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { - View view = inflater.inflate(R.layout.fragment_activity, container, false); - - TextView name = (TextView) view.findViewById(R.id.name); - mActivity = (Activity) getArguments().getSerializable("activity"); - name.setText(mActivity.getName()); - - Button summary = (Button) view.findViewById(R.id.summary); - if (savedInstanceState!= null && savedInstanceState.containsKey("count")) { - mWeight = savedInstanceState.getInt("count"); - } - - summary.setText(Integer.toString(mWeight)); - summary.setOnTouchListener(new View.OnTouchListener() { - GestureDetector doubleTapDetector = new GestureDetector(new DoubleTapDetector(getActivity())); - GestureDetector flingDetector = new GestureDetector(getActivity(), new GestureDetector.OnGestureListener() { - @Override - public boolean onDown(MotionEvent e) { - return false; - } - - @Override - public void onShowPress(MotionEvent e) { - - } - - @Override - public boolean onSingleTapUp(MotionEvent e) { - return false; - } - - @Override - public boolean onScroll(MotionEvent e1, MotionEvent e2, float distanceX, float distanceY) { - return false; - } - - @Override - public void onLongPress(MotionEvent e) { - decrementWeight(); - } - - @Override - public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY) { - final float minFlingVelocity = 300; - if (velocityY > minFlingVelocity && Math.abs(velocityX) < minFlingVelocity) { - decrementReps(); - } else if (velocityY < -minFlingVelocity && Math.abs(velocityX) < minFlingVelocity ) { - incrementReps(); - } - return true; - } - }); - - @Override - public boolean onTouch(View v, MotionEvent event) { - if (flingDetector.onTouchEvent(event)) { - return true; - } - if (doubleTapDetector.onTouchEvent(event)) { - // A double tap occurred. - incrementWeight(); - return true; - } - return false; - } - }); - - - /* - count.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - incrementWeight(); - } - });*/ - - return view; - } - - @Override - public void onSaveInstanceState(Bundle outState) { - super.onSaveInstanceState(outState); - - outState.putInt("weight", mWeight); - } - - @Override - public void onViewStateRestored(Bundle savedInstanceState) { - super.onViewStateRestored(savedInstanceState); - - if (savedInstanceState!= null && savedInstanceState.containsKey("weight")) { - setWeight(savedInstanceState.getInt("weight")); - } - } - - private void setWeight(int weight) { - mWeight = weight; - Button summaryButton = (Button) getView().findViewById(R.id.summary); - summaryButton.setText(getSummary()); - } - private void setReps(int reps) { - mReps = reps; - Button summaryButton = (Button) getView().findViewById(R.id.summary); - summaryButton.setText(getSummary()); - } - - private String getSummary() { - return mActivity.getSummary(mWeight, mReps); - } - - public void incrementWeight() { - setWeight(mWeight + 5); - } - public void decrementWeight() { - setWeight(mWeight - 5); - } - public void incrementReps() { - setReps(mReps + 1); - } - public void decrementReps() { - setReps(mReps - 1); - } - - public static ActivityFragment newInstance(Activity activity) { - - ActivityFragment f = new ActivityFragment(); - Bundle b = new Bundle(); - b.putSerializable("activity", activity); - f.setArguments(b); - - return f; - } - - @Override - public void onStop() { - super.onStop(); - saveData(); - } - - private void saveData() { - SharedPreferences.Editor outState = getActivity().getSharedPreferences(getSharedpreferencesName(), Context.MODE_APPEND).edit(); - outState.putInt("weight", mWeight); - outState.putInt("reps", mReps); - outState.commit(); - } - @Override - public void onActivityCreated(Bundle savedInstanceState) { - super.onActivityCreated(savedInstanceState); - - SharedPreferences activity_data = getActivity().getSharedPreferences(getSharedpreferencesName(), Context.MODE_APPEND); - setWeight(activity_data.getInt("weight", 0)); - setReps(activity_data.getInt("reps", 0)); - } - - private String getSharedpreferencesName() { - return "activity_data_" + mActivity.getName(); - } +package com.mikemiller.gymlog; + +import android.app.Fragment; +import android.content.Context; +import android.content.SharedPreferences; +import android.os.Bundle; +import android.util.Log; +import android.view.GestureDetector; +import android.view.LayoutInflater; +import android.view.MotionEvent; +import android.view.View; +import android.view.ViewGroup; +import android.widget.Button; +import android.widget.TextView; + +import java.util.Calendar; +import java.util.Date; + +public class ActivityFragment extends Fragment { + + private Activity mActivity; + private int mWeight = 0; + private int mReps = 0; + private int mLastWeight = 0; + private int mLastReps = 0; + + @Override + public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { + View view = inflater.inflate(R.layout.fragment_activity, container, false); + + TextView name = (TextView) view.findViewById(R.id.name); + mActivity = (Activity) getArguments().getSerializable("activity"); + name.setText(mActivity.getName()); + + Button summary = (Button) view.findViewById(R.id.summary); + if (savedInstanceState!= null && savedInstanceState.containsKey("count")) { + mWeight = savedInstanceState.getInt("count"); + } + + summary.setText(Integer.toString(mWeight)); + summary.setOnTouchListener(new View.OnTouchListener() { + GestureDetector doubleTapDetector = new GestureDetector(new DoubleTapDetector(getActivity())); + GestureDetector flingAndLongPressDetector = new GestureDetector(getActivity(), new GestureDetector.OnGestureListener() { + @Override + public boolean onDown(MotionEvent e) { + return false; + } + + @Override + public void onShowPress(MotionEvent e) { + + } + + @Override + public boolean onSingleTapUp(MotionEvent e) { + return false; + } + + @Override + public boolean onScroll(MotionEvent e1, MotionEvent e2, float distanceX, float distanceY) { + return false; + } + + @Override + public void onLongPress(MotionEvent e) { + decrementWeight(); + } + + @Override + public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY) { + final float minFlingVelocity = 1000; + if (Math.abs(velocityX) < Math.abs(velocityY)) { // make sure we're flinging more up than sideways + if (velocityY > minFlingVelocity) { + decrementReps(); + } else if (velocityY < -minFlingVelocity) { + incrementReps(); + } + } + return true; + } + }); + + @Override + public boolean onTouch(View v, MotionEvent event) { + if (flingAndLongPressDetector.onTouchEvent(event)) { + return true; + } + if (doubleTapDetector.onTouchEvent(event)) { + // A double tap occurred. + incrementWeight(); + return true; + } + return false; + } + }); + + + /* + count.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + incrementWeight(); + } + });*/ + + return view; + } + + @Override + public void onSaveInstanceState(Bundle outState) { + super.onSaveInstanceState(outState); + + outState.putInt("weight", mWeight); + outState.putInt("reps", mReps); + } + + @Override + public void onViewStateRestored(Bundle savedInstanceState) { + super.onViewStateRestored(savedInstanceState); + + if (savedInstanceState!= null && savedInstanceState.containsKey("weight")) { + setWeight(savedInstanceState.getInt("weight")); + } + if (savedInstanceState!= null && savedInstanceState.containsKey("reps")) { + setWeight(savedInstanceState.getInt("reps")); + } + } + + private void setWeight(int weight) { + mWeight = weight; + refreshButton(); + } + private void setReps(int reps) { + mReps = reps; + refreshButton(); + } + private void setLastWeight(int weight) { + mLastWeight = weight; + refreshButton(); + } + private void setLastReps(int reps) { + mLastReps = reps; + refreshButton(); + } + + private void refreshButton() { + Button summaryButton = (Button) getView().findViewById(R.id.summary); + summaryButton.setText(mActivity.getSummary(mWeight, mReps, mLastWeight, mLastReps)); + } + + + public void incrementWeight() { + setWeight(mWeight + 5); + } + public void decrementWeight() { + setWeight(mWeight - 5); + } + public void incrementReps() { + setReps(mReps + 1); + } + public void decrementReps() { + setReps(mReps - 1); + } + + public static ActivityFragment newInstance(Activity activity) { + + ActivityFragment f = new ActivityFragment(); + Bundle b = new Bundle(); + b.putSerializable("activity", activity); + f.setArguments(b); + + return f; + } + + @Override + public void onStop() { + super.onStop(); + saveData(); + } + + private void saveData() { + SharedPreferences.Editor outState = getActivity().getSharedPreferences(mActivity.getSharedPreferencesName(), Context.MODE_APPEND).edit(); + outState.putInt("weight", mWeight); + outState.putInt("reps", mReps); + outState.putLong("dateSaved", Calendar.getInstance().getTimeInMillis()); + outState.commit(); + } + @Override + public void onActivityCreated(Bundle savedInstanceState) { + super.onActivityCreated(savedInstanceState); + + SharedPreferences activity_data = getActivity().getSharedPreferences(mActivity.getSharedPreferencesName(), Context.MODE_APPEND); + setWeight(activity_data.getInt("weight", 0)); + setReps(activity_data.getInt("reps", 0)); + + long dateSavedMillis = activity_data.getLong("dateSaved", 0); + if (dateSavedMillis > 0) { + Date dateSaved = new Date(dateSavedMillis); + + long diff = Math.abs(Calendar.getInstance().getTime().getTime() - dateSaved.getTime()); + long diffDays = diff / (24 * 60 * 60 * 1000); + if (diffDays > 2) { + setLastWeight(mWeight); + setLastReps(mReps); + } + } + + } } \ No newline at end of file diff --git a/GymLog/src/main/java/com/mikemiller/gymlog/DoubleTapDetector.java b/GymLog/src/main/java/com/mikemiller/gymlog/DoubleTapDetector.java index 4b42bc4..c5505e8 100644 --- a/GymLog/src/main/java/com/mikemiller/gymlog/DoubleTapDetector.java +++ b/GymLog/src/main/java/com/mikemiller/gymlog/DoubleTapDetector.java @@ -1,30 +1,30 @@ -package com.mikemiller.gymlog; - -import android.content.Context; -import android.view.GestureDetector; -import android.view.MotionEvent; - -/** - * Created by Mike on 3/29/14. COPYRIGHT OLIO. - */ -public class DoubleTapDetector extends GestureDetector.SimpleOnGestureListener { - public Context context; - public String phno; - - public DoubleTapDetector(Context con) - { - this.context=con; - } - @Override - public boolean onDown(MotionEvent e) { - return false; - } - @Override - public boolean onDoubleTap(MotionEvent e) { - return true; - } - @Override - public boolean onSingleTapUp(MotionEvent e) { - return false; - } +package com.mikemiller.gymlog; + +import android.content.Context; +import android.view.GestureDetector; +import android.view.MotionEvent; + +/** + * Created by Mike on 3/29/14. COPYRIGHT OLIO. + */ +public class DoubleTapDetector extends GestureDetector.SimpleOnGestureListener { + public Context context; + public String phno; + + public DoubleTapDetector(Context con) + { + this.context=con; + } + @Override + public boolean onDown(MotionEvent e) { + return false; + } + @Override + public boolean onDoubleTap(MotionEvent e) { + return true; + } + @Override + public boolean onSingleTapUp(MotionEvent e) { + return false; + } } \ No newline at end of file diff --git a/GymLog/src/main/java/com/mikemiller/gymlog/MainActivity.java b/GymLog/src/main/java/com/mikemiller/gymlog/MainActivity.java index e7c8f60..9659467 100644 --- a/GymLog/src/main/java/com/mikemiller/gymlog/MainActivity.java +++ b/GymLog/src/main/java/com/mikemiller/gymlog/MainActivity.java @@ -2,31 +2,52 @@ package com.mikemiller.gymlog; import android.app.Fragment; import android.app.FragmentManager; +import android.content.Context; +import android.content.SharedPreferences; import android.os.Bundle; import android.support.v4.app.FragmentActivity; import android.support.v13.app.FragmentPagerAdapter; import android.support.v4.view.ViewPager; +import android.util.Log; +import java.text.SimpleDateFormat; +import java.util.ArrayList; import java.util.Arrays; import java.util.Calendar; +import java.util.Date; import java.util.HashMap; +import java.util.List; import java.util.Map; public class MainActivity extends FragmentActivity { SimpleCounterFragment mEpisodeFragment; + ArrayList mMonday = new ArrayList() {{ + add(2); + add(3); + }}; + ArrayList mWednesday = new ArrayList() {{ + add(4); + add(5); + }}; + ArrayList mFriday = new ArrayList() {{ + add(6); + add(7); + add(1); + }}; + // 1 = Sunday - final Map mDaysOfWeekToActivity = new HashMap(){{ - put(new Integer[]{2, 3}, new Activity[]{ + final Map, Activity[]> mDaysOfWeekToActivity = new HashMap, Activity[]>(){{ + put(mMonday, new Activity[]{ new Activity("Barbell Deadlifts", 3, 4, 6, 10, 1), - new Activity("Assisted Chin-ups", 3, 4, 6, 10, 1), - new Activity("Pendlay Rows", 2, 4, 6, 10, 1) }); - put(new Integer[]{4, 5}, new Activity[]{ - new Activity("Flat Dumbell Bench Press", 3, 6, 10, 10, 1), - new Activity("Incline Dumbell Bench Press", 2, 8, 12, 10, 1), + new Activity("Pendlay Rows", 2, 4, 6, 10, 1), + new Activity("Assisted Chin-ups", 3, 4, 6, 10, 1) }); + put(mWednesday, new Activity[]{ + new Activity("Flat Barbell Bench Press", 3, 6, 10, 10, 1), + new Activity("Incline Barbell Bench Press", 2, 8, 12, 10, 1), new Activity("Barbell Curls", 3, 0, 8, 0, 0)}); - put(new Integer[]{6, 7, 1}, new Activity[]{ + put(mFriday, new Activity[]{ new Activity("Barbell Squats", 2, 6, 8, 10, 1), new Activity("Widowmaker Squats", 1, 20, 20, 0, 0), new Activity("Stiff Legged Deadlifts", 2, 15, 20, 10, 1), @@ -43,6 +64,9 @@ public class MainActivity extends FragmentActivity { pager.setAdapter(new MyPagerAdapter(getFragmentManager())); mEpisodeFragment = SimpleCounterFragment.newInstance("Whose Line"); + + String summary = getWeekSummary(); + Log.d("Summary", summary); } // 1 = Sunday @@ -52,18 +76,60 @@ public class MainActivity extends FragmentActivity { } private Activity[] getActivitiesForDayOfWeek(int dayOfWeek) { - for(Integer[] key : mDaysOfWeekToActivity.keySet()) { - if (Arrays.asList(key).contains(dayOfWeek)) { + for(ArrayList key : mDaysOfWeekToActivity.keySet()) { + if (key.contains(dayOfWeek)) { return mDaysOfWeekToActivity.get(key); } } return new Activity[]{}; } - private Activity[] getActivitiesForTody() { + private Activity[] getActivitiesForToday() { return getActivitiesForDayOfWeek(getDayOfWeek()); } + public String getWeekSummary() { + ArrayList allActivities = new ArrayList(); + + for (Activity activity : mDaysOfWeekToActivity.get(mMonday)) { + allActivities.add(activity); + } + for (Activity activity : mDaysOfWeekToActivity.get(mWednesday)) { + allActivities.add(activity); + } + for (Activity activity : mDaysOfWeekToActivity.get(mFriday)) { + allActivities.add(activity); + } + + + Activity mondayActivity = mDaysOfWeekToActivity.get(mMonday)[0]; + SharedPreferences activity_data = getSharedPreferences(mondayActivity.getSharedPreferencesName(), Context.MODE_APPEND); + long dateSavedMillis = activity_data.getLong("dateSaved", 0); + + Calendar c = Calendar.getInstance(); + c.setTimeInMillis(dateSavedMillis); + c.set(Calendar.DAY_OF_WEEK, Calendar.MONDAY); // Move the date to the previous Monday + //System.out.println("Date " + c.getTime()); + + SimpleDateFormat simpleDate = new SimpleDateFormat("MM/dd/yyyy"); + String mondayDateString = simpleDate.format(c.getTime()); + + + String summary = mondayDateString + "\t"; + + for(Activity activity : allActivities) { + activity_data = getSharedPreferences(activity.getSharedPreferencesName(), Context.MODE_APPEND); + int weight = activity_data.getInt("weight", 0); + int reps = activity_data.getInt("reps", 0); + + summary += weight + "x"; + summary += reps + "\t"; + } + + + return summary; + } + private class MyPagerAdapter extends FragmentPagerAdapter { @@ -73,20 +139,20 @@ public class MainActivity extends FragmentActivity { @Override public Fragment getItem(int pos) { - Activity[] activities = getActivitiesForTody(); + Activity[] activities = getActivitiesForToday(); - if (pos == 0) { + /*if (pos == 0) { return mEpisodeFragment; - } + }*/ if (pos > activities.length) pos = activities.length; - return ActivityFragment.newInstance(activities[pos - 1]); + return ActivityFragment.newInstance(activities[pos]); } @Override public int getCount() { - return getActivitiesForTody().length + 1; + return getActivitiesForToday().length + 1; } } } \ No newline at end of file diff --git a/GymLog/src/main/java/com/mikemiller/gymlog/SimpleCounterFragment.java b/GymLog/src/main/java/com/mikemiller/gymlog/SimpleCounterFragment.java index a6870d0..4ec1c90 100644 --- a/GymLog/src/main/java/com/mikemiller/gymlog/SimpleCounterFragment.java +++ b/GymLog/src/main/java/com/mikemiller/gymlog/SimpleCounterFragment.java @@ -1,123 +1,123 @@ -package com.mikemiller.gymlog; - -import android.app.Fragment; -import android.content.Context; -import android.content.SharedPreferences; -import android.os.Bundle; -import android.view.GestureDetector; -import android.view.LayoutInflater; -import android.view.MotionEvent; -import android.view.View; -import android.view.ViewGroup; -import android.widget.Button; -import android.widget.TextView; - -public class SimpleCounterFragment extends Fragment { - - private String mShow = ""; - private int mCount = 0; - - @Override - public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { - View view = inflater.inflate(R.layout.fragment_simple_counter, container, false); - - TextView show = (TextView) view.findViewById(R.id.show); - mShow = getArguments().getString("show"); - show.setText(mShow); - - Button count = (Button) view.findViewById(R.id.count); - if (savedInstanceState!= null && savedInstanceState.containsKey("count")) { - mCount = savedInstanceState.getInt("count"); - } - - count.setText(Integer.toString(mCount)); - - count.setOnTouchListener(new View.OnTouchListener() { - GestureDetector doubleTapDetector = new GestureDetector(new DoubleTapDetector(getActivity())); - - @Override - public boolean onTouch(View v, MotionEvent event) { - if (doubleTapDetector.onTouchEvent(event)) { - // A double tap occurred. - increment(); - return true; - } - return false; - } - }); - - count.setOnLongClickListener(new View.OnLongClickListener() { - @Override - public boolean onLongClick(View v) { - decrement(); - return true; - } - }); - - return view; - } - - @Override - public void onSaveInstanceState(Bundle outState) { - super.onSaveInstanceState(outState); - - outState.putInt("count", mCount); - } - - @Override - public void onViewStateRestored(Bundle savedInstanceState) { - super.onViewStateRestored(savedInstanceState); - - if (savedInstanceState!= null && savedInstanceState.containsKey("count")) { - setCount(savedInstanceState.getInt("count")); - } - } - - private void setCount(int count) { - mCount = count; - Button countButton = (Button) getView().findViewById(R.id.count); - countButton.setText(Integer.toString(mCount)); - - } - - public void increment() { - setCount(mCount + 1); - } - public void decrement() { - setCount(mCount - 1); - } - - public static SimpleCounterFragment newInstance(String show) { - - SimpleCounterFragment f = new SimpleCounterFragment(); - Bundle b = new Bundle(); - b.putString("show", show); - f.setArguments(b); - - return f; - } - - @Override - public void onStop() { - super.onStop(); - saveData(); - } - - private void saveData() { - - SharedPreferences.Editor outState = getActivity().getSharedPreferences(getSharedpreferencesName(), Context.MODE_APPEND).edit(); - outState.putInt("count", mCount); - outState.commit(); - } - @Override - public void onActivityCreated(Bundle savedInstanceState) { - super.onActivityCreated(savedInstanceState); - - SharedPreferences counter_data = getActivity().getSharedPreferences(getSharedpreferencesName(), Context.MODE_APPEND); - setCount(counter_data.getInt("count", 0)); - } - - private String getSharedpreferencesName() { - return "counter_data_" + mShow; - } +package com.mikemiller.gymlog; + +import android.app.Fragment; +import android.content.Context; +import android.content.SharedPreferences; +import android.os.Bundle; +import android.view.GestureDetector; +import android.view.LayoutInflater; +import android.view.MotionEvent; +import android.view.View; +import android.view.ViewGroup; +import android.widget.Button; +import android.widget.TextView; + +public class SimpleCounterFragment extends Fragment { + + private String mShow = ""; + private int mCount = 0; + + @Override + public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { + View view = inflater.inflate(R.layout.fragment_simple_counter, container, false); + + TextView show = (TextView) view.findViewById(R.id.show); + mShow = getArguments().getString("show"); + show.setText(mShow); + + Button count = (Button) view.findViewById(R.id.count); + if (savedInstanceState!= null && savedInstanceState.containsKey("count")) { + mCount = savedInstanceState.getInt("count"); + } + + count.setText(Integer.toString(mCount)); + + count.setOnTouchListener(new View.OnTouchListener() { + GestureDetector doubleTapDetector = new GestureDetector(new DoubleTapDetector(getActivity())); + + @Override + public boolean onTouch(View v, MotionEvent event) { + if (doubleTapDetector.onTouchEvent(event)) { + // A double tap occurred. + increment(); + return true; + } + return false; + } + }); + + count.setOnLongClickListener(new View.OnLongClickListener() { + @Override + public boolean onLongClick(View v) { + decrement(); + return true; + } + }); + + return view; + } + + @Override + public void onSaveInstanceState(Bundle outState) { + super.onSaveInstanceState(outState); + + outState.putInt("count", mCount); + } + + @Override + public void onViewStateRestored(Bundle savedInstanceState) { + super.onViewStateRestored(savedInstanceState); + + if (savedInstanceState!= null && savedInstanceState.containsKey("count")) { + setCount(savedInstanceState.getInt("count")); + } + } + + private void setCount(int count) { + mCount = count; + Button countButton = (Button) getView().findViewById(R.id.count); + countButton.setText(Integer.toString(mCount)); + + } + + public void increment() { + setCount(mCount + 1); + } + public void decrement() { + setCount(mCount - 1); + } + + public static SimpleCounterFragment newInstance(String show) { + + SimpleCounterFragment f = new SimpleCounterFragment(); + Bundle b = new Bundle(); + b.putString("show", show); + f.setArguments(b); + + return f; + } + + @Override + public void onStop() { + super.onStop(); + saveData(); + } + + private void saveData() { + + SharedPreferences.Editor outState = getActivity().getSharedPreferences(getSharedpreferencesName(), Context.MODE_APPEND).edit(); + outState.putInt("count", mCount); + outState.commit(); + } + @Override + public void onActivityCreated(Bundle savedInstanceState) { + super.onActivityCreated(savedInstanceState); + + SharedPreferences counter_data = getActivity().getSharedPreferences(getSharedpreferencesName(), Context.MODE_APPEND); + setCount(counter_data.getInt("count", 0)); + } + + private String getSharedpreferencesName() { + return "counter_data_" + mShow; + } } \ No newline at end of file diff --git a/GymLog/src/main/res/layout/fragment_activity.xml b/GymLog/src/main/res/layout/fragment_activity.xml index 5ae1af5..ed7af4e 100644 --- a/GymLog/src/main/res/layout/fragment_activity.xml +++ b/GymLog/src/main/res/layout/fragment_activity.xml @@ -1,31 +1,31 @@ - - - - -