Skip to content

Commit 6c4edaa

Browse files
committed
feat: activity list header haze
1 parent ccb5665 commit 6c4edaa

File tree

6 files changed

+65
-22
lines changed

6 files changed

+65
-22
lines changed

app/src/main/java/to/bitkit/ui/components/TabBar.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -51,10 +51,10 @@ private val buttonRightShape = RoundedCornerShape(topEndPercent = 50, bottomEndP
5151
@OptIn(ExperimentalHazeMaterialsApi::class)
5252
@Composable
5353
fun TabBar(
54+
hazeState: HazeState,
5455
onSendClick: () -> Unit,
5556
onReceiveClick: () -> Unit,
5657
onScanClick: () -> Unit,
57-
hazeState: HazeState,
5858
modifier: Modifier = Modifier,
5959
) {
6060
Box(

app/src/main/java/to/bitkit/ui/screens/wallets/HomeNav.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -75,10 +75,10 @@ fun HomeNav(
7575
}
7676

7777
TabBar(
78+
hazeState = hazeState,
7879
onSendClick = { appViewModel.showSheet(BottomSheetType.Send()) },
7980
onReceiveClick = { appViewModel.showSheet(BottomSheetType.Receive) },
8081
onScanClick = { rootNavController.navigateToScanner() },
81-
hazeState = hazeState,
8282
modifier = Modifier.align(Alignment.BottomCenter)
8383
)
8484

app/src/main/java/to/bitkit/ui/screens/wallets/SavingsWalletScreen.kt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -93,10 +93,10 @@ fun SavingsWalletScreen(
9393
val onchainActivities by activity.onchainActivities.collectAsState()
9494
ActivityListGrouped(
9595
items = onchainActivities,
96-
showFooter = true,
97-
onAllActivityButtonClick = onAllActivityButtonClick,
9896
onActivityItemClick = onActivityItemClick,
9997
onEmptyActivityRowClick = onEmptyActivityRowClick,
98+
showFooter = true,
99+
onAllActivityButtonClick = onAllActivityButtonClick,
100100
)
101101
}
102102
}

app/src/main/java/to/bitkit/ui/screens/wallets/SpendingWalletScreen.kt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -106,10 +106,10 @@ fun SpendingWalletScreen(
106106
val lightningActivities by activity.lightningActivities.collectAsState()
107107
ActivityListGrouped(
108108
items = lightningActivities,
109-
showFooter = true,
110-
onAllActivityButtonClick = onAllActivityButtonClick,
111109
onActivityItemClick = onActivityItemClick,
112110
onEmptyActivityRowClick = onEmptyActivityRowClick,
111+
showFooter = true,
112+
onAllActivityButtonClick = onAllActivityButtonClick,
113113
)
114114
}
115115
}

app/src/main/java/to/bitkit/ui/screens/wallets/activity/AllActivityScreen.kt

Lines changed: 57 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -3,27 +3,41 @@ package to.bitkit.ui.screens.wallets.activity
33
import androidx.activity.compose.BackHandler
44
import androidx.compose.foundation.background
55
import androidx.compose.foundation.gestures.detectHorizontalDragGestures
6+
import androidx.compose.foundation.layout.Box
67
import androidx.compose.foundation.layout.Column
8+
import androidx.compose.foundation.layout.PaddingValues
79
import androidx.compose.foundation.layout.Spacer
10+
import androidx.compose.foundation.layout.fillMaxSize
811
import androidx.compose.foundation.layout.height
912
import androidx.compose.foundation.layout.padding
1013
import androidx.compose.foundation.shape.RoundedCornerShape
1114
import androidx.compose.material3.ExperimentalMaterial3Api
1215
import androidx.compose.runtime.Composable
1316
import androidx.compose.runtime.getValue
17+
import androidx.compose.runtime.mutableStateOf
1418
import androidx.compose.runtime.remember
19+
import androidx.compose.runtime.setValue
1520
import androidx.compose.ui.Modifier
1621
import androidx.compose.ui.composed
1722
import androidx.compose.ui.draw.clip
1823
import androidx.compose.ui.graphics.Brush
1924
import androidx.compose.ui.graphics.Color
2025
import androidx.compose.ui.input.pointer.pointerInput
2126
import androidx.compose.ui.input.pointer.util.VelocityTracker
27+
import androidx.compose.ui.layout.onGloballyPositioned
28+
import androidx.compose.ui.platform.LocalDensity
2229
import androidx.compose.ui.res.stringResource
2330
import androidx.compose.ui.tooling.preview.Preview
2431
import androidx.compose.ui.unit.dp
32+
import androidx.compose.ui.zIndex
2533
import androidx.lifecycle.compose.collectAsStateWithLifecycle
2634
import 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
2741
import to.bitkit.R
2842
import to.bitkit.ui.appViewModel
2943
import to.bitkit.ui.components.BottomSheetType
@@ -73,8 +87,8 @@ fun AllActivityScreen(
7387
)
7488
}
7589

76-
@OptIn(ExperimentalMaterial3Api::class)
7790
@Composable
91+
@OptIn(ExperimentalHazeMaterialsApi::class)
7892
private 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 = {},

app/src/main/java/to/bitkit/ui/screens/wallets/activity/components/ActivityListGrouped.kt

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,7 @@ fun ActivityListGrouped(
4040
modifier: Modifier = Modifier,
4141
showFooter: Boolean = false,
4242
onAllActivityButtonClick: () -> Unit = {},
43+
contentPadding: PaddingValues = PaddingValues(top = 20.dp),
4344
) {
4445
Column(
4546
horizontalAlignment = Alignment.CenterHorizontally,
@@ -50,7 +51,7 @@ fun ActivityListGrouped(
5051

5152
LazyColumn(
5253
horizontalAlignment = Alignment.CenterHorizontally,
53-
contentPadding = PaddingValues(top = 20.dp),
54+
contentPadding = contentPadding,
5455
modifier = Modifier.fillMaxWidth()
5556
) {
5657
itemsIndexed(groupedItems) { index, item ->

0 commit comments

Comments
 (0)