Skip to content

Commit 9325d42

Browse files
wip
1 parent 31494e8 commit 9325d42

File tree

3 files changed

+157
-144
lines changed

3 files changed

+157
-144
lines changed

Library/lib/src/commonMain/kotlin/ui/DebuggerScreen.kt

Lines changed: 4 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -21,23 +21,10 @@ fun DebuggerScreen() {
2121
MaterialTheme(
2222
colorScheme = darkColorScheme()
2323
) {
24-
Scaffold(
25-
topBar = {
26-
TopAppBar(
27-
title = {
28-
Text("Sniffer")
29-
}
30-
)
31-
}
32-
) {
33-
Surface {
34-
MainNavigation(
35-
modifier = Modifier
36-
.fillMaxSize()
37-
.padding(it)
38-
)
39-
}
40-
}
24+
MainNavigation(
25+
modifier = Modifier
26+
.fillMaxSize()
27+
)
4128
}
4229
}
4330

@@ -54,7 +41,6 @@ fun MainNavigation(
5441
) {
5542
composable(route = "list") {
5643
RequestListPane(
57-
modifier = Modifier.fillMaxSize(),
5844
onClick = {
5945
controller.navigate("request/$it")
6046
},
@@ -69,7 +55,6 @@ fun MainNavigation(
6955
) {
7056
val id = it.savedStateHandle.get<String>("id") ?: return@composable
7157
RequestPane(
72-
modifier = Modifier.fillMaxSize(),
7358
id = id
7459
)
7560
}

Library/lib/src/commonMain/kotlin/ui/pane/RequestListPane.kt

Lines changed: 49 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,11 @@
11
package ui.pane
22

3+
import androidx.compose.foundation.layout.fillMaxSize
34
import androidx.compose.foundation.layout.fillMaxWidth
5+
import androidx.compose.foundation.layout.padding
46
import androidx.compose.foundation.lazy.LazyColumn
57
import androidx.compose.foundation.lazy.items
8+
import androidx.compose.material3.*
69
import androidx.compose.runtime.Composable
710
import androidx.compose.runtime.getValue
811
import androidx.compose.ui.Modifier
@@ -11,48 +14,62 @@ import data.HttpRequestState
1114
import data.SnifferDB
1215
import ui.component.*
1316

17+
@OptIn(ExperimentalMaterial3Api::class)
1418
@Composable
1519
fun RequestListPane(
16-
modifier: Modifier,
1720
onClick: (id: String) -> Unit,
1821
) {
1922
val requests by SnifferDB.httpRequests.collectAsStateWithLifecycle(emptyList())
2023

21-
LazyColumn(
22-
modifier = modifier,
23-
) {
24-
items(requests) {
25-
when (it) {
26-
is HttpRequestState.Error -> {
27-
ErrorItem(
28-
modifier = Modifier.fillMaxWidth(),
29-
item = ErrorItemDisplay.from(it),
30-
onClick = { onClick.invoke(it.id) },
31-
)
24+
Scaffold(
25+
topBar = {
26+
TopAppBar(
27+
title = {
28+
Text("Transaction List")
3229
}
30+
)
31+
}
32+
) {
33+
Surface(
34+
modifier = Modifier
35+
.fillMaxSize()
36+
.padding(it),
37+
) {
38+
LazyColumn {
39+
items(requests) {
40+
when (it) {
41+
is HttpRequestState.Error -> {
42+
ErrorItem(
43+
modifier = Modifier.fillMaxWidth(),
44+
item = ErrorItemDisplay.from(it),
45+
onClick = { onClick.invoke(it.id) },
46+
)
47+
}
3348

34-
is HttpRequestState.Executing -> {
35-
ExecutingItem(
36-
modifier = Modifier.fillMaxWidth(),
37-
item = ExecutingItemDisplay.from(it),
38-
onClick = { onClick.invoke(it.id) },
39-
)
40-
}
49+
is HttpRequestState.Executing -> {
50+
ExecutingItem(
51+
modifier = Modifier.fillMaxWidth(),
52+
item = ExecutingItemDisplay.from(it),
53+
onClick = { onClick.invoke(it.id) },
54+
)
55+
}
4156

42-
is HttpRequestState.Spoofed -> {
43-
SpoofedItem(
44-
modifier = Modifier.fillMaxWidth(),
45-
item = SpoofedItemDisplay.from(it),
46-
onClick = { onClick.invoke(it.id) },
47-
)
48-
}
57+
is HttpRequestState.Spoofed -> {
58+
SpoofedItem(
59+
modifier = Modifier.fillMaxWidth(),
60+
item = SpoofedItemDisplay.from(it),
61+
onClick = { onClick.invoke(it.id) },
62+
)
63+
}
4964

50-
is HttpRequestState.Success -> {
51-
SuccessItem(
52-
modifier = Modifier.fillMaxWidth(),
53-
item = SuccessItemDisplay.from(it),
54-
onClick = { onClick.invoke(it.id) },
55-
)
65+
is HttpRequestState.Success -> {
66+
SuccessItem(
67+
modifier = Modifier.fillMaxWidth(),
68+
item = SuccessItemDisplay.from(it),
69+
onClick = { onClick.invoke(it.id) },
70+
)
71+
}
72+
}
5673
}
5774
}
5875
}

Library/lib/src/commonMain/kotlin/ui/pane/RequestPane.kt

Lines changed: 104 additions & 93 deletions
Original file line numberDiff line numberDiff line change
@@ -3,8 +3,7 @@ package ui.pane
33
import androidx.compose.foundation.layout.*
44
import androidx.compose.foundation.rememberScrollState
55
import androidx.compose.foundation.verticalScroll
6-
import androidx.compose.material3.MaterialTheme
7-
import androidx.compose.material3.Text
6+
import androidx.compose.material3.*
87
import androidx.compose.runtime.Composable
98
import androidx.compose.runtime.getValue
109
import androidx.compose.runtime.rememberUpdatedState
@@ -15,6 +14,7 @@ import data.HttpRequestState
1514
import data.SnifferDB
1615
import ui.component.*
1716

17+
@OptIn(ExperimentalMaterial3Api::class)
1818
@Composable
1919
fun RequestPane(
2020
modifier: Modifier = Modifier,
@@ -24,106 +24,117 @@ fun RequestPane(
2424
val transaction by rememberUpdatedState(record.firstOrNull { it.id == id } as? HttpRequestState ?: return)
2525
val scrollState = rememberScrollState()
2626

27-
Column(
28-
modifier = modifier
29-
.verticalScroll(scrollState)
30-
.padding(horizontal = 16.dp),
31-
) {
32-
when (val tr = transaction) {
33-
is HttpRequestState.Error -> {
34-
ErrorItem(
35-
modifier = Modifier.fillMaxWidth(),
36-
contentPadding = PaddingValues(vertical = 16.dp),
37-
item = ErrorItemDisplay.from(tr)
38-
) {
27+
Scaffold(
28+
topBar = {
29+
Box(
30+
modifier = Modifier.statusBarsPadding()
31+
) {
32+
when (val tr = transaction) {
33+
is HttpRequestState.Error -> {
34+
ErrorItem(
35+
modifier = Modifier.fillMaxWidth(),
36+
item = ErrorItemDisplay.from(tr)
37+
) {
3938

40-
}
41-
}
39+
}
40+
}
4241

43-
is HttpRequestState.Executing -> {
44-
ExecutingItem(
45-
modifier = Modifier.fillMaxWidth(),
46-
contentPadding = PaddingValues(vertical = 16.dp),
47-
item = ExecutingItemDisplay.from(tr)
48-
) {
42+
is HttpRequestState.Executing -> {
43+
ExecutingItem(
44+
modifier = Modifier.fillMaxWidth(),
45+
item = ExecutingItemDisplay.from(tr)
46+
) {
4947

50-
}
51-
}
48+
}
49+
}
5250

53-
is HttpRequestState.Spoofed -> {
54-
SpoofedItem(
55-
modifier = Modifier.fillMaxWidth(),
56-
contentPadding = PaddingValues(vertical = 16.dp),
57-
item = SpoofedItemDisplay.from(tr)
58-
) {
51+
is HttpRequestState.Spoofed -> {
52+
SpoofedItem(
53+
modifier = Modifier.fillMaxWidth(),
54+
item = SpoofedItemDisplay.from(tr)
55+
) {
5956

60-
}
61-
}
57+
}
58+
}
6259

63-
is HttpRequestState.Success -> {
64-
SuccessItem(
65-
modifier = Modifier.fillMaxWidth(),
66-
contentPadding = PaddingValues(vertical = 16.dp),
67-
item = SuccessItemDisplay.from(tr)
68-
) {
60+
is HttpRequestState.Success -> {
61+
SuccessItem(
62+
modifier = Modifier.fillMaxWidth(),
63+
item = SuccessItemDisplay.from(tr)
64+
) {
6965

66+
}
67+
}
7068
}
7169
}
7270
}
73-
Spacer(modifier = Modifier.height(8.dp))
74-
Text(
75-
text = "Request",
76-
style = MaterialTheme.typography.titleLarge
77-
)
78-
Spacer(modifier = Modifier.height(16.dp))
79-
Text(
80-
text = "Header",
81-
style = MaterialTheme.typography.titleMedium
82-
)
83-
Spacer(modifier = Modifier.height(4.dp))
84-
Text(
85-
modifier = Modifier.padding(horizontal = 16.dp),
86-
text = transaction.requestHeader.orEmpty(),
87-
style = MaterialTheme.typography.bodySmall
88-
)
89-
Spacer(modifier = Modifier.height(16.dp))
90-
Text(
91-
text = "Content",
92-
style = MaterialTheme.typography.titleMedium,
93-
)
94-
Spacer(modifier = Modifier.height(4.dp))
95-
Text(
96-
modifier = Modifier.padding(horizontal = 16.dp),
97-
text = transaction.requestBody.orEmpty(),
98-
style = MaterialTheme.typography.bodySmall
99-
)
100-
Spacer(modifier = Modifier.height(24.dp))
101-
Text(
102-
text = "Response",
103-
style = MaterialTheme.typography.titleLarge
104-
)
105-
Spacer(modifier = Modifier.height(16.dp))
106-
Text(
107-
text = "Header",
108-
style = MaterialTheme.typography.titleMedium
109-
)
110-
Spacer(modifier = Modifier.height(4.dp))
111-
Text(
112-
modifier = Modifier.padding(horizontal = 16.dp),
113-
text = transaction.responseHeader.orEmpty(),
114-
style = MaterialTheme.typography.bodySmall
115-
)
116-
Spacer(modifier = Modifier.height(16.dp))
117-
Text(
118-
text = "Content",
119-
style = MaterialTheme.typography.titleMedium
120-
)
121-
Spacer(modifier = Modifier.height(4.dp))
122-
Text(
123-
modifier = Modifier.padding(horizontal = 16.dp),
124-
text = transaction.responseBody.orEmpty(),
125-
style = MaterialTheme.typography.bodySmall
126-
)
127-
Spacer(modifier = Modifier.height(4.dp))
71+
) {
72+
Surface(
73+
modifier = Modifier
74+
.fillMaxSize()
75+
.padding(it)
76+
) {
77+
Column(
78+
modifier = Modifier
79+
.verticalScroll(scrollState)
80+
.padding(horizontal = 16.dp),
81+
) {
82+
Spacer(modifier = Modifier.height(8.dp))
83+
Text(
84+
text = "Request",
85+
style = MaterialTheme.typography.titleLarge
86+
)
87+
Spacer(modifier = Modifier.height(16.dp))
88+
Text(
89+
text = "Header",
90+
style = MaterialTheme.typography.titleMedium
91+
)
92+
Spacer(modifier = Modifier.height(4.dp))
93+
Text(
94+
modifier = Modifier.padding(horizontal = 16.dp),
95+
text = transaction.requestHeader.orEmpty(),
96+
style = MaterialTheme.typography.bodySmall
97+
)
98+
Spacer(modifier = Modifier.height(16.dp))
99+
Text(
100+
text = "Content",
101+
style = MaterialTheme.typography.titleMedium,
102+
)
103+
Spacer(modifier = Modifier.height(4.dp))
104+
Text(
105+
modifier = Modifier.padding(horizontal = 16.dp),
106+
text = transaction.requestBody.orEmpty(),
107+
style = MaterialTheme.typography.bodySmall
108+
)
109+
Spacer(modifier = Modifier.height(24.dp))
110+
Text(
111+
text = "Response",
112+
style = MaterialTheme.typography.titleLarge
113+
)
114+
Spacer(modifier = Modifier.height(16.dp))
115+
Text(
116+
text = "Header",
117+
style = MaterialTheme.typography.titleMedium
118+
)
119+
Spacer(modifier = Modifier.height(4.dp))
120+
Text(
121+
modifier = Modifier.padding(horizontal = 16.dp),
122+
text = transaction.responseHeader.orEmpty(),
123+
style = MaterialTheme.typography.bodySmall
124+
)
125+
Spacer(modifier = Modifier.height(16.dp))
126+
Text(
127+
text = "Content",
128+
style = MaterialTheme.typography.titleMedium
129+
)
130+
Spacer(modifier = Modifier.height(4.dp))
131+
Text(
132+
modifier = Modifier.padding(horizontal = 16.dp),
133+
text = transaction.responseBody.orEmpty(),
134+
style = MaterialTheme.typography.bodySmall
135+
)
136+
Spacer(modifier = Modifier.height(4.dp))
137+
}
138+
}
128139
}
129140
}

0 commit comments

Comments
 (0)