From 2f71b2a3d505d427c24495cf0b1b922bcf1d4f9a Mon Sep 17 00:00:00 2001 From: jannis Date: Tue, 20 Aug 2019 18:15:28 +0200 Subject: [PATCH] Open settings, Weight / Unit calculation feature stable - #5 Change weight of user - #4 Units defined by user --- .../main/java/de/tadris/fitness/Instance.java | 5 ++- .../activity/ListWorkoutsActivity.java | 8 +++- .../fitness/activity/SettingsActivity.java | 31 +++++++++++---- .../tadris/fitness/data/UserPreferences.java | 38 +++++++++++++++++++ .../tadris/fitness/data/WorkoutManager.java | 2 +- .../fitness/location/WorkoutRecorder.java | 2 +- .../tadris/fitness/util/unit/UnitUtils.java | 3 +- app/src/main/res/menu/list_workout_menu.xml | 6 ++- app/src/main/res/values/strings.xml | 1 + app/src/main/res/values/unit_systems.xml | 23 ++++++++++- 10 files changed, 103 insertions(+), 16 deletions(-) create mode 100644 app/src/main/java/de/tadris/fitness/data/UserPreferences.java diff --git a/app/src/main/java/de/tadris/fitness/Instance.java b/app/src/main/java/de/tadris/fitness/Instance.java index cf2239e..629e249 100644 --- a/app/src/main/java/de/tadris/fitness/Instance.java +++ b/app/src/main/java/de/tadris/fitness/Instance.java @@ -20,8 +20,6 @@ package de.tadris.fitness; import android.content.Context; -import android.content.SharedPreferences; -import android.preference.PreferenceManager; import androidx.room.Room; @@ -29,6 +27,7 @@ import java.util.ArrayList; import java.util.List; import de.tadris.fitness.data.AppDatabase; +import de.tadris.fitness.data.UserPreferences; import de.tadris.fitness.location.LocationListener; import de.tadris.fitness.util.unit.UnitUtils; @@ -47,8 +46,10 @@ public class Instance { public AppDatabase db; public List locationChangeListeners= new ArrayList<>(); + public UserPreferences userPreferences; private Instance(Context context) { + userPreferences= new UserPreferences(context); db = Room.databaseBuilder(context.getApplicationContext(), AppDatabase.class, DATABASE_NAME) .allowMainThreadQueries() .build(); diff --git a/app/src/main/java/de/tadris/fitness/activity/ListWorkoutsActivity.java b/app/src/main/java/de/tadris/fitness/activity/ListWorkoutsActivity.java index 821d8ae..a84e0c3 100644 --- a/app/src/main/java/de/tadris/fitness/activity/ListWorkoutsActivity.java +++ b/app/src/main/java/de/tadris/fitness/activity/ListWorkoutsActivity.java @@ -33,8 +33,8 @@ import com.github.clans.fab.FloatingActionMenu; import de.tadris.fitness.Instance; import de.tadris.fitness.R; -import de.tadris.fitness.view.WorkoutAdapter; import de.tadris.fitness.data.Workout; +import de.tadris.fitness.view.WorkoutAdapter; public class ListWorkoutsActivity extends Activity implements WorkoutAdapter.WorkoutAdapterListener { @@ -97,6 +97,12 @@ public class ListWorkoutsActivity extends Activity implements WorkoutAdapter.Wor public boolean onOptionsItemSelected(MenuItem item) { int id = item.getItemId(); + switch (id){ + case R.id.actionOpenSettings: + startActivity(new Intent(this, SettingsActivity.class)); + return true; + } + return super.onOptionsItemSelected(item); } diff --git a/app/src/main/java/de/tadris/fitness/activity/SettingsActivity.java b/app/src/main/java/de/tadris/fitness/activity/SettingsActivity.java index ad1eac9..537efc0 100644 --- a/app/src/main/java/de/tadris/fitness/activity/SettingsActivity.java +++ b/app/src/main/java/de/tadris/fitness/activity/SettingsActivity.java @@ -1,29 +1,44 @@ +/* + * Copyright (c) 2019 Jannis Scheibe + * + * This file is part of FitoTrack + * + * FitoTrack 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. + * + * FitoTrack 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 . + */ + package de.tadris.fitness.activity; import android.app.ActionBar; import android.app.AlertDialog; -import android.app.Dialog; -import android.content.DialogInterface; import android.content.SharedPreferences; import android.media.Ringtone; import android.media.RingtoneManager; import android.net.Uri; +import android.os.Bundle; import android.preference.ListPreference; import android.preference.Preference; import android.preference.PreferenceActivity; -import android.os.Bundle; import android.preference.PreferenceManager; import android.preference.RingtonePreference; import android.text.TextUtils; import android.view.MenuItem; import android.view.View; -import android.widget.Button; import android.widget.NumberPicker; import androidx.core.app.NavUtils; import de.tadris.fitness.R; -import de.tadris.fitness.util.unit.Unit; import de.tadris.fitness.util.unit.UnitUtils; public class SettingsActivity extends PreferenceActivity { @@ -109,6 +124,8 @@ public class SettingsActivity extends PreferenceActivity { super.onCreate(savedInstanceState); setupActionBar(); + setTitle(R.string.settings); + addPreferencesFromResource(R.xml.preferences_main); bindPreferenceSummaryToValue(findPreference("unitSystem")); @@ -125,14 +142,14 @@ public class SettingsActivity extends PreferenceActivity { NumberPicker np = v.findViewById(R.id.weightPicker); np.setMaxValue((int) UnitUtils.CHOSEN_SYSTEM.getWeightFromKilogram(150)); np.setMinValue((int) UnitUtils.CHOSEN_SYSTEM.getWeightFromKilogram(20)); + np.setFormatter(value -> value + " " + UnitUtils.CHOSEN_SYSTEM.getWeightUnit()); np.setValue(preferences.getInt("weight", 80)); - np.setFormatter(value -> value + UnitUtils.CHOSEN_SYSTEM.getWeightUnit()); np.setWrapSelectorWheel(false); d.setView(v); d.setNegativeButton(R.string.cancel, null); - d.setPositiveButton(R.string.okay, (DialogInterface.OnClickListener) (dialog, which) -> { + d.setPositiveButton(R.string.okay, (dialog, which) -> { int unitValue= np.getValue(); int kilograms= (int)Math.round(UnitUtils.CHOSEN_SYSTEM.getKilogramFromUnit(unitValue)); preferences.edit().putInt("weight", kilograms).apply(); diff --git a/app/src/main/java/de/tadris/fitness/data/UserPreferences.java b/app/src/main/java/de/tadris/fitness/data/UserPreferences.java new file mode 100644 index 0000000..831ac6b --- /dev/null +++ b/app/src/main/java/de/tadris/fitness/data/UserPreferences.java @@ -0,0 +1,38 @@ +/* + * Copyright (c) 2019 Jannis Scheibe + * + * This file is part of FitoTrack + * + * FitoTrack 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. + * + * FitoTrack 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 . + */ + +package de.tadris.fitness.data; + +import android.content.Context; +import android.content.SharedPreferences; +import android.preference.PreferenceManager; + +public class UserPreferences { + + private SharedPreferences preferences; + + public UserPreferences(Context context) { + this.preferences= PreferenceManager.getDefaultSharedPreferences(context); + } + + public int getUserWeight(){ + return preferences.getInt("weight", 80); + } + +} diff --git a/app/src/main/java/de/tadris/fitness/data/WorkoutManager.java b/app/src/main/java/de/tadris/fitness/data/WorkoutManager.java index 1988af9..a98bb78 100644 --- a/app/src/main/java/de/tadris/fitness/data/WorkoutManager.java +++ b/app/src/main/java/de/tadris/fitness/data/WorkoutManager.java @@ -56,7 +56,7 @@ public class WorkoutManager { workout.length= (int)length; workout.avgSpeed= ((double) workout.length) / ((double) workout.duration / 1000); workout.avgPace= ((double)workout.duration / 1000 / 60) / ((double) workout.length / 1000); - workout.calorie= CalorieCalculator.calculateCalories(workout, Instance.getInstance(context).userPreferences.weight); + workout.calorie= CalorieCalculator.calculateCalories(workout, Instance.getInstance(context).userPreferences.getUserWeight()); // Setting workoutId in the samples int i= 0; diff --git a/app/src/main/java/de/tadris/fitness/location/WorkoutRecorder.java b/app/src/main/java/de/tadris/fitness/location/WorkoutRecorder.java index c2de4c8..2f95b63 100644 --- a/app/src/main/java/de/tadris/fitness/location/WorkoutRecorder.java +++ b/app/src/main/java/de/tadris/fitness/location/WorkoutRecorder.java @@ -214,7 +214,7 @@ public class WorkoutRecorder implements LocationListener.LocationChangeListener public int getCalories(){ workout.avgSpeed= getAvgSpeed(); workout.duration= getDuration(); - int calories= CalorieCalculator.calculateCalories(workout, Instance.getInstance(context).userPreferences.weight); + int calories= CalorieCalculator.calculateCalories(workout, Instance.getInstance(context).userPreferences.getUserWeight()); if(calories > maxCalories){ maxCalories= calories; } diff --git a/app/src/main/java/de/tadris/fitness/util/unit/UnitUtils.java b/app/src/main/java/de/tadris/fitness/util/unit/UnitUtils.java index 831ebd6..9300366 100644 --- a/app/src/main/java/de/tadris/fitness/util/unit/UnitUtils.java +++ b/app/src/main/java/de/tadris/fitness/util/unit/UnitUtils.java @@ -35,7 +35,8 @@ public class UnitUtils { public static Unit CHOSEN_SYSTEM= UNITS_METRIC; public static void setUnit(Context context){ - PreferenceManager.getDefaultSharedPreferences(context).getInt("unitSystem", UnitUtils.UNITS_METRIC.getId()); + int id= Integer.parseInt(PreferenceManager.getDefaultSharedPreferences(context).getString("unitSystem", String.valueOf(UnitUtils.UNITS_METRIC.getId()))); + setUnit(id); } public static void setUnit(int id){ diff --git a/app/src/main/res/menu/list_workout_menu.xml b/app/src/main/res/menu/list_workout_menu.xml index da3e740..5d77fe0 100644 --- a/app/src/main/res/menu/list_workout_menu.xml +++ b/app/src/main/res/menu/list_workout_menu.xml @@ -18,4 +18,8 @@ ~ along with this program. If not, see . --> - \ No newline at end of file + + + \ No newline at end of file diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index ae975d7..ee2a099 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -79,4 +79,5 @@ Your Weight Your weight is needed to calculate the burned calories Preferred system of units + Settings diff --git a/app/src/main/res/values/unit_systems.xml b/app/src/main/res/values/unit_systems.xml index 3c8d795..40df41a 100644 --- a/app/src/main/res/values/unit_systems.xml +++ b/app/src/main/res/values/unit_systems.xml @@ -1,4 +1,23 @@ + + @@ -8,11 +27,11 @@ Imperial with meters - + 1 2 3 4 - + \ No newline at end of file