From 8f37e293b153d24d4bf1d485425ec042fd11a7f1 Mon Sep 17 00:00:00 2001 From: Alinson Xavier Date: Tue, 8 Mar 2016 06:58:34 -0500 Subject: [PATCH] Implement dummy history editor; add edit history button --- .../uhabits/dialogs/HistoryEditorDialog.java | 77 +++++++++++++++++++ .../uhabits/fragments/ShowHabitFragment.java | 13 ++++ .../uhabits/views/HabitHistoryView.java | 47 +++++++---- .../isoron/uhabits/views/HabitScoreView.java | 9 +-- .../isoron/uhabits/views/HabitStreakView.java | 8 +- app/src/main/res/layout/show_habit.xml | 26 ++++--- app/src/main/res/values/colors.xml | 2 +- app/src/main/res/values/dimens.xml | 3 + 8 files changed, 149 insertions(+), 36 deletions(-) create mode 100644 app/src/main/java/org/isoron/uhabits/dialogs/HistoryEditorDialog.java diff --git a/app/src/main/java/org/isoron/uhabits/dialogs/HistoryEditorDialog.java b/app/src/main/java/org/isoron/uhabits/dialogs/HistoryEditorDialog.java new file mode 100644 index 000000000..6566b2355 --- /dev/null +++ b/app/src/main/java/org/isoron/uhabits/dialogs/HistoryEditorDialog.java @@ -0,0 +1,77 @@ +/* + * Copyright (C) 2016 Álinson Santos Xavier + * + * This file is part of Loop Habit Tracker. + * + * Loop Habit Tracker 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. + * + * Loop Habit Tracker 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 org.isoron.uhabits.dialogs; + +import android.app.AlertDialog; +import android.app.Dialog; +import android.app.DialogFragment; +import android.content.Context; +import android.content.DialogInterface; +import android.os.Bundle; +import android.util.DisplayMetrics; +import android.util.Log; + +import org.isoron.uhabits.R; +import org.isoron.uhabits.models.Habit; +import org.isoron.uhabits.views.HabitHistoryView; + +public class HistoryEditorDialog extends DialogFragment + implements DialogInterface.OnClickListener +{ + @Override + public Dialog onCreateDialog(Bundle savedInstanceState) + { + Context context = getActivity(); + + int p = (int) getResources().getDimension(R.dimen.history_editor_padding); + + HabitHistoryView historyView = new HabitHistoryView(context, null); + historyView.setHabit(Habit.get(4L)); + historyView.setPadding(p, 0, p, 0); + + AlertDialog.Builder builder = new AlertDialog.Builder(context); + builder.setTitle("History Editor") + .setView(historyView) + .setPositiveButton(android.R.string.ok, this); + + return builder.create(); + } + + @Override + public void onResume() + { + super.onResume(); + + DisplayMetrics metrics = getResources().getDisplayMetrics(); + int maxHeight = getResources().getDimensionPixelSize(R.dimen.history_editor_max_height); + int width = metrics.widthPixels; + int height = Math.min(metrics.heightPixels, maxHeight); + + Log.d("HistoryEditorDialog", String.format("h=%d max_h=%d", height, maxHeight)); + + getDialog().getWindow().setLayout(width, height); + } + + @Override + public void onClick(DialogInterface dialog, int which) + { + + } +} diff --git a/app/src/main/java/org/isoron/uhabits/fragments/ShowHabitFragment.java b/app/src/main/java/org/isoron/uhabits/fragments/ShowHabitFragment.java index c8b0e548c..1a67e1a96 100644 --- a/app/src/main/java/org/isoron/uhabits/fragments/ShowHabitFragment.java +++ b/app/src/main/java/org/isoron/uhabits/fragments/ShowHabitFragment.java @@ -28,6 +28,7 @@ import android.view.MenuInflater; import android.view.MenuItem; import android.view.View; import android.view.ViewGroup; +import android.widget.Button; import android.widget.TextView; import org.isoron.helpers.ColorHelper; @@ -35,6 +36,7 @@ import org.isoron.helpers.Command; import org.isoron.helpers.DialogHelper; import org.isoron.uhabits.R; import org.isoron.uhabits.ShowHabitActivity; +import org.isoron.uhabits.dialogs.HistoryEditorDialog; import org.isoron.uhabits.helpers.ReminderHelper; import org.isoron.uhabits.models.Habit; import org.isoron.uhabits.models.Score; @@ -75,6 +77,7 @@ public class ShowHabitFragment extends Fragment implements DialogHelper.OnSavedL TextView tvStrength = (TextView) view.findViewById(R.id.tvStrength); TextView tvStreaks = (TextView) view.findViewById(R.id.tvStreaks); RingView scoreRing = (RingView) view.findViewById(R.id.scoreRing); + Button btEditHistory = (Button) view.findViewById(R.id.btEditHistory); HabitStreakView streakView = (HabitStreakView) view.findViewById(R.id.streakView); HabitScoreView scoreView = (HabitScoreView) view.findViewById(R.id.scoreView); HabitHistoryView historyView = (HabitHistoryView) view.findViewById(R.id.historyView); @@ -90,6 +93,16 @@ public class ShowHabitFragment extends Fragment implements DialogHelper.OnSavedL scoreView.setHabit(habit); historyView.setHabit(habit); + btEditHistory.setOnClickListener(new View.OnClickListener() + { + @Override + public void onClick(View v) + { + HistoryEditorDialog frag = new HistoryEditorDialog(); + frag.show(getFragmentManager(), "dialog"); + } + }); + setHasOptionsMenu(true); return view; } diff --git a/app/src/main/java/org/isoron/uhabits/views/HabitHistoryView.java b/app/src/main/java/org/isoron/uhabits/views/HabitHistoryView.java index d967db6e1..05cfc933d 100644 --- a/app/src/main/java/org/isoron/uhabits/views/HabitHistoryView.java +++ b/app/src/main/java/org/isoron/uhabits/views/HabitHistoryView.java @@ -29,6 +29,7 @@ import android.util.AttributeSet; import org.isoron.helpers.ColorHelper; import org.isoron.helpers.DateHelper; +import org.isoron.uhabits.R; import org.isoron.uhabits.models.Habit; import java.text.SimpleDateFormat; @@ -50,7 +51,6 @@ public class HabitHistoryView extends ScrollableDataView private int columnWidth; private int columnHeight; private int nColumns; - private int baseSize; private String wdays[]; private SimpleDateFormat dfMonth; @@ -70,6 +70,7 @@ public class HabitHistoryView extends ScrollableDataView { super(context, attrs); this.primaryColor = ColorHelper.palette[7]; + this.checkmarks = new int[0]; init(); } @@ -83,6 +84,7 @@ public class HabitHistoryView extends ScrollableDataView private void init() { + fetchData(); createPaints(); createColors(); @@ -117,23 +119,42 @@ public class HabitHistoryView extends ScrollableDataView protected void onSizeChanged(int width, int height, int oldWidth, int oldHeight) { if(height < 8) height = 200; - - baseSize = height / 8; + int baseSize = height / 8; setScrollerBucketSize(baseSize); - columnWidth = baseSize; - columnHeight = 8 * baseSize; - nColumns = width / baseSize; - squareSpacing = (int) Math.floor(baseSize / 15.0); - pSquareFg.setTextSize(baseSize * 0.5f); - pTextHeader.setTextSize(baseSize * 0.5f); + int maxTextSize = getResources().getDimensionPixelSize(R.dimen.history_max_font_size); + float textSize = Math.min(baseSize * 0.5f, maxTextSize); + + pSquareFg.setTextSize(textSize); + pTextHeader.setTextSize(textSize); squareTextOffset = pSquareFg.getFontSpacing() * 0.4f; headerTextOffset = pTextHeader.getFontSpacing() * 0.3f; + int rightLabelWidth = getWeekdayLabelWidth(); + int horizontalPadding = getPaddingRight() + getPaddingLeft(); + + columnWidth = baseSize; + columnHeight = 8 * baseSize; + nColumns = (width - rightLabelWidth - horizontalPadding) / baseSize + 1; + updateDate(); } + private int getWeekdayLabelWidth() + { + int width = 0; + Rect bounds = new Rect(); + + for(String w : wdays) + { + pSquareFg.getTextBounds(w, 0, w.length(), bounds); + width = Math.max(width, bounds.right); + } + + return width; + } + private void createColors() { if(habit != null) @@ -185,12 +206,7 @@ public class HabitHistoryView extends ScrollableDataView generateRandomData(); else { - if(habit == null) - { - checkmarks = new int[0]; - return; - } - + if(habit == null) return; checkmarks = habit.checkmarks.getAllValues(); } @@ -226,6 +242,7 @@ public class HabitHistoryView extends ScrollableDataView super.onDraw(canvas); baseLocation.set(0, 0, columnWidth - squareSpacing, columnWidth - squareSpacing); + baseLocation.offset(getPaddingLeft(), getPaddingTop()); previousMonth = ""; previousYear = ""; diff --git a/app/src/main/java/org/isoron/uhabits/views/HabitScoreView.java b/app/src/main/java/org/isoron/uhabits/views/HabitScoreView.java index 6ec91bc6f..b05e92f3e 100644 --- a/app/src/main/java/org/isoron/uhabits/views/HabitScoreView.java +++ b/app/src/main/java/org/isoron/uhabits/views/HabitScoreView.java @@ -71,6 +71,7 @@ public class HabitScoreView extends ScrollableDataView { super(context, attrs); this.primaryColor = ColorHelper.palette[7]; + this.scores = new int[0]; init(); } @@ -84,6 +85,7 @@ public class HabitScoreView extends ScrollableDataView private void init() { + fetchData(); createPaints(); createColors(); @@ -168,12 +170,7 @@ public class HabitScoreView extends ScrollableDataView generateRandomData(); else { - if (habit == null) - { - scores = new int[0]; - return; - } - + if (habit == null) return; scores = habit.scores.getAllValues(BUCKET_SIZE * DateHelper.millisecondsInOneDay); } diff --git a/app/src/main/java/org/isoron/uhabits/views/HabitStreakView.java b/app/src/main/java/org/isoron/uhabits/views/HabitStreakView.java index 1ac4f5a0c..18dc35270 100644 --- a/app/src/main/java/org/isoron/uhabits/views/HabitStreakView.java +++ b/app/src/main/java/org/isoron/uhabits/views/HabitStreakView.java @@ -65,6 +65,7 @@ public class HabitStreakView extends ScrollableDataView { super(context, attrs); this.primaryColor = ColorHelper.palette[7]; + startTimes = endTimes = lengths = new long[0]; init(); } @@ -79,6 +80,7 @@ public class HabitStreakView extends ScrollableDataView private void init() { + fetchData(); createPaints(); createColors(); @@ -163,11 +165,7 @@ public class HabitStreakView extends ScrollableDataView generateRandomData(); else { - if(habit == null) - { - startTimes = endTimes = lengths = new long[0]; - return; - } + if(habit == null) return; List streaks = habit.streaks.getAll(); int size = streaks.size(); diff --git a/app/src/main/res/layout/show_habit.xml b/app/src/main/res/layout/show_habit.xml index cfe845f68..8db43453e 100644 --- a/app/src/main/res/layout/show_habit.xml +++ b/app/src/main/res/layout/show_habit.xml @@ -18,8 +18,8 @@ --> - + - - + android:layout_height="160dp" /> + +