fix(widget): IMPL_09 - Fix scroll bug in standard widget size (3x2)
Changes: - WidgetSizeClass.kt: Add NARROW_SCROLL and WIDE_SCROLL enum values - NoteWidget.kt: Add SIZE_NARROW_SCROLL (110x150dp) and SIZE_WIDE_SCROLL (250x150dp) breakpoints - NoteWidget.kt: Update sizeMode to include new breakpoints - NoteWidgetContent.kt: Add WIDGET_HEIGHT_SCROLL_THRESHOLD (150dp) - NoteWidgetContent.kt: Update toSizeClass() to classify 150dp+ height as SCROLL sizes - NoteWidgetContent.kt: Combine NARROW_SCROLL + NARROW_TALL into single when branch - NoteWidgetContent.kt: Combine WIDE_SCROLL + WIDE_TALL into single when branch - NoteWidgetContent.kt: Remove clickable modifier from unlocked checklists to enable scrolling - Locked checklists retain clickable for options, unlocked checklists scroll freely
This commit is contained in:
@@ -38,13 +38,18 @@ class NoteWidget : GlanceAppWidget() {
|
||||
// Responsive Breakpoints — schmale + breite Spalten
|
||||
val SIZE_SMALL = DpSize(110.dp, 80.dp) // Schmal+kurz: nur Titel
|
||||
val SIZE_NARROW_MEDIUM = DpSize(110.dp, 110.dp) // Schmal+mittel: Vorschau
|
||||
val SIZE_NARROW_SCROLL = DpSize(110.dp, 150.dp) // 🆕 v1.8.1: Schmal+scroll (Standard 3x2)
|
||||
val SIZE_NARROW_LARGE = DpSize(110.dp, 250.dp) // Schmal+groß: voller Inhalt
|
||||
val SIZE_WIDE_MEDIUM = DpSize(250.dp, 110.dp) // Breit+mittel: Vorschau
|
||||
val SIZE_WIDE_SCROLL = DpSize(250.dp, 150.dp) // 🆕 v1.8.1: Breit+scroll (Standard 3x2 breit)
|
||||
val SIZE_WIDE_LARGE = DpSize(250.dp, 250.dp) // Breit+groß: voller Inhalt
|
||||
}
|
||||
|
||||
override val sizeMode = SizeMode.Responsive(
|
||||
setOf(SIZE_SMALL, SIZE_NARROW_MEDIUM, SIZE_NARROW_LARGE, SIZE_WIDE_MEDIUM, SIZE_WIDE_LARGE)
|
||||
setOf(
|
||||
SIZE_SMALL, SIZE_NARROW_MEDIUM, SIZE_NARROW_SCROLL, SIZE_NARROW_LARGE,
|
||||
SIZE_WIDE_MEDIUM, SIZE_WIDE_SCROLL, SIZE_WIDE_LARGE
|
||||
)
|
||||
)
|
||||
|
||||
override val stateDefinition = PreferencesGlanceStateDefinition
|
||||
|
||||
@@ -52,6 +52,7 @@ import dev.dettmer.simplenotes.ui.editor.ComposeNoteEditorActivity
|
||||
// ── Size Classification ──
|
||||
|
||||
private val WIDGET_HEIGHT_SMALL_THRESHOLD = 110.dp
|
||||
private val WIDGET_HEIGHT_SCROLL_THRESHOLD = 150.dp // 🆕 v1.8.1: Scrollbare Ansicht
|
||||
private val WIDGET_SIZE_MEDIUM_THRESHOLD = 250.dp
|
||||
|
||||
// 🆕 v1.8.0: Increased preview lengths for better text visibility
|
||||
@@ -60,9 +61,14 @@ private const val TEXT_PREVIEW_FULL_LENGTH = 300
|
||||
|
||||
private fun DpSize.toSizeClass(): WidgetSizeClass = when {
|
||||
height < WIDGET_HEIGHT_SMALL_THRESHOLD -> WidgetSizeClass.SMALL
|
||||
width < WIDGET_SIZE_MEDIUM_THRESHOLD && height < WIDGET_SIZE_MEDIUM_THRESHOLD -> WidgetSizeClass.NARROW_MED
|
||||
|
||||
// 🆕 v1.8.1: Neue ScrollView-Schwelle bei 150dp Höhe
|
||||
width < WIDGET_SIZE_MEDIUM_THRESHOLD && height < WIDGET_HEIGHT_SCROLL_THRESHOLD -> WidgetSizeClass.NARROW_MED
|
||||
width < WIDGET_SIZE_MEDIUM_THRESHOLD && height < WIDGET_SIZE_MEDIUM_THRESHOLD -> WidgetSizeClass.NARROW_SCROLL
|
||||
width < WIDGET_SIZE_MEDIUM_THRESHOLD -> WidgetSizeClass.NARROW_TALL
|
||||
height < WIDGET_SIZE_MEDIUM_THRESHOLD -> WidgetSizeClass.WIDE_MED
|
||||
|
||||
height < WIDGET_HEIGHT_SCROLL_THRESHOLD -> WidgetSizeClass.WIDE_MED
|
||||
height < WIDGET_SIZE_MEDIUM_THRESHOLD -> WidgetSizeClass.WIDE_SCROLL
|
||||
else -> WidgetSizeClass.WIDE_TALL
|
||||
}
|
||||
|
||||
@@ -177,16 +183,30 @@ fun NoteWidgetContent(
|
||||
}
|
||||
}
|
||||
|
||||
WidgetSizeClass.NARROW_TALL -> Box(modifier = contentClickModifier) {
|
||||
// 🆕 v1.8.1 (IMPL_09): Scrollbare Größe (150dp+ Höhe)
|
||||
WidgetSizeClass.NARROW_SCROLL,
|
||||
WidgetSizeClass.NARROW_TALL -> {
|
||||
when (note.noteType) {
|
||||
NoteType.TEXT -> TextNoteFullView(note)
|
||||
NoteType.CHECKLIST -> ChecklistFullView(
|
||||
NoteType.TEXT -> Box(modifier = contentClickModifier) {
|
||||
TextNoteFullView(note)
|
||||
}
|
||||
NoteType.CHECKLIST -> {
|
||||
// 🆕 v1.8.1: Locked: Click -> Options | Unlocked: kein Click -> Scroll frei
|
||||
val checklistBoxModifier = if (isLocked) {
|
||||
contentClickModifier
|
||||
} else {
|
||||
GlanceModifier.fillMaxSize()
|
||||
}
|
||||
Box(modifier = checklistBoxModifier) {
|
||||
ChecklistFullView(
|
||||
note = note,
|
||||
isLocked = isLocked,
|
||||
glanceId = glanceId
|
||||
)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
WidgetSizeClass.WIDE_MED -> Box(modifier = contentClickModifier) {
|
||||
when (note.noteType) {
|
||||
@@ -200,10 +220,22 @@ fun NoteWidgetContent(
|
||||
}
|
||||
}
|
||||
|
||||
WidgetSizeClass.WIDE_TALL -> Box(modifier = contentClickModifier) {
|
||||
// 🆕 v1.8.1 (IMPL_09): Scrollbare Größe (150dp+ Höhe)
|
||||
WidgetSizeClass.WIDE_SCROLL,
|
||||
WidgetSizeClass.WIDE_TALL -> {
|
||||
when (note.noteType) {
|
||||
NoteType.TEXT -> TextNoteFullView(note)
|
||||
NoteType.CHECKLIST -> ChecklistFullView(
|
||||
NoteType.TEXT -> Box(modifier = contentClickModifier) {
|
||||
TextNoteFullView(note)
|
||||
}
|
||||
NoteType.CHECKLIST -> {
|
||||
// 🆕 v1.8.1: Locked: Click -> Options | Unlocked: kein Click -> Scroll frei
|
||||
val checklistBoxModifier = if (isLocked) {
|
||||
contentClickModifier
|
||||
} else {
|
||||
GlanceModifier.fillMaxSize()
|
||||
}
|
||||
Box(modifier = checklistBoxModifier) {
|
||||
ChecklistFullView(
|
||||
note = note,
|
||||
isLocked = isLocked,
|
||||
glanceId = glanceId
|
||||
@@ -213,6 +245,8 @@ fun NoteWidgetContent(
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@@ -4,11 +4,14 @@ package dev.dettmer.simplenotes.widget
|
||||
* 🆕 v1.8.0: Size classification for responsive Note Widget layouts
|
||||
*
|
||||
* Determines which layout variant to use based on widget dimensions.
|
||||
* 🆕 v1.8.1: Added NARROW_SCROLL and WIDE_SCROLL for scrollable mid-size widgets
|
||||
*/
|
||||
enum class WidgetSizeClass {
|
||||
SMALL, // Nur Titel
|
||||
NARROW_MED, // Schmal, Vorschau
|
||||
NARROW_MED, // Schmal, Vorschau (CompactView)
|
||||
NARROW_SCROLL, // 🆕 v1.8.1: Schmal, scrollbare Liste (150dp+)
|
||||
NARROW_TALL, // Schmal, voller Inhalt
|
||||
WIDE_MED, // Breit, Vorschau
|
||||
WIDE_MED, // Breit, Vorschau (CompactView)
|
||||
WIDE_SCROLL, // 🆕 v1.8.1: Breit, scrollbare Liste (150dp+)
|
||||
WIDE_TALL // Breit, voller Inhalt
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user