Skip to content

Commit c844e53

Browse files
authoredJul 1, 2024
[Reply] Replaced deprecated codes and optimised performance (#1423)
Replaced deprecated DockedSearchBar and removed unused codes from Reply to improve performance.
2 parents 38a755c + 6c669ca commit c844e53

File tree

6 files changed

+90
-91
lines changed

6 files changed

+90
-91
lines changed
 

‎Reply/app/src/main/java/com/example/reply/ui/ReplyListContent.kt

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,6 @@ import androidx.compose.foundation.lazy.items
3535
import androidx.compose.foundation.lazy.rememberLazyListState
3636
import androidx.compose.material.icons.Icons
3737
import androidx.compose.material.icons.filled.Edit
38-
import androidx.compose.material3.ExperimentalMaterial3Api
3938
import androidx.compose.material3.Icon
4039
import androidx.compose.material3.LargeFloatingActionButton
4140
import androidx.compose.material3.MaterialTheme
@@ -57,7 +56,6 @@ import com.example.reply.ui.utils.ReplyNavigationType
5756
import com.google.accompanist.adaptive.HorizontalTwoPaneStrategy
5857
import com.google.accompanist.adaptive.TwoPane
5958

60-
@OptIn(ExperimentalMaterial3Api::class)
6159
@Composable
6260
fun ReplyInboxScreen(
6361
contentType: ReplyContentType,

‎Reply/app/src/main/java/com/example/reply/ui/components/ReplyAppBars.kt

Lines changed: 86 additions & 77 deletions
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,6 @@ import androidx.compose.foundation.lazy.LazyColumn
2727
import androidx.compose.foundation.lazy.items
2828
import androidx.compose.material.icons.Icons
2929
import androidx.compose.material.icons.automirrored.filled.ArrowBack
30-
import androidx.compose.material.icons.filled.ArrowBack
3130
import androidx.compose.material.icons.filled.MoreVert
3231
import androidx.compose.material.icons.filled.Search
3332
import androidx.compose.material3.DockedSearchBar
@@ -38,6 +37,7 @@ import androidx.compose.material3.IconButton
3837
import androidx.compose.material3.IconButtonDefaults
3938
import androidx.compose.material3.ListItem
4039
import androidx.compose.material3.MaterialTheme
40+
import androidx.compose.material3.SearchBarDefaults
4141
import androidx.compose.material3.Text
4242
import androidx.compose.material3.TopAppBar
4343
import androidx.compose.material3.TopAppBarDefaults
@@ -63,8 +63,11 @@ fun ReplyDockedSearchBar(
6363
modifier: Modifier = Modifier
6464
) {
6565
var query by remember { mutableStateOf("") }
66-
var active by remember { mutableStateOf(false) }
66+
var expanded by remember { mutableStateOf(false) }
6767
val searchResults = remember { mutableStateListOf<Email>() }
68+
val onExpandedChange: (Boolean) -> Unit = {
69+
expanded = it
70+
}
6871

6972
LaunchedEffect(query) {
7073
searchResults.clear()
@@ -85,84 +88,90 @@ fun ReplyDockedSearchBar(
8588
}
8689

8790
DockedSearchBar(
88-
modifier = modifier,
89-
query = query,
90-
onQueryChange = {
91-
query = it
92-
},
93-
onSearch = { active = false },
94-
active = active,
95-
onActiveChange = {
96-
active = it
97-
},
98-
placeholder = { Text(text = stringResource(id = R.string.search_emails)) },
99-
leadingIcon = {
100-
if (active) {
101-
Icon(
102-
imageVector = Icons.AutoMirrored.Filled.ArrowBack,
103-
contentDescription = stringResource(id = R.string.back_button),
104-
modifier = Modifier
105-
.padding(start = 16.dp)
106-
.clickable {
107-
active = false
108-
query = ""
109-
},
110-
)
111-
} else {
112-
Icon(
113-
imageVector = Icons.Default.Search,
114-
contentDescription = stringResource(id = R.string.search),
115-
modifier = Modifier.padding(start = 16.dp),
116-
)
117-
}
118-
},
119-
trailingIcon = {
120-
ReplyProfileImage(
121-
drawableResource = R.drawable.avatar_6,
122-
description = stringResource(id = R.string.profile),
123-
modifier = Modifier
124-
.padding(12.dp)
125-
.size(32.dp)
126-
)
127-
},
128-
) {
129-
if (searchResults.isNotEmpty()) {
130-
LazyColumn(
91+
inputField = {
92+
SearchBarDefaults.InputField(
93+
query = query,
94+
onQueryChange = {
95+
query = it
96+
},
97+
onSearch = { expanded = false },
98+
expanded = expanded,
99+
onExpandedChange = onExpandedChange,
131100
modifier = Modifier.fillMaxWidth(),
132-
contentPadding = PaddingValues(16.dp),
133-
verticalArrangement = Arrangement.spacedBy(4.dp)
134-
) {
135-
items(items = searchResults, key = { it.id }) { email ->
136-
ListItem(
137-
headlineContent = { Text(email.subject) },
138-
supportingContent = { Text(email.sender.fullName) },
139-
leadingContent = {
140-
ReplyProfileImage(
141-
drawableResource = email.sender.avatar,
142-
description = stringResource(id = R.string.profile),
143-
modifier = Modifier
144-
.size(32.dp)
145-
)
146-
},
147-
modifier = Modifier.clickable {
148-
onSearchItemSelected.invoke(email)
149-
query = ""
150-
active = false
151-
}
101+
placeholder = { Text(text = stringResource(id = R.string.search_emails)) },
102+
leadingIcon = {
103+
if (expanded) {
104+
Icon(
105+
imageVector = Icons.AutoMirrored.Filled.ArrowBack,
106+
contentDescription = stringResource(id = R.string.back_button),
107+
modifier = Modifier
108+
.padding(start = 16.dp)
109+
.clickable {
110+
expanded = false
111+
query = ""
112+
},
113+
)
114+
} else {
115+
Icon(
116+
imageVector = Icons.Default.Search,
117+
contentDescription = stringResource(id = R.string.search),
118+
modifier = Modifier.padding(start = 16.dp),
119+
)
120+
}
121+
},
122+
trailingIcon = {
123+
ReplyProfileImage(
124+
drawableResource = R.drawable.avatar_6,
125+
description = stringResource(id = R.string.profile),
126+
modifier = Modifier
127+
.padding(12.dp)
128+
.size(32.dp)
152129
)
153-
}
154-
}
155-
} else if (query.isNotEmpty()) {
156-
Text(
157-
text = stringResource(id = R.string.no_item_found),
158-
modifier = Modifier.padding(16.dp)
159-
)
160-
} else
161-
Text(
162-
text = stringResource(id = R.string.no_search_history),
163-
modifier = Modifier.padding(16.dp)
130+
},
164131
)
165-
}
132+
},
133+
expanded = expanded,
134+
onExpandedChange = onExpandedChange,
135+
modifier = modifier,
136+
content = {
137+
if (searchResults.isNotEmpty()) {
138+
LazyColumn(
139+
modifier = Modifier.fillMaxWidth(),
140+
contentPadding = PaddingValues(16.dp),
141+
verticalArrangement = Arrangement.spacedBy(4.dp)
142+
) {
143+
items(items = searchResults, key = { it.id }) { email ->
144+
ListItem(
145+
headlineContent = { Text(email.subject) },
146+
supportingContent = { Text(email.sender.fullName) },
147+
leadingContent = {
148+
ReplyProfileImage(
149+
drawableResource = email.sender.avatar,
150+
description = stringResource(id = R.string.profile),
151+
modifier = Modifier
152+
.size(32.dp)
153+
)
154+
},
155+
modifier = Modifier.clickable {
156+
onSearchItemSelected.invoke(email)
157+
query = ""
158+
expanded = false
159+
}
160+
)
161+
}
162+
}
163+
} else if (query.isNotEmpty()) {
164+
Text(
165+
text = stringResource(id = R.string.no_item_found),
166+
modifier = Modifier.padding(16.dp)
167+
)
168+
} else
169+
Text(
170+
text = stringResource(id = R.string.no_search_history),
171+
modifier = Modifier.padding(16.dp)
172+
)
173+
}
174+
)
166175
}
167176

168177
@OptIn(ExperimentalMaterial3Api::class)

‎Reply/app/src/main/java/com/example/reply/ui/components/ReplyEmailListItem.kt

Lines changed: 1 addition & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,6 @@
1717
package com.example.reply.ui.components
1818

1919
import androidx.compose.animation.AnimatedContent
20-
import androidx.compose.animation.ExperimentalAnimationApi
2120
import androidx.compose.foundation.ExperimentalFoundationApi
2221
import androidx.compose.foundation.background
2322
import androidx.compose.foundation.clickable
@@ -51,10 +50,7 @@ import androidx.compose.ui.text.style.TextOverflow
5150
import androidx.compose.ui.unit.dp
5251
import com.example.reply.data.Email
5352

54-
@OptIn(
55-
ExperimentalFoundationApi::class,
56-
ExperimentalAnimationApi::class
57-
)
53+
@OptIn(ExperimentalFoundationApi::class)
5854
@Composable
5955
fun ReplyEmailListItem(
6056
email: Email,

‎Reply/app/src/main/java/com/example/reply/ui/components/ReplyEmailThreadItem.kt

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,6 @@ import androidx.compose.material3.Button
2929
import androidx.compose.material3.ButtonDefaults
3030
import androidx.compose.material3.Card
3131
import androidx.compose.material3.CardDefaults
32-
import androidx.compose.material3.ExperimentalMaterial3Api
3332
import androidx.compose.material3.Icon
3433
import androidx.compose.material3.IconButton
3534
import androidx.compose.material3.MaterialTheme
@@ -42,7 +41,6 @@ import androidx.compose.ui.unit.dp
4241
import com.example.reply.R
4342
import com.example.reply.data.Email
4443

45-
@OptIn(ExperimentalMaterial3Api::class)
4644
@Composable
4745
fun ReplyEmailThreadItem(
4846
email: Email,

‎Reply/app/src/main/java/com/example/reply/ui/navigation/ReplyNavigationActions.kt

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@
1717
package com.example.reply.ui.navigation
1818

1919
import androidx.compose.material.icons.Icons
20-
import androidx.compose.material.icons.filled.Article
20+
import androidx.compose.material.icons.automirrored.filled.Article
2121
import androidx.compose.material.icons.filled.Inbox
2222
import androidx.compose.material.icons.filled.People
2323
import androidx.compose.material.icons.outlined.ChatBubbleOutline
@@ -68,8 +68,8 @@ val TOP_LEVEL_DESTINATIONS = listOf(
6868
),
6969
ReplyTopLevelDestination(
7070
route = ReplyRoute.ARTICLES,
71-
selectedIcon = Icons.Default.Article,
72-
unselectedIcon = Icons.Default.Article,
71+
selectedIcon = Icons.AutoMirrored.Filled.Article,
72+
unselectedIcon = Icons.AutoMirrored.Filled.Article,
7373
iconTextId = R.string.tab_article
7474
),
7575
ReplyTopLevelDestination(

‎Reply/app/src/main/java/com/example/reply/ui/navigation/ReplyNavigationComponents.kt

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,6 @@ import androidx.compose.material.icons.automirrored.filled.MenuOpen
3535
import androidx.compose.material.icons.filled.Edit
3636
import androidx.compose.material.icons.filled.Menu
3737
import androidx.compose.material3.DrawerValue
38-
import androidx.compose.material3.ExperimentalMaterial3Api
3938
import androidx.compose.material3.ExtendedFloatingActionButton
4039
import androidx.compose.material3.FloatingActionButton
4140
import androidx.compose.material3.Icon
@@ -342,7 +341,6 @@ fun PermanentNavigationDrawerContent(
342341
}
343342
}
344343

345-
@OptIn(ExperimentalMaterial3Api::class)
346344
@Composable
347345
fun ModalNavigationDrawerContent(
348346
selectedDestination: String,

0 commit comments

Comments
 (0)