diff --git a/app/src/main/java/org/isoron/uhabits/ui/common/views/StreakChart.java b/app/src/main/java/org/isoron/uhabits/ui/common/views/StreakChart.java index 81e69b661..be07deaf1 100644 --- a/app/src/main/java/org/isoron/uhabits/ui/common/views/StreakChart.java +++ b/app/src/main/java/org/isoron/uhabits/ui/common/views/StreakChart.java @@ -23,6 +23,7 @@ import android.content.*; import android.graphics.*; import android.util.*; import android.view.*; +import android.view.ViewGroup.*; import org.isoron.uhabits.*; import org.isoron.uhabits.models.*; @@ -31,6 +32,8 @@ import org.isoron.uhabits.utils.*; import java.text.*; import java.util.*; +import static android.view.View.MeasureSpec.*; + public class StreakChart extends View { private Paint paint; @@ -79,18 +82,15 @@ public class StreakChart extends View init(); } - public void setIsBackgroundTransparent(boolean isBackgroundTransparent) + /** + * Returns the maximum number of streaks this view is able to show, given + * its current size. + * + * @return max number of visible streaks + */ + public int getMaxStreakCount() { - this.isBackgroundTransparent = isBackgroundTransparent; - initColors(); - } - - public void setStreaks(List streaks) - { - this.streaks = streaks; - initColors(); - updateMaxMinLengths(); - requestLayout(); + return (int) Math.floor(getMeasuredHeight() / baseSize); } public void populateWithRandomData() @@ -99,7 +99,7 @@ public class StreakChart extends View long start = DateUtils.getStartOfToday(); LinkedList streaks = new LinkedList<>(); - for(int i = 0; i < 10; i++) + for (int i = 0; i < 10; i++) { int length = new Random().nextInt(100); long end = start + length * day; @@ -116,6 +116,20 @@ public class StreakChart extends View postInvalidate(); } + public void setIsBackgroundTransparent(boolean isBackgroundTransparent) + { + this.isBackgroundTransparent = isBackgroundTransparent; + initColors(); + } + + public void setStreaks(List streaks) + { + this.streaks = streaks; + initColors(); + updateMaxMinLengths(); + requestLayout(); + } + @Override protected void onDraw(Canvas canvas) { @@ -134,11 +148,17 @@ public class StreakChart extends View @Override protected void onMeasure(int widthSpec, int heightSpec) { - int width = MeasureSpec.getSize(widthSpec); - int height = streaks.size() * baseSize; + LayoutParams params = getLayoutParams(); + + if (params != null && params.height == LayoutParams.WRAP_CONTENT) + { + int width = getSize(widthSpec); + int height = streaks.size() * baseSize; + + heightSpec = makeMeasureSpec(height, EXACTLY); + widthSpec = makeMeasureSpec(width, EXACTLY); + } - heightSpec = MeasureSpec.makeMeasureSpec(height, MeasureSpec.EXACTLY); - widthSpec = MeasureSpec.makeMeasureSpec(width, MeasureSpec.EXACTLY); setMeasuredDimension(widthSpec, heightSpec); } diff --git a/app/src/main/java/org/isoron/uhabits/ui/widgets/StreakWidget.java b/app/src/main/java/org/isoron/uhabits/ui/widgets/StreakWidget.java index e3cf9330e..a1efabd0a 100644 --- a/app/src/main/java/org/isoron/uhabits/ui/widgets/StreakWidget.java +++ b/app/src/main/java/org/isoron/uhabits/ui/widgets/StreakWidget.java @@ -23,6 +23,7 @@ import android.app.*; import android.content.*; import android.support.annotation.*; import android.view.*; +import android.view.ViewGroup.*; import org.isoron.uhabits.*; import org.isoron.uhabits.models.*; @@ -32,6 +33,8 @@ import org.isoron.uhabits.utils.*; import java.util.*; +import static android.view.ViewGroup.LayoutParams.MATCH_PARENT; + public class StreakWidget extends BaseWidget { @NonNull @@ -57,8 +60,8 @@ public class StreakWidget extends BaseWidget int color = ColorUtils.getColor(getContext(), habit.getColor()); - // TODO: make this dynamic - List streaks = habit.getStreaks().getBest(10); + int count = chart.getMaxStreakCount(); + List streaks = habit.getStreaks().getBest(count); chart.setColor(color); chart.setStreaks(streaks); @@ -69,7 +72,9 @@ public class StreakWidget extends BaseWidget { StreakChart dataView = new StreakChart(getContext()); GraphWidgetView view = new GraphWidgetView(getContext(), dataView); + LayoutParams params = new LayoutParams(MATCH_PARENT, MATCH_PARENT); view.setTitle(habit.getName()); + view.setLayoutParams(params); return view; } diff --git a/app/src/main/java/org/isoron/uhabits/widgets/StreakWidgetProvider.java b/app/src/main/java/org/isoron/uhabits/widgets/StreakWidgetProvider.java index df0691598..22f0baee1 100644 --- a/app/src/main/java/org/isoron/uhabits/widgets/StreakWidgetProvider.java +++ b/app/src/main/java/org/isoron/uhabits/widgets/StreakWidgetProvider.java @@ -33,16 +33,4 @@ public class StreakWidgetProvider extends BaseWidgetProvider Habit habit = getHabitFromWidgetId(id); return new StreakWidget(context, id, habit); } - -// GraphWidgetView widgetView = (GraphWidgetView) view; -// StreakChart chart = (StreakChart) widgetView.getDataView(); -// -// int color = ColorUtils.getColor(context, habit.getColor()); -// -// // TODO: make this dynamic -// List streaks = habit.getStreaks().getBest(10); -// -// chart.setColor(color); -// chart.setStreaks(streaks); -// } } diff --git a/app/src/main/res/layout/show_habit_streak.xml b/app/src/main/res/layout/show_habit_streak.xml index c2de2fd5f..23eeb94f8 100644 --- a/app/src/main/res/layout/show_habit_streak.xml +++ b/app/src/main/res/layout/show_habit_streak.xml @@ -27,5 +27,5 @@ + android:layout_height="wrap_content"/> \ No newline at end of file