diff --git a/android_app/app/src/main/java/com/health/openscale/gui/measurement/MeasurementView.java b/android_app/app/src/main/java/com/health/openscale/gui/measurement/MeasurementView.java index cd13d5ea..fa11d0dd 100644 --- a/android_app/app/src/main/java/com/health/openscale/gui/measurement/MeasurementView.java +++ b/android_app/app/src/main/java/com/health/openscale/gui/measurement/MeasurementView.java @@ -15,6 +15,11 @@ */ package com.health.openscale.gui.measurement; +import static com.health.openscale.gui.measurement.MeasurementView.MeasurementViewMode.ADD; +import static com.health.openscale.gui.measurement.MeasurementView.MeasurementViewMode.EDIT; +import static com.health.openscale.gui.measurement.MeasurementView.MeasurementViewMode.STATISTIC; +import static com.health.openscale.gui.measurement.MeasurementView.MeasurementViewMode.VIEW; + import android.app.AlertDialog; import android.content.Context; import android.content.DialogInterface; @@ -53,11 +58,6 @@ import com.health.openscale.gui.utils.ColorUtil; import java.util.ArrayList; import java.util.List; -import static com.health.openscale.gui.measurement.MeasurementView.MeasurementViewMode.ADD; -import static com.health.openscale.gui.measurement.MeasurementView.MeasurementViewMode.EDIT; -import static com.health.openscale.gui.measurement.MeasurementView.MeasurementViewMode.STATISTIC; -import static com.health.openscale.gui.measurement.MeasurementView.MeasurementViewMode.VIEW; - public abstract class MeasurementView extends TableLayout { public enum MeasurementViewMode {VIEW, EDIT, ADD, STATISTIC} @@ -207,7 +207,7 @@ public abstract class MeasurementView extends TableLayout { iconView.setImageResource(iconId); iconView.setScaleType(ImageView.ScaleType.CENTER_INSIDE); - iconView.setPadding(25,25,25,25); + iconView.setPadding(15,15,15,15); iconView.setColorFilter(ColorUtil.COLOR_BLACK); iconView.setBackground(iconViewBackground); diff --git a/android_app/app/src/main/java/com/health/openscale/gui/overview/MeasurementAdapter.java b/android_app/app/src/main/java/com/health/openscale/gui/overview/MeasurementAdapter.java deleted file mode 100644 index 5c3e2204..00000000 --- a/android_app/app/src/main/java/com/health/openscale/gui/overview/MeasurementAdapter.java +++ /dev/null @@ -1,104 +0,0 @@ -package com.health.openscale.gui.overview; - -import android.content.Context; -import android.graphics.drawable.GradientDrawable; -import android.text.SpannableStringBuilder; -import android.text.Spanned; -import android.text.style.ForegroundColorSpan; -import android.view.LayoutInflater; -import android.view.View; -import android.view.ViewGroup; -import android.widget.ImageView; -import android.widget.TextView; - -import androidx.annotation.NonNull; -import androidx.recyclerview.widget.RecyclerView; - -import com.health.openscale.R; -import com.health.openscale.core.datatypes.ScaleMeasurement; -import com.health.openscale.gui.measurement.FloatMeasurementView; -import com.health.openscale.gui.measurement.MeasurementView; -import com.health.openscale.gui.measurement.WeightMeasurementView; -import com.health.openscale.gui.utils.ColorUtil; - -import java.util.ArrayList; -import java.util.List; - -class MeasurementAdapter extends RecyclerView.Adapter { - private Context context; - private ScaleMeasurement scaleMeasurement; - private ScaleMeasurement prevScaleMeasurement; - private List measurementViewList; - - public MeasurementAdapter(Context aContext, ScaleMeasurement scaleMeasurement, ScaleMeasurement prevScaleMeasurement) { - context = aContext; - this.scaleMeasurement = scaleMeasurement; - this.prevScaleMeasurement = prevScaleMeasurement; - measurementViewList = new ArrayList<>(); - List measurementDefaultViewList = MeasurementView.getMeasurementList(context, MeasurementView.DateTimeOrder.LAST); - - for (MeasurementView measurementView : measurementDefaultViewList) { - if (measurementView instanceof FloatMeasurementView && measurementView.isVisible() && !(measurementView instanceof WeightMeasurementView)) { - measurementViewList.add((FloatMeasurementView)measurementView); - } - } - } - - @NonNull - @Override - public ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { - View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.item_measurement, parent, false); - - MeasurementAdapter.ViewHolder viewHolder = new MeasurementAdapter.ViewHolder(view); - - return viewHolder; - } - - @Override - public void onBindViewHolder(@NonNull ViewHolder holder, int position) { - FloatMeasurementView measurementView = measurementViewList.get(position); - - measurementView.loadFrom(scaleMeasurement, prevScaleMeasurement); - - GradientDrawable iconViewBackground = new GradientDrawable(); - iconViewBackground.setColor(((FloatMeasurementView) measurementView).getColor()); - iconViewBackground.setShape(GradientDrawable.OVAL); - iconViewBackground.setGradientRadius(holder.iconView.getWidth()); - holder.iconView.setScaleType(ImageView.ScaleType.CENTER_INSIDE); - holder.iconView.setColorFilter(ColorUtil.COLOR_BLACK); - holder.iconView.setBackground(iconViewBackground); - holder.iconView.setImageDrawable(measurementView.getIcon()); - - SpannableStringBuilder value = new SpannableStringBuilder(); - value.append("◆ "); - value.setSpan(new ForegroundColorSpan(measurementView.getIndicatorColor()), 0, 1, - Spanned.SPAN_EXCLUSIVE_EXCLUSIVE); - - value.append(measurementView.getValueAsString(true)); - measurementView.appendDiffValue(value, true); - - holder.valueView.setText(value); - } - - @Override - public long getItemId(int position) { - return measurementViewList.get(position).getId(); - } - - @Override - public int getItemCount() { - return measurementViewList.size(); - } - - static class ViewHolder extends RecyclerView.ViewHolder { - TextView valueView; - ImageView iconView; - - public ViewHolder(@NonNull View itemView) { - super(itemView); - - valueView = itemView.findViewById(R.id.valueView); - iconView = itemView.findViewById(R.id.iconView); - } - } -} diff --git a/android_app/app/src/main/java/com/health/openscale/gui/overview/OverviewAdapter.java b/android_app/app/src/main/java/com/health/openscale/gui/overview/OverviewAdapter.java index 755a9d90..e0bb9cca 100644 --- a/android_app/app/src/main/java/com/health/openscale/gui/overview/OverviewAdapter.java +++ b/android_app/app/src/main/java/com/health/openscale/gui/overview/OverviewAdapter.java @@ -1,28 +1,27 @@ package com.health.openscale.gui.overview; import android.app.Activity; -import android.text.SpannableStringBuilder; -import android.text.Spanned; -import android.text.style.ForegroundColorSpan; -import android.text.style.RelativeSizeSpan; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.ImageView; +import android.widget.TableLayout; import android.widget.TextView; import androidx.annotation.NonNull; +import androidx.core.content.ContextCompat; import androidx.navigation.Navigation; import androidx.recyclerview.widget.RecyclerView; +import androidx.transition.AutoTransition; +import androidx.transition.TransitionManager; -import com.google.android.flexbox.AlignItems; -import com.google.android.flexbox.FlexDirection; -import com.google.android.flexbox.FlexboxLayoutManager; -import com.google.android.flexbox.JustifyContent; import com.health.openscale.R; import com.health.openscale.core.datatypes.ScaleMeasurement; +import com.health.openscale.gui.measurement.DateMeasurementView; import com.health.openscale.gui.measurement.MeasurementEntryFragment; -import com.health.openscale.gui.measurement.WeightMeasurementView; +import com.health.openscale.gui.measurement.MeasurementView; +import com.health.openscale.gui.measurement.TimeMeasurementView; +import com.health.openscale.gui.measurement.UserMeasurementView; import java.text.DateFormat; import java.util.List; @@ -30,10 +29,13 @@ import java.util.List; class OverviewAdapter extends RecyclerView.Adapter { private Activity activity; private List scaleMeasurementList; + private int maxMeasurementView; + public OverviewAdapter(Activity activity, List scaleMeasurementList) { this.activity = activity; this.scaleMeasurementList = scaleMeasurementList; + this.maxMeasurementView = 3; } @Override @@ -48,18 +50,11 @@ class OverviewAdapter extends RecyclerView.Adapter { @Override public void onBindViewHolder(@NonNull OverviewAdapter.ViewHolder holder, int position) { ScaleMeasurement scaleMeasurement = scaleMeasurementList.get(position); - ScaleMeasurement prevScaleMeasurement = scaleMeasurementList.get(position-1); + ScaleMeasurement prevScaleMeasurement = new ScaleMeasurement(); - holder.expandMoreView.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - if (holder.measurementRecyclerView.getVisibility() == View.GONE) { - holder.measurementRecyclerView.setVisibility(View.VISIBLE); - } else { - holder.measurementRecyclerView.setVisibility(View.GONE); - } - } - }); + if (scaleMeasurementList.size() > 2) { + prevScaleMeasurement = scaleMeasurementList.get(position - 1); + } holder.itemView.setOnClickListener(new View.OnClickListener() { @Override @@ -71,38 +66,41 @@ class OverviewAdapter extends RecyclerView.Adapter { } }); - if (!scaleMeasurement.getComment().isEmpty()) { - holder.commentTextView.setVisibility(View.VISIBLE); - holder.commentIconView.setVisibility(View.VISIBLE); - holder.commentTextView.setText(scaleMeasurement.getComment()); - } else { - holder.commentTextView.setVisibility(View.GONE); - holder.commentIconView.setVisibility(View.GONE); - } + holder.expandMeasurementView.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + TransitionManager.beginDelayedTransition(holder.measurementViews, new AutoTransition()); - FlexboxLayoutManager layoutManager = new FlexboxLayoutManager(activity); - layoutManager.setFlexDirection(FlexDirection.ROW); - layoutManager.setJustifyContent(JustifyContent.SPACE_AROUND); - layoutManager.setAlignItems(AlignItems.CENTER); - holder.measurementRecyclerView.setLayoutManager(layoutManager); - holder.measurementRecyclerView.setHasFixedSize(true); - holder.measurementRecyclerView.setNestedScrollingEnabled(false); - holder.measurementRecyclerView.setAdapter(new MeasurementAdapter(activity, scaleMeasurement, prevScaleMeasurement)); + if (holder.measurementViews.getVisibility() == View.VISIBLE) { + holder.measurementViews.setVisibility(View.GONE); + holder.expandMeasurementView.setImageDrawable(ContextCompat.getDrawable(activity, R.drawable.ic_expand_more)); + } else { + holder.measurementViews.setVisibility(View.VISIBLE); + holder.expandMeasurementView.setImageDrawable(ContextCompat.getDrawable(activity, R.drawable.ic_expand_less)); + } + } + }); - WeightMeasurementView weightMeasurementView = new WeightMeasurementView(activity); - weightMeasurementView.loadFrom(scaleMeasurement, prevScaleMeasurement); - SpannableStringBuilder weightValue = new SpannableStringBuilder(); - weightValue.append("◆ "); - weightValue.setSpan(new ForegroundColorSpan(weightMeasurementView.getIndicatorColor()), 0, 1, - Spanned.SPAN_EXCLUSIVE_EXCLUSIVE); - - weightValue.append(weightMeasurementView.getValueAsString(true)); - int start = weightValue.length(); - weightMeasurementView.appendDiffValue(weightValue, true); - weightValue.setSpan(new RelativeSizeSpan(0.9f), start, weightValue.length(), - Spanned.SPAN_EXCLUSIVE_EXCLUSIVE); - holder.weightView.setText(weightValue); holder.dateView.setText(DateFormat.getDateTimeInstance(DateFormat.LONG, DateFormat.SHORT).format(scaleMeasurement.getDateTime())); + + List measurementViewList = MeasurementView.getMeasurementList(activity, MeasurementView.DateTimeOrder.LAST); + + int i = 0; + for (MeasurementView measurementView : measurementViewList) { + i++; + if (measurementView instanceof DateMeasurementView || measurementView instanceof TimeMeasurementView || measurementView instanceof UserMeasurementView) { + measurementView.setVisible(false); + } + else { + measurementView.loadFrom(scaleMeasurement, prevScaleMeasurement); + + if (i <= maxMeasurementView) { + holder.measurementHighlightViews.addView(measurementView); + } else { + holder.measurementViews.addView(measurementView); + } + } + } } @Override @@ -117,21 +115,18 @@ class OverviewAdapter extends RecyclerView.Adapter { static class ViewHolder extends RecyclerView.ViewHolder { TextView dateView; - TextView weightView; - ImageView expandMoreView; - RecyclerView measurementRecyclerView; - ImageView commentIconView; - TextView commentTextView; + TableLayout measurementHighlightViews; + ImageView expandMeasurementView; + TableLayout measurementViews; public ViewHolder(@NonNull View itemView) { super(itemView); dateView = itemView.findViewById(R.id.dateView); - weightView = itemView.findViewById(R.id.weightView); - expandMoreView = itemView.findViewById(R.id.expandMoreView); - measurementRecyclerView = itemView.findViewById(R.id.measurementRecyclerView); - commentIconView = itemView.findViewById(R.id.commentIconView); - commentTextView = itemView.findViewById(R.id.commentTextView); + measurementHighlightViews = itemView.findViewById(R.id.measurementHighlightViews); + expandMeasurementView = itemView.findViewById(R.id.expandMoreView); + measurementViews = itemView.findViewById(R.id.measurementViews); + measurementViews.setVisibility(View.GONE); } } } diff --git a/android_app/app/src/main/java/com/health/openscale/gui/overview/OverviewFragment.java b/android_app/app/src/main/java/com/health/openscale/gui/overview/OverviewFragment.java index b099eca3..9cde13c6 100644 --- a/android_app/app/src/main/java/com/health/openscale/gui/overview/OverviewFragment.java +++ b/android_app/app/src/main/java/com/health/openscale/gui/overview/OverviewFragment.java @@ -309,7 +309,6 @@ public class OverviewFragment extends Fragment { } private void updateUserSelection() { - currentScaleUser = OpenScale.getInstance().getSelectedScaleUser(); spinUserAdapter.clear(); @@ -335,6 +334,11 @@ public class OverviewFragment extends Fragment { WeightMeasurementView weightMeasurementView = new WeightMeasurementView(getContext()); ScaleMeasurement initialWeightMeasurement = OpenScale.getInstance().getLastScaleMeasurement(); + + if (initialWeightMeasurement == null) { + initialWeightMeasurement = new ScaleMeasurement(); + } + initialWeightMeasurement.setWeight(initialWeightMeasurement.getWeight()); weightMeasurementView.loadFrom(initialWeightMeasurement, null); diff --git a/android_app/app/src/main/res/drawable/ic_expand_less.xml b/android_app/app/src/main/res/drawable/ic_expand_less.xml new file mode 100644 index 00000000..a55069f0 --- /dev/null +++ b/android_app/app/src/main/res/drawable/ic_expand_less.xml @@ -0,0 +1,10 @@ + + + diff --git a/android_app/app/src/main/res/layout/item_measurement.xml b/android_app/app/src/main/res/layout/item_measurement.xml deleted file mode 100644 index 71e79494..00000000 --- a/android_app/app/src/main/res/layout/item_measurement.xml +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - \ No newline at end of file diff --git a/android_app/app/src/main/res/layout/item_overview.xml b/android_app/app/src/main/res/layout/item_overview.xml index 389772a1..11c81597 100644 --- a/android_app/app/src/main/res/layout/item_overview.xml +++ b/android_app/app/src/main/res/layout/item_overview.xml @@ -29,57 +29,31 @@ app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toTopOf="parent" /> - + + - - - - - - - + android:layout_marginTop="5dp" + app:layout_constraintTop_toBottomOf="@id/expandMoreView"> +