Skip to content

Commit a96d6fd

Browse files
authored
CMM-919 new support visual glitches (#22330)
* Fixing loading indicators * links contrast * Removing usleess-check * Variable name clarification
1 parent 7aa0b18 commit a96d6fd

File tree

3 files changed

+60
-28
lines changed

3 files changed

+60
-28
lines changed

WordPress/src/main/java/org/wordpress/android/support/common/ui/ConversationsListScreen.kt

Lines changed: 55 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,13 @@
11
package org.wordpress.android.support.common.ui
22

3+
import androidx.compose.foundation.layout.Box
34
import androidx.compose.foundation.layout.fillMaxSize
45
import androidx.compose.foundation.layout.padding
56
import androidx.compose.foundation.lazy.LazyColumn
67
import androidx.compose.foundation.lazy.items
78
import androidx.compose.material.icons.Icons
89
import androidx.compose.material.icons.filled.Add
10+
import androidx.compose.material3.CircularProgressIndicator
911
import androidx.compose.material3.ExperimentalMaterial3Api
1012
import androidx.compose.material3.HorizontalDivider
1113
import androidx.compose.material3.Icon
@@ -15,7 +17,10 @@ import androidx.compose.material3.Scaffold
1517
import androidx.compose.material3.SnackbarHost
1618
import androidx.compose.material3.SnackbarHostState
1719
import androidx.compose.material3.pulltorefresh.PullToRefreshBox
20+
import androidx.compose.material3.pulltorefresh.PullToRefreshDefaults
21+
import androidx.compose.material3.pulltorefresh.rememberPullToRefreshState
1822
import androidx.compose.runtime.Composable
23+
import androidx.compose.ui.Alignment
1924
import androidx.compose.ui.Modifier
2025
import org.wordpress.android.support.common.model.Conversation
2126
import org.wordpress.android.ui.compose.components.MainTopAppBar
@@ -53,13 +58,26 @@ fun <T : Conversation> ConversationsListScreen(
5358
)
5459
}
5560
) { contentPadding ->
61+
val isRefreshing = conversationsState is ConversationsSupportViewModel.ConversationsState.Refreshing
62+
val pullToRefreshState = rememberPullToRefreshState()
63+
5664
PullToRefreshBox(
57-
isRefreshing = conversationsState is ConversationsSupportViewModel.ConversationsState.Loading,
65+
state = pullToRefreshState,
66+
isRefreshing = isRefreshing,
5867
onRefresh = onRefresh,
59-
modifier = modifier.fillMaxSize()
68+
modifier = modifier
69+
.fillMaxSize()
70+
.padding(contentPadding),
71+
indicator = {
72+
PullToRefreshDefaults.Indicator(
73+
state = pullToRefreshState,
74+
isRefreshing = isRefreshing,
75+
modifier = Modifier.align(Alignment.TopCenter)
76+
)
77+
}
6078
) {
6179
ConversationsList(
62-
modifier = Modifier.padding(contentPadding),
80+
modifier = Modifier,
6381
conversations = conversations,
6482
conversationsState = conversationsState,
6583
onCreateNewConversationClick = onCreateNewConversationClick,
@@ -78,27 +96,40 @@ private fun <T : Conversation> ConversationsList(
7896
onCreateNewConversationClick: () -> Unit,
7997
conversationListItem: @Composable (T) -> Unit
8098
) {
81-
if (conversations.isEmpty() && conversationsState is ConversationsSupportViewModel.ConversationsState.Loaded) {
82-
EmptyConversationsView(
83-
modifier = modifier,
84-
onCreateNewConversationClick = onCreateNewConversationClick
85-
)
86-
} else if (conversationsState is ConversationsSupportViewModel.ConversationsState.NoNetwork) {
87-
OfflineConversationsView()
88-
} else if (conversationsState is ConversationsSupportViewModel.ConversationsState.Error) {
89-
ErrorConversationsView()
90-
} else {
91-
LazyColumn(
92-
modifier = modifier.fillMaxSize()
93-
) {
94-
items(
95-
items = conversations,
96-
key = { it.getConversationId() }
97-
) { conversation ->
98-
conversationListItem(conversation)
99-
HorizontalDivider(
100-
color = MaterialTheme.colorScheme.outlineVariant.copy(alpha = 0.5f)
101-
)
99+
when {
100+
conversationsState is ConversationsSupportViewModel.ConversationsState.Loading -> {
101+
Box(
102+
modifier = modifier.fillMaxSize(),
103+
contentAlignment = Alignment.Center
104+
) {
105+
CircularProgressIndicator()
106+
}
107+
}
108+
conversations.isEmpty() && conversationsState is ConversationsSupportViewModel.ConversationsState.Loaded -> {
109+
EmptyConversationsView(
110+
modifier = modifier,
111+
onCreateNewConversationClick = onCreateNewConversationClick
112+
)
113+
}
114+
conversationsState is ConversationsSupportViewModel.ConversationsState.NoNetwork -> {
115+
OfflineConversationsView()
116+
}
117+
conversationsState is ConversationsSupportViewModel.ConversationsState.Error -> {
118+
ErrorConversationsView()
119+
}
120+
else -> {
121+
LazyColumn(
122+
modifier = modifier.fillMaxSize()
123+
) {
124+
items(
125+
items = conversations,
126+
key = { it.getConversationId() }
127+
) { conversation ->
128+
conversationListItem(conversation)
129+
HorizontalDivider(
130+
color = MaterialTheme.colorScheme.outlineVariant.copy(alpha = 0.5f)
131+
)
132+
}
102133
}
103134
}
104135
}

WordPress/src/main/java/org/wordpress/android/support/common/ui/ConversationsSupportViewModel.kt

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,7 @@ abstract class ConversationsSupportViewModel<ConversationType: Conversation>(
2929

3030
sealed class ConversationsState {
3131
data object Loading : ConversationsState()
32+
data object Refreshing : ConversationsState()
3233
data object Loaded : ConversationsState()
3334
data object NoNetwork : ConversationsState()
3435
data object Error : ConversationsState()
@@ -95,14 +96,14 @@ abstract class ConversationsSupportViewModel<ConversationType: Conversation>(
9596
}
9697

9798
@Suppress("TooGenericExceptionCaught")
98-
private suspend fun loadConversations() {
99+
private suspend fun loadConversations(isRefresh: Boolean = false) {
99100
try {
100101
if (!networkUtilsWrapper.isNetworkAvailable()) {
101102
_conversationsState.value = ConversationsState.NoNetwork
102103
return
103104
}
104105

105-
_conversationsState.value = ConversationsState.Loading
106+
_conversationsState.value = if (isRefresh) ConversationsState.Refreshing else ConversationsState.Loading
106107
val conversations = getConversations()
107108
_conversations.value = conversations
108109
_conversationsState.value = ConversationsState.Loaded
@@ -120,7 +121,7 @@ abstract class ConversationsSupportViewModel<ConversationType: Conversation>(
120121

121122
fun refreshConversations() {
122123
viewModelScope.launch {
123-
loadConversations()
124+
loadConversations(isRefresh = true)
124125
}
125126
}
126127

WordPress/src/main/java/org/wordpress/android/ui/compose/utils/MarkdownUtils.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -95,9 +95,9 @@ private fun AnnotatedString.Builder.processNode(node: Node) {
9595
withLink(LinkAnnotation.Url(child.destination)) {
9696
val start = length
9797
processNode(child)
98+
// Inherit text color from theme; only add underline for discoverability
9899
addStyle(
99100
SpanStyle(
100-
color = Color.Blue,
101101
textDecoration = TextDecoration.Underline
102102
),
103103
start,

0 commit comments

Comments
 (0)