@@ -3,27 +3,41 @@ package to.bitkit.ui.screens.wallets.activity
33import androidx.activity.compose.BackHandler
44import androidx.compose.foundation.background
55import androidx.compose.foundation.gestures.detectHorizontalDragGestures
6+ import androidx.compose.foundation.layout.Box
67import androidx.compose.foundation.layout.Column
8+ import androidx.compose.foundation.layout.PaddingValues
79import androidx.compose.foundation.layout.Spacer
10+ import androidx.compose.foundation.layout.fillMaxSize
811import androidx.compose.foundation.layout.height
912import androidx.compose.foundation.layout.padding
1013import androidx.compose.foundation.shape.RoundedCornerShape
1114import androidx.compose.material3.ExperimentalMaterial3Api
1215import androidx.compose.runtime.Composable
1316import androidx.compose.runtime.getValue
17+ import androidx.compose.runtime.mutableStateOf
1418import androidx.compose.runtime.remember
19+ import androidx.compose.runtime.setValue
1520import androidx.compose.ui.Modifier
1621import androidx.compose.ui.composed
1722import androidx.compose.ui.draw.clip
1823import androidx.compose.ui.graphics.Brush
1924import androidx.compose.ui.graphics.Color
2025import androidx.compose.ui.input.pointer.pointerInput
2126import androidx.compose.ui.input.pointer.util.VelocityTracker
27+ import androidx.compose.ui.layout.onGloballyPositioned
28+ import androidx.compose.ui.platform.LocalDensity
2229import androidx.compose.ui.res.stringResource
2330import androidx.compose.ui.tooling.preview.Preview
2431import androidx.compose.ui.unit.dp
32+ import androidx.compose.ui.zIndex
2533import androidx.lifecycle.compose.collectAsStateWithLifecycle
2634import com.synonym.bitkitcore.Activity
35+ import dev.chrisbanes.haze.HazeState
36+ import dev.chrisbanes.haze.hazeEffect
37+ import dev.chrisbanes.haze.hazeSource
38+ import dev.chrisbanes.haze.materials.CupertinoMaterials
39+ import dev.chrisbanes.haze.materials.ExperimentalHazeMaterialsApi
40+ import dev.chrisbanes.haze.rememberHazeState
2741import to.bitkit.R
2842import to.bitkit.ui.appViewModel
2943import to.bitkit.ui.components.BottomSheetType
@@ -73,8 +87,8 @@ fun AllActivityScreen(
7387 )
7488}
7589
76- @OptIn(ExperimentalMaterial3Api ::class )
7790@Composable
91+ @OptIn(ExperimentalHazeMaterialsApi ::class )
7892private fun AllActivityScreenContent (
7993 filteredActivities : List <Activity >? ,
8094 searchText : String ,
@@ -89,16 +103,33 @@ private fun AllActivityScreenContent(
89103 onDateRangeClick : () -> Unit ,
90104 onActivityItemClick : (String ) -> Unit ,
91105 onEmptyActivityRowClick : () -> Unit ,
106+ hazeState : HazeState = rememberHazeState(),
92107) {
93- Column (
94- modifier = Modifier .background(Colors .Black )
108+ val density = LocalDensity .current
109+ var headerHeight by remember { mutableStateOf(120 .dp) }
110+ Box (
111+ modifier = Modifier
112+ .fillMaxSize()
113+ .background(Colors .Black )
95114 ) {
115+ // Header
116+ val (gradientStart, gradientEnd) = Color (0xFF1e1e1e ) to Color (0xFF161616 )
96117 Column (
97118 modifier = Modifier
98119 .clip(RoundedCornerShape (bottomStart = 16 .dp, bottomEnd = 16 .dp))
120+ .background(Brush .horizontalGradient(listOf (gradientStart, gradientEnd)))
121+ .hazeEffect(
122+ state = hazeState,
123+ style = CupertinoMaterials .ultraThin(containerColor = gradientEnd)
124+ )
99125 .background(
100- Brush .horizontalGradient(listOf (Color (0xFF1e1e1e ), Color (0xFF161616 )))
126+ Brush .verticalGradient(
127+ colorStops = arrayOf(0f to gradientEnd, 0.5f to Color .Transparent )
128+ )
101129 )
130+ .background(Brush .horizontalGradient(listOf (Colors .White06 , Color .Transparent )))
131+ .onGloballyPositioned { coords -> headerHeight = with (density) { coords.size.height.toDp() } }
132+ .zIndex(1f )
102133 ) {
103134 AppTopBar (stringResource(R .string.wallet__activity_all), onBackClick)
104135 Column (
@@ -118,18 +149,27 @@ private fun AllActivityScreenContent(
118149 Spacer (modifier = Modifier .height(16 .dp))
119150 }
120151 }
121- ActivityListGrouped (
122- items = filteredActivities,
123- onActivityItemClick = onActivityItemClick,
124- onEmptyActivityRowClick = onEmptyActivityRowClick,
152+ // List
153+ Box (
125154 modifier = Modifier
126- .swipeToChangeTab(
127- currentTabIndex = currentTabIndex,
128- tabCount = tabs.size,
129- onTabChange = onTabChange,
130- )
131- .padding(horizontal = 16 .dp)
132- )
155+ .fillMaxSize()
156+ .hazeSource(state = hazeState)
157+ .zIndex(0f )
158+ ) {
159+ ActivityListGrouped (
160+ items = filteredActivities,
161+ onActivityItemClick = onActivityItemClick,
162+ onEmptyActivityRowClick = onEmptyActivityRowClick,
163+ contentPadding = PaddingValues (top = headerHeight + 20 .dp),
164+ modifier = Modifier
165+ .swipeToChangeTab(
166+ currentTabIndex = currentTabIndex,
167+ tabCount = tabs.size,
168+ onTabChange = onTabChange,
169+ )
170+ .padding(horizontal = 16 .dp)
171+ )
172+ }
133173 }
134174}
135175
@@ -169,6 +209,7 @@ private fun Preview() {
169209 hasDateRangeFilter = false ,
170210 tabs = ActivityTab .entries,
171211 currentTabIndex = 0 ,
212+ hazeState = rememberHazeState(),
172213 onTabChange = {},
173214 onBackClick = {},
174215 onTagClick = {},
@@ -191,6 +232,7 @@ private fun PreviewEmpty() {
191232 hasDateRangeFilter = false ,
192233 tabs = ActivityTab .entries,
193234 currentTabIndex = 0 ,
235+ hazeState = rememberHazeState(),
194236 onTabChange = {},
195237 onBackClick = {},
196238 onTagClick = {},
0 commit comments