Skip to content

Commit 3e94416

Browse files
authored
Merge pull request #10 from oreocube/feature/preview-placeholder
feat: AsyncImagePreviewHandler 적용
2 parents c5f304d + 9b61f18 commit 3e94416

File tree

5 files changed

+93
-63
lines changed

5 files changed

+93
-63
lines changed

app/src/main/java/com/oreocube/booksearch/MainActivity.kt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ import androidx.activity.viewModels
1010
import androidx.compose.runtime.mutableStateOf
1111
import androidx.core.splashscreen.SplashScreen.Companion.installSplashScreen
1212
import androidx.navigation.compose.rememberNavController
13-
import com.oreocube.booksearch.core.ui.theme.BooksearchTheme
13+
import com.oreocube.booksearch.core.ui.theme.LiBookTheme
1414
import dagger.hilt.android.AndroidEntryPoint
1515

1616
@AndroidEntryPoint
@@ -30,7 +30,7 @@ class MainActivity : ComponentActivity() {
3030
viewModel.anonymousLogin()
3131
_deepLinkState.value = intent?.getStringExtra(DEEP_LINK_KEY)
3232
setContent {
33-
BooksearchTheme {
33+
LiBookTheme {
3434
val navController = rememberNavController()
3535
val appState = rememberBookSearchAppState(navController = navController)
3636

app/src/main/java/com/oreocube/booksearch/navigation/BookSearchNavigation.kt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@ import androidx.compose.ui.res.painterResource
1818
import androidx.compose.ui.res.stringResource
1919
import androidx.compose.ui.tooling.preview.Preview
2020
import androidx.compose.ui.unit.IntOffset
21-
import com.oreocube.booksearch.core.ui.theme.BooksearchTheme
21+
import com.oreocube.booksearch.core.ui.theme.LiBookTheme
2222
import com.oreocube.booksearch.core.ui.theme.Brown20
2323

2424
@Composable
@@ -84,7 +84,7 @@ object BookSearchNavigationDefaults {
8484
private fun BookSearchNavigationItemPreview() {
8585
val topLevelDestination = TopLevelDestination.entries
8686

87-
BooksearchTheme {
87+
LiBookTheme {
8888
Row {
8989
topLevelDestination.forEach { destination ->
9090
BookSearchNavigationItem(

core/ui/src/main/java/com/oreocube/booksearch/core/ui/theme/Theme.kt

Lines changed: 25 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,14 @@ import androidx.compose.material3.dynamicDarkColorScheme
88
import androidx.compose.material3.dynamicLightColorScheme
99
import androidx.compose.material3.lightColorScheme
1010
import androidx.compose.runtime.Composable
11+
import androidx.compose.runtime.CompositionLocalProvider
12+
import androidx.compose.ui.graphics.Color
13+
import androidx.compose.ui.graphics.toArgb
1114
import androidx.compose.ui.platform.LocalContext
15+
import coil3.ColorImage
16+
import coil3.annotation.ExperimentalCoilApi
17+
import coil3.compose.AsyncImagePreviewHandler
18+
import coil3.compose.LocalAsyncImagePreviewHandler
1219

1320
private val DarkColorScheme = darkColorScheme(
1421
primary = Purple80,
@@ -33,7 +40,7 @@ private val LightColorScheme = lightColorScheme(
3340
)
3441

3542
@Composable
36-
fun BooksearchTheme(
43+
fun LiBookTheme(
3744
darkTheme: Boolean = isSystemInDarkTheme(),
3845
// Dynamic color is available on Android 12+
3946
dynamicColor: Boolean = true,
@@ -55,3 +62,20 @@ fun BooksearchTheme(
5562
content = content
5663
)
5764
}
65+
66+
@OptIn(ExperimentalCoilApi::class)
67+
@Composable
68+
fun LiBookPreviewTheme(
69+
content: @Composable () -> Unit
70+
) {
71+
val previewHandler = AsyncImagePreviewHandler {
72+
ColorImage(Color.Gray.toArgb(), 200, 200)
73+
}
74+
CompositionLocalProvider(
75+
LocalAsyncImagePreviewHandler provides previewHandler
76+
) {
77+
LiBookTheme {
78+
content()
79+
}
80+
}
81+
}

feature/book/src/main/java/com/oreocube/booksearch/feature/book/detail/BookDetailScreen.kt

Lines changed: 47 additions & 44 deletions
Original file line numberDiff line numberDiff line change
@@ -61,6 +61,7 @@ import androidx.lifecycle.repeatOnLifecycle
6161
import coil3.compose.AsyncImage
6262
import com.oreocube.booksearch.core.ui.R
6363
import com.oreocube.booksearch.core.ui.component.LiBookTopBar
64+
import com.oreocube.booksearch.core.ui.theme.LiBookPreviewTheme
6465
import com.oreocube.booksearch.core.ui.theme.Brown20
6566
import com.oreocube.booksearch.core.ui.theme.Gray10
6667
import com.oreocube.booksearch.core.ui.theme.Gray20
@@ -504,55 +505,57 @@ private fun LibraryStatusForBookPreview2() {
504505
@Composable
505506
@Preview(showBackground = true)
506507
private fun BookDetailScreenPreview() {
507-
BookDetailScreen(
508-
uiState = BookDetailUiState(
509-
isLoading = false,
510-
book = BookDetail(
511-
title = "실용주의 프로그래머 :20주년 기념판 ",
512-
authors = "데이비드 토머스,정지용 옮김",
513-
publisher = "인사이트",
514-
publicationYear = "2022",
515-
isbn13 = "9788966263363",
516-
imageUrl = "https://image.aladin.co.kr/product/28878/64/cover/8966263364_1.jpg",
517-
description = "실용주의 프로그래머 20주년 기념판. 데이비드 토마스와 앤드류 헌트는 소프트웨어 산업에 큰 영향을 미친 이 책의 1판을 1999년에 썼다. 고객들이 더 나은 소프트웨어를 만들고 코딩의 기쁨을 재발견하도록 돕기 위해서였다."
518-
),
519-
status = listOf(
520-
LibraryBookStatusUiState(
521-
library = LibraryShort("1", "도서관1"),
522-
status = BookStatusUiState.ON_LOAN,
523-
isNotificationRegistered = true,
524-
),
525-
LibraryBookStatusUiState(
526-
library = LibraryShort("2", "도서관2"),
527-
status = BookStatusUiState.NOT_AVAILABLE,
528-
isNotificationRegistered = false,
529-
),
530-
LibraryBookStatusUiState(
531-
library = LibraryShort("3", "도서관3"),
532-
status = BookStatusUiState.AVAILABLE,
533-
isNotificationRegistered = false,
534-
),
535-
LibraryBookStatusUiState(
536-
library = LibraryShort("4", "도서관4"),
537-
status = BookStatusUiState.ERROR,
538-
isNotificationRegistered = false,
539-
),
540-
),
541-
recommendBooks = listOf(
542-
RecommendedBookUiState(
508+
LiBookPreviewTheme {
509+
BookDetailScreen(
510+
uiState = BookDetailUiState(
511+
isLoading = false,
512+
book = BookDetail(
543513
title = "실용주의 프로그래머 :20주년 기념판 ",
544514
authors = "데이비드 토머스,정지용 옮김",
545515
publisher = "인사이트",
546516
publicationYear = "2022",
547-
isbn13 = "978",
517+
isbn13 = "9788966263363",
548518
imageUrl = "https://image.aladin.co.kr/product/28878/64/cover/8966263364_1.jpg",
519+
description = "실용주의 프로그래머 20주년 기념판. 데이비드 토마스와 앤드류 헌트는 소프트웨어 산업에 큰 영향을 미친 이 책의 1판을 1999년에 썼다. 고객들이 더 나은 소프트웨어를 만들고 코딩의 기쁨을 재발견하도록 돕기 위해서였다."
520+
),
521+
status = listOf(
522+
LibraryBookStatusUiState(
523+
library = LibraryShort("1", "도서관1"),
524+
status = BookStatusUiState.ON_LOAN,
525+
isNotificationRegistered = true,
526+
),
527+
LibraryBookStatusUiState(
528+
library = LibraryShort("2", "도서관2"),
529+
status = BookStatusUiState.NOT_AVAILABLE,
530+
isNotificationRegistered = false,
531+
),
532+
LibraryBookStatusUiState(
533+
library = LibraryShort("3", "도서관3"),
534+
status = BookStatusUiState.AVAILABLE,
535+
isNotificationRegistered = false,
536+
),
537+
LibraryBookStatusUiState(
538+
library = LibraryShort("4", "도서관4"),
539+
status = BookStatusUiState.ERROR,
540+
isNotificationRegistered = false,
541+
),
542+
),
543+
recommendBooks = listOf(
544+
RecommendedBookUiState(
545+
title = "실용주의 프로그래머 :20주년 기념판 ",
546+
authors = "데이비드 토머스,정지용 옮김",
547+
publisher = "인사이트",
548+
publicationYear = "2022",
549+
isbn13 = "978",
550+
imageUrl = "https://image.aladin.co.kr/product/28878/64/cover/8966263364_1.jpg",
551+
),
549552
),
550553
),
551-
),
552-
onBackClick = {},
553-
onRetryClick = {},
554-
onAlarmClick = { _, _ -> },
555-
onAddLibraryClick = {},
556-
onBookItemClick = {},
557-
)
554+
onBackClick = {},
555+
onRetryClick = {},
556+
onAlarmClick = { _, _ -> },
557+
onAddLibraryClick = {},
558+
onBookItemClick = {},
559+
)
560+
}
558561
}

feature/home/src/main/java/com/oreocube/booksearch/feature/home/TrendingBookSection.kt

Lines changed: 17 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -43,6 +43,7 @@ import coil3.compose.AsyncImage
4343
import com.oreocube.booksearch.core.ui.component.icon.LiBookIcons
4444
import com.oreocube.booksearch.core.ui.component.icon.TrendingUp
4545
import com.oreocube.booksearch.core.ui.theme.Gray80
46+
import com.oreocube.booksearch.core.ui.theme.LiBookPreviewTheme
4647
import com.oreocube.booksearch.domain.model.TrendingBook
4748

4849
@Composable
@@ -329,18 +330,20 @@ private fun TrendingBookSkeletonPreview() {
329330
@Composable
330331
@Preview(showBackground = true)
331332
private fun TrendingBooksSectionPreview() {
332-
TrendingBooksSection(
333-
books = listOf(
334-
TrendingBook(
335-
1, difference = 12,
336-
title = "실용주의 프로그래머 :20주년 기념판 ",
337-
authors = "데이비드 토머스,정지용 옮김",
338-
publisher = "인사이트",
339-
publicationYear = "2022",
340-
isbn13 = "9788966263363",
341-
imageUrl = "",
342-
)
343-
),
344-
onBookItemClick = {},
345-
)
333+
LiBookPreviewTheme {
334+
TrendingBooksSection(
335+
books = listOf(
336+
TrendingBook(
337+
1, difference = 12,
338+
title = "실용주의 프로그래머 :20주년 기념판 ",
339+
authors = "데이비드 토머스,정지용 옮김",
340+
publisher = "인사이트",
341+
publicationYear = "2022",
342+
isbn13 = "9788966263363",
343+
imageUrl = "",
344+
)
345+
),
346+
onBookItemClick = {},
347+
)
348+
}
346349
}

0 commit comments

Comments
 (0)