pull/1514/merge
Paul Phu 8 months ago committed by GitHub
commit 7793a3c204
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194

@ -21,11 +21,13 @@
<appwidget-provider xmlns:android="http://schemas.android.com/apk/res/android" <appwidget-provider xmlns:android="http://schemas.android.com/apk/res/android"
android:minHeight="80dp" android:minHeight="80dp"
android:minWidth="80dp" android:minWidth="80dp"
android:minResizeWidth="80dp" android:targetCellWidth="2"
android:targetCellHeight="2"
android:minResizeWidth="40dp"
android:minResizeHeight="80dp" android:minResizeHeight="80dp"
android:initialLayout="@layout/widget_graph" android:initialLayout="@layout/widget_graph"
android:previewImage="@drawable/widget_preview_history" android:previewImage="@drawable/widget_preview_history"
android:resizeMode="vertical|horizontal" android:resizeMode="horizontal|vertical"
android:updatePeriodMillis="3600000" android:updatePeriodMillis="3600000"
android:configure="org.isoron.uhabits.widgets.activities.HabitPickerDialog" android:configure="org.isoron.uhabits.widgets.activities.HabitPickerDialog"
android:widgetCategory="home_screen"> android:widgetCategory="home_screen">

@ -136,6 +136,8 @@ data class LocalDate(val daysSince2000: Int) {
} }
interface LocalDateFormatter { interface LocalDateFormatter {
fun narrowWeekdayName(weekday: DayOfWeek): String
fun narrowWeekdayName(date: LocalDate): String
fun shortWeekdayName(weekday: DayOfWeek): String fun shortWeekdayName(weekday: DayOfWeek): String
fun shortWeekdayName(date: LocalDate): String fun shortWeekdayName(date: LocalDate): String
fun shortMonthName(date: LocalDate): String fun shortMonthName(date: LocalDate): String

@ -27,6 +27,7 @@ import java.util.Calendar.LONG
import java.util.Calendar.MILLISECOND import java.util.Calendar.MILLISECOND
import java.util.Calendar.MINUTE import java.util.Calendar.MINUTE
import java.util.Calendar.MONTH import java.util.Calendar.MONTH
import java.util.Calendar.NARROW_FORMAT
import java.util.Calendar.SECOND import java.util.Calendar.SECOND
import java.util.Calendar.SHORT import java.util.Calendar.SHORT
import java.util.Calendar.YEAR import java.util.Calendar.YEAR
@ -68,6 +69,17 @@ class JavaLocalDateFormatter(private val locale: Locale) : LocalDateFormatter {
return cal.getDisplayName(DAY_OF_WEEK, SHORT, locale) return cal.getDisplayName(DAY_OF_WEEK, SHORT, locale)
} }
override fun narrowWeekdayName(weekday: DayOfWeek): String {
val cal = GregorianCalendar()
cal.set(DAY_OF_WEEK, weekday.daysSinceSunday - 1)
return shortWeekdayName(LocalDate(cal.get(YEAR), cal.get(MONTH) + 1, cal.get(DAY_OF_MONTH)))
}
override fun narrowWeekdayName(date: LocalDate): String {
val cal = date.toGregorianCalendar()
return cal.getDisplayName(DAY_OF_WEEK, NARROW_FORMAT, locale)
}
fun longFormat(date: LocalDate): String { fun longFormat(date: LocalDate): String {
val df = DateFormat.getDateInstance(DateFormat.LONG, locale) val df = DateFormat.getDateInstance(DateFormat.LONG, locale)
df.timeZone = TimeZone.getTimeZone("UTC") df.timeZone = TimeZone.getTimeZone("UTC")

@ -107,11 +107,9 @@ class HistoryChart(
squareSize = round((height - 2 * padding) / 8.0) squareSize = round((height - 2 * padding) / 8.0)
canvas.setFontSize(min(14.0, height * 0.06)) canvas.setFontSize(min(14.0, height * 0.06))
val weekdayColumnWidth = DayOfWeek.values().map { weekday -> val weekdayColumnWidth = calculateWeekdayColumnWidth(canvas)
canvas.measureText(dateFormatter.shortWeekdayName(weekday)) + squareSize * 0.15
}.maxOrNull() ?: 0.0
nColumns = floor((width - 2 * padding - weekdayColumnWidth) / squareSize).toInt() nColumns = calcNumOfColumns(weekdayColumnWidth)
val firstWeekdayOffset = ( val firstWeekdayOffset = (
today.dayOfWeek.daysSinceSunday - today.dayOfWeek.daysSinceSunday -
firstWeekday.daysSinceSunday + 7 firstWeekday.daysSinceSunday + 7
@ -136,13 +134,43 @@ class HistoryChart(
val date = topLeftDate.plus(row) val date = topLeftDate.plus(row)
canvas.setTextAlign(TextAlign.LEFT) canvas.setTextAlign(TextAlign.LEFT)
canvas.drawText( canvas.drawText(
dateFormatter.shortWeekdayName(date), weekdayDisplayName(date),
padding + nColumns * squareSize + squareSize * 0.15, padding + nColumns * squareSize + 1.5,
padding + squareSize * (row + 1) + squareSize / 2 padding + squareSize * (row + 1) + squareSize / 2
) )
} }
} }
private fun calcNumOfColumns(weekdayColumnWidth: Double) =
floor((width - 2 * padding - weekdayColumnWidth) / squareSize).toInt()
private fun weekdayDisplayName(weekday: DayOfWeek): String {
if (shouldUseNarrowWeekdayName()) {
return dateFormatter.narrowWeekdayName(weekday)
}
return dateFormatter.shortWeekdayName(weekday)
}
private fun weekdayDisplayName(localDate: LocalDate): String {
if (shouldUseNarrowWeekdayName()) {
return dateFormatter.narrowWeekdayName(localDate)
}
return dateFormatter.shortWeekdayName(localDate)
}
private fun calculateWeekdayColumnWidth(canvas: Canvas): Double {
if (shouldUseNarrowWeekdayName()) {
return 0.0
}
return DayOfWeek.values().map { weekday ->
canvas.measureText(weekdayDisplayName(weekday)) + 1.5
}.maxOrNull() ?: 0.0
}
private fun shouldUseNarrowWeekdayName(): Boolean {
// based off 80dp minWidth in widget_history_info.xml
return width < 80
}
private fun drawColumn( private fun drawColumn(
canvas: Canvas, canvas: Canvas,
column: Int, column: Int,

Loading…
Cancel
Save