diff --git a/app/src/main/java/org/isoron/helpers/ColorHelper.java b/app/src/main/java/org/isoron/helpers/ColorHelper.java index adb4849c5..2a4a0a258 100644 --- a/app/src/main/java/org/isoron/helpers/ColorHelper.java +++ b/app/src/main/java/org/isoron/helpers/ColorHelper.java @@ -57,4 +57,35 @@ public class ColorHelper return a << ALPHA_CHANNEL | r << RED_CHANNEL | g << GREEN_CHANNEL | b << BLUE_CHANNEL; } + + public static int setHue(int color, float newHue) + { + return setHSVParameter(color, newHue, 0); + } + + public static int setSaturation(int color, float newSaturation) + { + return setHSVParameter(color, newSaturation, 1); + } + + public static int setValue(int color, float newValue) + { + return setHSVParameter(color, newValue, 2); + } + + public static int setMinValue(int color, float newValue) + { + float hsv[] = new float[3]; + Color.colorToHSV(color, hsv); + hsv[2] = Math.max(hsv[2], newValue); + return Color.HSVToColor(hsv); + } + + private static int setHSVParameter(int color, float newValue, int index) + { + float hsv[] = new float[3]; + Color.colorToHSV(color, hsv); + hsv[index] = newValue; + return Color.HSVToColor(hsv); + } } \ No newline at end of file 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 55a2a249a..6f7175a65 100644 --- a/app/src/main/java/org/isoron/uhabits/views/HabitHistoryView.java +++ b/app/src/main/java/org/isoron/uhabits/views/HabitHistoryView.java @@ -60,6 +60,9 @@ public class HabitHistoryView extends ScrollableDataView private Rect baseLocation; private int primaryColor; + private boolean isBackgroundTransparent; + private int textColor; + public HabitHistoryView(Context context, AttributeSet attrs) { super(context, attrs); @@ -70,7 +73,6 @@ public class HabitHistoryView extends ScrollableDataView public void setHabit(Habit habit) { this.habit = habit; - this.primaryColor = habit.color; createColors(); fetchData(); postInvalidate(); @@ -134,20 +136,39 @@ public class HabitHistoryView extends ScrollableDataView private void createColors() { - int primaryColorBright = Color.argb(127, Color.red(primaryColor), Color.green(primaryColor), - Color.blue(primaryColor)); - int grey = Color.argb(25, 0, 0, 0); - - colors = new int[3]; - colors[0] = grey; - colors[1] = primaryColorBright; - colors[2] = primaryColor; + if(habit != null) + this.primaryColor = habit.color; + + if(isBackgroundTransparent) + { + primaryColor = ColorHelper.setMinValue(primaryColor, 0.75f); + } + + int red = Color.red(primaryColor); + int green = Color.green(primaryColor); + int blue = Color.blue(primaryColor); + + if(isBackgroundTransparent) + { + colors = new int[3]; + colors[0] = Color.argb(64, 0, 0, 0); + colors[1] = Color.argb(128, red, green, blue); + colors[2] = primaryColor; + textColor = Color.rgb(255, 255, 255); + } + else + { + colors = new int[3]; + colors[0] = Color.argb(25, 0, 0, 0); + colors[1] = Color.argb(127, red, green, blue); + colors[2] = primaryColor; + textColor = Color.argb(128, 0, 0, 0); + } } protected void createPaints() { pTextHeader = new Paint(); - pTextHeader.setColor(Color.argb(64, 0, 0, 0)); pTextHeader.setTextAlign(Align.LEFT); pTextHeader.setAntiAlias(true); @@ -212,6 +233,8 @@ public class HabitHistoryView extends ScrollableDataView previousYear = ""; justPrintedYear = false; + pTextHeader.setColor(textColor); + updateDate(); GregorianCalendar currentDate = (GregorianCalendar) baseDate.clone(); @@ -302,4 +325,10 @@ public class HabitHistoryView extends ScrollableDataView justPrintedYear = false; } } + + public void setIsBackgroundTransparent(boolean isBackgroundTransparent) + { + this.isBackgroundTransparent = isBackgroundTransparent; + createColors(); + } } 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 0397b78b2..a7950dbb9 100644 --- a/app/src/main/java/org/isoron/uhabits/views/HabitScoreView.java +++ b/app/src/main/java/org/isoron/uhabits/views/HabitScoreView.java @@ -55,6 +55,8 @@ public class HabitScoreView extends ScrollableDataView private int columnHeight; private int nColumns; + private int textColor; + private int dimmedTextColor; private int[] colors; private int[] scores; private int primaryColor; @@ -70,7 +72,7 @@ public class HabitScoreView extends ScrollableDataView public void setHabit(Habit habit) { this.habit = habit; - this.primaryColor = habit.color; + createColors(); fetchData(); postInvalidate(); } @@ -89,6 +91,26 @@ public class HabitScoreView extends ScrollableDataView private void createColors() { + if(habit != null) + this.primaryColor = habit.color; + + if(isBackgroundTransparent) + { + primaryColor = ColorHelper.setSaturation(primaryColor, 0.75f); + primaryColor = ColorHelper.setValue(primaryColor, 1.0f); + } + + if(isBackgroundTransparent) + { + textColor = Color.argb(192, 255, 255, 255); + dimmedTextColor = Color.argb(128, 255, 255, 255); + } + else + { + textColor = Color.argb(128, 0, 0, 0); + dimmedTextColor = Color.argb(32, 0, 0, 0); + } + colors = new int[4]; colors[0] = Color.rgb(230, 230, 230); @@ -100,18 +122,14 @@ public class HabitScoreView extends ScrollableDataView protected void createPaints() { pText = new Paint(); - pText.setColor(Color.argb(64, 0, 0, 0)); pText.setTextAlign(Paint.Align.LEFT); pText.setAntiAlias(true); pGraph = new Paint(); pGraph.setTextAlign(Paint.Align.CENTER); pGraph.setAntiAlias(true); - pGrid = new Paint(); - pGrid.setColor(Color.argb(64, 0, 0, 0)); pGrid.setAntiAlias(true); - } @Override @@ -186,10 +204,13 @@ public class HabitScoreView extends ScrollableDataView float lineHeight = pText.getFontSpacing(); rect.set(0, 0, nColumns * columnWidth, columnHeight); + rect.offset(0, 1f); + drawGrid(canvas, rect); String previousMonth = ""; + pText.setColor(textColor); pGraph.setColor(primaryColor); prevRect.setEmpty(); @@ -240,7 +261,7 @@ public class HabitScoreView extends ScrollableDataView int nRows = 5; float rowHeight = rGrid.height() / nRows; - pGrid.setColor(Color.argb(20, 0, 0, 0)); + pGrid.setColor(dimmedTextColor); for (int i = 0; i < nRows; i++) { canvas.drawText(String.format("%d%%", (100 - i * 100 / nRows)), rGrid.left + 0.5f * em, @@ -280,6 +301,7 @@ public class HabitScoreView extends ScrollableDataView public void setIsBackgroundTransparent(boolean isBackgroundTransparent) { this.isBackgroundTransparent = isBackgroundTransparent; + createColors(); } private void setModeOrColor(Paint p, PorterDuffXfermode mode, int color) 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 d8691facb..948cc24f6 100644 --- a/app/src/main/java/org/isoron/uhabits/views/HabitStreakView.java +++ b/app/src/main/java/org/isoron/uhabits/views/HabitStreakView.java @@ -25,7 +25,6 @@ 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 org.isoron.uhabits.models.Streak; @@ -55,6 +54,10 @@ public class HabitStreakView extends ScrollableDataView private int baseSize; private int primaryColor; + private boolean isBackgroundTransparent; + private int textColor; + private Paint pBarText; + public HabitStreakView(Context context, AttributeSet attrs) { super(context, attrs); @@ -65,7 +68,6 @@ public class HabitStreakView extends ScrollableDataView public void setHabit(Habit habit) { this.habit = habit; - this.primaryColor = habit.color; createColors(); fetchData(); @@ -111,19 +113,44 @@ public class HabitStreakView extends ScrollableDataView private void createColors() { - colors = new int[4]; - colors[3] = primaryColor; - colors[1] = Color.argb(80, Color.red(primaryColor), Color.green(primaryColor), Color.blue( - primaryColor)); - colors[2] = Color.argb(170, Color.red(primaryColor), Color.green(primaryColor), - Color.blue(primaryColor)); - colors[0] = Color.argb(30, 0, 0, 0); + if(habit != null) + this.primaryColor = habit.color; + + if(isBackgroundTransparent) + { + primaryColor = ColorHelper.setSaturation(primaryColor, 0.75f); + primaryColor = ColorHelper.setValue(primaryColor, 1.0f); + } + + int red = Color.red(primaryColor); + int green = Color.green(primaryColor); + int blue = Color.blue(primaryColor); + + if(isBackgroundTransparent) + { + colors = new int[4]; + colors[3] = primaryColor; + colors[2] = Color.argb(213, red, green, blue); + colors[1] = Color.argb(170, red, green, blue); + colors[0] = Color.argb(128, red, green, blue); + textColor = Color.rgb(255, 255, 255); + pBarText = pText; + } + else + { + colors = new int[4]; + colors[3] = primaryColor; + colors[2] = Color.argb(192, red, green, blue); + colors[1] = Color.argb(96, red, green, blue); + colors[0] = Color.argb(32, 0, 0, 0); + textColor = Color.argb(128, 0, 0, 0); + pBarText = pBar; + } } protected void createPaints() { pText = new Paint(); - pText.setColor(Color.argb(64, 0, 0, 0)); pText.setTextAlign(Paint.Align.CENTER); pText.setAntiAlias(true); @@ -199,6 +226,8 @@ public class HabitStreakView extends ScrollableDataView int nStreaks = startTimes.length; int start = nStreaks - nColumns - getDataOffset(); + pText.setColor(textColor); + String previousMonth = ""; for (int offset = 0; offset < nColumns && start + offset < nStreaks; offset++) @@ -216,7 +245,7 @@ public class HabitStreakView extends ScrollableDataView rect.offset(offset * columnWidth, headerHeight + columnHeight - height); canvas.drawRect(rect, pBar); - canvas.drawText(Long.toString(l), rect.centerX(), rect.top - barHeaderOffset, pBar); + canvas.drawText(Long.toString(l), rect.centerX(), rect.top - barHeaderOffset, pBarText); if (!month.equals(previousMonth)) canvas.drawText(month, rect.centerX(), rect.bottom + lineHeight * 1.2f, pText); @@ -224,4 +253,10 @@ public class HabitStreakView extends ScrollableDataView previousMonth = month; } } + + public void setIsBackgroundTransparent(boolean isBackgroundTransparent) + { + this.isBackgroundTransparent = isBackgroundTransparent; + createColors(); + } } diff --git a/app/src/main/java/org/isoron/uhabits/widgets/HistoryWidgetProvider.java b/app/src/main/java/org/isoron/uhabits/widgets/HistoryWidgetProvider.java index 2a382ef01..d72da4257 100644 --- a/app/src/main/java/org/isoron/uhabits/widgets/HistoryWidgetProvider.java +++ b/app/src/main/java/org/isoron/uhabits/widgets/HistoryWidgetProvider.java @@ -30,6 +30,7 @@ public class HistoryWidgetProvider extends BaseWidgetProvider protected View buildCustomView(Context context, int maxHeight, int maxWidth, Habit habit) { HabitHistoryView view = new HabitHistoryView(context, null); + view.setIsBackgroundTransparent(true); view.setHabit(habit); view.measure(maxWidth, maxHeight); view.layout(0, 0, maxWidth, maxHeight); 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 e7685748c..4a4bd84ca 100644 --- a/app/src/main/java/org/isoron/uhabits/widgets/StreakWidgetProvider.java +++ b/app/src/main/java/org/isoron/uhabits/widgets/StreakWidgetProvider.java @@ -22,7 +22,6 @@ import android.view.View; import org.isoron.helpers.DialogHelper; import org.isoron.uhabits.R; import org.isoron.uhabits.models.Habit; -import org.isoron.uhabits.views.HabitScoreView; import org.isoron.uhabits.views.HabitStreakView; public class StreakWidgetProvider extends BaseWidgetProvider @@ -31,6 +30,7 @@ public class StreakWidgetProvider extends BaseWidgetProvider protected View buildCustomView(Context context, int maxHeight, int maxWidth, Habit habit) { HabitStreakView view = new HabitStreakView(context, null); + view.setIsBackgroundTransparent(true); view.setHabit(habit); view.measure(maxWidth, maxHeight); view.layout(0, 0, maxWidth, maxHeight); diff --git a/app/src/main/res/drawable/widget_background.xml b/app/src/main/res/drawable/widget_background.xml index 98fd95f07..97de8bee1 100644 --- a/app/src/main/res/drawable/widget_background.xml +++ b/app/src/main/res/drawable/widget_background.xml @@ -2,6 +2,6 @@ - + \ No newline at end of file diff --git a/app/src/main/res/layout/widget_graph.xml b/app/src/main/res/layout/widget_graph.xml index 0c62235a9..99ee6628d 100644 --- a/app/src/main/res/layout/widget_graph.xml +++ b/app/src/main/res/layout/widget_graph.xml @@ -15,8 +15,8 @@ android:layout_width="match_parent" android:layout_height="wrap_content" android:gravity="center" - android:text="Wake up early" - android:textColor="#3f000000"/> + android:text="Habit" + android:textColor="#ffffff"/>