Skip to content

Commit cb1d50e

Browse files
committed
Even better names
Change-Id: Ia699c3ce8fd1ce7a6e406b00c81dc196b487ed65
1 parent ce6eaa9 commit cb1d50e

File tree

7 files changed

+139
-128
lines changed
  • core/designsystem/src/main/java/com/google/samples/apps/nowinandroid/core/designsystem/component/scrollbar
  • feature
    • bookmarks/src/main/java/com/google/samples/apps/nowinandroid/feature/bookmarks
    • foryou/src/main/java/com/google/samples/apps/nowinandroid/feature/foryou
    • interests/src/main/java/com/google/samples/apps/nowinandroid/feature/interests
    • search/src/main/java/com/google/samples/apps/nowinandroid/feature/search
    • topic/src/main/java/com/google/samples/apps/nowinandroid/feature/topic

7 files changed

+139
-128
lines changed

core/designsystem/src/main/java/com/google/samples/apps/nowinandroid/core/designsystem/component/scrollbar/AppScrollbars.kt

Lines changed: 12 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@ import androidx.compose.foundation.background
2323
import androidx.compose.foundation.gestures.Orientation
2424
import androidx.compose.foundation.gestures.Orientation.Horizontal
2525
import androidx.compose.foundation.gestures.Orientation.Vertical
26+
import androidx.compose.foundation.gestures.ScrollableState
2627
import androidx.compose.foundation.interaction.InteractionSource
2728
import androidx.compose.foundation.interaction.MutableInteractionSource
2829
import androidx.compose.foundation.interaction.collectIsDraggedAsState
@@ -56,18 +57,15 @@ private const val INACTIVE_TO_DORMANT_COOL_DOWN = 2_000L
5657
* Its thumb disappears when the scrolling container is dormant.
5758
* @param modifier a [Modifier] for the [Scrollbar]
5859
* @param state the driving state for the [Scrollbar]
59-
* @param scrollInProgress a flag indicating if the scrolling container for the scrollbar is
60-
* currently scrolling
6160
* @param orientation the orientation of the scrollbar
62-
* @param onThumbMoved the fast scroll implementation
61+
* @param onThumbDisplaced the fast scroll implementation
6362
*/
6463
@Composable
65-
fun FastScrollbar(
64+
fun ScrollableState.FastScrollbar(
6665
modifier: Modifier = Modifier,
6766
state: ScrollbarState,
68-
scrollInProgress: Boolean,
6967
orientation: Orientation,
70-
onThumbMoved: (Float) -> Unit,
68+
onThumbDisplaced: (Float) -> Unit,
7169
) {
7270
val interactionSource = remember { MutableInteractionSource() }
7371
Scrollbar(
@@ -77,12 +75,11 @@ fun FastScrollbar(
7775
state = state,
7876
thumb = {
7977
FastScrollbarThumb(
80-
scrollInProgress = scrollInProgress,
8178
interactionSource = interactionSource,
8279
orientation = orientation,
8380
)
8481
},
85-
onThumbDisplaced = onThumbMoved,
82+
onThumbDisplaced = onThumbDisplaced,
8683
)
8784
}
8885

@@ -91,15 +88,12 @@ fun FastScrollbar(
9188
* Its thumb disappears when the scrolling container is dormant.
9289
* @param modifier a [Modifier] for the [Scrollbar]
9390
* @param state the driving state for the [Scrollbar]
94-
* @param scrollInProgress a flag indicating if the scrolling container for the scrollbar is
95-
* currently scrolling
9691
* @param orientation the orientation of the scrollbar
9792
*/
9893
@Composable
99-
fun DecorativeScrollbar(
94+
fun ScrollableState.DecorativeScrollbar(
10095
modifier: Modifier = Modifier,
10196
state: ScrollbarState,
102-
scrollInProgress: Boolean,
10397
orientation: Orientation,
10498
) {
10599
val interactionSource = remember { MutableInteractionSource() }
@@ -111,7 +105,6 @@ fun DecorativeScrollbar(
111105
thumb = {
112106
DecorativeScrollbarThumb(
113107
interactionSource = interactionSource,
114-
scrollInProgress = scrollInProgress,
115108
orientation = orientation,
116109
)
117110
},
@@ -122,8 +115,7 @@ fun DecorativeScrollbar(
122115
* A scrollbar thumb that is intended to also be a touch target for fast scrolling.
123116
*/
124117
@Composable
125-
private fun FastScrollbarThumb(
126-
scrollInProgress: Boolean,
118+
private fun ScrollableState.FastScrollbarThumb(
127119
interactionSource: InteractionSource,
128120
orientation: Orientation,
129121
) {
@@ -137,7 +129,6 @@ private fun FastScrollbarThumb(
137129
}
138130
.background(
139131
color = scrollbarThumbColor(
140-
scrollInProgress = scrollInProgress,
141132
interactionSource = interactionSource,
142133
),
143134
shape = RoundedCornerShape(16.dp),
@@ -149,8 +140,7 @@ private fun FastScrollbarThumb(
149140
* A decorative scrollbar thumb for communicating a user's position in a list solely.
150141
*/
151142
@Composable
152-
private fun DecorativeScrollbarThumb(
153-
scrollInProgress: Boolean,
143+
private fun ScrollableState.DecorativeScrollbarThumb(
154144
interactionSource: InteractionSource,
155145
orientation: Orientation,
156146
) {
@@ -164,7 +154,6 @@ private fun DecorativeScrollbarThumb(
164154
}
165155
.background(
166156
color = scrollbarThumbColor(
167-
scrollInProgress = scrollInProgress,
168157
interactionSource = interactionSource,
169158
),
170159
shape = RoundedCornerShape(16.dp),
@@ -174,19 +163,18 @@ private fun DecorativeScrollbarThumb(
174163

175164
/**
176165
* The color of the scrollbar thumb as a function of its interaction state.
177-
* @param scrollInProgress if the scrolling container is currently scrolling
178166
* @param interactionSource source of interactions in the scrolling container
179167
*/
180168
@Composable
181-
private fun scrollbarThumbColor(
182-
scrollInProgress: Boolean,
169+
private fun ScrollableState.scrollbarThumbColor(
183170
interactionSource: InteractionSource,
184171
): Color {
185172
var state by remember { mutableStateOf(Dormant) }
186173
val pressed by interactionSource.collectIsPressedAsState()
187174
val hovered by interactionSource.collectIsHoveredAsState()
188175
val dragged by interactionSource.collectIsDraggedAsState()
189-
val active = pressed || hovered || dragged || scrollInProgress
176+
val active = (canScrollForward || canScrollForward) &&
177+
(pressed || hovered || dragged || isScrollInProgress)
190178

191179
val color by animateColorAsState(
192180
targetValue = when (state) {
@@ -202,7 +190,7 @@ private fun scrollbarThumbColor(
202190
LaunchedEffect(active) {
203191
when (active) {
204192
true -> state = Active
205-
false -> {
193+
false -> if (state == Active) {
206194
state = Inactive
207195
delay(INACTIVE_TO_DORMANT_COOL_DOWN)
208196
state = Dormant

core/designsystem/src/main/java/com/google/samples/apps/nowinandroid/core/designsystem/component/scrollbar/ThumbExt.kt

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -27,36 +27,36 @@ import androidx.compose.runtime.rememberUpdatedState
2727
import androidx.compose.runtime.setValue
2828

2929
/**
30-
* Remembers a function to react to [Scrollbar] thumb position movements for a [LazyListState]
30+
* Remembers a function to react to [Scrollbar] thumb position displacements for a [LazyListState]
3131
* @param itemsAvailable the amount of items in the list.
3232
*/
3333
@Composable
34-
fun LazyListState.rememberThumbInteractions(
34+
fun LazyListState.rememberFastScroller(
3535
itemsAvailable: Int,
36-
): (Float) -> Unit = rememberThumbInteractions(
36+
): (Float) -> Unit = rememberFastScroller(
3737
itemsAvailable = itemsAvailable,
3838
scroll = ::scrollToItem,
3939
)
4040

4141
/**
42-
* Remembers a function to react to [Scrollbar] thumb position movements for a [LazyGridState]
42+
* Remembers a function to react to [Scrollbar] thumb position displacements for a [LazyGridState]
4343
* @param itemsAvailable the amount of items in the grid.
4444
*/
4545
@Composable
46-
fun LazyGridState.rememberThumbInteractions(
46+
fun LazyGridState.rememberFastScroller(
4747
itemsAvailable: Int,
48-
): (Float) -> Unit = rememberThumbInteractions(
48+
): (Float) -> Unit = rememberFastScroller(
4949
itemsAvailable = itemsAvailable,
5050
scroll = ::scrollToItem,
5151
)
5252

5353
/**
54-
* Generic function to react to [Scrollbar] thumb interactions in a lazy layout.
54+
* Generic function to react to [Scrollbar] thumb displacements in a lazy layout.
5555
* @param itemsAvailable the total amount of items available to scroll in the layout.
5656
* @param scroll a function to be invoked when an index has been identified to scroll to.
5757
*/
5858
@Composable
59-
private inline fun rememberThumbInteractions(
59+
private inline fun rememberFastScroller(
6060
itemsAvailable: Int,
6161
crossinline scroll: suspend (index: Int) -> Unit,
6262
): (Float) -> Unit {
@@ -69,6 +69,6 @@ private inline fun rememberThumbInteractions(
6969
scroll(indexToFind)
7070
}
7171
return remember {
72-
{ percentage = it }
72+
{ newPercentage -> percentage = newPercentage }
7373
}
7474
}

feature/bookmarks/src/main/java/com/google/samples/apps/nowinandroid/feature/bookmarks/BookmarksScreen.kt

Lines changed: 19 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@ import androidx.annotation.VisibleForTesting
2020
import androidx.compose.foundation.Image
2121
import androidx.compose.foundation.gestures.Orientation
2222
import androidx.compose.foundation.layout.Arrangement
23+
import androidx.compose.foundation.layout.Box
2324
import androidx.compose.foundation.layout.Column
2425
import androidx.compose.foundation.layout.PaddingValues
2526
import androidx.compose.foundation.layout.Spacer
@@ -62,7 +63,7 @@ import androidx.lifecycle.LifecycleEventObserver
6263
import androidx.lifecycle.compose.collectAsStateWithLifecycle
6364
import com.google.samples.apps.nowinandroid.core.designsystem.component.NiaLoadingWheel
6465
import com.google.samples.apps.nowinandroid.core.designsystem.component.scrollbar.FastScrollbar
65-
import com.google.samples.apps.nowinandroid.core.designsystem.component.scrollbar.rememberThumbInteractions
66+
import com.google.samples.apps.nowinandroid.core.designsystem.component.scrollbar.rememberFastScroller
6667
import com.google.samples.apps.nowinandroid.core.designsystem.component.scrollbar.scrollbarState
6768
import com.google.samples.apps.nowinandroid.core.designsystem.theme.LocalTintTheme
6869
import com.google.samples.apps.nowinandroid.core.designsystem.theme.NiaTheme
@@ -120,12 +121,9 @@ internal fun BookmarksScreen(
120121
val snackBarResult = onShowSnackbar(bookmarkRemovedMessage, undoText)
121122
if (snackBarResult) {
122123

123-
undoBookmarkRemoval()
124-
}
125-
126-
else {
127-
clearUndoState()
128-
124+
undoBookmarkRemoval()
125+
} else {
126+
clearUndoState()
129127
}
130128
}
131129
}
@@ -142,19 +140,18 @@ internal fun BookmarksScreen(
142140
}
143141

144142

145-
when (feedState) {
146-
Loading -> LoadingState(modifier)
147-
is Success -> if (feedState.feed.isNotEmpty()) {
148-
BookmarksGrid(
149-
feedState,
150-
removeFromBookmarks,
151-
onNewsResourceViewed,
152-
onTopicClick,
153-
modifier,
154-
)
155-
} else {
156-
EmptyState(modifier)
157-
143+
when (feedState) {
144+
Loading -> LoadingState(modifier)
145+
is Success -> if (feedState.feed.isNotEmpty()) {
146+
BookmarksGrid(
147+
feedState,
148+
removeFromBookmarks,
149+
onNewsResourceViewed,
150+
onTopicClick,
151+
modifier,
152+
)
153+
} else {
154+
EmptyState(modifier)
158155
}
159156
}
160157

@@ -213,16 +210,15 @@ private fun BookmarksGrid(
213210
val scrollbarState = scrollableState.scrollbarState(
214211
itemsAvailable = itemsAvailable,
215212
)
216-
FastScrollbar(
213+
scrollableState.FastScrollbar(
217214
modifier = Modifier
218215
.fillMaxHeight()
219216
.windowInsetsPadding(WindowInsets.systemBars)
220217
.padding(horizontal = 2.dp)
221218
.align(Alignment.CenterEnd),
222219
state = scrollbarState,
223220
orientation = Orientation.Vertical,
224-
scrollInProgress = scrollableState.isScrollInProgress,
225-
onThumbMoved = scrollableState.rememberThumbInteractions(
221+
onThumbDisplaced = scrollableState.rememberFastScroller(
226222
itemsAvailable = itemsAvailable,
227223
),
228224
)

feature/foryou/src/main/java/com/google/samples/apps/nowinandroid/feature/foryou/ForYouScreen.kt

Lines changed: 4 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -93,7 +93,7 @@ import com.google.samples.apps.nowinandroid.core.designsystem.component.NiaIconT
9393
import com.google.samples.apps.nowinandroid.core.designsystem.component.NiaOverlayLoadingWheel
9494
import com.google.samples.apps.nowinandroid.core.designsystem.component.scrollbar.DecorativeScrollbar
9595
import com.google.samples.apps.nowinandroid.core.designsystem.component.scrollbar.FastScrollbar
96-
import com.google.samples.apps.nowinandroid.core.designsystem.component.scrollbar.rememberThumbInteractions
96+
import com.google.samples.apps.nowinandroid.core.designsystem.component.scrollbar.rememberFastScroller
9797
import com.google.samples.apps.nowinandroid.core.designsystem.component.scrollbar.scrollbarState
9898
import com.google.samples.apps.nowinandroid.core.designsystem.icon.NiaIcons
9999
import com.google.samples.apps.nowinandroid.core.designsystem.theme.NiaTheme
@@ -230,16 +230,15 @@ internal fun ForYouScreen(
230230
)
231231
}
232232
}
233-
FastScrollbar(
233+
state.FastScrollbar(
234234
modifier = Modifier
235235
.fillMaxHeight()
236236
.windowInsetsPadding(WindowInsets.systemBars)
237237
.padding(horizontal = 2.dp)
238238
.align(Alignment.CenterEnd),
239239
state = scrollbarState,
240240
orientation = Orientation.Vertical,
241-
scrollInProgress = state.isScrollInProgress,
242-
onThumbMoved = state.rememberThumbInteractions(
241+
onThumbDisplaced = state.rememberFastScroller(
243242
itemsAvailable = itemsAvailable,
244243
),
245244
)
@@ -365,14 +364,13 @@ private fun TopicSelection(
365364
)
366365
}
367366
}
368-
DecorativeScrollbar(
367+
lazyGridState.DecorativeScrollbar(
369368
modifier = Modifier
370369
.fillMaxWidth()
371370
.padding(horizontal = 12.dp)
372371
.align(Alignment.BottomStart),
373372
state = lazyGridState.scrollbarState(itemsAvailable = onboardingUiState.topics.size),
374373
orientation = Orientation.Horizontal,
375-
scrollInProgress = lazyGridState.isScrollInProgress,
376374
)
377375
}
378376
}

feature/interests/src/main/java/com/google/samples/apps/nowinandroid/feature/interests/TabContent.kt

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,7 @@ import androidx.compose.ui.Modifier
3636
import androidx.compose.ui.platform.testTag
3737
import androidx.compose.ui.unit.dp
3838
import com.google.samples.apps.nowinandroid.core.designsystem.component.scrollbar.FastScrollbar
39-
import com.google.samples.apps.nowinandroid.core.designsystem.component.scrollbar.rememberThumbInteractions
39+
import com.google.samples.apps.nowinandroid.core.designsystem.component.scrollbar.rememberFastScroller
4040
import com.google.samples.apps.nowinandroid.core.designsystem.component.scrollbar.scrollbarState
4141
import com.google.samples.apps.nowinandroid.core.model.data.FollowableTopic
4242

@@ -83,16 +83,15 @@ fun TopicsTabContent(
8383
val scrollbarState = scrollableState.scrollbarState(
8484
itemsAvailable = topics.size,
8585
)
86-
FastScrollbar(
86+
scrollableState.FastScrollbar(
8787
modifier = Modifier
8888
.fillMaxHeight()
8989
.windowInsetsPadding(WindowInsets.systemBars)
9090
.padding(horizontal = 2.dp)
9191
.align(Alignment.CenterEnd),
9292
state = scrollbarState,
9393
orientation = Orientation.Vertical,
94-
scrollInProgress = scrollableState.isScrollInProgress,
95-
onThumbMoved = scrollableState.rememberThumbInteractions(
94+
onThumbDisplaced = scrollableState.rememberFastScroller(
9695
itemsAvailable = topics.size,
9796
),
9897
)

0 commit comments

Comments
 (0)