adding support for 1x2 widget size for 1513

pull/1514/head
Paul Phu 3 years ago
parent 404671546c
commit 001e997b7f

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

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

@ -20,16 +20,7 @@
package org.isoron.platform.time
import java.text.DateFormat
import java.util.Calendar.DAY_OF_MONTH
import java.util.Calendar.DAY_OF_WEEK
import java.util.Calendar.HOUR_OF_DAY
import java.util.Calendar.LONG
import java.util.Calendar.MILLISECOND
import java.util.Calendar.MINUTE
import java.util.Calendar.MONTH
import java.util.Calendar.SECOND
import java.util.Calendar.SHORT
import java.util.Calendar.YEAR
import java.util.Calendar.*
import java.util.GregorianCalendar
import java.util.Locale
import java.util.TimeZone
@ -68,6 +59,17 @@ class JavaLocalDateFormatter(private val locale: Locale) : LocalDateFormatter {
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 {
val df = DateFormat.getDateInstance(DateFormat.LONG, locale)
df.timeZone = TimeZone.getTimeZone("UTC")

@ -107,11 +107,9 @@ class HistoryChart(
squareSize = round((height - 2 * padding) / 8.0)
canvas.setFontSize(min(14.0, height * 0.06))
val weekdayColumnWidth = DayOfWeek.values().map { weekday ->
canvas.measureText(dateFormatter.shortWeekdayName(weekday)) + squareSize * 0.15
}.maxOrNull() ?: 0.0
val weekdayColumnWidth = calculateWeekdayColumnWidth(canvas)
nColumns = floor((width - 2 * padding - weekdayColumnWidth) / squareSize).toInt()
nColumns = calcNumOfColumns(weekdayColumnWidth)
val firstWeekdayOffset = (
today.dayOfWeek.daysSinceSunday -
firstWeekday.daysSinceSunday + 7
@ -136,13 +134,43 @@ class HistoryChart(
val date = topLeftDate.plus(row)
canvas.setTextAlign(TextAlign.LEFT)
canvas.drawText(
dateFormatter.shortWeekdayName(date),
padding + nColumns * squareSize + squareSize * 0.15,
weekdayDisplayName(date),
padding + nColumns * squareSize + 1.5,
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(
canvas: Canvas,
column: Int,

Loading…
Cancel
Save