Skip to content

Commit e7cad99

Browse files
Update sheet detens/initial detent with new Scopes
1 parent ddd5f6b commit e7cad99

File tree

5 files changed

+67
-35
lines changed

5 files changed

+67
-35
lines changed

gravatar-quickeditor/src/main/java/com/gravatar/quickeditor/ui/abouteditor/AboutEditor.kt

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -106,9 +106,10 @@ internal fun AboutEditor(
106106
}
107107

108108
Surface {
109-
Box(modifier = Modifier
110-
.wrapContentSize()
111-
.animateContentSize()
109+
Box(
110+
modifier = Modifier
111+
.wrapContentSize()
112+
.animateContentSize(),
112113
) {
113114
AboutEditor(
114115
uiState = uiState,

gravatar-quickeditor/src/main/java/com/gravatar/quickeditor/ui/editor/QuickEditorScopeOption.kt

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -47,6 +47,13 @@ public class QuickEditorScopeOption private constructor(
4747
is Scope.AvatarPicker -> AboutInputField.all
4848
}
4949

50+
internal val initialPage: QuickEditorPage
51+
get() = when (scope) {
52+
is Scope.AvatarPicker -> QuickEditorPage.AvatarPicker
53+
is Scope.AboutEditor -> QuickEditorPage.AboutEditor
54+
is Scope.AvatarPickerAndAboutEditor -> scope.config.initialPage.internalType
55+
}
56+
5057
public companion object {
5158
internal val default = QuickEditorScopeOption(
5259
scope = Scope.AvatarPicker(AvatarPickerConfiguration.default),

gravatar-quickeditor/src/main/java/com/gravatar/quickeditor/ui/editor/QuickEditorViewModel.kt

Lines changed: 1 addition & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -121,14 +121,7 @@ internal class QuickEditorViewModelFactory(
121121
}
122122
}
123123

124-
private val QuickEditorScopeOption.initialPage: QuickEditorPage
125-
get() = when (scope) {
126-
is Scope.AvatarPicker -> QuickEditorPage.AvatarPicker
127-
is Scope.AboutEditor -> QuickEditorPage.AboutEditor
128-
is Scope.AvatarPickerAndAboutEditor -> scope.config.initialPage.internalType
129-
}
130-
131-
private val AvatarPickerAndAboutEditorConfiguration.Page.internalType: QuickEditorPage
124+
internal val AvatarPickerAndAboutEditorConfiguration.Page.internalType: QuickEditorPage
132125
get() = when (this) {
133126
AvatarPicker -> QuickEditorPage.AvatarPicker
134127
AboutEditor -> QuickEditorPage.AboutEditor

gravatar-quickeditor/src/main/java/com/gravatar/quickeditor/ui/editor/bottomsheet/GravatarQuickEditorBottomSheet.kt

Lines changed: 54 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -57,6 +57,8 @@ import com.gravatar.quickeditor.ui.editor.GravatarQuickEditorDismissReason
5757
import com.gravatar.quickeditor.ui.editor.GravatarQuickEditorPage
5858
import com.gravatar.quickeditor.ui.editor.GravatarQuickEditorParams
5959
import com.gravatar.quickeditor.ui.editor.GravatarUiMode
60+
import com.gravatar.quickeditor.ui.editor.QuickEditorPage
61+
import com.gravatar.quickeditor.ui.editor.QuickEditorScopeOption
6062
import com.gravatar.quickeditor.ui.editor.UpdateHandler
6163
import com.gravatar.ui.GravatarTheme
6264
import com.gravatar.ui.LocalGravatarTheme
@@ -87,7 +89,7 @@ public fun GravatarQuickEditorBottomSheet(
8789
authenticationMethod = authenticationMethod,
8890
updateHandler = updateHandler,
8991
onDismiss = onDismiss,
90-
modalDetents = gravatarQuickEditorParams.scopeOption.avatarPickerContentLayout.modalDetents(),
92+
modalDetents = gravatarQuickEditorParams.scopeOption.modalDetents(),
9193
)
9294
}
9395

@@ -123,7 +125,7 @@ public fun GravatarQuickEditorBottomSheet(
123125
}
124126
},
125127
onDismiss = onDismiss,
126-
modalDetents = gravatarQuickEditorParams.scopeOption.avatarPickerContentLayout.modalDetents(),
128+
modalDetents = gravatarQuickEditorParams.scopeOption.modalDetents(),
127129
)
128130
}
129131

@@ -316,34 +318,63 @@ private fun GravatarModalBottomSheet(
316318
}
317319
}
318320

321+
private val peek = SheetDetent(identifier = "peek") { containerHeight, _ ->
322+
containerHeight * 0.6f
323+
}
324+
319325
@Composable
320-
internal fun AvatarPickerContentLayout.modalDetents(): ModalDetents {
321-
val peek = SheetDetent(identifier = "peek") { containerHeight, sheetHeight ->
322-
containerHeight * 0.6f
323-
}
326+
internal fun QuickEditorScopeOption.modalDetents(): ModalDetents {
324327
val windowHeightSizeClass = currentWindowAdaptiveInfo().windowSizeClass.windowHeightSizeClass
325-
val initialDetent = if (windowHeightSizeClass == WindowHeightSizeClass.COMPACT) {
326-
FullyExpanded
327-
} else {
328-
when (this) {
329-
AvatarPickerContentLayout.Horizontal -> FullyExpanded
330-
AvatarPickerContentLayout.Vertical -> peek
331-
}
332-
}
333328

334-
val detents = buildList {
335-
add(Hidden)
336-
if (this@modalDetents == AvatarPickerContentLayout.Horizontal) {
337-
add(FullyExpanded)
338-
} else {
329+
val detents = buildDetentsList()
330+
val initialDetent = initialDetent(windowHeightSizeClass)
331+
332+
return ModalDetents(
333+
initialDetent = if (detents.contains(initialDetent)) initialDetent else detents.last(),
334+
detents = detents,
335+
)
336+
}
337+
338+
private fun QuickEditorScopeOption.buildDetentsList(): List<SheetDetent> {
339+
return when (this.scope) {
340+
is QuickEditorScopeOption.Scope.AvatarPickerAndAboutEditor,
341+
is QuickEditorScopeOption.Scope.AboutEditor,
342+
-> buildList {
343+
add(Hidden)
339344
add(peek)
340345
add(FullyExpanded)
341346
}
347+
348+
is QuickEditorScopeOption.Scope.AvatarPicker -> buildList {
349+
add(Hidden)
350+
if (avatarPickerContentLayout == AvatarPickerContentLayout.Vertical) {
351+
add(peek)
352+
}
353+
add(FullyExpanded)
354+
}
355+
}
356+
}
357+
358+
private fun QuickEditorScopeOption.initialDetent(windowHeightSizeClass: WindowHeightSizeClass): SheetDetent {
359+
return if (windowHeightSizeClass == WindowHeightSizeClass.COMPACT) {
360+
FullyExpanded
361+
} else {
362+
when (this.scope) {
363+
is QuickEditorScopeOption.Scope.AboutEditor -> peek
364+
is QuickEditorScopeOption.Scope.AvatarPickerAndAboutEditor,
365+
is QuickEditorScopeOption.Scope.AvatarPicker,
366+
-> {
367+
if (
368+
this.avatarPickerContentLayout == AvatarPickerContentLayout.Horizontal &&
369+
this.initialPage == QuickEditorPage.AvatarPicker
370+
) {
371+
FullyExpanded
372+
} else {
373+
peek
374+
}
375+
}
376+
}
342377
}
343-
return ModalDetents(
344-
initialDetent = initialDetent,
345-
detents = detents,
346-
)
347378
}
348379

349380
internal data class ModalDetents(

gravatar-quickeditor/src/main/java/com/gravatar/quickeditor/ui/editor/extensions/QuickEditorExtensions.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@ internal fun addQuickEditorToView(
2525
authenticationMethod = authenticationMethod,
2626
updateHandler = updateHandler,
2727
onDismiss = onDismiss,
28-
modalDetents = gravatarQuickEditorParams.scopeOption.avatarPickerContentLayout.modalDetents(),
28+
modalDetents = gravatarQuickEditorParams.scopeOption.modalDetents(),
2929
onCurrentDetentChanged = {
3030
if (it == Hidden) {
3131
viewGroup.removeView(this)

0 commit comments

Comments
 (0)