diff --git a/.idea/codeStyles/Project.xml b/.idea/codeStyles/Project.xml
new file mode 100644
index 0000000..d5ec3da
--- /dev/null
+++ b/.idea/codeStyles/Project.xml
@@ -0,0 +1,77 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/build.gradle b/app/build.gradle
index 1bbb80b..53ba018 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -2,7 +2,7 @@ apply plugin: 'com.android.application'
android {
compileSdkVersion 25
- buildToolsVersion '26.0.2'
+ buildToolsVersion '26.0.3'
defaultConfig {
applicationId "org.secuso.privacyfriendlybreakreminder"
@@ -12,6 +12,12 @@ android {
versionName "2.1"
vectorDrawables.useSupportLibrary = true
}
+ lintOptions {
+ checkReleaseBuilds false
+ // Or, if you prefer, you can continue to check for errors in release builds,
+ // but continue the build even when errors are found:
+ abortOnError false
+ }
buildTypes {
release {
minifyEnabled false
@@ -34,11 +40,11 @@ dependencies {
compile fileTree(include: ['*.jar'], dir: 'libs')
compile 'com.android.support:appcompat-v7:25.4.0'
compile 'com.android.support:design:25.4.0'
- compile 'com.github.bumptech.glide:glide:3.7.0'
+ compile 'com.github.bumptech.glide:glide:4.0.0'
compile 'com.android.support:support-v4:25.4.0'
- compile 'com.android.support:support-annotations:27.0.0'
+ compile 'com.android.support:support-annotations:27.1.1'
compile 'com.android.support:cardview-v7:25.4.0'
- compile 'com.android.support.constraint:constraint-layout:1.0.2'
+ compile 'com.android.support.constraint:constraint-layout:1.1.0'
compile 'com.nex3z:flow-layout:1.0.0'
compile 'com.readystatesoftware.sqliteasset:sqliteassethelper:2.0.1'
testCompile 'junit:junit:4.12'
diff --git a/app/src/main/java/org/secuso/privacyfriendlybreakreminder/activities/ChooseExerciseActivity.java b/app/src/main/java/org/secuso/privacyfriendlybreakreminder/activities/ChooseExerciseActivity.java
index d7c8dbc..d5f3f57 100644
--- a/app/src/main/java/org/secuso/privacyfriendlybreakreminder/activities/ChooseExerciseActivity.java
+++ b/app/src/main/java/org/secuso/privacyfriendlybreakreminder/activities/ChooseExerciseActivity.java
@@ -1,6 +1,8 @@
package org.secuso.privacyfriendlybreakreminder.activities;
import android.content.Intent;
+import android.os.PersistableBundle;
+import android.support.annotation.Nullable;
import android.support.v4.content.ContextCompat;
import android.support.v4.util.Pair;
import android.support.v7.app.ActionBar;
@@ -20,6 +22,7 @@ import android.widget.ToggleButton;
import org.secuso.privacyfriendlybreakreminder.R;
import org.secuso.privacyfriendlybreakreminder.activities.adapter.ExerciseAdapter;
+import org.secuso.privacyfriendlybreakreminder.activities.helper.IExerciseTimeUpdateable;
import org.secuso.privacyfriendlybreakreminder.database.SQLiteHelper;
import org.secuso.privacyfriendlybreakreminder.database.data.Exercise;
import com.nex3z.flowlayout.FlowLayout;
@@ -40,7 +43,7 @@ import static org.secuso.privacyfriendlybreakreminder.activities.adapter.Exercis
* @version 2.0
* @see EditExerciseSetActivity
*/
-public class ChooseExerciseActivity extends AppCompatActivity {
+public class ChooseExerciseActivity extends AppCompatActivity implements IExerciseTimeUpdateable {
private static final String TAG = ChooseExerciseActivity.class.getSimpleName();
@@ -48,6 +51,7 @@ public class ChooseExerciseActivity extends AppCompatActivity {
FlowLayout filterButtonLayout;
RecyclerView exerciseList;
+ TextView exerciseSetTimeText;
ExerciseAdapter exerciseAdapter;
SQLiteHelper databaseHelper;
@@ -76,12 +80,19 @@ public class ChooseExerciseActivity extends AppCompatActivity {
exerciseAdapter.setCheckedItems(chosenExercisesList);
}
+ @Override
+ public void onPostCreate(@Nullable Bundle savedInstanceState, @Nullable PersistableBundle persistentState) {
+ super.onPostCreate(savedInstanceState, persistentState);
+
+ update(0);
+ }
+
private void initResources() {
databaseHelper = new SQLiteHelper(this);
filterButtonLayout = (FlowLayout) findViewById(R.id.layout_filter_buttons);
exerciseList = (RecyclerView) findViewById(R.id.exercise_list);
- exerciseAdapter = new ExerciseAdapter(this, ID_COMPARATOR);
+ exerciseAdapter = new ExerciseAdapter(this, ID_COMPARATOR, this);
exerciseAdapter.showCheckboxes(true);
GridLayoutManager gridLayout = new GridLayoutManager(this, 3);
@@ -120,12 +131,16 @@ public class ChooseExerciseActivity extends AppCompatActivity {
exerciseAdapter.replaceAll(databaseHelper.getExerciseListBySections(ExerciseLocale.getLocale(), filterSections));
exerciseList.scrollToPosition(0);
+ update(0);
}
});
buttons.add(button);
filterButtonLayout.addView(view);
}
+
+ exerciseSetTimeText = (TextView) findViewById(R.id.exercise_set_time);
+ update(0);
}
@@ -171,4 +186,9 @@ public class ChooseExerciseActivity extends AppCompatActivity {
result.putExtra(EXTRA_SELECTED_EXERCISES, selectedIds);
setResult(RESULT_OK, result);
}
+
+ @Override
+ public void update(int i) {
+ exerciseSetTimeText.setText(getString(R.string.exercise_time, exerciseAdapter.getExerciseTimeString()));
+ }
}
diff --git a/app/src/main/java/org/secuso/privacyfriendlybreakreminder/activities/EditExerciseSetActivity.java b/app/src/main/java/org/secuso/privacyfriendlybreakreminder/activities/EditExerciseSetActivity.java
index d14842d..2ad5c96 100644
--- a/app/src/main/java/org/secuso/privacyfriendlybreakreminder/activities/EditExerciseSetActivity.java
+++ b/app/src/main/java/org/secuso/privacyfriendlybreakreminder/activities/EditExerciseSetActivity.java
@@ -4,6 +4,7 @@ import android.animation.Animator;
import android.animation.AnimatorListenerAdapter;
import android.content.DialogInterface;
import android.content.Intent;
+import android.preference.PreferenceManager;
import android.support.v4.content.AsyncTaskLoader;
import android.support.v4.content.Loader;
import android.support.v7.app.ActionBar;
@@ -27,6 +28,8 @@ import android.widget.TextView;
import android.widget.Toast;
import org.secuso.privacyfriendlybreakreminder.activities.adapter.ExerciseAdapter;
+import org.secuso.privacyfriendlybreakreminder.activities.helper.IExerciseTimeUpdateable;
+import org.secuso.privacyfriendlybreakreminder.activities.tutorial.FirstLaunchManager;
import org.secuso.privacyfriendlybreakreminder.database.data.Exercise;
import org.secuso.privacyfriendlybreakreminder.exercises.ExerciseLocale;
import org.secuso.privacyfriendlybreakreminder.R;
@@ -34,7 +37,15 @@ import org.secuso.privacyfriendlybreakreminder.database.SQLiteHelper;
import org.secuso.privacyfriendlybreakreminder.database.data.ExerciseSet;
import java.util.ArrayList;
+import java.util.Calendar;
+import java.util.GregorianCalendar;
+import java.util.LinkedList;
import java.util.List;
+import java.util.Locale;
+import java.util.Map;
+import java.util.concurrent.TimeUnit;
+
+import javax.xml.datatype.Duration;
import static org.secuso.privacyfriendlybreakreminder.activities.adapter.ExerciseAdapter.ID_COMPARATOR;
@@ -69,6 +80,7 @@ public class EditExerciseSetActivity extends AppCompatActivity implements androi
private boolean nameChanged = false;
private boolean modificationsDone = false;
private SQLiteHelper mDbHelper;
+ private TextView exerciseSetTimeText;
//methods
@@ -89,6 +101,16 @@ public class EditExerciseSetActivity extends AppCompatActivity implements androi
initResources();
getSupportLoaderManager().initLoader(0, null, this);
+
+ updateExerciseTime();
+ }
+
+ private void updateExerciseTime() {
+ List ids = new LinkedList<>();
+ for(Exercise e : mAdapter.getExercises()) {
+ ids.add(e.getId());
+ }
+ exerciseSetTimeText.setText(getString(R.string.exercise_time, mAdapter.getExerciseTimeString(ids)));
}
private void initResources() {
@@ -96,10 +118,11 @@ public class EditExerciseSetActivity extends AppCompatActivity implements androi
toolbar = (Toolbar) findViewById(R.id.toolbar);
exerciseSetNameText = (TextView) findViewById(R.id.exercise_set_name);
exerciseList = (RecyclerView) findViewById(R.id.exercise_list);
- mAdapter = new ExerciseAdapter(this, ID_COMPARATOR);
+ mAdapter = new ExerciseAdapter(this, ID_COMPARATOR, null);
exerciseList.setAdapter(mAdapter);
exerciseList.setLayoutManager(new GridLayoutManager(this, 3));
loadingSpinner = (ProgressBar) findViewById(R.id.loading_spinner);
+ exerciseSetTimeText = (TextView) findViewById(R.id.exercise_set_time);
exerciseSetNameText.setText(exerciseSetName);
exerciseSetNameText.addTextChangedListener(new TextWatcher() {
@@ -165,6 +188,7 @@ public class EditExerciseSetActivity extends AppCompatActivity implements androi
if(set != null) {
mAdapter.replaceAll(set.getExercises());
}
+ updateExerciseTime();
// load data only once
getSupportLoaderManager().destroyLoader(0);
@@ -334,6 +358,7 @@ public class EditExerciseSetActivity extends AppCompatActivity implements androi
}
mAdapter.replaceAll(newList);
+ updateExerciseTime();
}
}
}
diff --git a/app/src/main/java/org/secuso/privacyfriendlybreakreminder/activities/ExerciseActivity.java b/app/src/main/java/org/secuso/privacyfriendlybreakreminder/activities/ExerciseActivity.java
index a701a98..1706a5c 100644
--- a/app/src/main/java/org/secuso/privacyfriendlybreakreminder/activities/ExerciseActivity.java
+++ b/app/src/main/java/org/secuso/privacyfriendlybreakreminder/activities/ExerciseActivity.java
@@ -157,6 +157,7 @@ public class ExerciseActivity extends AppCompatActivity implements android.suppo
prevButton = (ImageButton) findViewById(R.id.button_prev);
nextButton = (ImageButton) findViewById(R.id.button_next);
exerciseInfoButton = (ImageButton) findViewById(R.id.exercise_info_button);
+
toast = Toast.makeText(this, "", Toast.LENGTH_SHORT);
toast.setGravity(toast.getGravity(), 0, 250);
diff --git a/app/src/main/java/org/secuso/privacyfriendlybreakreminder/activities/adapter/ExerciseAdapter.java b/app/src/main/java/org/secuso/privacyfriendlybreakreminder/activities/adapter/ExerciseAdapter.java
index 810c82f..23266b2 100644
--- a/app/src/main/java/org/secuso/privacyfriendlybreakreminder/activities/adapter/ExerciseAdapter.java
+++ b/app/src/main/java/org/secuso/privacyfriendlybreakreminder/activities/adapter/ExerciseAdapter.java
@@ -1,6 +1,7 @@
package org.secuso.privacyfriendlybreakreminder.activities.adapter;
import android.content.Context;
+import android.preference.PreferenceManager;
import android.support.annotation.NonNull;
import android.support.constraint.ConstraintLayout;
import android.support.v7.app.AlertDialog;
@@ -16,17 +17,22 @@ import android.widget.TextView;
import android.widget.Toast;
import com.bumptech.glide.Glide;
+import com.bumptech.glide.load.resource.drawable.DrawableTransitionOptions;
import org.secuso.privacyfriendlybreakreminder.R;
import org.secuso.privacyfriendlybreakreminder.activities.ChooseExerciseActivity;
+import org.secuso.privacyfriendlybreakreminder.activities.helper.IExerciseTimeUpdateable;
+import org.secuso.privacyfriendlybreakreminder.activities.tutorial.FirstLaunchManager;
import org.secuso.privacyfriendlybreakreminder.database.data.Exercise;
import org.secuso.privacyfriendlybreakreminder.database.data.ExerciseSet;
import org.secuso.privacyfriendlybreakreminder.dialog.ExerciseDialog;
import java.util.ArrayList;
+import java.util.Collections;
import java.util.Comparator;
import java.util.LinkedList;
import java.util.List;
+import java.util.Locale;
/**
* @author Christopher Beckmann
@@ -36,6 +42,7 @@ import java.util.List;
*/
public class ExerciseAdapter extends RecyclerView.Adapter {
+ private IExerciseTimeUpdateable mListener;
private Context mContext;
private List checkedIds = new ArrayList<>();
private boolean mShowCheckboxes = false;
@@ -43,12 +50,13 @@ public class ExerciseAdapter extends RecyclerView.Adapter ID_COMPARATOR = new Comparator() {
@Override
public int compare(Exercise a, Exercise b) {
- return (a.getId() < b.getId()) ? -1 : ((a.getId() == b.getId()) ? 0 : 1);
+ return Integer.compare(a.getId(), b.getId());
}
};
private final LayoutInflater mInflater;
private final Comparator mComparator;
+ private final List mAllExercises = new ArrayList<>();
private final SortedList mSortedList = new SortedList<>(Exercise.class, new SortedList.Callback() {
@Override
public void onInserted(int position, int count) {
@@ -86,7 +94,8 @@ public class ExerciseAdapter extends RecyclerView.Adapter comparator) {
+ public ExerciseAdapter(Context context, Comparator comparator, IExerciseTimeUpdateable listener) {
+ this.mListener = listener;
this.mContext = context;
this.mComparator = comparator;
this.mInflater = LayoutInflater.from(context);
@@ -122,10 +131,12 @@ public class ExerciseAdapter extends RecyclerView.Adapter exercises) {
+ for(Exercise e : exercises) {
+ if(!mAllExercises.contains(e)) {
+ mAllExercises.add(e);
+ }
+ }
}
public List getCheckedIds() {
@@ -169,14 +196,19 @@ public class ExerciseAdapter extends RecyclerView.Adapter models) {
mSortedList.addAll(models);
+ setAllExercises(models);
+ notifyListeners();
}
public void remove(List models) {
@@ -185,10 +217,12 @@ public class ExerciseAdapter extends RecyclerView.Adapter checkedItems) {
this.checkedIds = checkedItems;
+ notifyListeners();
}
public List getExercises() {
@@ -202,6 +236,31 @@ public class ExerciseAdapter extends RecyclerView.Adapter specificIds) {
+ int result = 0;
+
+ for (int id : (specificIds == null ? checkedIds : specificIds)) {
+ for (Exercise e : mAllExercises) {
+ if (e.getId() == id) {
+ result += e.getImageID().split(",").length;
+ break;
+ }
+ }
+ }
+
+ return result;
+ }
+
+ public String getExerciseTimeString() {
+ return getExerciseTimeString(null);
+ }
+
+ public String getExerciseTimeString(List specificIds) {
+ long exerciseDuration = Long.parseLong(PreferenceManager.getDefaultSharedPreferences(mContext).getString(FirstLaunchManager.EXERCISE_DURATION, "30"));
+ int seconds = (int) (getExerciseCount(specificIds) * exerciseDuration);
+ return String.format(Locale.getDefault(), "%02d:%02d", (seconds / 60), (seconds % 60));
+ }
+
public class ExerciseViewHolder extends RecyclerView.ViewHolder {
ImageView image;
diff --git a/app/src/main/java/org/secuso/privacyfriendlybreakreminder/activities/adapter/ExerciseSetListAdapter.java b/app/src/main/java/org/secuso/privacyfriendlybreakreminder/activities/adapter/ExerciseSetListAdapter.java
index b788bd1..306ecff 100644
--- a/app/src/main/java/org/secuso/privacyfriendlybreakreminder/activities/adapter/ExerciseSetListAdapter.java
+++ b/app/src/main/java/org/secuso/privacyfriendlybreakreminder/activities/adapter/ExerciseSetListAdapter.java
@@ -15,16 +15,19 @@ import android.widget.TextView;
import android.widget.Toast;
import com.bumptech.glide.Glide;
+import com.bumptech.glide.load.resource.drawable.DrawableTransitionOptions;
import org.secuso.privacyfriendlybreakreminder.R;
import org.secuso.privacyfriendlybreakreminder.activities.EditExerciseSetActivity;
import org.secuso.privacyfriendlybreakreminder.activities.ManageExerciseSetsActivity;
import org.secuso.privacyfriendlybreakreminder.activities.tutorial.FirstLaunchManager;
+import org.secuso.privacyfriendlybreakreminder.database.data.Exercise;
import org.secuso.privacyfriendlybreakreminder.database.data.ExerciseSet;
import java.util.Iterator;
import java.util.LinkedList;
import java.util.List;
+import java.util.Locale;
/**
@@ -114,6 +117,11 @@ public class ExerciseSetListAdapter extends RecyclerView.Adapter {
TextView name = (TextView) row.findViewById(R.id.exercise_set_name);
LinearLayout exerciseList = (LinearLayout) row.findViewById(R.id.exercise_list);
TextView noExercisesText = (TextView) row.findViewById(R.id.exercise_none_available);
+ TextView exerciseTime = (TextView) row.findViewById(R.id.exercise_set_time_short);
card.setClickable(false);
card.setLongClickable(false);
@@ -80,15 +84,26 @@ public class ExerciseSetSpinnerAdapter extends ArrayAdapter {
View view = LayoutInflater.from(getContext()).inflate(R.layout.layout_round_exercise_image, null, false);
ImageView image = (ImageView) view.findViewById(R.id.exercise_image);
- Glide.with(getContext()).load(set.get(i).getImageResIds(getContext())[0]).into(image);
+ Glide.with(getContext()).load(set.get(i).getImageResIds(getContext())[0]).transition(DrawableTransitionOptions.withCrossFade()).into(image);
exerciseList.addView(view);
}
if(set.size() == 0) {
noExercisesText.setVisibility(View.VISIBLE);
+ exerciseTime.setVisibility(View.GONE);
} else {
noExercisesText.setVisibility(View.GONE);
+ exerciseTime.setVisibility(View.VISIBLE);
+
+ int result = 0;
+ for(Exercise e : set.getExercises()) {
+ result += e.getImageID().split(",").length;
+ }
+
+ long exerciseDuration = Long.parseLong(PreferenceManager.getDefaultSharedPreferences(getContext()).getString(FirstLaunchManager.EXERCISE_DURATION, "30"));
+ int seconds = (int) (result * exerciseDuration);
+ exerciseTime.setText(String.format(Locale.getDefault(), "%02d:%02d", (seconds / 60), (seconds % 60)));
}
return row;
diff --git a/app/src/main/java/org/secuso/privacyfriendlybreakreminder/activities/helper/IExerciseTimeUpdateable.java b/app/src/main/java/org/secuso/privacyfriendlybreakreminder/activities/helper/IExerciseTimeUpdateable.java
new file mode 100644
index 0000000..ace2cef
--- /dev/null
+++ b/app/src/main/java/org/secuso/privacyfriendlybreakreminder/activities/helper/IExerciseTimeUpdateable.java
@@ -0,0 +1,11 @@
+package org.secuso.privacyfriendlybreakreminder.activities.helper;
+
+/**
+ * @author Christopher Beckmann (Kamuno)
+ * @version 1.0
+ * @since 04.05.2018
+ * created 04.05.2018
+ */
+public interface IExerciseTimeUpdateable {
+ void update(int i);
+}
diff --git a/app/src/main/java/org/secuso/privacyfriendlybreakreminder/activities/tutorial/TutorialActivity.java b/app/src/main/java/org/secuso/privacyfriendlybreakreminder/activities/tutorial/TutorialActivity.java
index 25e57bd..250e3f3 100644
--- a/app/src/main/java/org/secuso/privacyfriendlybreakreminder/activities/tutorial/TutorialActivity.java
+++ b/app/src/main/java/org/secuso/privacyfriendlybreakreminder/activities/tutorial/TutorialActivity.java
@@ -48,7 +48,6 @@ public class TutorialActivity extends AppCompatActivity {
private FirstLaunchManager firstLaunchManager;
private static final String TAG = TutorialActivity.class.getSimpleName();
- public static final String ACTION_SHOW_ANYWAYS = TAG + ".ACTION_SHOW_ANYWAYS";
@Override
protected void onCreate(Bundle savedInstanceState) {
@@ -80,14 +79,12 @@ public class TutorialActivity extends AppCompatActivity {
viewPager.setAdapter(myViewPagerAdapter);
viewPager.addOnPageChangeListener(viewPagerPageChangeListener);
- btnSkip.setOnClickListener(new View.OnClickListener()
-
- {
- @Override
- public void onClick (View v){
- launchHomeScreen();
- }
- });
+ btnSkip.setOnClickListener(new View.OnClickListener() {
+ @Override
+ public void onClick (View v){
+ launchHomeScreen();
+ }
+ });
btnNext.setOnClickListener(new View.OnClickListener()
diff --git a/app/src/main/java/org/secuso/privacyfriendlybreakreminder/database/columns/ExerciseColumns.java b/app/src/main/java/org/secuso/privacyfriendlybreakreminder/database/columns/ExerciseColumns.java
index 7a70075..65c9725 100644
--- a/app/src/main/java/org/secuso/privacyfriendlybreakreminder/database/columns/ExerciseColumns.java
+++ b/app/src/main/java/org/secuso/privacyfriendlybreakreminder/database/columns/ExerciseColumns.java
@@ -25,6 +25,7 @@ public final class ExerciseColumns {
SECTION,
IMAGE_ID,
};
+
public static final String SQL_DELETE_ENTRIES = "DROP TABLE IF EXISTS " + TABLE_NAME;
public static Exercise fromCursor(Cursor c) {
diff --git a/app/src/main/res/drawable/ic_alarm_white.xml b/app/src/main/res/drawable/ic_alarm_white.xml
new file mode 100644
index 0000000..bd50ddd
--- /dev/null
+++ b/app/src/main/res/drawable/ic_alarm_white.xml
@@ -0,0 +1,9 @@
+
+
+
diff --git a/app/src/main/res/layout/activity_choose_exercise.xml b/app/src/main/res/layout/activity_choose_exercise.xml
index 3bbe37c..8ff330c 100644
--- a/app/src/main/res/layout/activity_choose_exercise.xml
+++ b/app/src/main/res/layout/activity_choose_exercise.xml
@@ -10,18 +10,34 @@
android:id="@+id/layout_filter_buttons"
android:layout_width="0dp"
android:layout_height="wrap_content"
+ android:layout_marginEnd="8dp"
+ android:layout_marginStart="8dp"
+ android:layout_marginTop="8dp"
+ android:orientation="vertical"
app:flChildSpacing="8dp"
app:flChildSpacingForLastRow="align"
app:flRowSpacing="8dp"
- android:layout_marginLeft="8dp"
- android:layout_marginRight="8dp"
+ app:layout_constraintEnd_toStartOf="@+id/exercise_set_time"
+ app:layout_constraintStart_toStartOf="parent"
+ app:layout_constraintTop_toTopOf="parent" />
+
+
+ android:drawableStart="@drawable/ic_alarm_black"
+ android:gravity="center"
+ android:text="@string/exercise_time"
+ android:textColor="@color/black"
+ android:textSize="16sp"
+ android:textStyle="bold"
+ app:layout_constraintBottom_toBottomOf="@+id/layout_filter_buttons"
+ app:layout_constraintEnd_toEndOf="parent"
+ app:layout_constraintTop_toTopOf="parent" />
@@ -22,21 +23,48 @@
android:background="?attr/colorPrimary"
app:popupTheme="@style/AppTheme.PopupOverlay"/>
-
+ android:layout_height="match_parent">
+
+
+
+
+
+
@@ -50,12 +78,8 @@
android:id="@+id/exercise_list"
android:layout_width="0dp"
android:layout_height="0dp"
- android:layout_marginBottom="4dp"
- android:layout_marginEnd="8dp"
android:layout_marginLeft="8dp"
android:layout_marginRight="4dp"
- android:layout_marginStart="8dp"
- android:layout_marginTop="8dp"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintRight_toRightOf="parent"
@@ -83,12 +107,11 @@
android:layout_height="wrap_content"
android:layout_marginBottom="16dp"
android:layout_marginEnd="16dp"
+ android:layout_alignParentBottom="true"
android:clickable="true"
- android:focusable="true"
android:onClick="onClick"
app:fabSize="normal"
- app:layout_anchor="@id/constraintLayout2"
- app:layout_anchorGravity="bottom|end"
+ android:layout_gravity="bottom|end"
app:srcCompat="@drawable/ic_edit_white_24dp" />
diff --git a/app/src/main/res/layout/activity_exercise.xml b/app/src/main/res/layout/activity_exercise.xml
index 748ac14..a06ac6d 100644
--- a/app/src/main/res/layout/activity_exercise.xml
+++ b/app/src/main/res/layout/activity_exercise.xml
@@ -122,13 +122,10 @@
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginLeft="8dp"
- android:layout_marginStart="8dp"
android:layout_marginTop="8dp"
android:clickable="true"
android:onClick="onClick"
- app:layout_constraintHorizontal_bias="0.0"
app:layout_constraintLeft_toLeftOf="parent"
- app:layout_constraintRight_toLeftOf="parent"
app:layout_constraintTop_toTopOf="parent">
@@ -68,11 +69,11 @@
android:layout_height="wrap_content"
android:layout_marginBottom="16dp"
android:layout_marginEnd="16dp"
+ android:layout_alignParentBottom="true"
+ android:layout_gravity="bottom|end"
android:clickable="true"
android:onClick="onClick"
app:fabSize="normal"
- app:layout_anchor="@id/main_content"
- app:layout_anchorGravity="bottom|end"
app:srcCompat="@drawable/ic_add_white_24dp" />
diff --git a/app/src/main/res/layout/layout_exercise_grid_item.xml b/app/src/main/res/layout/layout_exercise_grid_item.xml
index 4084f74..c08c478 100644
--- a/app/src/main/res/layout/layout_exercise_grid_item.xml
+++ b/app/src/main/res/layout/layout_exercise_grid_item.xml
@@ -2,27 +2,25 @@
+ android:layout_marginBottom="4dp"
+ android:layout_marginEnd="4dp"
+ android:minHeight="120dp"
+ android:padding="0dp"
+ app:layout_constraintDimensionRatio="h,1:1"
+ app:layout_constraintHeight_min="120dp">
+ app:layout_constraintTop_toTopOf="parent" />
diff --git a/app/src/main/res/layout/layout_exercise_set.xml b/app/src/main/res/layout/layout_exercise_set.xml
index 2466394..a92bac8 100644
--- a/app/src/main/res/layout/layout_exercise_set.xml
+++ b/app/src/main/res/layout/layout_exercise_set.xml
@@ -56,6 +56,20 @@
app:layout_constraintTop_toTopOf="parent"
app:srcCompat="@drawable/ic_mode_edit_black_24dp" />
+
+
Hüftbeschwerden
Kniebeschwerden
+ Standard Übungssets
+ Standard Übungssets verstecken
+
Dieses Set kann nicht gelöscht werden. In den Einstellungen können die voreingespeicherten Sets ausgeblendet werden.
+ Dieses Set kann nicht editiert werden.
vorherige Übung
nächste Übung
diff --git a/app/src/main/res/values-v21/styles.xml b/app/src/main/res/values-v21/styles.xml
index dfe5f66..2b32199 100644
--- a/app/src/main/res/values-v21/styles.xml
+++ b/app/src/main/res/values-v21/styles.xml
@@ -12,7 +12,7 @@
- false
- true
- true
- - @android:color/transparent
+